fizmo-0.7.10/000755 000765 000024 00000000000 12606024551 013661 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/aclocal.m4000644 000765 000024 00000145333 12606024547 015537 0ustar00chrenderstaff000000 000000 # generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 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_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. 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'.])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # 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. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # PKG_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable pkgconfigdir as the location where a module # should install pkg-config .pc files. By default the directory is # $libdir/pkgconfig, but the default can be changed by passing # DIRECTORY. The user can override through the --with-pkgconfigdir # parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_INSTALLDIR # PKG_NOARCH_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable noarch_pkgconfigdir as the location where a # module should install arch-independent pkg-config .pc files. By # default the directory is $datadir/pkgconfig, but the default can be # changed by passing DIRECTORY. The user can override through the # --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_NOARCH_INSTALLDIR # PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------- # Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])# PKG_CHECK_VAR # Copyright (C) 2002-2014 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. # 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.15' 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.15], [], [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.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Copyright (C) 2011-2014 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. # AM_PROG_AR([ACT-IF-FAIL]) # ------------------------- # Try to determine the archiver interface, and trigger the ar-lib wrapper # if it is needed. If the detection of archiver interface fails, run # ACT-IF-FAIL (default is to abort configure with a proper error message). AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([ar-lib])dnl AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) : ${AR=ar} AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], [AC_LANG_PUSH([C]) am_cv_ar_interface=ar AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a ]) AC_LANG_POP([C])]) case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) m4_default([$1], [AC_MSG_ERROR([could not determine $AR interface])]) ;; esac AC_SUBST([AR])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2014 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. # 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], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2014 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. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$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-2014 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. # 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", "OBJC", "OBJCXX", "UPC", or "GJC". # 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 m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" 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 10 /bin/sh. echo '/* dummy */' > 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], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) 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-2014 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. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf 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"` # 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'`; 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-2014 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 macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # 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.65])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], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) 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], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [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([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). 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])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro 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 # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) 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-2014 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. # 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+set}" != 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-2014 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. # 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])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2014 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. # 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-2014 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. # 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 is modern enough. # If it is, 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 --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2014 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. # _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])]) # Copyright (C) 1999-2014 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. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2014 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. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2014 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. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file 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 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 if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done 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]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2014 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. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2014 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. # 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-2014 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. # _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-2014 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. # _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}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} 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 fizmo-0.7.10/ar-lib000755 000765 000024 00000013302 12606024550 014753 0ustar00chrenderstaff000000 000000 #! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2014 Free Software Foundation, Inc. # Written by Peter Rosin . # # 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 # . # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. 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 in 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_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat <= 5, thanks to irb. - Fixed "encode_text" and tokenizing for cases in which the "unrecognized"-flag is set. This fixes a bug with the "name" spell in Beyond Zork, thanks to irb. - Fixed wrapping of long lines without spaces as in ASCII art. Thanks to David Batchelder for pointing out the problem. - Adapted to automake v1.14 and fixed compiler warning. - Relocated "AC_CONFIG_AUX_DIR" invocation, fixing the missing-file warning during configure. - Fixed incorrect backspace or delete behaviour which could cause in crash in case of small screen sizes combined with the use of preloaded input. - Several small fixes for ncursesw input. - Fixed wrong status line display style after restore in version <= 3 games. - When breaking long lines, multiple spaces are now skipped at the linebreak point to avoid superfluous spaces at the start of the next line. Thanks to Lewis Gentry. - Fixed UTF-8 for input from file. Thanks to Mikko Torvinen for reporting the bug. - After a restore, the current screensize is now written into the header. This should correct upper windows display problems after loading of savegames. Version 0.7.7 -- June 5, 2013 - Fixed wordwrapper for cases in which text was written on the same line as read_char was invoked. This makes output of multiline-hints in PRIZM's Invisiclues work. Thanks to David Batchelder. - Renamed getchar, getchars and ungetchars from the file system interface to readchar, readchars and unreadchars. This makes fizmo compile on systems where getchar() is implemented as a macro. - Added missing evalation of fixed-pitch font flag in the flags2 header. - Fix build error for some systems due to missing wchar.h include -- thanks to Nikos Chantziaras. - Altered close_interface function to allow z_mem access during shutdown. - Fixed several compiler warnings. - Invoking "/config" without setting color defaults will no longer crash the interpreter. - Implemented terminal default color detetction for fizmo-ncursesw. - Added z_rgb_colour datatype. - Renamed "install-locales" into "install-data-local" build target. - Fixed verification of libglktermw location for GLK-interface. - Removed non-POSIX-flag from tcsetattr call in fizmo-console. - Minor bugfixes. Version 0.7.6 -- December 27, 2012 - Reparied "math.h" name collision, fixing missing "rint" function declaration. - Fixed universal builds on Mac OS X. - Fixed warning in "cmd_hst" compilation. - Searching for z-code files will now automatically create ~/.config/fizmo so that search results are no longer lost, thanks to B. Watson. - Added "--disable-sound" configure option, fixed "--disable-x11" option. - Improved configure-detection for libncursesw for systems without pkg-config's "ncursesw.pc". - Minor fixes for "clean" and "distclean" build targets and library build targets. Version 0.7.5 -- November 30, 2012 - Preloaded input will no longer apperar in transscripts. Thanks to Lewis Gentry. - Fixed missing characters in transcripts. - Implemented missing delete in read_line and read_char, corrected backspace key behaviour on read_char. - Fixed typos in manpages, thanks to Johan Ljunglid. - Fixed swallowing of dots, commas and quotation marks at line starts in case hyphenation is disabled -- thanks to Lewis Gentry. - Fixed crash which occurred when invoking fizmo-ncursesw with the "-fi" flag, also thanks to Lewis Gentry. - Colors are now correctly set for all windows on screen in case no window is specified for @set_colour. - CTRL-R will now redraw the screen. Contrary to CTRL-L, which refreshes the screen based on the current layout, CTRL-R will reconstruct the latest output based on the output history. This will help to display output which is hidden in case a game clears the screen, writes some text into the top line and then turns on the score line which then overlays the topmost line. - Re-implemented line-wrapper, fixing several issues. - Fix for memory corruption in command-history, thanks to Lewis Gentry. Version 0.7.4 -- September 17, 2012 - Adapted to new autoconf/automake build process. Version 0.7.3 -- August 1, 2012 - Merged Andrew Plotkin's iOS-fizmo changes: No more raw exit() calls, added screeninterface-specific filename prompt, new screeninterface-specific filename prompt replaces fizmo_register_ask_user_for_file_function, fixed autosave-functionality, added quote boxes for libglkif, added configuration option "disable-stream-2-wrap" and "max-undo-steps" config option and fix for an overlong property issue that made "Heist" crash. - Implemented memory-cleanup and fixed variable states after story end to allow fizmo_start() to be called repeatedly. - Fixed some minor memory leaks. - Fixed segfault which would occur after storing 10240 undo steps. - Added new option to set number of maximum stored undo steps. - Changed blockbuffer initialization to allow for output at any time, made fizmo_new_screen_size adapt blockbuffer size correctly. - Fixed a buffer overflow during tokenization, thanks for Andrew Plotkin. - Implemented binary chop dictionary search. - Fixed screen interface invocation in libcellif to not require timeouts from screen interface if not actually required by the game, saving a bit of CPU time. Version 0.7.2 -- March 9, 2012 - Made fizmo comply to "praxix.z5" test, merged zarf's DISABLE_PREFIX_COMMANDS functionality. - Merged zarf's GLK changes into "glk_screen_if.c". The new version 0.1.2 fixes screen size detection, timed input and adds lowering of the input line. - Fixed missing $(DESTDIR) variable -- should already have been present since version 0.7.1. - Fixed an error which would occur for empty pathnames when starting up a game on 32-bit platforms, thanks to Samuel Verschelde. - The transcription and fixed font bits will now correctly survive a restore, as defined in the Z-Maschine standard. Version 0.7.1 -- November 6, 2011 - Fixed missing "override" statments for CFLAGS in Makefiles. - Fixed $(DESTDIR) evaluation in config.[default|macports].mk. - Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. - Fixed an error in the stack restoration in "opcode_restore_undo". Thanks to Lewis Gentry for reporting this bug. - Implemented first debugger stubs. The debugger is available via network socket and will currently only dump PC, locals and stack contents. - Removed "drilbo-x11.c" requirement for "Xatom.h". - Respect LD_FLAGS for linking. Version 0.7.0 -- September 18, 2011 - From the user's perspective, version 0.7 adds hyphenation, saving of the latest screen output into savefiles, re-display of said output upon restore, a much improved X11-frontispiece display and improved localization. Thanks to Andrew Plotkin for the GLK-related code and Eric Forgeot for the french localization. Please see "README-0.7.txt" for more information. - Restructured fizmo: The interpreter core, ncursesw- and console-interface, the sdl-sound interface and the X11-specific code have been moved into separate modules named "libfizmo", "fizmo-ncursesw", "fizmo-console", "libsndifsdl" and "libdrilbo". Basic GLK functionality may be implemented using "libglkif", an example GLK implementation based on glktermw is available in module "fizmo-glktermw". - Implemented Frank Liangs TeX hy-phen-a-tion algorithm into the wordwrapper. Patterns were taken from the "hyph-utf8" project at http://www.ctan.org/tex-archive/language/hyph-utf8/. Re-implemented the word wrapper. - Rebuilt locales system. So far, all available locales were directly compiled into the binary and stored using a rather inflexible method which wasted some memory. Version 0.7 now stores the locales on the disk, reading only those languages and modules which are currently required. All i18n-invocations do now directly accept a module identifier, make the old switch functionality obsolete. Adapted all i18n calls to new method. - Rebuilt output history storage. This has been reimplemented using a single memory stream instead of storing text and metadata separately. - Implemented a cell-screen meta-interface. This translates the output from fizmo's screen interface into simple goto-xy and print commands, allowing implementation of interfaces using fixed-width fonts with a minimum of work. This is also used by the new "fizmo-ncursesw" interface, which has also been entirely rewritten. - libdrilbo ("drilbo represents an imaging library not only for blorb objects") now handles all graphical related tasks. It also makes fizmo's version 0.6 requirement for GTK to load images obsolete, it directly uses libjpg and libpng to load images and provides its own Xlib implementation for X11 output. - X11 frontispiece display is now by default in a separate window, which, contrary to the older implementation that simply invoked a XCopyArea directly into the terminal's X window, should work reliably. For terminals which by chance support it, the old behaviour is still available by using the "display-x11-inline-image" config option. The inline display has been changed to no longer write directly into the terminal window, but instead to use a subwindow instead. - Implemented saving of text history using a non-standard chunk type "TxHs" in quetzal savegames. - Added configuration variable "save-text-history-paragraphs" which defines the maximum number of paragraphs to store in a savegame. - Added variable interpretation -- so far, only $(HOME) is implemented -- for config files. - Re-implemented the entire build process. Libraries may now be compiled and installed on their own, pkg-config is used whereever possible to ease compilation and installation. Version 0.6.10 -- June 29, 2011 - Bugfix release: Fizmo did not stop tokenzing after the maximum number of allowed words, which would result in a parse buffer overflow. Thanks to Samuel Verschelde for discovering this problem. Version 0.6.9 -- April 24, 2011 - Bugfix release: Fixed negative count for unsorted dictionaries in the tokenise opcode. This fixed the crash in "Beyond Zork" which occurred while executing "i" after an item was name, thanks to irb. - Fixed "get_utf8_code_length". This fixes output of non-latin1 output codes in the transcript file, thanks to Lewis Gentry, closes debian issue #617714. - Increased maximum allowed option size to 512 to allow for longer filenames. - Added NCURSESW_INCLUDE_FROM_W_DIRNAME to configs to allow usage of Apple's ncurses implementation, added GDKPIXBUF_INC_DIR configuration variable. Version 0.6.8 -- January 12, 2010 - Bugfix release: Interpreter and interface information is now correctly written into the header after restarting, additionally the input length for transcript and command input/output-stream filenames has been fixed. Thanks to Samuel Verschelde. - Added "sync-transcript" option: When enabled, it'll flush the wordwrapper and file output buffer as soon as possible. Version 0.6.7 -- December 14, 2009 - Fixed trunction of babel data input. So far, the last byte was cut off from the input, resulting in an error if the file was encoded using unix newlines, but no errors as long as DOS newlines were used. This fixes missing metadata issues in the story browser. Thanks again to Zachary Kline. Version 0.6.6 -- December 14, 2009 - Fixed story browser to remove ".zblorb" suffixes from story titles which are not backed by babel information and evaluated from the filename. This will only work for new stories which are added to the list, to re-index your current story-list the old file has to be removed and re-built. "rm $HOME/.config/fizmo/story-list.txt" should be run first, followed by the command "fizmo -u". Thanks to Zachary Kline. - Minimal changes to the seeding of math.c's "srand" and "init_by_array" in hopes of increasing input entropy. Version 0.6.5 -- October 13, 2009 - Bugfix release: Recommend for MacPorts, will make compiling work for parallel builds in MacPorts version 1.8.0+. - Transcription will be kept active after restarts, thanks to Samuel Verschelde. - Fixed Makefiles for parallel builds (make -j). Version 0.6.4 -- May 24, 2009 - Bugfix release: Definitely recommend for read_char fix. - Fixed interface to supply default colors in case ncurses' "pair_content" returned invalid colors (thanks to Samuel Verschelde). - Input from read_char is no longer re-echoed to the screen (thanks to Samnuel Verschelde). Version 0.6.3 -- April 26, 2009 - The top-level Makefile may now be invoked with "CONFIG_FILE=". - Adapted "config.macos.mk" to MacPorts portfiles and ports-filesystem so that fizmo is now easily MacPorts-buildable. - Added license information to every file. - Improved GNU coding compliance: install now goes to "($DESTDIR)/usr". Version 0.6.2 -- April 25, 2009 - Bugfix release: Corrected save opcode and prepared for debianization. - Adapted manpage to make lintian work. - Corrected "src/c/interface.h". - Fixed typo in manpage. - Fixed save opcode to not wrap data into IFF and to disable compression when only a table from memory is saved (operands 2 and 3 for address and length are set). This fixes "Comp96.z5". Version 0.6.1 -- March 30, 2009 - Bugfix release: minor addition of several features (may now compile without libsndfile and libSDL alone, implemented XDG base directory specification). - Removed unused references to SDL-mixer (which isn't used for anything anymore). - Improved and documented default "config.*.mk" files and added config default for cygwin with sound support (to my own great surprise, sound really works under Cygwin). - Added more information to "INSTALL.txt". - Implemented new ENABLE_AIFF_FOR_SOUND_SDL variable in config files. This allows the sound-sdl-interface to at least play Infocom .snd files when no libsndfile is available. - Added config-file options to manpage. - Changed location of fizmo config directory from fixed "$HOME/.fizmo" to XDG_CONFIG_HOME standard and implemented use of XDG_CONFIG_DIRS. Thanks for suggestions and debugging help from Eric Forgeot. Specifications and more information found at http://freedesktop.org/wiki/Software/xdg-user-dirs. - Fixed broken space allocation, forgotten NULL-checks and fixed some issues to make frontispiece work better on GenToo. Thanks for these patches from David Leverton (see also line #50 in "src/ncursesw/Makefile"). This fixes possible startup crashes. - Added FIZMO_BIN_DIR variable to Makefile. Version 0.6.0 -- March 25, 2009 - (find c cgi cpp fizmo ncursesw simple-c simple-cpp single-turn sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 29953 lines of output) - This marks the point for the first public beta release. Killed all known bugs as far as I could find them and made fizmo work on Linux -- tested with a 64-bit distribution of Debian/Lenny -- and Mac OS X 10.5 with a 32-bit Intel machine and MacPorts for SDL. New features since version 0.5 include an SDL-based sound interface, support for charachter font via unicode translation, partial (z)blorb-support -- runs code from blorbs, can display frontispiece images in XTerms and play AIFF-sounds, a story file navigator, interface margins, restore from command line, a much improved streams implementation, a manpage and many other small features as well as a large amount of bugfixes. - Implemented conversion of font 3 (charachter font) to unicode. This appears to make Beyond Zork's map appear at least readable. - All directories in the "ZCODE_ROOT_PATH" are now recursively searched for Z-machine games. - Implemented recording and replaying of timed input. - Implemented new "*.snd" search method: Generalized for all files, not only Lurking Horror and Sherlock, tries upper- and lowercase. - Fixed scan_table opcode. This fixes Beyond Zork window output. - The filename input for save and restore may now be cancelled using the escape key. - Pressing arrow up/down during filename input no longer displays the command history. - Implemented wordwrapper / ncursesw margins. - Flags are now correctly restored during undo and restore opcodes. - Added progress indicator for story-list update. - Fixed a bug that would damage the story list in case a game had a release code with a length equal 5. - Fixed an issue that would cause bits > 0xffff from routine address to be lost on timed-routine-calls. - Implemented "no-update" command line flag and config option to avoid long startup scan times (for example on slow notebook drivers with many story files). - Implemented "--search" and "--recursively-search" command line invocations. - Fixed bug in scrollback parapgraph position cache. - Fixed a memory leak from getcwd(NULL, 0) in "filelist.c". - Fixed scroll-down display for scrolling to bottom. - Fixed crash that occured when a read-instruction was recursively called from a timed input verification-routine. - Modified LOADB / LOADW opcodes to store 0 in target instead of doing nothing when trying to read from an illegal address. This appears to make the russian version of "All Roads" ("AllRoadsR.z5") work. - Fixed a bug in the story-title evaluation from filename when the story name did not contain any slashes. - Fixed display error on refresh of preloaded input from history. - Implemented IGNORE_TOO_LONG_PROPERTIES_ERROR config define which makes "property.c" ignore too long properties (fixes "HugeCave.z8"). - Implemented forced predictable mode (ignores seeding random generator). - Fixed story-list for directly invoked files with relative pathname. - Many, many other minor fixes and extensions. Version 0.5.3 -- March 11, 2009 - (find c cgi cpp fizmo ncursesw simple-c simple-cpp single-turn sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 28499 lines of output) - Re-built SDL-Sound system (implemented sound effect stack, better sound- has-finished-detection and many, many fixes). - Re-wrote Makefile system. Releveant module defaults are now kept in separate .mk-files. - Added support for AIFF-sounds in blorb files. - Added support for extra-blorb files (these are specified on the command line directly after the story file name). - Added "-Wextra" flag to CFLAGS and cleaned up new warnings caused by the new flag. - Cleaned up config file, fixed a minor bug and made boolean vars work "more" correctly. - Fixed "VERIFY" opcode. - Several fixes: Patched "savegame.c" to re-enable use of "CMem" save method, removed a superfluous free in streams.c which tried to free a static string. - Many minor fixes (option system, running X11-enabled fizmo in text-only console, etc). Version 0.5.2 -- January 17, 2009 - (find c cgi cpp fizmo ncursesw simple-c simple-cpp single-turn sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 27123 lines of output) - Implemented filelist (which remembers all files invoked and files in searched directories). - Added use of libxml2 to parse metadata from the babel XML file. - Implemented story selection menu in ncursesw interface. - Implemented parsing of rc file. - Added bold-for-bright-foreground and blink-for-bright-background terminal options. - Implemented dont-use-color and force-color option. - Fixed interface for > 121 colors. - Added "help" command. - Implemented "savegame-path" configuration option which specifies the directory for savegames. - Implemented text paragraph position cache to speed up scrollback for large amounts of text (not elegant, but works). - Savegames are no longer restored in case serial, release or checksum don't match. - Removed non-standard "FILE" chunk again, the storyfiles for directly invoked savegames (from the command line) are now located via the filelist. - Implemened "force-quetzal-umem" config option from the command line. - Added manpage. - Fixed "verify" opcode. - Basic implementation of input stream 1. - Implemented basic blorb support (meaning that blorb files are detected, information about pictures and sound is parsed and the first found "ZCOD" chunk is executed). - Fizmo now always keeps a FILE* to the story file open, eliminating the need for a lot of open / close calls (and simplyfing blorb handling). - Stories may now be started from the command line using their "real name" in case they are stored in the story-list. Example: "fizmo sorcerer". - Many, many small fixes (scrollback, winch-redisplay, negative score, undo, crash on large scrollbacks, etc). Version 0.5.1 -- November 4, 2008 - find fizmo simple-c simple-cpp c cgi single-turn cpp ncursesw qzinspect snd2aiff sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 23265 lines of output) - Implemented SDL-sound-interface. To make SDL work in Mac OS X I've used MacPorts to install SDL ("port install libsdl"), on Debian I've been using "apt-get install libsdl-sound1.2-dev" (maybe "apt-get install alsa-base alsa-utils" is also required). - Fixed scrollback and i18n-exit-translation. - Fixed libfizmo to also use setitimer/sigaction (makes fizmo work better on linux). - Implemented foreground/background color command line parameters for ncursesw interface. - Fixed get-cursor-[column|row] for ncursesw (makes PRINT_TABLE and Sherlock work). - Added "UMem" support for quetzal. - Added "snd2aiff" commandline utility (this was the basis for the first sound interface experiments). - Added "qzinspect", a simple commandlinetool which uses libfizmo to list the contents of a quetzal savegame. - Added non-standard "FILE" chunk to savegames which contains the absolute file name of the story file which saved the game. - Implemented restore from the command line: In case a quetzal-savegame containing the non-standard-chunk "FILE" is given on the command line, fizmo will try to restore the savegame using the story filename stored in this chunk. Version 0.5.0 -- October 30, 2008 - (find fizmo simple-c simple-cpp c cgi single-turn cpp ncursesw -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 21963 lines of output) - This version is now definitely usable to play all non-v6 games. Did extensive testing using Borderzone, "LostPig.z8", "Zokoban.z5", "crashme.z5", "etude.z5", "paint.z5", "random.z5", "reverzi.z5" and "unicode.z5". Only two minor known bugs remain: Scrollback sometimes miscalculates the current row after a lot of scrolling back and forth (which is always "fixable" to pressing any-key which correctly rebuilds the current output page, and a display anomaly on the frontpage of "vampire.z8" which I intended to keep after a lot of code-inspection (since fizmo appears to be implementing the screen modell correctly and fixing this display problem breaks a lot of other games). This version has been tested on Linux, Darwin (Mac Os X) and a little bit on XP/Cygwin (using a self-built ncursesw). - Added "z_ucs_rchar" to "z_ucs.c". - Re-implemented word-wrapper to not compress multiple spaces, keep spaces after newlines and buffer more than on line. The fixes the map display problem in "Enchanter". - Changed opcode_restore to read dynamic memory and stack of the restored game into a freshly allocated memory block instead of directly into the game data. This makes it possible to now continue the current game instead of dropping back to the command line. - Fixed opcode_save to not exit in case an errors occurs during saving, but to merely give a warning (and correctly evaluate the branch). Now the currently active game isn't lost anymore in case a save goes wrong. - Added a LOT of error checking in "iff.c" and "savegame.c". There's possibly a better way, but checking every single return value also works. - Added table-saving extensions to save- and restore-opcodes. - Fixed tokenizing for version 5+. - Fixed timed-input detection for "read" opcode. This fixes the crash in ZTUU when the lantern goes out. - Ran fizmo through (sp)lint, fixed memory leaks, minor bugs, many typecasts, some double and inconsistent definitions, cleanup up code. - Fixed Makefile dependencies. - Fixed a possible SIGSEV when using fprintf with "%ls" output format. This tended to crash when used on wchar_t on darwin. - Implemened scrollback for ncursesw interface, added support method for scrollback in "history.c". - Added last missing v5 opcodes. - Fixed end-of-stack detection so that stack is now correctly enlarged when required. - Added module-based localization, removed unused localization entries. - Fixed space detection in wordwrapper. - Fixed metadata-handling (memcpy) in history.c - Added "single-turn" interface. - Fixed operand handling in zpu. - Added configuration system. - Re-built save/restore, should be finally 100% quetzal compatible. - Implemented output stream 4. - Fixed output stream 2. - Some split-window / set_window / set_cursor fixed for ncursesw-interface. - Substitued ualarm/signal with setitimer/sigaction since the first one won't catch SIGALRM on linux and manpage says that ualarm is obsolete. - Fixed color management so that ncurses color pair is avaiable for reading. - Many, many minor bugfixes. Version 0.4.1 -- November 14, 2007 - 16373 lines in *.h and *.c files - Fixed a bug in "parse_utf_8_char", this fixes i18n-messages. - Added C++ wrapper. - Implemented demo C++ screen interface. - Separated code in core, interface, c and cpp interfaces. - Improved upper window handling (trinity sundial) and blockbuffer (zork1.z5). Version 0.4.0 -- March 20, 2007 - 13718 lines in *.h and *.c files - Moved to this new version on March 3, 2007. The old version has been lying around untouched since November 15, 2006. - Abandoned the internal use of UTF-8. It is just much too complicated to handle in the interface. I'm not even sure that with all the code necessary to handle UTF-8 handling that there is much space wasted. The important point for me is that using UCS-4 -- fixed, 32-bit sized characters -- is much more easier, and thus safer to use. - Re-implemented everything using wchar_t. The barebones C-Interface is the first converted. Everything took only a few hours. - Compacted code a little bit (tracelog.h, etc.). - Re-implemented the history-buffer in "streams.c". It is controlled by the Z_HISTORY_INCREMENT_SIZE and Z_HISTORY_MAXIMUM_SIZE constants in file "config.h". The buffer is re-alloced until it reaches the given maximum size. At that time, wrap-around is used to keep the buffer up to date. A debug function named "log_history" exists. - Converted the error handling to wchar_t. - Implemented SIGWINCH-handler for interfaces and associated handling in "ncrws-if.c". - Implemented metadata (color and style) storage for the history. - Implemented set_font opcode. - Fixed two minor issues in the wordwrapper. - Fixed a missing string-terminator in the zchar_to_ucs_4-function. Over two years that thing was working without it ... unbelievable. - Fixed a token-length problem in parsing. - Implemented correct UTF8-filename-handling for savefiles. - Implemented CATCH and THROW opcodes, both untested. - Re-built interpreter commands with new wchar-base, prompt-repetition from history and user-configurable prefix. - Re-implemented scripting with UCS-4. - Implemented buffering of metadata -- colour, styles and font -- in the history buffer. Windows may now be resized and keep their styles intact. - Fixes in property-management for version 4 games. - The sound-effect opcode is accepted now for effects 1 and 2, although it doesn't do anything yet. - Improved split-screen in ncurses-interface: In case the upper window becomes smaller, its content is copied over into the lower window (making reading the sundial in trinity.z4 working). - Fixed set_window to set cursor to (0,0) when selection upper window (this makes the sonarscope in Seastalker work). - Fixed wordwrapper to accomodate for styles which are sent after normal text which is followed by a space -- so far the style was activated before the space was output. - Implemented command history. - Fixed a bug that would cause screen resizes in versions before 5 try to set colours. - Implemented specialized blockbuffer for upper window. - Threw away wchar_t- and locale.h-usage. The problem is that they are not suported on older compilers, embedded systems or in emulations like cygwin. According to specifications, wchar_t may even only have 8 bits width and is compiler-implementation dependant, so it's practically not useable to store unicode-data. So i've implemented a z_ucs type which is always used for internal processing of characters. Thus every interface gets its output in z_ucs chars (which are simple int32_t types) and can happily typecast it into wchar_t if desired. Interfaces may still use wchar_t (in fact, ncursesw does), but the core is now completely autonomous. - Fizmo now compiles fine without warning on Cygwin. Both the c- and the ncursesw-interfaces seem to work nicely. - Fixed a bug in the wordwrapper which caused the zchar-converter-state and the linebuffer to overlay in a single byte. - Added "z" parameter to i18n string, representing z_ucs-strings. - Fixed stream-3-output: Current length is now always updated, not only when closing the stream. - Fixed input to make it work all across the screen and not only on the last line. - Fixed cursor movements and screen splits for version 4 and 5. - Splitted files into fizmo-core and interfaces. The interpreter itself is now put into a static library and linked in from the interfaces. - Moved "extern" statements into header files. Version 0.3.1 - 12276 lines in *.h and *.c files - Added a few ZSCII/ASCII/ISO-8859-1/UTF-8 conversion functions in "text.c". - Improved the ncursesw-interface to handle US-ASCII and UTF-8 directly. - Implemented detection if a character has a suitable ZSCII representation before adding it to the input line. - Fixed a bug which prevented correct assembly of multi-Z-characters. - Fixed a bug that caused multi-Z-character constructions to have a wrong word length. - Extended ncurses interface to handle scrolling on the input line. - Once input of a new line is finished, it is erase and then output again using the interface's output_utf8 function. This allows output which is longer than a single line to be word-wrapped. - Implemented correct delete and insert in the ncurses interface. Version 0.3.0 -- November 10, 2006 - 13302 lines in *.h and *.c files - Abandoned the concept to pack absolutely everything in UTF8f. Having to think though the fork-8f is simply more complicated than necessary. In the name of "Keep it simple, stupid" I'll revert to my old idea of having a function in the interface for every output function like color setting, changing font style and so on. - Removed wordwrapper, pager, decoder, utf8conv, fork8f and fpipe. Reverted the system to the plain-style-C interface. I'll use the break in the development chain to clean up the code and take a second look at most things which has proven quite benefical in similar occasions. - Cleaned up most of the code. I've now got a clean, simple version without any real interface around running again. Better yet, since my last tries with ncursesw I've finally found out how to reliably produce UTF-8 output: By simply calling the setlocale function from #include and setting LC_ALL to "". Once the system locale is now set to something using UTF-8, ncurses delivers correct output. - Implemented a new, much simpler wordwrapper that should now also wrap UTF-8 correctly. - Fixed quetzal saving. The main FORM chunk has now the correct length so that both frotz and Zoom now correctly load savegame files. - Implemented a whole new wordwrapper. This one correctly wraps UTF-8 and is capable of storing "metadata" -- colors and styles -- into the text. This allows color and style changes in the middle of a word without having to flush buffers. - Implemented colors. - Implemented text style. - The etude.z5-test is running again. So far I've got everything working except the character output. - Implemented v3 window handling. - The random.z5 test is now running okay. - Implemented [More] prompt. Version 0.2.1 - Improved command line parameter handling. - Fixed a REAL nasty bug in the line-history resulting in buffer overflows in very rare cases. - Fixed another minor bug that would let the word wrapper start a new line after input with a space (Wishbringer's "read message and move leaves") by added the wordwrap_reset_wrapper method (which correctly reset the number of consecutive spaces). - Fixed a bug that would cause a crash when games were saved in a restarted game (forgotten store_empty_stack_frame). - (Successfully completed Wishbringer -- 96/100 points, one wish used. I just have to find a way to unlock the chains down in the tower...) - Fixed paging module, long lines causing wrap-arounds are now correctly accounted for. Modified the module to keep one more line than required on the screen to ease continued reading. - Tested compatibility to Zork I, Z-Machine version 1, release 2, serial number AS000C. This version appears to have a bug at $585b. It occurs when the command "open mailbox and read leaflet" is executed right at the beginning. To circumvent this, a skip-underflow-check can be enabled in variable.c. - I've posted a related newsgroup-message at http://groups.google.de/group/ rec.arts.int-fiction/browse_frm/thread/c77652b28be69f2d/ a52b9f652fc75928#a52b9f652fc75928 - Added the "@info" command. - Added automatic detection of "problem" games. This way, the "AS000C" hack is automatically activated at start-up. - Activated hacks are displayed using the "@info" command. - (0.20.1 finished) - Enchanhed the pipe/filter system. Each filter will now receive the destination function (and "object-struct") directly. Thus, no more extra forwarding functions are required. - Rebulid the windowing system in the curses interface. - No more flushes are sent from the fizmo "core" any longer. The interface will flush it's filters by itself if required (sending a flush into the first filter in case input is required or the interface is closed). - ABSOLUTELY FASCINATING to discover how many can bugs can still reside in a program just to creep up occassionally ... or is that just a sign of a bad programming style? Now I begin to grasp even more the significance of Java's Array-out-of-bounds-exception. I found a bug in the utf8x-buffer (forgot a multiplation by factor 3, resulting in a much too small buffer. I must have had a lot of overflows without ever noticing them in the past). Found another bug in the UTF8x-Converter where I simply referenced the wrong variable. - Fixed a forgotton "converter->utf8f_parameter_bytes_to_copy = 0" in utf8conv.c which SOMETIMES (grrr!) caused an error which caused the screen output to vanish. - Reorganized piping in the curses interface. Every window now has its own combination of wordwrapper, converter, pager and decoder. General window commands like split_window or erase_window are caught by a enhanced type of decoder named fork8f and passed along to the correct window structure. The random.z5 seems to work fine and I hope it's sufficiently correct to finally try my luck with Seastalker. - (0.20.2 finished) - Fixed status line display. - Fixed ncurses color recycling. Version 0.2.0 -- April 15, 2006 - 12794 lines in *.h and *.c files - Version 0.2.0 adds an unix interface, allowing for timed intput, and an [n]curses interface including color, better wordwrapping and accented characters. Zinc now runs random.z5 and passes all of the etude tests. I completed Moonmist without encountering any strange behaviour. - Put the conversion of UTF-8 to [ASCII|ISO-8859-1|UTF-8] in utf8conv.[c|h]. That way, c_if.c is now down to a minimum size, and all it's "outsourced" functions -- wordwrapping and UTF-8-conversion -- can now be used without any problems by other functions or interfaces. - Cleaned up Makefile. - Implemented call_vs2 and call_vn2 opcodes. - Made PRINT_NUM output signed instead of unsigned numbers (found it thanks to etude.z5). - Corrected OPCODE_MOD to correctly handle signed operand 0 values (etude again). - Corrected a REAL nasty mistake: Replaced sizeof() in a utf8conv.c malloc-call with a simple . This made the system crash under OS X PPC (though not on linux and some other unix-variant). - Re-organised the makefile a bit. Interface dependencies are now correctly resolved and build dependencies are in order again. - Renamed the interpreter from the project name "zint" -- meaning Z-Machine-Interpreter -- to "ZInC", meaning Z-INterpreter-Code. - Corrected the Makefile again. - Implemented the Unix-Interface. This one assumes that it's running on a unix machine terminal without any specials (not even curses). - It uses select and tc[g|s]etattr to implement timed and preloaded input and a get_char implementation. - Fixed a bug in unix_if.c that would cause a segfault on startup. - Some more i18n, cleaner tc[g|s]etattr in unix_if.c - Implmented correct input line restoration after timed-input output. - Modified text.c so that the streams_echo_input command is executed no matter whether the first word could be found in the vocabluary or not. - Implemented preloaded input in the Unix-Interface. - Implemented correct READ_CHAR in Unix-Interface. - Fixed a LOT of tiny bugs and itches. - Implemented [MORE] paging via additional pager module. - Fixed german translation of i18n messages. - Fixed ZSCII-to-UTF8 encoding, ZInC now passes etude's accented character test. - Implemented a curses interface. At the moment raw constructs for the upper and lower window and a status line. Basic color management. Adapted wordwrap.c a little bit in order to achieve corrent linebreaks. - Completely re-wrote wordwrapping in order to get rid of trailing spaces and other problems evident when using curses. - Completely re-wrote the entire output stream system. It turned out that the usage of flags caused problems buffering text: In order for everything to work correctly the flags would have to be buffered along with the text output. Text-relevant formatting data like color is now passed directly along with the UTF-8 text: Internally I'm now using an encoding that can encode special formatting sequences into the UTF-8 stream -- see UTF8X.txt for more information. These conversions added the utf8x.* and decoder.* files. Although quite a major change, the encoding helps to make the whole system a lot cleaner. - Numerous fixes to the [n]curses interface, addition of status line, better color management with careful consideration of availiable color pairs. - Using the ncurses interface, the interpreter now passes the etude.z5 test with the exception of the text styles and undo capability. - Modified the i18n_translate_and_exit and close_streams functions to support a message-on-exit. This way, error messages are supported without regard for what's left in the UTF8x output pipe and error output can be seperated from the other valid stream output. This way, the ncurses interface can correctly endwin() and output the message to read on stderr. - So far, multiple invocations of READ or READ_CHAR with timed input casued a "nested timed input not availiable" error. This is a problem for the random.z5 test which appears to use this feature. The nested behaviour has been altered to an overwrite behaviour. In case a second timed input is requested, the old timer and routine are erased from memory and replaced with the new data. - Fixed interface commandline choice. - The random.z5 tests now apperas to run correctly. - Fixed a tiny bug in wordwrapping directly after read_line, fixed command line parsing, i18n-string-length and a few tiny localization issues. - Added text styles to the curses interface. - Finally added modifiable names for game saving and restoring. - (Successfully completed the red storyline of Moonmist). - Renamed ZinC (name already exists) to fizmo: Fizmo Interprets Z-Machine Opcodes. Version 0.1.4 -- December 9, 2005 - 8848 lines in *.h and *.c files - The 0.1.4 complies to the strictz.z5 test, allows transcripting (even on startup via command line switch). A few minor bugs were fixed and a history of the last output is kept, allowing for a faithfully original prompt after an interpreter command has been finished. - Compacted locate_dictionary_entry (so that the zscii_string_length function is no longer needed) and adapted it to version 4+ files. - Implemented the object-number-unequal-zero-checks (in order to run strict.z5). - Adapted read opcode to version 4+. - Renamed c_iface.c to c_if.c in order to gain more space for other interface names. - Fixed zchar_to_utf_8 so that multibyte-characters are handeled correctly between two zchar_to_utf_8 function calls (when continuing on the first call's source string due to output buffer shortage). - Implemented basic transcipting in streams.c and moved the trace functions there. All output is now channeled from text.c through stream.c into the active interface. The input is seperately written to to the streams, in order to be able to distinguish it from regular output (and to write it only to the streams requested). - Implemented "-s" / "--start-script" startup option to start scripting right away. This allows to capture really all input emitted by the game. - Implemented input of file name (supplying a default filename) for transcripts. - Fixed a bug in the parsed word position which would cause the following garbeled Moonmist-output:>get out of the cat[I don't know the word " cat."]>oops car [I assume you mean: get ou o th ca]You're not in it! - Implemented CALL_VN opcode. - Added STRICT_Z definition in config.h and implemented a lot of checks in object.c together with a warning mechanism in i18n.c in order to make this interpreter compliant to strictz.z5. - Fixed a bug in the length-code-size determination in properties.c (replaced "& 80" with "& 0x80"). - Added a lot of STRICT_Z tests to properties.c. - Implemented READ_CHAR opcode (not very well, since in stanard C without any Operating-System-specific calls there's no single read of a char, thus you still have to press enter). - Zinc now passes the strictz.z5 test and looks close enough to the frotz output stored at http://www.ifarchive.org/if-archive/infocom/interpreters/old/frotz/frotz_zstrict_result (with other warning messages, of course). - Implemented wordwrapping as a seperate re-usable module in wordwrap.[c|h]. The C-interface and the function for output to stream 2 currently use it both. - Implemented line_history_buffer, a circular buffer that will record the last output sent to the streams. It's supposed to be used for reconstruction of the current prompt in case an interpreter command is entered an the original prompt should be restored after executing it and later for easier handling of preloaded input. - Interpreter commands will now prompt with the last line that was output by the Z-program after finishing command processing. Version 0.1.3 -- November 27, 2005 - 6013 lines in *.h and *.c files - This 0.1.3 version adds localization for error- and startup messages, corrects a few minor bugs abd adds UTF-8 support. - Made mod (remainder-after-divison) signed (due to 2.2.1). - Corrected opcode_div so that the divisor, not the dividend, is verified not to be 0. Added divisor-not-0-check to mod. - A few paranoid sanity checks in opcode_read. - Modified opcode_read so that the whole line of input is always read, no matter how much can actually be stored so that the next line of input does not begin with left-over-text. The non-used input is discarded. - Removed use of input_to_zscii-function in text.c, since the input does not have to be converted. - Extended store_ZSCII_as_zchar in text.c to accept not only characters in the current alphabet, but also to encode other chars as multi-z-chars, thus also allowing the '@' as input which I want to use to identify interpreter commands. - Implemented the "@predictable" command to switch interpreter in or out of predicatable random mode as suggested in the spec. - Made random generator more spec conforming by using negative values to seed the generator to this value. - Implemented parsing of command line options. Currently only used to start up interpreter in predictable random mode. - Implemented UTF-8 handling. The data traffic between the core interpreter and the interface(s) has been modified to use exclusively UTF-8. It is now also possible to output a whole string via the utf_8_output function. - The C interface can now be put in three output modes -- ASCII, ISO-8859-1 and UTF-8. Characters that cannot be printed in the ASCII and ISO-8859-1 modes are substituted by a '?'. - Implemented UTF-8 output as defined by the Z-Machine specification v1. So far only implemented without testing. - Implemented loclization. In order to avoid special cases in which it is not possible to tell the user that the localized files cannot be loaded since the files have not been loaded yet in his own language :-) I'm using the prepi18n binary to convert the locales/xx_XX.txt into the file locales.c which can be directly complied into the interpreter binary. - The localization files are supposed to be encoded in UTF-8 so they can be easily output using the usual interface functions. - Split the activate_interface function into activate_interface and link_active_interface_to_story. The first call actually initializes the interface which is used to make output possible (in case the story file can't be loaded), the second call performs the necessary initializations with the story file's header. - Extended localization to use parameters the like "Could not open \{0}.". - So far, parameters are only allowed to contain ASCII values. - Moved last remaining function in output.c, read_zscii_string, into text.c. - Implemented forgotten lowering of case after reading input from the keyboard. Now it's possible to answer "YES" to Moonmist when it asks for "YES or NO". - Cleaned up stack.c a bit and fixed a bug that would have caused the stack not to enlarge in case it was supposed to. - Extended localization to use type identifiers. In the beginning I decided to skip them, but to make error messages useful to the user and handier in the code I decided to give it a shot. Parameters are now specified by using \{0s} for a string and \{0d} for a decimal. Together with a few supporting wrapper functions, the main file already looks much cleaner. Due to the buffering of the Z-Machine output, messages are even correctly word-wrapped. - Implemented switching between ASCII / ISO-8859-1 / UTF-8 into zinc.c. - Logically it would have been better to put it in to c_iface, but since it will be required more often and don't want any copied code I decided to leave it this way. - Implemented echo option in the C interface in order to be able to read the input from input piped into the interpreter. - Converted all current 51 conditions-to-translate from FATAL_ERROR and [s|f|]printf to i18n_translate[and_exit]. The FATAL_ERROR macro has been removed. - Compacted the zchar-storage-functions. - Completely replaced read_zscii_string with zscii_to_utf_8. The new functions will output z-char-strings of an arbitrary length into an limited-size output buffer. Multiple calls to this function for the same source string will continue with the output where the last call of the functions had to stop. Version 0.1.2 -- October 20, 2005 - 5094 lines - 0.1.2 fixes my currently last known problems with playing the 840726 Zork I revision. Word wrapping makes it look a little bit nicer and the barebones-C-interface is now probably as good as it can get. Did quite a lot of code-cleanup. - Implemented NOT opcode. - Implemented NOP opcode. - Implemented RESTART opcode. - Implemented POP opcode. - Implemented SHOW_STATUS opcode. - Allowed output of tab -- ZSCII 9 -- for version 3 (due to the guidebook in the Dam Lobby). - Implemented VERIFY opcode. - Implemented PIRACY opcode (we're all honest, so an evaluate_branch(1) sounds okay, right?). - Fixed a bug in INC_CHK (wrong cast to unsigned value instead of signed). - Totally forgot about the 8.3-filename-limits on DOS machines, files were renamed and merged together -- /(.*)_opcodes.c/ joined /$1.c/. - Fixed a bug in the random opcode which allowed 0 as a minimum result value to the random call (should have been 1). Fighting with the thief now results in much less garbled text output. - Cleanly wrapped TRACE_LOG calls in curly braces, meaning disabling tracing now works correctly. The zinc binary now has a size of 82308 bytes with logging enabled, and 54700 bytes without logging. - Created Makfile-dependency for zinc.h from iface.h (by using the touch command, is the okay?). Made all and clean .PHONY targets. - Removed globals.c, moved globals into zinc.c and created "extern" references in other source files. - Moved globals to corresponding source files (which eliminates a lot of non-needed "extern" references). - The linux manpages tell me bzero is outdated. Faithfully replaced bzero with memset calls. - Replaced memcpy call with a loop that assembles uint16_t values byte by byte. This will avoid problems on little-endian machines (i386 and the like), since the Z-machine uses a big-endian model. - Used the Mersenne Twister as random generator. Only the genrand_int32 function is used, the rest of the functions, with exception of the two init calls, were deleted from the mt19937ar.c file. The generator is seeded by an init vector consisting of the number of seconds since 1970, a standard C random generator number, the number of milliseconds since 1970, followed by another standard C random generator number. - Splitted zinc.h in a header file for each .c file. Adjusted Makefile and #includes accordingly. - Changed **z_opcode_procedures into *z_opcode_functions and moved it from zinc.c to zpu.c (thus avoiding external reference and setup). Now z_opcode_functions is a one-dimenstional array indexed by the value instruction_form + instr_code. This allows saving the space for 32 pointers in the smaller opcode classes (with only 16 instead of 32 opcodes). - Implemented buffering / word-wrapping in the C Interface. With this change, the C interface should be complete. Comparing to everything else it's still very raw, but hey, it works. - Implemented BUFFER_MODE opcode. - Moved all the configuration options from zinc.h to config.h. Version 0.1.1 -- September 23, 2005 - 0.1.1 was the first version that was able to save and restore games. - Implemented OR opcode. - Implemented MOD opcode. - Changed get_prop_len so that get_prop_len(0) returns 0 (for 1.1 standard). - Updated property.c, splitted up property search in three functions in order to allow easier implementation of the GET_NEXT_PROP opcode. - Implemented GET_NEXT_PROP (you can now pick up the elven sword). - Implemented CALL_2S. - Implemented CALL_2N. - Implemented SET_COLOUR (but does not have no effect in c_interface). - Implemented all remaining 2OP-opcodes with the exception of THROW. - Implemented DEC opcode. - Implemented PRINT_ADDR opcode. - Implemented CALL_1S opcode. - Implemented REMOVE_OBJ opcode. - Implemented LOAD opcode. - Modified the tokenising routine to correctly return position and length of a word even if it was not found in the dictionary. - Implemented dummy stack frame storage for quetzal compatibility. - Implemented SAVE opcode. - Implemented RESTORE opcode. Version 0.1.0 -- September 14, 2005 - 0.1.0 is the first version that allows basic playing of version 3 games. The only game used for testing so far is Zork 1 which was drawn from the well-known site of Peter Scheyen. - Moving around the house, object movement (taking and dropping of the leaflet) all seems to work quite okay now. - Implementing more missing opcodes. - Fixing a few not-so-easy to find bugs (like the property addresses etc). - Fixed a bug in the branch-address calculation. - Fixed a bug in the object-unlinking mechanism that would not correctly remove the object-to-be-unlinked from an object further up the sibling line. Version 0.0.4 - Implemented the c_interface, which allows very bare-bone input / output provided by standard C facilities (meaning fprintf / fgets). - Implementing of user input, tokenising and dictionary parsing. Version 0.0.3 - Major cleanup of the code. - distribution of the old interpreter.c file into multiple .c files. - First appearance of the interpreter.h interface. Version 0.0.2 - Further implementation of the basic capabilities, including property management etc. Version 0.0.1 - First basic implementation of memory, variables, stack and primary opcodes. fizmo-0.7.10/compile000755 000765 000024 00000016245 12606024550 015246 0ustar00chrenderstaff000000 000000 #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 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 if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a 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: fizmo-0.7.10/configure000755 000765 000024 00000763674 12606024547 015624 0ustar00chrenderstaff000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for fizmo 0.7.10. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} 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 test -x / || 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 : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: fizmo@spellbreaker.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: 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_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' 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 as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='fizmo' PACKAGE_TARNAME='fizmo' PACKAGE_VERSION='0.7.10' PACKAGE_STRING='fizmo 0.7.10' PACKAGE_BUGREPORT='fizmo@spellbreaker.org' PACKAGE_URL='' # 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 LIBOBJS OPTIONAL_FIZMO_DISTCLEANS OPTIONAL_FIZMO_CLEANS OPTIONAL_FIZMO_INSTALLS OPTIONAL_FIZMO_BUILDS OPTIONAL_SOUND_INSTALL_DATA_LOCAL OPTIONAL_SOUND_INSTALL OPTIONAL_SOUND_BUILD libsndifsdl2_LIBS libsndifsdl2_CFLAGS SOUND_INTERFACE_INCLUDE_FILE SOUND_INTERFACE_CONFIGNAME SOUND_INTERFACE_STRUCT_NAME SOUND_INTERFACE_NAME libglkif_LIBS libglkif_CFLAGS LIBGLKIF_NONPKG_LIBS LIBGLKIF_NONPKG_CFLAGS LIBNCURSESW_NONPKG_LIBS LIBNCURSESW_NONPKG_CFLAGS libdrilbo_LIBS libdrilbo_CFLAGS libcellif_LIBS libcellif_CFLAGS libfizmo_LIBS libfizmo_CFLAGS FIZMO_DIST_VERSION DEV_BUILD_PREFIX ENABLE_AIFF_FALSE ENABLE_AIFF_TRUE ENABLE_READCHAR_VIA_TERMIOS_FALSE ENABLE_READCHAR_VIA_TERMIOS_TRUE ENABLE_X11_IMAGES_FALSE ENABLE_X11_IMAGES_TRUE ENABLE_PNG_FALSE ENABLE_PNG_TRUE ENABLE_JPEG_FALSE ENABLE_JPEG_TRUE ENABLE_X11_FALSE ENABLE_X11_TRUE FIZMO_DIST_VERSION_FALSE FIZMO_DIST_VERSION_TRUE ENABLE_DEBUGGER_FALSE ENABLE_DEBUGGER_TRUE ENABLE_PREFIX_COMMANDS_FALSE ENABLE_PREFIX_COMMANDS_TRUE ENABLE_CONFIG_FILES_FALSE ENABLE_CONFIG_FILES_TRUE ENABLE_OUTPUT_HISTORY_FALSE ENABLE_OUTPUT_HISTORY_TRUE ENABLE_COMMAND_HISTORY_FALSE ENABLE_COMMAND_HISTORY_TRUE ENABLE_BLOCKBUFFER_FALSE ENABLE_BLOCKBUFFER_TRUE ENABLE_FILELIST_FALSE ENABLE_FILELIST_TRUE ENABLE_SEGFAULT_ON_ERROR_FALSE ENABLE_SEGFAULT_ON_ERROR_TRUE ENABLE_STRICT_Z_FALSE ENABLE_STRICT_Z_TRUE ENABLE_BABEL_FALSE ENABLE_BABEL_TRUE ENABLE_SDL_FALSE ENABLE_SDL_TRUE ENABLE_TRACING_FALSE ENABLE_TRACING_TRUE ac_ct_AR AR RANLIB AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR 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 sndfile_LIBS sndfile_CFLAGS sdl2_LIBS sdl2_CFLAGS EGREP GREP CPP ncursesw_LIBS ncursesw_CFLAGS png_LIBS png_CFLAGS jpeg_LIBS jpeg_CFLAGS x11_LIBS x11_CFLAGS OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC libxml2_LIBS libxml2_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG 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_tracing enable_glktermw enable_sdl enable_x11 enable_jpeg with_jpeg_includedir with_jpeg_libdir enable_png enable_sound with_ncurses_includedir with_ncursesw_libdir with_ncurses_libdir with_glktermw_includedir with_glktermw_libdir enable_aiff enable_dependency_tracking enable_silent_rules ' ac_precious_vars='build_alias host_alias target_alias PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR libxml2_CFLAGS libxml2_LIBS CC CFLAGS LDFLAGS LIBS CPPFLAGS x11_CFLAGS x11_LIBS jpeg_CFLAGS jpeg_LIBS png_CFLAGS png_LIBS ncursesw_CFLAGS ncursesw_LIBS CPP sdl2_CFLAGS sdl2_LIBS sndfile_CFLAGS sndfile_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe 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 fizmo 0.7.10 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/fizmo] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of fizmo 0.7.10:";; 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-tracing enable tracelog for debugging --enable-glktermw enable experimental glktermw --disable-sdl SDL will not be required for building, this will however disable sound support --disable-x11 disable X11 support --disable-jpeg disable JPEG support --disable-png disable PNG support --disable-sound Disable sound support --disable-aiff disable AIFF compatibility in case libsndfile is not available --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-jpeg-includedir Specify include directory to use for libjpeg --with-jpeg-libdir Specify library directory for libjpeg --with-ncurses-includedir Specify include directory to use for ncurses.h --with-ncursesw-libdir Specify library directory for ncursesw --with-ncurses-libdir Specify library directory for ncurses --with-glktermw-includedir Specify include directory to use for glktermw --with-glktermw-libdir Specify library directory for glktermw Some influential environment variables: PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path libxml2_CFLAGS C compiler flags for libxml2, overriding pkg-config libxml2_LIBS linker flags for libxml2, overriding pkg-config 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 (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory x11_CFLAGS C compiler flags for x11, overriding pkg-config x11_LIBS linker flags for x11, overriding pkg-config jpeg_CFLAGS C compiler flags for jpeg, overriding pkg-config jpeg_LIBS linker flags for jpeg, overriding pkg-config png_CFLAGS C compiler flags for png, overriding pkg-config png_LIBS linker flags for png, overriding pkg-config ncursesw_CFLAGS C compiler flags for ncursesw, overriding pkg-config ncursesw_LIBS linker flags for ncursesw, overriding pkg-config CPP C preprocessor sdl2_CFLAGS C compiler flags for sdl2, overriding pkg-config sdl2_LIBS linker flags for sdl2, overriding pkg-config sndfile_CFLAGS C compiler flags for sndfile, overriding pkg-config sndfile_LIBS linker flags for sndfile, overriding pkg-config 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 . _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 fizmo configure 0.7.10 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_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 || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------- ## ## Report this to fizmo@spellbreaker.org ## ## ------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile 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 fizmo $as_me 0.7.10, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in . "$srcdir"/.; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in . \"$srcdir\"/." "$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. fizmo_dist_version=0.7.10 # Definition for configuration options # Check whether --enable-tracing was given. if test "${enable_tracing+set}" = set; then : enableval=$enable_tracing; else enable_tracing=no fi # Check whether --enable-glktermw was given. if test "${enable_glktermw+set}" = set; then : enableval=$enable_glktermw; else enable_glktermw=no fi # Check whether --enable-sdl was given. if test "${enable_sdl+set}" = set; then : enableval=$enable_sdl; else enable_sdl=yes fi # Import submodule-specific options from their respective directories # Check whether --enable-x11 was given. if test "${enable_x11+set}" = set; then : enableval=$enable_x11; else enable_x11=yes fi # Check whether --enable-jpeg was given. if test "${enable_jpeg+set}" = set; then : enableval=$enable_jpeg; else enable_jpeg=yes fi # Check whether --with-jpeg-includedir was given. if test "${with_jpeg_includedir+set}" = set; then : withval=$with_jpeg_includedir; else with_jpeg_includedir= fi # Check whether --with-jpeg-libdir was given. if test "${with_jpeg_libdir+set}" = set; then : withval=$with_jpeg_libdir; else with_jpeg_libdir= fi # Check whether --enable-png was given. if test "${enable_png+set}" = set; then : enableval=$enable_png; else enable_png=yes fi # Check whether --enable-x11 was given. if test "${enable_x11+set}" = set; then : enableval=$enable_x11; else enable_x11=yes fi # Check whether --enable-sound was given. if test "${enable_sound+set}" = set; then : enableval=$enable_sound; else enable_sound=yes fi # Check whether --with-ncurses-includedir was given. if test "${with_ncurses_includedir+set}" = set; then : withval=$with_ncurses_includedir; else ncurses_h_dir= fi # Check whether --with-ncursesw-libdir was given. if test "${with_ncursesw_libdir+set}" = set; then : withval=$with_ncursesw_libdir; else with_ncursesw_libdir= fi # Check whether --with-ncurses-libdir was given. if test "${with_ncurses_libdir+set}" = set; then : withval=$with_ncurses_libdir; else with_ncurses_libdir= fi if test "x$enable_glktermw" == "xyes"; then : # Check whether --with-glktermw-includedir was given. if test "${with_glktermw_includedir+set}" = set; then : withval=$with_glktermw_includedir; else with_glktermw_includedir= fi # Check whether --with-glktermw-libdir was given. if test "${with_glktermw_libdir+set}" = set; then : withval=$with_glktermw_libdir; else with_glktermw_libdir= fi fi if test "x$enable_sdl" == "xyes"; then : # Check whether --enable-aiff was given. if test "${enable_aiff+set}" = set; then : enableval=$enable_aiff; else enable_aiff=yes fi fi # Check for external, non-fizmo libs: if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-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 ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_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 ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-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 ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_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 ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" 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 PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; 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" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* 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 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 whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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 if test "x$enable_babel" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 $as_echo_n "checking for libxml2... " >&6; } if test -n "$libxml2_CFLAGS"; then pkg_cv_libxml2_CFLAGS="$libxml2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libxml2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$libxml2_LIBS"; then pkg_cv_libxml2_LIBS="$libxml2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libxml2_LIBS=`$PKG_CONFIG --libs "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then libxml2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0" 2>&1` else libxml2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$libxml2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0) were not met: $libxml2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables libxml2_CFLAGS and libxml2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables libxml2_CFLAGS and libxml2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else libxml2_CFLAGS=$pkg_cv_libxml2_CFLAGS libxml2_LIBS=$pkg_cv_libxml2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xmlParseFile in -lxml2" >&5 $as_echo_n "checking for xmlParseFile in -lxml2... " >&6; } if ${ac_cv_lib_xml2_xmlParseFile+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxml2 $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 xmlParseFile (); int main () { return xmlParseFile (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xml2_xmlParseFile=yes else ac_cv_lib_xml2_xmlParseFile=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_xml2_xmlParseFile" >&5 $as_echo "$ac_cv_lib_xml2_xmlParseFile" >&6; } if test "x$ac_cv_lib_xml2_xmlParseFile" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBXML2 1 _ACEOF LIBS="-lxml2 $LIBS" fi libfizmo_reqs="libxml-2.0" fi # Checking for the math library doesn't seem to make much sense since # it appears that the math functions are often automatically included # (which leads to something like "error: conflicting types for built-in # function 'cos'"). Since there's probably no C installation without libm # we'll include it by default. # AC_CHECK_LIB([m], [cos], m_LIBS="-lm") m_LIBS="-lm" if test "x$enable_x11" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x11" >&5 $as_echo_n "checking for x11... " >&6; } if test -n "$x11_CFLAGS"; then pkg_cv_x11_CFLAGS="$x11_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_x11_CFLAGS=`$PKG_CONFIG --cflags "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$x11_LIBS"; then pkg_cv_x11_LIBS="$x11_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_x11_LIBS=`$PKG_CONFIG --libs "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then x11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "x11" 2>&1` else x11_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "x11" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$x11_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (x11) were not met: $x11_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables x11_CFLAGS and x11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables x11_CFLAGS and x11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else x11_CFLAGS=$pkg_cv_x11_CFLAGS x11_LIBS=$pkg_cv_x11_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test "x$libdrilbo_reqs" != "x"; then : libdrilbo_reqs+=", " fi libdrilbo_reqs+="x11" fi if test "x$enable_jpeg" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg" >&5 $as_echo_n "checking for jpeg... " >&6; } if test -n "$jpeg_CFLAGS"; then pkg_cv_jpeg_CFLAGS="$jpeg_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jpeg\""; } >&5 ($PKG_CONFIG --exists --print-errors "jpeg") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_jpeg_CFLAGS=`$PKG_CONFIG --cflags "jpeg" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$jpeg_LIBS"; then pkg_cv_jpeg_LIBS="$jpeg_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jpeg\""; } >&5 ($PKG_CONFIG --exists --print-errors "jpeg") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_jpeg_LIBS=`$PKG_CONFIG --libs "jpeg" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then jpeg_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "jpeg" 2>&1` else jpeg_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "jpeg" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$jpeg_PKG_ERRORS" >&5 for dir in $with_jpeg_includedir /usr/include /usr/local/include /opt/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/jpeglib.h" >&5 $as_echo_n "checking for $dir/jpeglib.h... " >&6; } if test -e $dir/jpeglib.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } jpeglib_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$jpeglib_h_dir" == "x" ; then echo "Could not find libjpeg.h." echo "Try setting the location using --with-jpeg-libdir." exit fi libdrilbo_nonpkg_cflags+="-I$jpeglib_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-ljpeg" for dir in $with_jpeg_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libjpeg in $dir" >&5 $as_echo_n "checking for libjpeg in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "$jpeglib_h_dir/jpeglib.h" int main () { struct jpeg_decompress_struct cinfo; jpeg_create_decompress(&cinfo); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } jpeglib_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$jpeglib_l_dir" == "x" ; then echo "Could not find libjpeg." echo "Try setting the location using --with-jpeg-libdir." exit fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED libdrilbo_nonpkg_libs="-L$jpeglib_l_dir -ljpeg" elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } for dir in $with_jpeg_includedir /usr/include /usr/local/include /opt/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/jpeglib.h" >&5 $as_echo_n "checking for $dir/jpeglib.h... " >&6; } if test -e $dir/jpeglib.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } jpeglib_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$jpeglib_h_dir" == "x" ; then echo "Could not find libjpeg.h." echo "Try setting the location using --with-jpeg-libdir." exit fi libdrilbo_nonpkg_cflags+="-I$jpeglib_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-ljpeg" for dir in $with_jpeg_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libjpeg in $dir" >&5 $as_echo_n "checking for libjpeg in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "$jpeglib_h_dir/jpeglib.h" int main () { struct jpeg_decompress_struct cinfo; jpeg_create_decompress(&cinfo); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } jpeglib_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$jpeglib_l_dir" == "x" ; then echo "Could not find libjpeg." echo "Try setting the location using --with-jpeg-libdir." exit fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED libdrilbo_nonpkg_libs="-L$jpeglib_l_dir -ljpeg" else jpeg_CFLAGS=$pkg_cv_jpeg_CFLAGS jpeg_LIBS=$pkg_cv_jpeg_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test "x$libdrilbo_reqs" != "x"; then : libdrilbo_reqs+=", " fi libdrilbo_reqs+="jpeg" fi fi if test "x$enable_png" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png" >&5 $as_echo_n "checking for png... " >&6; } if test -n "$png_CFLAGS"; then pkg_cv_png_CFLAGS="$png_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng >= 1.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpng >= 1.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_png_CFLAGS=`$PKG_CONFIG --cflags "libpng >= 1.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$png_LIBS"; then pkg_cv_png_LIBS="$png_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng >= 1.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpng >= 1.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_png_LIBS=`$PKG_CONFIG --libs "libpng >= 1.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then png_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libpng >= 1.2" 2>&1` else png_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libpng >= 1.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$png_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libpng >= 1.2) were not met: $png_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables png_CFLAGS and png_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables png_CFLAGS and png_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else png_CFLAGS=$pkg_cv_png_CFLAGS png_LIBS=$pkg_cv_png_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test "x$libdrilbo_reqs" != "x"; then : libdrilbo_reqs+=", " fi libdrilbo_reqs+="libpng >= 1.2" fi libncursesw_nonpkg_cflags="" libncursesw_nonpkg_libs="" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncursesw" >&5 $as_echo_n "checking for ncursesw... " >&6; } if test -n "$ncursesw_CFLAGS"; then pkg_cv_ncursesw_CFLAGS="$ncursesw_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_CFLAGS=`$PKG_CONFIG --cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$ncursesw_LIBS"; then pkg_cv_ncursesw_LIBS="$ncursesw_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_LIBS=`$PKG_CONFIG --libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then ncursesw_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ncursesw" 2>&1` else ncursesw_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ncursesw" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$ncursesw_PKG_ERRORS" >&5 for dir in $with_ncurses_includedir /usr/include /usr/local/include /opt/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/ncurses.h" >&5 $as_echo_n "checking for $dir/ncurses.h... " >&6; } if test -e $dir/ncurses.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncurses_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$ncurses_h_dir" == "x" ; then echo "Could not find ncurses.h." echo "Try setting the location using --with-ncurses-includedir." exit fi libncursesw_nonpkg_cflags+="-I$ncurses_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-lncursesw" for dir in $with_ncursesw_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libncursesw in $dir" >&5 $as_echo_n "checking for libncursesw in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h" int main () { wchar_t buf[2]; addwstr(buf); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncursesw_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$ncursesw_l_dir" != "x" ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncursesw" else echo "Could not find libncursesw. Trying to use libcurses instead." LIBS="-lncurses" for dir in $with_ncurses_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libncurses in $dir" >&5 $as_echo_n "checking for libncurses in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h" int main () { wchar_t buf[2]; addwstr(buf); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncursesw_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$ncursesw_l_dir" != "x" ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncurses" else echo "Couldn't find libncursesw or libncurses. You can set the location manually using --with-ncurses-libdir or --with-ncursesw-libdir." exit fi fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } for dir in $with_ncurses_includedir /usr/include /usr/local/include /opt/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/ncurses.h" >&5 $as_echo_n "checking for $dir/ncurses.h... " >&6; } if test -e $dir/ncurses.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncurses_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$ncurses_h_dir" == "x" ; then echo "Could not find ncurses.h." echo "Try setting the location using --with-ncurses-includedir." exit fi libncursesw_nonpkg_cflags+="-I$ncurses_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-lncursesw" for dir in $with_ncursesw_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libncursesw in $dir" >&5 $as_echo_n "checking for libncursesw in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h" int main () { wchar_t buf[2]; addwstr(buf); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncursesw_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$ncursesw_l_dir" != "x" ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncursesw" else echo "Could not find libncursesw. Trying to use libcurses instead." LIBS="-lncurses" for dir in $with_ncurses_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libncurses in $dir" >&5 $as_echo_n "checking for libncurses in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h" int main () { wchar_t buf[2]; addwstr(buf); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncursesw_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$ncursesw_l_dir" != "x" ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncurses" else echo "Couldn't find libncursesw or libncurses. You can set the location manually using --with-ncurses-libdir or --with-ncursesw-libdir." exit fi fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED else ncursesw_CFLAGS=$pkg_cv_ncursesw_CFLAGS ncursesw_LIBS=$pkg_cv_ncursesw_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test "x$enable_x11" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x11" >&5 $as_echo_n "checking for x11... " >&6; } if test -n "$x11_CFLAGS"; then pkg_cv_x11_CFLAGS="$x11_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_x11_CFLAGS=`$PKG_CONFIG --cflags "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$x11_LIBS"; then pkg_cv_x11_LIBS="$x11_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_x11_LIBS=`$PKG_CONFIG --libs "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then x11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "x11" 2>&1` else x11_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "x11" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$x11_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (x11) were not met: $x11_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables x11_CFLAGS and x11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables x11_CFLAGS and x11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else x11_CFLAGS=$pkg_cv_x11_CFLAGS x11_LIBS=$pkg_cv_x11_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi 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 how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer 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.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer 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.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #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 " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "x$enable_glktermw" == "xyes"; then : libglkif_nonpkg_cflags="" libglkif_nonpkg_libs="" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncursesw" >&5 $as_echo_n "checking for ncursesw... " >&6; } if test -n "$ncursesw_CFLAGS"; then pkg_cv_ncursesw_CFLAGS="$ncursesw_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_CFLAGS=`$PKG_CONFIG --cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$ncursesw_LIBS"; then pkg_cv_ncursesw_LIBS="$ncursesw_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_LIBS=`$PKG_CONFIG --libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then ncursesw_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ncursesw" 2>&1` else ncursesw_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ncursesw" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$ncursesw_PKG_ERRORS" >&5 as_fn_error $? "Could not find ncursesw." "$LINENO" 5 as_fn_exit $? elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Could not find ncursesw." "$LINENO" 5 as_fn_exit $? else ncursesw_CFLAGS=$pkg_cv_ncursesw_CFLAGS ncursesw_LIBS=$pkg_cv_ncursesw_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test "x$libglkif_reqs" != "x"; then : libglkif_reqs+=", " fi libglkif_reqs+="ncursesw" fi ac_fn_c_check_header_mongrel "$LINENO" "glkterm.h" "ac_cv_header_glkterm_h" "$ac_includes_default" if test "x$ac_cv_header_glkterm_h" = xyes; then : else for dir in $with_glktermw_includedir /usr/include /usr/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/glkterm.h" >&5 $as_echo_n "checking for $dir/glkterm.h... " >&6; } if test -e $dir/glkterm.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } glk_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$glk_h_dir" == "x" ; then echo "Could not find glk.h." echo "Try setting the location using --with-glktermw-includedir." as_fn_exit $? fi libglkif_nonpkg_cflags+="-I$glk_h_dir" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lglktermw" >&5 $as_echo_n "checking for main in -lglktermw... " >&6; } if ${ac_cv_lib_glktermw_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lglktermw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_glktermw_main=yes else ac_cv_lib_glktermw_main=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_glktermw_main" >&5 $as_echo "$ac_cv_lib_glktermw_main" >&6; } if test "x$ac_cv_lib_glktermw_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGLKTERMW 1 _ACEOF LIBS="-lglktermw $LIBS" else LIBS_OLD=$LIBS LIBS="-lglktermw $ncursesw_LIBS" for dir in $with_glktermw_libdir /usr/lib /usr/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libglktermw in $dir" >&5 $as_echo_n "checking for libglktermw in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "$glk_h_dir/glk.h" #include "$glk_h_dir/glkstart.h" glkunix_argumentlist_t glkunix_arguments[] = { }; int glkunix_startup_code(glkunix_startup_t *data) { } void glk_main(void) { glk_exit(); } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } glk_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$glk_l_dir" == "x" ; then echo "Could not find libglktermw." echo "Try setting the location using --with-glktermw-libdir." as_fn_error $? "Could not find libglktermw." "$LINENO" 5 as_fn_error $? "You need to specify libglktermw.a location using \"--with-glktermw-libdir=\"." "$LINENO" 5 as_fn_exit $? fi LIBS=$LIBS_OLD libglkif_nonpkg_libs="-L$glk_l_dir -lglktermw" fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncursesw" >&5 $as_echo_n "checking for ncursesw... " >&6; } if test -n "$ncursesw_CFLAGS"; then pkg_cv_ncursesw_CFLAGS="$ncursesw_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_CFLAGS=`$PKG_CONFIG --cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$ncursesw_LIBS"; then pkg_cv_ncursesw_LIBS="$ncursesw_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_LIBS=`$PKG_CONFIG --libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then ncursesw_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ncursesw" 2>&1` else ncursesw_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ncursesw" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$ncursesw_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (ncursesw) were not met: $ncursesw_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables ncursesw_CFLAGS and ncursesw_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables ncursesw_CFLAGS and ncursesw_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else ncursesw_CFLAGS=$pkg_cv_ncursesw_CFLAGS ncursesw_LIBS=$pkg_cv_ncursesw_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi if test "$enable_sdl" != "no"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sdl2" >&5 $as_echo_n "checking for sdl2... " >&6; } if test -n "$sdl2_CFLAGS"; then pkg_cv_sdl2_CFLAGS="$sdl2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl2\""; } >&5 ($PKG_CONFIG --exists --print-errors "sdl2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sdl2_CFLAGS=`$PKG_CONFIG --cflags "sdl2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$sdl2_LIBS"; then pkg_cv_sdl2_LIBS="$sdl2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl2\""; } >&5 ($PKG_CONFIG --exists --print-errors "sdl2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sdl2_LIBS=`$PKG_CONFIG --libs "sdl2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then sdl2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sdl2" 2>&1` else sdl2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sdl2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$sdl2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (sdl2) were not met: $sdl2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables sdl2_CFLAGS and sdl2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables sdl2_CFLAGS and sdl2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else sdl2_CFLAGS=$pkg_cv_sdl2_CFLAGS sdl2_LIBS=$pkg_cv_sdl2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test "x$enable_aiff" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sndfile" >&5 $as_echo_n "checking for sndfile... " >&6; } if test -n "$sndfile_CFLAGS"; then pkg_cv_sndfile_CFLAGS="$sndfile_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile\""; } >&5 ($PKG_CONFIG --exists --print-errors "sndfile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sndfile_CFLAGS=`$PKG_CONFIG --cflags "sndfile" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$sndfile_LIBS"; then pkg_cv_sndfile_LIBS="$sndfile_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile\""; } >&5 ($PKG_CONFIG --exists --print-errors "sndfile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sndfile_LIBS=`$PKG_CONFIG --libs "sndfile" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then sndfile_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sndfile" 2>&1` else sndfile_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sndfile" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$sndfile_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (sndfile) were not met: $sndfile_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables sndfile_CFLAGS and sndfile_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables sndfile_CFLAGS and sndfile_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else sndfile_CFLAGS=$pkg_cv_sndfile_CFLAGS sndfile_LIBS=$pkg_cv_sndfile_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi libsndif_reqs+=", sndfile" fi fi am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$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; } # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file 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 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 if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done 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; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file 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"` 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 --is-lightweight"; then am_missing_run="$MISSING " 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+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null 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 # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' 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='fizmo' VERSION='0.7.10' 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"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). 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}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > 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 # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* 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 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 whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$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 if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$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 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 test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$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_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 test -n "$ac_ct_AR" && break done 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 fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; 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 am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a 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: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac # Setup conditionals: # It appears that conditionals must always be defined, even if they are # never used. If not, it will result in a "configure: error: conditional # (name-of-conditional) was never defined". if test "$enable_tracing" = "yes"; then ENABLE_TRACING_TRUE= ENABLE_TRACING_FALSE='#' else ENABLE_TRACING_TRUE='#' ENABLE_TRACING_FALSE= fi if test "$enable_sdl" != "no"; then ENABLE_SDL_TRUE= ENABLE_SDL_FALSE='#' else ENABLE_SDL_TRUE='#' ENABLE_SDL_FALSE= fi if test "$enable_babel" != "no"; then ENABLE_BABEL_TRUE= ENABLE_BABEL_FALSE='#' else ENABLE_BABEL_TRUE='#' ENABLE_BABEL_FALSE= fi if test "$enable_strict_z" = "yes"; then ENABLE_STRICT_Z_TRUE= ENABLE_STRICT_Z_FALSE='#' else ENABLE_STRICT_Z_TRUE='#' ENABLE_STRICT_Z_FALSE= fi if test "$enable_segfault-on-error" = "yes"; then ENABLE_SEGFAULT_ON_ERROR_TRUE= ENABLE_SEGFAULT_ON_ERROR_FALSE='#' else ENABLE_SEGFAULT_ON_ERROR_TRUE='#' ENABLE_SEGFAULT_ON_ERROR_FALSE= fi if test "$enable_filelist" != "no"; then ENABLE_FILELIST_TRUE= ENABLE_FILELIST_FALSE='#' else ENABLE_FILELIST_TRUE='#' ENABLE_FILELIST_FALSE= fi if test "$enable_blockbuffer" != "no"; then ENABLE_BLOCKBUFFER_TRUE= ENABLE_BLOCKBUFFER_FALSE='#' else ENABLE_BLOCKBUFFER_TRUE='#' ENABLE_BLOCKBUFFER_FALSE= fi if test "$enable_command_history" != "no"; then ENABLE_COMMAND_HISTORY_TRUE= ENABLE_COMMAND_HISTORY_FALSE='#' else ENABLE_COMMAND_HISTORY_TRUE='#' ENABLE_COMMAND_HISTORY_FALSE= fi if test "$enable_output_history" != "no"; then ENABLE_OUTPUT_HISTORY_TRUE= ENABLE_OUTPUT_HISTORY_FALSE='#' else ENABLE_OUTPUT_HISTORY_TRUE='#' ENABLE_OUTPUT_HISTORY_FALSE= fi if test "$enable_config_files" != "no"; then ENABLE_CONFIG_FILES_TRUE= ENABLE_CONFIG_FILES_FALSE='#' else ENABLE_CONFIG_FILES_TRUE='#' ENABLE_CONFIG_FILES_FALSE= fi if test "$enable_prefix_commands" != "no"; then ENABLE_PREFIX_COMMANDS_TRUE= ENABLE_PREFIX_COMMANDS_FALSE='#' else ENABLE_PREFIX_COMMANDS_TRUE='#' ENABLE_PREFIX_COMMANDS_FALSE= fi if test "$enable_debugger" = "yes"; then ENABLE_DEBUGGER_TRUE= ENABLE_DEBUGGER_FALSE='#' else ENABLE_DEBUGGER_TRUE='#' ENABLE_DEBUGGER_FALSE= fi if test "x$fizmo_dist_version" != "x"; then FIZMO_DIST_VERSION_TRUE= FIZMO_DIST_VERSION_FALSE='#' else FIZMO_DIST_VERSION_TRUE='#' FIZMO_DIST_VERSION_FALSE= fi if test "$enable_x11" != "no"; then ENABLE_X11_TRUE= ENABLE_X11_FALSE='#' else ENABLE_X11_TRUE='#' ENABLE_X11_FALSE= fi if test "$enable_jpeg" != "no"; then ENABLE_JPEG_TRUE= ENABLE_JPEG_FALSE='#' else ENABLE_JPEG_TRUE='#' ENABLE_JPEG_FALSE= fi if test "$enable_png" != "no"; then ENABLE_PNG_TRUE= ENABLE_PNG_FALSE='#' else ENABLE_PNG_TRUE='#' ENABLE_PNG_FALSE= fi if test "$enable_x11" != "no"; then ENABLE_X11_IMAGES_TRUE= ENABLE_X11_IMAGES_FALSE='#' else ENABLE_X11_IMAGES_TRUE='#' ENABLE_X11_IMAGES_FALSE= fi if test "$enable_sdl" != "no"; then ENABLE_SDL_TRUE= ENABLE_SDL_FALSE='#' else ENABLE_SDL_TRUE='#' ENABLE_SDL_FALSE= fi if test "$enable_filelist" != "no"; then ENABLE_FILELIST_TRUE= ENABLE_FILELIST_FALSE='#' else ENABLE_FILELIST_TRUE='#' ENABLE_FILELIST_FALSE= fi if test "$enable_config_files" != "no"; then ENABLE_CONFIG_FILES_TRUE= ENABLE_CONFIG_FILES_FALSE='#' else ENABLE_CONFIG_FILES_TRUE='#' ENABLE_CONFIG_FILES_FALSE= fi if test "$enable_readchar_via_termios" != "no"; then ENABLE_READCHAR_VIA_TERMIOS_TRUE= ENABLE_READCHAR_VIA_TERMIOS_FALSE='#' else ENABLE_READCHAR_VIA_TERMIOS_TRUE='#' ENABLE_READCHAR_VIA_TERMIOS_FALSE= fi if test "$enable_aiff" != "no"; then ENABLE_AIFF_TRUE= ENABLE_AIFF_FALSE='#' else ENABLE_AIFF_TRUE='#' ENABLE_AIFF_FALSE= fi # Setup flags for fizmo-internal libs. This will allow us to build the # project after only one configuration iteration. build_prefix=`pwd`/build build_prefix_cflags=$build_prefix/include/fizmo build_prefix_libs=$build_prefix/lib/fizmo DEV_BUILD_PREFIX=$build_prefix FIZMO_DIST_VERSION=0.7.10 # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. #libfizmo_CFLAGS="-I$build_prefix_cflags $xml2_CFLAGS $m_CFLAGS" #libfizmo_LIBS="-L$build_prefix_libs -lfizmo $xml2_LIBS $m_LIBS" # #AC_SUBST([libfizmo_CFLAGS], $libfizmo_CFLAGS) #AC_SUBST([libfizmo_LIBS], $libfizmo_LIBS) libfizmo_CFLAGS="-I$build_prefix_cflags $xml2_CFLAGS $m_CFLAGS" libfizmo_LIBS="-L$build_prefix_libs -lfizmo $xml2_LIBS $m_LIBS" # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. libcellif_CFLAGS="-I$build_prefix_cflags" libcellif_LIBS="-L$build_prefix_libs -lcellif" # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. libdrilbo_CFLAGS="-I$build_prefix_cflags $x11_CFLAGS $jpeg_CFLAGS $libdrilbo_nonpkg_cflags $png_CFLAGS" libdrilbo_LIBS="-L$build_prefix_libs -ldrilbo -lpthread $x11_LIBS $jpeg_LIBS $libdrilbo_nonpkg_libs $png_LIBS" # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. LIBNCURSESW_NONPKG_CFLAGS="$libncursesw_nonpkg_cflags" LIBNCURSESW_NONPKG_LIBS="$libncursesw_nonpkg_libs" if test "x$enable_glktermw" == "xyes"; then : # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. LIBGLKIF_NONPKG_CFLAGS="$libglkif_nonpkg_cflags" LIBGLKIF_NONPKG_LIBS="$libglkif_nonpkg_libs" libglkif_CFLAGS="-I$build_prefix_cflags $libglkif_nonpkg_cflags" libglkif_LIBS="-L$build_prefix_libs -lglkif $libglkif_nonpkg_libs" # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. # (This file is intentionally empty) fi if test "$enable_sdl" != "no"; then : # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. # Changes in this file have to be mirrored in the corresponding frontend # "config-subst-libsndifsdl2.m4" files. SOUND_INTERFACE_NAME=libsndifsdl2 SOUND_INTERFACE_STRUCT_NAME=sound_interface_sdl2 SOUND_INTERFACE_CONFIGNAME=SOUNDSDL2 SOUND_INTERFACE_INCLUDE_FILE=sound_sdl2/sound_sdl2.h fi # Define optional build and installation targets if required by the # current flags if test "x$enable_glktermw" == "xyes"; then : optional_fizmo_builds=fizmo-glktermw optional_fizmo_installs=install-fizmo-glktermw optional_fizmo_cleans=clean-fizmo-glktermw optional_fizmo_dstcleans=distclean-fizmo-glktermw fi if test "$enable_sdl" != "no"; then : optional_sound_build=libsndifsdl2 optional_sound_install=install-libsndifsdl2 optional_sound_install_data_local=install-data-local-libsndifsdl2 optional_fizmo_cleans="$optional_fizmo_cleans clean-libsndifsdl2" optional_fizmo_distcleans="$optional_fizmo_distcleans distclean-libsndifsdl2" fi # Explicitely set cflags and libs for libsndifsdl2 for use by frontends since # we cannot use pkg-config for this. libsndifsdl2_CFLAGS="-I$build_prefix_cflags $sdl2_CFLAGS $sndfile_CFLAGS" libsndifsdl2_LIBS="-L$build_prefix_libs -lsndifsdl2 $sdl2_LIBS $sndfile_LIBS" OPTIONAL_SOUND_BUILD=$optional_sound_build OPTIONAL_SOUND_INSTALL=$optional_sound_install OPTIONAL_SOUND_INSTALL_DATA_LOCAL=$optional_sound_install_data_local OPTIONAL_FIZMO_BUILDS=$optional_fizmo_builds OPTIONAL_FIZMO_INSTALLS=$optional_fizmo_installs OPTIONAL_FIZMO_CLEANS=$optional_fizmo_cleans OPTIONAL_FIZMO_DISTCLEANS=$optional_fizmo_distcleans # Create Makefiles ac_config_files="$ac_config_files Makefile libfizmo/Makefile libfizmo/src/tools/Makefile libfizmo/src/interpreter/Makefile libcellif/Makefile libcellif/src/cell_interface/Makefile libdrilbo/Makefile libdrilbo/src/drilbo/Makefile fizmo-console/Makefile fizmo-console/src/fizmo-console/Makefile fizmo-ncursesw/Makefile fizmo-ncursesw/src/fizmo-ncursesw/Makefile" if test "x$enable_glktermw" == "xyes"; then : ac_config_files="$ac_config_files libglkif/Makefile libglkif/src/glk_interface/Makefile fizmo-glktermw/Makefile fizmo-glktermw/src/fizmo-glktermw/Makefile" fi if test "$enable_sdl" != "no"; then : ac_config_files="$ac_config_files libsndifsdl2/Makefile libsndifsdl2/src/sound_sdl2/Makefile" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } 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 if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${ENABLE_TRACING_TRUE}" && test -z "${ENABLE_TRACING_FALSE}"; then as_fn_error $? "conditional \"ENABLE_TRACING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SDL_TRUE}" && test -z "${ENABLE_SDL_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SDL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_BABEL_TRUE}" && test -z "${ENABLE_BABEL_FALSE}"; then as_fn_error $? "conditional \"ENABLE_BABEL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_STRICT_Z_TRUE}" && test -z "${ENABLE_STRICT_Z_FALSE}"; then as_fn_error $? "conditional \"ENABLE_STRICT_Z\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SEGFAULT_ON_ERROR_TRUE}" && test -z "${ENABLE_SEGFAULT_ON_ERROR_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SEGFAULT_ON_ERROR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_FILELIST_TRUE}" && test -z "${ENABLE_FILELIST_FALSE}"; then as_fn_error $? "conditional \"ENABLE_FILELIST\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_BLOCKBUFFER_TRUE}" && test -z "${ENABLE_BLOCKBUFFER_FALSE}"; then as_fn_error $? "conditional \"ENABLE_BLOCKBUFFER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_COMMAND_HISTORY_TRUE}" && test -z "${ENABLE_COMMAND_HISTORY_FALSE}"; then as_fn_error $? "conditional \"ENABLE_COMMAND_HISTORY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_OUTPUT_HISTORY_TRUE}" && test -z "${ENABLE_OUTPUT_HISTORY_FALSE}"; then as_fn_error $? "conditional \"ENABLE_OUTPUT_HISTORY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_CONFIG_FILES_TRUE}" && test -z "${ENABLE_CONFIG_FILES_FALSE}"; then as_fn_error $? "conditional \"ENABLE_CONFIG_FILES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PREFIX_COMMANDS_TRUE}" && test -z "${ENABLE_PREFIX_COMMANDS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PREFIX_COMMANDS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_DEBUGGER_TRUE}" && test -z "${ENABLE_DEBUGGER_FALSE}"; then as_fn_error $? "conditional \"ENABLE_DEBUGGER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FIZMO_DIST_VERSION_TRUE}" && test -z "${FIZMO_DIST_VERSION_FALSE}"; then as_fn_error $? "conditional \"FIZMO_DIST_VERSION\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_X11_TRUE}" && test -z "${ENABLE_X11_FALSE}"; then as_fn_error $? "conditional \"ENABLE_X11\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_JPEG_TRUE}" && test -z "${ENABLE_JPEG_FALSE}"; then as_fn_error $? "conditional \"ENABLE_JPEG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PNG_TRUE}" && test -z "${ENABLE_PNG_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PNG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_X11_IMAGES_TRUE}" && test -z "${ENABLE_X11_IMAGES_FALSE}"; then as_fn_error $? "conditional \"ENABLE_X11_IMAGES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SDL_TRUE}" && test -z "${ENABLE_SDL_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SDL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_FILELIST_TRUE}" && test -z "${ENABLE_FILELIST_FALSE}"; then as_fn_error $? "conditional \"ENABLE_FILELIST\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_CONFIG_FILES_TRUE}" && test -z "${ENABLE_CONFIG_FILES_FALSE}"; then as_fn_error $? "conditional \"ENABLE_CONFIG_FILES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_READCHAR_VIA_TERMIOS_TRUE}" && test -z "${ENABLE_READCHAR_VIA_TERMIOS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_READCHAR_VIA_TERMIOS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_AIFF_TRUE}" && test -z "${ENABLE_AIFF_FALSE}"; then as_fn_error $? "conditional \"ENABLE_AIFF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' 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 # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # 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 fizmo $as_me 0.7.10, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ fizmo config.status 0.7.10 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "libfizmo/Makefile") CONFIG_FILES="$CONFIG_FILES libfizmo/Makefile" ;; "libfizmo/src/tools/Makefile") CONFIG_FILES="$CONFIG_FILES libfizmo/src/tools/Makefile" ;; "libfizmo/src/interpreter/Makefile") CONFIG_FILES="$CONFIG_FILES libfizmo/src/interpreter/Makefile" ;; "libcellif/Makefile") CONFIG_FILES="$CONFIG_FILES libcellif/Makefile" ;; "libcellif/src/cell_interface/Makefile") CONFIG_FILES="$CONFIG_FILES libcellif/src/cell_interface/Makefile" ;; "libdrilbo/Makefile") CONFIG_FILES="$CONFIG_FILES libdrilbo/Makefile" ;; "libdrilbo/src/drilbo/Makefile") CONFIG_FILES="$CONFIG_FILES libdrilbo/src/drilbo/Makefile" ;; "fizmo-console/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-console/Makefile" ;; "fizmo-console/src/fizmo-console/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-console/src/fizmo-console/Makefile" ;; "fizmo-ncursesw/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-ncursesw/Makefile" ;; "fizmo-ncursesw/src/fizmo-ncursesw/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-ncursesw/src/fizmo-ncursesw/Makefile" ;; "libglkif/Makefile") CONFIG_FILES="$CONFIG_FILES libglkif/Makefile" ;; "libglkif/src/glk_interface/Makefile") CONFIG_FILES="$CONFIG_FILES libglkif/src/glk_interface/Makefile" ;; "fizmo-glktermw/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-glktermw/Makefile" ;; "fizmo-glktermw/src/fizmo-glktermw/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-glktermw/src/fizmo-glktermw/Makefile" ;; "libsndifsdl2/Makefile") CONFIG_FILES="$CONFIG_FILES libsndifsdl2/Makefile" ;; "libsndifsdl2/src/sound_sdl2/Makefile") CONFIG_FILES="$CONFIG_FILES libsndifsdl2/src/sound_sdl2/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf 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"` # 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'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi fizmo-0.7.10/configure.ac000644 000765 000024 00000020776 12606024312 016156 0ustar00chrenderstaff000000 000000 # configure.ac # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # -- README # Configuration is a little bit more complex since every submodule is # supposed to be buildable standalone. That means that this distribution # wrapper includes definitions about configuration flags, conditions, # substitutions and libraries directly from the submodule directories # and directly creates all the Makefiles so allthough there are many # submodules we only need a single configure and make run. # The configuration process for "fizmo-dist" will install the fizmo-libraries # not into the target directory, but into a subdirectory named "build" inside # it's own source directory. This will make sure that only the files which # are required to run fizmo are installed in the end. # Since the configuration process must be completed before the build # begins, some extra effort has to be taken. As submodules may require # other fizmo-libraries to be build -- libcellif for example requires # libfizmo -- it's not possible to use the whole subsystem's configuration, # since libfizmo already have to be built so that the configuration can # find it. Thus, the following rules apply: # For every submodule, all non-fizmo-specific requirements are listed # in the submodule's respective "config-libs.m4". As an example, libdrilbo # may check for libfizmo" inside it's own configure.ac, the requirements # for libjpg however go into "config-libs.m4". # The fizmo-dist's "configure.ac" will then include the "config-libs.m4" # of all submodules and provide the cflags and libs for the fizmo-related # libs itself in the section "fizmo-internal libs". # I haven't found a way to make "m4_include" -- or any other type of # include mechanism -- work with variables, so it's not possible to specify # the sound interface to build in a single variable and have the build # process behave accordingly, so any changes will require manual intervention. # If you can find a better way, I'd be delighted to hear about it. m4_define([FIZMO_DIST_VERSION_NUMBER], [0.7.10]) AC_INIT( [fizmo], FIZMO_DIST_VERSION_NUMBER, fizmo@spellbreaker.org, fizmo) AC_CONFIG_AUX_DIR([.]) fizmo_dist_version=FIZMO_DIST_VERSION_NUMBER # Definition for configuration options AC_ARG_ENABLE([tracing], [AS_HELP_STRING([--enable-tracing], [enable tracelog for debugging])], [], [enable_tracing=no]) AC_ARG_ENABLE([glktermw], [AS_HELP_STRING([--enable-glktermw], [enable experimental glktermw])], [], [enable_glktermw=no]) AC_ARG_ENABLE([sdl], [AS_HELP_STRING([--disable-sdl], [SDL will not be required for building, this will however disable sound support])], [], [enable_sdl=yes]) # Import submodule-specific options from their respective directories m4_include(libfizmo/config-flags.m4) m4_include(libcellif/config-flags.m4) m4_include(libdrilbo/config-flags.m4) m4_include(fizmo-console/config-flags.m4) m4_include(fizmo-ncursesw/config-flags.m4) AS_IF([test "x$enable_glktermw" == "xyes"], [ m4_include(libglkif/config-flags.m4) m4_include(fizmo-glktermw/config-flags.m4) ]) AS_IF([test "x$enable_sdl" == "xyes"], [ m4_include(libsndifsdl2/config-flags.m4) ]) # Check for external, non-fizmo libs: m4_include(libfizmo/config-libs.m4) m4_include(libcellif/config-libs.m4) m4_include(libdrilbo/config-libs.m4) m4_include(fizmo-console/config-libs.m4) m4_include(fizmo-ncursesw/config-libs.m4) AS_IF([test "x$enable_glktermw" == "xyes"], [ m4_include(libglkif/config-libs.m4) m4_include(fizmo-glktermw/config-libs.m4) ]) AS_IF([test "$enable_sdl" != "no"], [ m4_include(libsndifsdl2/config-libs.m4) ]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_PROG_CC AC_PROG_RANLIB AM_PROG_AR # Setup conditionals: # It appears that conditionals must always be defined, even if they are # never used. If not, it will result in a "configure: error: conditional # (name-of-conditional) was never defined". AM_CONDITIONAL([ENABLE_TRACING], [test "$enable_tracing" = "yes"]) AM_CONDITIONAL([ENABLE_SDL], [test "$enable_sdl" != "no"]) m4_include(libfizmo/config-conds.m4) m4_include(libcellif/config-conds.m4) m4_include(libdrilbo/config-conds.m4) m4_include(fizmo-ncursesw/config-conds.m4) m4_include(fizmo-console/config-conds.m4) m4_include(libglkif/config-conds.m4) m4_include(fizmo-glktermw/config-conds.m4) m4_include(libsndifsdl2/config-conds.m4) # Setup flags for fizmo-internal libs. This will allow us to build the # project after only one configuration iteration. build_prefix=`pwd`/build build_prefix_cflags=$build_prefix/include/fizmo build_prefix_libs=$build_prefix/lib/fizmo AC_SUBST([DEV_BUILD_PREFIX], $build_prefix) AC_SUBST([FIZMO_DIST_VERSION], FIZMO_DIST_VERSION_NUMBER) m4_include(libfizmo/config-subst.m4) m4_include(libcellif/config-subst.m4) m4_include(libdrilbo/config-subst.m4) m4_include(fizmo-console/config-subst.m4) m4_include(fizmo-ncursesw/config-subst.m4) AS_IF([test "x$enable_glktermw" == "xyes"], [ m4_include(libglkif/config-subst.m4) m4_include(fizmo-glktermw/config-subst.m4) ]) AS_IF([test "$enable_sdl" != "no"], [ m4_include(libsndifsdl2/config-subst.m4) ]) # Define optional build and installation targets if required by the # current flags AS_IF([test "x$enable_glktermw" == "xyes"], [ optional_fizmo_builds=fizmo-glktermw optional_fizmo_installs=install-fizmo-glktermw optional_fizmo_cleans=clean-fizmo-glktermw optional_fizmo_dstcleans=distclean-fizmo-glktermw ]) AS_IF([test "$enable_sdl" != "no"], [ optional_sound_build=libsndifsdl2 optional_sound_install=install-libsndifsdl2 optional_sound_install_data_local=install-data-local-libsndifsdl2 optional_fizmo_cleans="$optional_fizmo_cleans clean-libsndifsdl2" optional_fizmo_distcleans="$optional_fizmo_distcleans distclean-libsndifsdl2" ]) # Explicitely set cflags and libs for libsndifsdl2 for use by frontends since # we cannot use pkg-config for this. AC_SUBST([libsndifsdl2_CFLAGS], "-I$build_prefix_cflags $sdl2_CFLAGS $sndfile_CFLAGS") AC_SUBST([libsndifsdl2_LIBS], "-L$build_prefix_libs -lsndifsdl2 $sdl2_LIBS $sndfile_LIBS") AC_SUBST([OPTIONAL_SOUND_BUILD], $optional_sound_build) AC_SUBST([OPTIONAL_SOUND_INSTALL], $optional_sound_install) AC_SUBST([OPTIONAL_SOUND_INSTALL_DATA_LOCAL],$optional_sound_install_data_local) AC_SUBST([OPTIONAL_FIZMO_BUILDS], $optional_fizmo_builds) AC_SUBST([OPTIONAL_FIZMO_INSTALLS], $optional_fizmo_installs) AC_SUBST([OPTIONAL_FIZMO_CLEANS], $optional_fizmo_cleans) AC_SUBST([OPTIONAL_FIZMO_DISTCLEANS], $optional_fizmo_distcleans) # Create Makefiles AC_CONFIG_FILES([ Makefile libfizmo/Makefile libfizmo/src/tools/Makefile libfizmo/src/interpreter/Makefile libcellif/Makefile libcellif/src/cell_interface/Makefile libdrilbo/Makefile libdrilbo/src/drilbo/Makefile fizmo-console/Makefile fizmo-console/src/fizmo-console/Makefile fizmo-ncursesw/Makefile fizmo-ncursesw/src/fizmo-ncursesw/Makefile ]) AS_IF([test "x$enable_glktermw" == "xyes"], [ AC_CONFIG_FILES([ libglkif/Makefile libglkif/src/glk_interface/Makefile fizmo-glktermw/Makefile fizmo-glktermw/src/fizmo-glktermw/Makefile ]) ]) AS_IF([test "$enable_sdl" != "no"], [ AC_CONFIG_FILES([ libsndifsdl2/Makefile libsndifsdl2/src/sound_sdl2/Makefile ]) ]) AC_OUTPUT fizmo-0.7.10/COPYRIGHT.txt000644 000765 000024 00000005256 12606024551 016002 0ustar00chrenderstaff000000 000000 Copyright (c) 2009-2015 Christoph Ender All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- This package includes software written by other authors: libfizmo includes the Mersenne Twister random number generator, available at http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html. This is available via a BSD license, which is stored in the source file "libfizmo/src/interpreter/mt19937ar.c". libfizmo includes hyphenation patterns provided by the hyph-utf8 project at http://www.ctan.org/tex-archive/language/hyph-utf8/. For every file's detailed respective copyright information, please refer to the description stored at the top of the corresponding file: - "src/locales/en_US/patterns.txt" from hyph-utf8's "hyph-en-us.tex". - "src/locales/de_DE/patterns.txt" from hyph-utf8's "hyph-de-1996.tex". - "src/locales/fr_FR/patterns.txt" from hyph-utf8's "hyph-fr.tex". libdrilbo includes code from the pix2gif utility by Mark Howell in ztools, which are available from http://www.ifarchive.org/indexes/if- archiveXinfocomXtoolsXztools.html. The copyright status of Mark Howell's work is unknown. Since he released the software for free and since it is also used by multiple other projects it can also be distributed or used freely, to the best of my knowledge. fizmo-0.7.10/depcomp000755 000765 000024 00000056016 12606024550 015245 0ustar00chrenderstaff000000 000000 #! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 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 # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} 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" # Avoid interferences from the environment. gccflag= dashmflag= # 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 information. 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 -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## 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). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - 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 -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # 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. ## 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. tr ' ' "$nl" < "$tmpdepfile" \ | 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 -ne 0; then 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 make_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. set_dir_from "$object" set_base_from "$object" 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 -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$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 ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" 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 rmdir '$lockdir' exit 1 " 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. rmdir "$lockdir" break else # If 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. set_dir_from "$object" set_base_from "$object" 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 -ne 0; then 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,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_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. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool 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$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; 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 -ne 0; then 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" echo >> "$depfile" # make sure the fragment doesn't end with a backslash 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" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | 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" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | 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: fizmo-0.7.10/doc/000755 000765 000024 00000000000 12606024312 014421 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-console/000755 000765 000024 00000000000 12606024550 016444 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-glktermw/000755 000765 000024 00000000000 12606024550 016636 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-ncursesw/000755 000765 000024 00000000000 12606024550 016653 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/install-sh000755 000765 000024 00000034523 12606024550 015673 0ustar00chrenderstaff000000 000000 #!/bin/sh # install - install a program, script, or datafile scriptversion=2013-12-25.23; # 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. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # 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_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 is_target_a_directory=possibly 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 *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi 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 if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi 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 "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` 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 oIFS=$IFS IFS=/ set -f set fnord $dstdir shift 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` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && 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: fizmo-0.7.10/INSTALL.txt000644 000765 000024 00000003727 12606024551 015541 0ustar00chrenderstaff000000 000000 Installing should be as simple as running the following commands: ./configure make make install The "configure" script tries to guess the correct values for all the system settings and locations of all include files and libraries. If some files cannot be found, the script will ask for the required values. In addition to the standard parameters, "configure" provides the following options: --enable-tracing For debugging purposes, fizmo can write very extensive logging information into a file named "tracelog.txt". The logging can be enabled using this option. See also the "--with-glktermw-includedir" and "--with-glktermw- libdir" parameters below. --enable-glktermw Fizmo provides experimental GLK support, which can be activated using this option. --disable-x11 This option will disable X11 image display in fizmo-ncursesw. --disable-jpeg In case JPEG support is not available or not desired, this option will disable libdrilbo's JPEG capabilities. --disable-png In case PNG support is not available or not desired, this option will disable libdrilbo's PNG capabilities. --disable-sound In case SDL2 is not available or sound support is not desired, sound can be disabled using this option. --disable-aiff In case libsndfile1 is is not available or no AIFF support is required, this option will disable AIFF support. --with-jpeg-includedir If pkg-config cannot provide information about libjpeg, the location of the jpeglib.h can be given using this parameter. --with-jpeg-libdir If pkg-config cannot provide information about libjpeg, the location of the libjpeg can be given using this parameter. --with-glktermw-includedir In case glktermw should be build, the location of the include files must be given using this parameter. --with-glktermw-libdir In case glktermw should be build, the location of the library file must be given using this parameter. fizmo-0.7.10/libcellif/000755 000765 000024 00000000000 12606024550 015605 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libdrilbo/000755 000765 000024 00000000000 12606024550 015622 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/000755 000765 000024 00000000000 12606024550 015473 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libglkif/000755 000765 000024 00000000000 12606024550 015443 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/000755 000765 000024 00000000000 12606024550 016237 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/Makefile.am000644 000765 000024 00000007463 12606024312 015722 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # option settings AUTOMAKE_OPTIONS = -Wno-override .PHONY: libfizmo libcellif libsndifsdl2 libdrilbo libglkif \ fizmo-console fizmo-ncursesw fizmo-glktermw # default target all: fizmo-ncursesw fizmo-console $(OPTIONAL_FIZMO_BUILDS) # fizmo libraries libfizmo: cd libfizmo ; \ $(MAKE) install-dev libcellif: libfizmo cd libcellif ; \ $(MAKE) install-dev libsndifsdl2: libfizmo cd libsndifsdl2 ; \ $(MAKE) install-dev libdrilbo: libfizmo cd libdrilbo ; \ $(MAKE) install-dev libglkif: libfizmo cd libglkif ; \ $(MAKE) install-dev # fizmo frontends fizmo-console: libfizmo cd fizmo-console ; \ $(MAKE) fizmo-ncursesw: libfizmo libcellif libdrilbo $(OPTIONAL_SOUND_BUILD) cd fizmo-ncursesw ; \ $(MAKE) fizmo-glktermw: libfizmo libglkif cd fizmo-glktermw ; \ $(MAKE) # install targets install-data-local-libsndifsdl2: libsndifsdl2 cd libsndifsdl2 ; $(MAKE) install-data-local install-data-local: libfizmo libcellif libdrilbo \ $(OPTIONAL_SOUND_INSTALL_DATA_LOCAL) cd libfizmo ; $(MAKE) install-data-local cd libcellif ; $(MAKE) install-data-local cd libdrilbo ; $(MAKE) install-data-local install-fizmo-console: fizmo-console cd fizmo-console ; $(MAKE) install install-fizmo-ncursesw: fizmo-ncursesw cd fizmo-ncursesw ; $(MAKE) install ; $(MAKE) install-data-local install-fizmo-glktermw: fizmo-glktermw cd libglkif ; $(MAKE) install-data-local cd fizmo-glktermw ; $(MAKE) install install: install-data-local install-fizmo-console install-fizmo-ncursesw \ $(OPTIONAL_FIZMO_INSTALLS) # clean targets clean-local: $(OPTIONAL_FIZMO_CLEANS) cd libfizmo ; $(MAKE) clean cd libcellif ; $(MAKE) clean cd libdrilbo ; $(MAKE) clean cd fizmo-console ; $(MAKE) clean cd fizmo-ncursesw ; $(MAKE) clean rm -rf $(DEV_BUILD_PREFIX) clean-fizmo-glktermw: fizmo-glktermw cd libglkif ; $(MAKE) clean ; $(MAKE) clean-dev cd fizmo-glktermw ; $(MAKE) clean clean-libsndifsdl2: cd libsndifsdl2 ; $(MAKE) clean ; $(MAKE) clean-dev # distclean targets distclean-local: $(OPTIONAL_FIZMO_DISTCLEANS) cd libfizmo ; $(MAKE) distclean cd libcellif ; $(MAKE) distclean cd libdrilbo ; $(MAKE) distclean cd fizmo-console ; $(MAKE) distclean cd fizmo-ncursesw ; $(MAKE) distclean distclean-fizmo-glktermw: fizmo-glktermw cd libglkif ; $(MAKE) distclean cd fizmo-glktermw ; $(MAKE) distclean distclean-libsndifsdl2: cd libsndifsdl2 ; $(MAKE) distclean fizmo-0.7.10/Makefile.in000644 000765 000024 00000057045 12606024550 015740 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # option settings VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = 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__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in ar-lib compile install-sh \ missing 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__post_remove_distdir = $(am__remove_distdir) DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip 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@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AUTOMAKE_OPTIONS = -Wno-override all: all-am .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(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 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: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: 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 -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__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_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.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 $(distdir)/_build/sub $(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/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(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__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile installdirs: 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-local mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local 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 $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am am--refresh check check-am clean clean-generic \ clean-local cscopelist-am ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-local \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local 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 pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am .PRECIOUS: Makefile .PHONY: libfizmo libcellif libsndifsdl2 libdrilbo libglkif \ fizmo-console fizmo-ncursesw fizmo-glktermw # default target all: fizmo-ncursesw fizmo-console $(OPTIONAL_FIZMO_BUILDS) # fizmo libraries libfizmo: cd libfizmo ; \ $(MAKE) install-dev libcellif: libfizmo cd libcellif ; \ $(MAKE) install-dev libsndifsdl2: libfizmo cd libsndifsdl2 ; \ $(MAKE) install-dev libdrilbo: libfizmo cd libdrilbo ; \ $(MAKE) install-dev libglkif: libfizmo cd libglkif ; \ $(MAKE) install-dev # fizmo frontends fizmo-console: libfizmo cd fizmo-console ; \ $(MAKE) fizmo-ncursesw: libfizmo libcellif libdrilbo $(OPTIONAL_SOUND_BUILD) cd fizmo-ncursesw ; \ $(MAKE) fizmo-glktermw: libfizmo libglkif cd fizmo-glktermw ; \ $(MAKE) # install targets install-data-local-libsndifsdl2: libsndifsdl2 cd libsndifsdl2 ; $(MAKE) install-data-local install-data-local: libfizmo libcellif libdrilbo \ $(OPTIONAL_SOUND_INSTALL_DATA_LOCAL) cd libfizmo ; $(MAKE) install-data-local cd libcellif ; $(MAKE) install-data-local cd libdrilbo ; $(MAKE) install-data-local install-fizmo-console: fizmo-console cd fizmo-console ; $(MAKE) install install-fizmo-ncursesw: fizmo-ncursesw cd fizmo-ncursesw ; $(MAKE) install ; $(MAKE) install-data-local install-fizmo-glktermw: fizmo-glktermw cd libglkif ; $(MAKE) install-data-local cd fizmo-glktermw ; $(MAKE) install install: install-data-local install-fizmo-console install-fizmo-ncursesw \ $(OPTIONAL_FIZMO_INSTALLS) # clean targets clean-local: $(OPTIONAL_FIZMO_CLEANS) cd libfizmo ; $(MAKE) clean cd libcellif ; $(MAKE) clean cd libdrilbo ; $(MAKE) clean cd fizmo-console ; $(MAKE) clean cd fizmo-ncursesw ; $(MAKE) clean rm -rf $(DEV_BUILD_PREFIX) clean-fizmo-glktermw: fizmo-glktermw cd libglkif ; $(MAKE) clean ; $(MAKE) clean-dev cd fizmo-glktermw ; $(MAKE) clean clean-libsndifsdl2: cd libsndifsdl2 ; $(MAKE) clean ; $(MAKE) clean-dev # distclean targets distclean-local: $(OPTIONAL_FIZMO_DISTCLEANS) cd libfizmo ; $(MAKE) distclean cd libcellif ; $(MAKE) distclean cd libdrilbo ; $(MAKE) distclean cd fizmo-console ; $(MAKE) distclean cd fizmo-ncursesw ; $(MAKE) distclean distclean-fizmo-glktermw: fizmo-glktermw cd libglkif ; $(MAKE) distclean cd fizmo-glktermw ; $(MAKE) distclean distclean-libsndifsdl2: cd libsndifsdl2 ; $(MAKE) distclean # 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: fizmo-0.7.10/missing000755 000765 000024 00000015330 12606024550 015261 0ustar00chrenderstaff000000 000000 #! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written 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 case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man 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 # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # 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: fizmo-0.7.10/README-0.7.txt000644 000765 000024 00000005560 12606024551 015667 0ustar00chrenderstaff000000 000000 USER-RELEVANT CHANGES FROM 0.6 TO 0.7 - In order to be able to support language-specific hyphenation patterns, the file format for the story-list has been changed. Thus, after upgrading from fizmo 0.6 to 0.7 you'll have to remove the old file and make fizmo re-index your current list automatically from the $ZCODE_ROOT_PATH and $ZCODE_PATH or $INFOCOM_PATH: “rm $HOME/.config/fizmo/story-list.txt ; fizmo-ncursesw --update-story- list” - Since frontispiece display is now in a separate window instead of directly in the terminal and no longer experimental, the "enable-xterm- graphics" config option and "-x" are no longer required for X11- frontispiece display, the title image will now automatically be displayed on startup. Instead the "disable-x11-graphics" option may be used to disable frontispiece output. - By default, the frontispiece is now shown in it's own X-Window. To re- enable the old behaviour, you may use the option "enable-x11-inline- graphics", which is however still not recommended as a default setting and may still crash your X-Terminal. - Boolean variables like "dont-use-colors" don't require an explicit "yes" value anymore, simply stating the variable name in the config file is sufficient. - Configuration files may now use the $(HOME) variable. - In case the "save-text-history-paragraphs" configuration option is set to an integer value larger zero, the specified number of paragraphs from the most recent output are written into the savefile. On restore, these are written to the screen, making it easier to get an overview of the saved situation. - The default language setting is now no longer derived from the current locale setting but instead always set to en_US since most games are provided in english. The default locale may still be set using the "locale" variable in the config file. - In case there's no locale available for a game you're playing (currently everything non-english, non-german and non-french), it might make sense to disable hyphenation using either "disable-hyphenation" in the config file or using the "-dh" or "--disable-hyphenation" switch when starting fizmo-ncursesw. - The "bold-for-bright-foreground" and "blink-for-bright-background" options are no longer supported. If someone would be still actually using them, please send an e-mail to fizmo@spellbreaker.org at mailto:fizmo@spellbreaker.org. - Transcripting got a bit more configurable: The new "stream-2-line- width", "stream-2-left-margin" and "disable-stream-2-hyphenation" configuration variables control transcript behaviour and some command- line options were added to ease usage for command recording and replaying (see manpage for details). fizmo-0.7.10/README.txt000644 000765 000024 00000006515 12606024551 015366 0ustar00chrenderstaff000000 000000 ABOUT FIZMO fizmo represents a generic a Z-Machine interpreter — "fizmo interprets z- machine opcodes" — supporting all Z-Machine kinds except version 6, allowing you to run Infocom-made and most other Z-Machine based interactive fiction, also called text adventures. It also provides a generalized, plain-C interpreter library, as well as interfaces / implementations for various display and sound output methods, providing an interpreter-engine for you own project, even for closed-source implementations due to it's BSD-style license. - About Infocom and interactive fiction in general, see the "New to IF" at http://www.ifarchive.org section at the Interactive Fiction Archive. - To download Z-Machine games, see the IF-Archive's "Z-Code" at http:// www.ifarchive.org/indexes/if-archiveXgamesXzcode.html section. --- FRONTENDS Currently three frontends are available: - fizmo-ncursesw The default frontend uses ncurses "wide" variant for story output. Ncurses at http://www.gnu.org/software/ncurses/ is commonly used for output on fixed-width text displays. The wide extensions will ensure correct unicode display. - fizmo-console This frontend will simple read and write from the console / terminal. No fance functionality whatsoever, but may be useful for automization or voice output. - fizmo-glktermw An example Glk at http://en.wikipedia.org/wiki/Glk_(software) frontend. Requires glktermw — notice the trailing "w" — which may be downloaded from the GLK-Implementations at http://www.ifarchive.org/indexes/if- archiveXprogrammingXglkXimplementations.html at the Interactive Fiction archive. --- INTERFACES For developers, interfaces translate the Z-machine specific output — window management, output, scrolling and so on — into more display- specific commands, easing implementation considerably. - libcellif This interface will convert output into simple "goto-xy"- and "print"- commands, providing support for implementations on a fixed-width display. This interface is used by fizmo-ncursesw. - libglkif The GLK-interface translates Z-Machine output into GLK-specific instructions. This is used by Andrew Plotkin's iOS-fizmo at https:// github.com/erkyrath/iosfizmo/. --- LIBRARIES - libfizmo This provides the interpreter core. It is a plain-C implementation which requires no external libraries (libxml2 is used by default, but in case babel support is not needed even libxml2 is not required). - libdrilbo Provides support for jpeg, png and infocom's mg1 image reading as well as X11-based output. - libsndifsdl2 Supplies a SDL2-based sound interface. --- INSTALLATION Please see “INSTALL.txt” on how to bulid the packages. --- MISCELLANEOUS Please send bug reports (or other requests) to fizmo@spellbreaker.org at mailto:fizmo@spellbreaker.org. Fizmo was written by Christoph Ender in 2005 -- 2014. Please note: Currently fizmo is in beta status, meaning it might do unexpected things such as stop with an error message, crash or cleesh your machine into a frog. There is no warranty of any kind whatsoever and you're entirely on your own when running it. fizmo-0.7.10/user-config-example.txt000644 000765 000024 00000001541 12606024312 020270 0ustar00chrenderstaff000000 000000 # This file contains an example for a user's fizmo-config file. It must be # stored at $(HOME)/.config/fizmo/config. # -- libfizmo options #locale = en_US #locale = de_DE background-color = white foreground-color = black #disable-stream-2-hyphenation #stream-2-line-width = 78 #stream-2-left-margin = 1 #savegame-path = $(HOME)/.quetzal-savegames #transcript-filename = $(HOME)/.quetzal-savegames/transcript.txt #start-script-when-story-starts #command-filename = commands.txt #sync-transcript #z-code-path = /first_dir:second_dir #z-code-root-path = /first_dir_to_search_recursively:/second_dir #disable-sound save-text-history-paragraphs = 1000 # -- libcellif options left-margin = 1 right-margin = 1 #disable-color #disable-hyphenation # -- fizmo-ncursesw options #dont-update-story-list enable-xterm-title #disable-x11-graphics #display-x11-inline-image fizmo-0.7.10/libsndifsdl2/.git/000755 000765 000024 00000000000 12606024332 017076 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/CHANGELOG.md000644 000765 000024 00000005210 12606024332 020044 0ustar00chrenderstaff000000 000000 **Version 0.8.0 — October 9, 2015** - Implemented SDL2-compatible sound interface, forked from libsoundofsdl. Note: In case you're encountering messages from ALSA containing “snd_pcm_recover” and “underrun” errors, upgrade SDL2 to version 2.0.3. --- **Version 0.7.6 — March 19, 2014** - Fixed “AC_CONFIG_AUX_DIR” invocation. - Added “clean-dev” build target for better cleanup of installed development files, which helps debian packaging. - Fix compiler warnings. - Added missing license/copyright information. --- **Version 0.7.5 — June 5, 2013** - Renamed “install-locales” to “install-data” build target. - Adapted to new readchar function names in file system interface. --- **Version 0.7.4 — December 27, 2012** - Minor fix for libsndifsdl build target. --- **Version 0.7.3 — September 17, 2012** - Adapted to new autoconf/automake build process. --- **Version 0.7.2 — March 9, 2012** - Fixed missing $(DESTDIR) variable – should already have been present since version 0.7.1. --- **Version 0.7.1 — November 6, 2011** - Fixed missing “override” statments for CFLAGS in Makefiles. - Fixed $(DESTDIR) evaluation in config.[default|macports].mk. - Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. --- **Version 0.7.0 — September 18, 2011** - The “libsndifsdl” library has been taken out of fizmo version 0.6 and built to form a separate library. - Implemented configuration option handling. --- **Version 0.6.1 — March 30, 2009** - Implemented new ENABLE_AIFF_FOR_SOUND_SDL variable in config files. This allows the sound-sdl-interface to at least play Infocom .snd files when no libsndfile is available. --- **Version 0.6.0 — March 25, 2009** - This marks the point for the first public beta release - Implemented new “\*.snd” search method: Generalized for all files, not only Lurking Horror and Sherlock, tries upper- and lowercase. --- **Version 0.5.3 — March 11, 2009** - Re-built SDL-Sound system (implemented sound effect stack, better sound-has-finished-detection and many, many fixes). - Added support for AIFF-sounds in blorb files. --- **Version 0.5.1 — November 4, 2008** - Implemented SDL-sound-interface. To make SDL work in Mac OS X I've used MacPorts to install SDL (“port install libsdl”), on Debian I've been using “apt-get install libsdl-sound1.2-dev” (maybe “apt-get install alsa-base alsa-utils” is also required). - Added “snd2aiff” commandline utility (this was the basis for the first sound interface experiments). fizmo-0.7.10/libsndifsdl2/config-conds.m4000644 000765 000024 00000000117 12606024332 021047 0ustar00chrenderstaff000000 000000 AM_CONDITIONAL([ENABLE_AIFF], [test "$enable_aiff" != "no"]) fizmo-0.7.10/libsndifsdl2/config-flags.m4000644 000765 000024 00000000274 12606024332 021041 0ustar00chrenderstaff000000 000000 AC_ARG_ENABLE([aiff], [AS_HELP_STRING([--disable-aiff], [disable AIFF compatibility in case libsndfile is not \ available])], [], [enable_aiff=yes]) fizmo-0.7.10/libsndifsdl2/config-libs.m4000644 000765 000024 00000000227 12606024332 020674 0ustar00chrenderstaff000000 000000 PKG_CHECK_MODULES([sdl2], [sdl2]) AS_IF([test "x$enable_aiff" != "xno"], [ PKG_CHECK_MODULES([sndfile], [sndfile]) libsndif_reqs+=", sndfile" ]) fizmo-0.7.10/libsndifsdl2/config-subst.m4000644 000765 000024 00000001131 12606024332 021076 0ustar00chrenderstaff000000 000000 # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. # Changes in this file have to be mirrored in the corresponding frontend # "config-subst-libsndifsdl2.m4" files. AC_SUBST([SOUND_INTERFACE_NAME], libsndifsdl2) AC_SUBST([SOUND_INTERFACE_STRUCT_NAME], sound_interface_sdl2) AC_SUBST([SOUND_INTERFACE_CONFIGNAME], SOUNDSDL2) AC_SUBST([SOUND_INTERFACE_INCLUDE_FILE], sound_sdl2/sound_sdl2.h) fizmo-0.7.10/libsndifsdl2/configure.ac000644 000765 000024 00000004256 12606024332 020532 0ustar00chrenderstaff000000 000000 # configure.ac # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AC_ARG_ENABLE([tracing], [AS_HELP_STRING([--enable-tracing], [enable tracelog for debugging])], [], [enable_tracing=no]) m4_include(config-flags.m4) AC_INIT( [libsndifsdl2], [0.8.0], fizmo@spellbreaker.org, libsndifsdl2) AC_CONFIG_AUX_DIR([.]) libsndif_reqs="sdl2" PKG_CHECK_MODULES([libfizmo], [libfizmo >= 0.7.7]) m4_include(config-libs.m4) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_PROG_CC AC_PROG_RANLIB AM_PROG_AR AC_SUBST([DEV_BUILD_PREFIX], "$DESTDIR$prefix") AC_SUBST([LIBSNDIFSDL2_REQS], $libsndif_reqs) AM_CONDITIONAL([ENABLE_TRACING], [test "$enable_tracing" = "yes"]) m4_include(config-conds.m4) AC_CONFIG_FILES([Makefile src/sound_sdl2/Makefile]) AC_OUTPUT fizmo-0.7.10/libsndifsdl2/COPYRIGHT.md000644 000765 000024 00000002571 12606024332 020134 0ustar00chrenderstaff000000 000000 Copyright (c) 2009-2015 Christoph Ender All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. fizmo-0.7.10/libsndifsdl2/doc/000755 000765 000024 00000000000 12606024332 017002 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/Makefile.am000644 000765 000024 00000006571 12606024332 020302 0ustar00chrenderstaff000000 000000 # Makfile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AUTOMAKE_OPTIONS = -Wno-override localedir = $(datarootdir)/fizmo/locales fizmo_build_prefix=$(DEV_BUILD_PREFIX) PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig PKGFILE = $(PKG_DIR)/libsndifsdl2.pc SUBDIRS = src/sound_sdl2 . noinst_LIBRARIES = libsndifsdl2.a libsndifsdl2.a:: cd src/sound_sdl2 ; make mv src/sound_sdl2/libsndifsdl2.a . # Note: When chancing Cflags or Libs below, also update "fizmo-dist"'s # Makefile.am accordingly. install-dev:: libsndifsdl2.a mkdir -p $(fizmo_build_prefix)/lib/fizmo cp libsndifsdl2.a $(fizmo_build_prefix)/lib/fizmo mkdir -p $(fizmo_build_prefix)/include/fizmo/sound_sdl2 cp src/sound_sdl2/sound_sdl2.h \ $(fizmo_build_prefix)/include/fizmo/sound_sdl2 mkdir -p $(PKG_DIR) echo 'prefix=$(fizmo_build_prefix)' >$(PKGFILE) echo 'exec_prefix=$${prefix}' >>$(PKGFILE) echo 'libdir=$${exec_prefix}/lib/fizmo' >>$(PKGFILE) echo 'includedir=$${prefix}/include/fizmo' >>$(PKGFILE) echo >>$(PKGFILE) echo 'Name: libsndifsdl2' >>$(PKGFILE) echo 'Description: libsndifsdl2' >>$(PKGFILE) echo 'Version: 0.8.0' >>$(PKGFILE) echo 'Requires: libfizmo >= 0.7.7, $(LIBSNDIFSDL2_REQS)' >>$(PKGFILE) echo 'Requires.private:' >>$(PKGFILE) echo 'Cflags: -I$(fizmo_build_prefix)/include/fizmo $(SOUNDSDL2_NONPKG_CFLAGS)' >>$(PKGFILE) echo 'Libs: -L$(fizmo_build_prefix)/lib/fizmo -lsndifsdl2 $(SOUNDSDL2_PKG_LIBS)' >>$(PKGFILE) echo >>$(PKGFILE) install-data-local: # About "-rmdir": make ignores errors of commands which are prefixed with # a - sign. rmdir may fail in clean-dev in case other libs have installed # development files, or in case clean-dev has been run before. clean-dev:: -rm "$(fizmo_build_prefix)/lib/fizmo/libsndifsdl2.a" -rmdir "$(fizmo_build_prefix)/lib/fizmo" -rm -rf "$(fizmo_build_prefix)/include/fizmo/sound_sdl2" -rmdir "$(fizmo_build_prefix)/include/fizmo" -rmdir "$(fizmo_build_prefix)/include" -rm "$(PKGFILE)" -rmdir "$(PKG_DIR)" -rmdir "$(fizmo_build_prefix)/lib" fizmo-0.7.10/libsndifsdl2/Makefile.in000644 000765 000024 00000063216 12606024550 020314 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makfile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : subdir = libsndifsdl2 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libsndifsdl2_a_AR = $(AR) $(ARFLAGS) libsndifsdl2_a_LIBADD = libsndifsdl2_a_SOURCES = libsndifsdl2.c libsndifsdl2_a_OBJECTS = libsndifsdl2.$(OBJEXT) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = libsndifsdl2.c DIST_SOURCES = libsndifsdl2.c RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = $(datarootdir)/fizmo/locales localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AUTOMAKE_OPTIONS = -Wno-override fizmo_build_prefix = $(DEV_BUILD_PREFIX) PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig PKGFILE = $(PKG_DIR)/libsndifsdl2.pc SUBDIRS = src/sound_sdl2 . noinst_LIBRARIES = libsndifsdl2.a all: all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 libsndifsdl2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libsndifsdl2/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsndifsdl2.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 @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 check-am: all-am check: check-recursive all-am: Makefile $(LIBRARIES) installdirs: installdirs-recursive installdirs-am: 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: 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-recursive clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: 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 -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-noinstLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local 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 installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile libsndifsdl2.a:: cd src/sound_sdl2 ; make mv src/sound_sdl2/libsndifsdl2.a . # Note: When chancing Cflags or Libs below, also update "fizmo-dist"'s # Makefile.am accordingly. install-dev:: libsndifsdl2.a mkdir -p $(fizmo_build_prefix)/lib/fizmo cp libsndifsdl2.a $(fizmo_build_prefix)/lib/fizmo mkdir -p $(fizmo_build_prefix)/include/fizmo/sound_sdl2 cp src/sound_sdl2/sound_sdl2.h \ $(fizmo_build_prefix)/include/fizmo/sound_sdl2 mkdir -p $(PKG_DIR) echo 'prefix=$(fizmo_build_prefix)' >$(PKGFILE) echo 'exec_prefix=$${prefix}' >>$(PKGFILE) echo 'libdir=$${exec_prefix}/lib/fizmo' >>$(PKGFILE) echo 'includedir=$${prefix}/include/fizmo' >>$(PKGFILE) echo >>$(PKGFILE) echo 'Name: libsndifsdl2' >>$(PKGFILE) echo 'Description: libsndifsdl2' >>$(PKGFILE) echo 'Version: 0.8.0' >>$(PKGFILE) echo 'Requires: libfizmo >= 0.7.7, $(LIBSNDIFSDL2_REQS)' >>$(PKGFILE) echo 'Requires.private:' >>$(PKGFILE) echo 'Cflags: -I$(fizmo_build_prefix)/include/fizmo $(SOUNDSDL2_NONPKG_CFLAGS)' >>$(PKGFILE) echo 'Libs: -L$(fizmo_build_prefix)/lib/fizmo -lsndifsdl2 $(SOUNDSDL2_PKG_LIBS)' >>$(PKGFILE) echo >>$(PKGFILE) install-data-local: # About "-rmdir": make ignores errors of commands which are prefixed with # a - sign. rmdir may fail in clean-dev in case other libs have installed # development files, or in case clean-dev has been run before. clean-dev:: -rm "$(fizmo_build_prefix)/lib/fizmo/libsndifsdl2.a" -rmdir "$(fizmo_build_prefix)/lib/fizmo" -rm -rf "$(fizmo_build_prefix)/include/fizmo/sound_sdl2" -rmdir "$(fizmo_build_prefix)/include/fizmo" -rmdir "$(fizmo_build_prefix)/include" -rm "$(PKGFILE)" -rmdir "$(PKG_DIR)" -rmdir "$(fizmo_build_prefix)/lib" # 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: fizmo-0.7.10/libsndifsdl2/src/000755 000765 000024 00000000000 12606024332 017024 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/src/sound_sdl2/000755 000765 000024 00000000000 12606024550 021102 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/src/sound_sdl2/Makefile.am000644 000765 000024 00000003513 12606024332 023136 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AM_CFLAGS = $(libfizmo_CFLAGS) $(sdl2_CFLAGS) $(sndfile_CFLAGS) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) $(sdl2_LIBS) $(sndfile_LIBS) localedir = $(datarootdir)/fizmo/locales noinst_LIBRARIES = libsndifsdl2.a libsndifsdl2_a_SOURCES = sound_sdl2.c if ENABLE_TRACING AM_CFLAGS += -DENABLE_TRACING= endif if ENABLE_AIFF AM_CFLAGS += -DENABLE_AIFF_FOR_SOUND_SDL2= endif fizmo-0.7.10/libsndifsdl2/src/sound_sdl2/Makefile.in000644 000765 000024 00000050327 12606024550 023156 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : @ENABLE_TRACING_TRUE@am__append_1 = -DENABLE_TRACING= @ENABLE_AIFF_TRUE@am__append_2 = -DENABLE_AIFF_FOR_SOUND_SDL2= subdir = libsndifsdl2/src/sound_sdl2 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libsndifsdl2_a_AR = $(AR) $(ARFLAGS) libsndifsdl2_a_LIBADD = am_libsndifsdl2_a_OBJECTS = sound_sdl2.$(OBJEXT) libsndifsdl2_a_OBJECTS = $(am_libsndifsdl2_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libsndifsdl2_a_SOURCES) DIST_SOURCES = $(libsndifsdl2_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = $(datarootdir)/fizmo/locales localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AM_CFLAGS = $(libfizmo_CFLAGS) $(sdl2_CFLAGS) $(sndfile_CFLAGS) \ $(am__append_1) $(am__append_2) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) $(sdl2_LIBS) $(sndfile_LIBS) noinst_LIBRARIES = libsndifsdl2.a libsndifsdl2_a_SOURCES = sound_sdl2.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 libsndifsdl2/src/sound_sdl2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libsndifsdl2/src/sound_sdl2/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libsndifsdl2.a: $(libsndifsdl2_a_OBJECTS) $(libsndifsdl2_a_DEPENDENCIES) $(EXTRA_libsndifsdl2_a_DEPENDENCIES) $(AM_V_at)-rm -f libsndifsdl2.a $(AM_V_AR)$(libsndifsdl2_a_AR) libsndifsdl2.a $(libsndifsdl2_a_OBJECTS) $(libsndifsdl2_a_LIBADD) $(AM_V_at)$(RANLIB) libsndifsdl2.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound_sdl2.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 $(LIBRARIES) 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-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-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 -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic 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-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile # 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: fizmo-0.7.10/libsndifsdl2/src/sound_sdl2/sound_sdl2.c000644 000765 000024 00000100310 12606024332 023313 0ustar00chrenderstaff000000 000000 /* sound_sdl2.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #define _POSIX_C_SOURCE 1 #define _XOPEN_SOURCE 1 #ifndef sound_sdl2_c_INCLUDED #define sound_sdl2_c_INCLUDED #include #include #include #include #include #include #include #include #ifdef ENABLE_AIFF_FOR_SOUND_SDL2 #include "sndfile.h" #endif // ENABLE_AIFF_FOR_SOUND_SDL2 #include "sound_interface/sound_interface.h" #include "tools/tracelog.h" #include "tools/unused.h" #include "tools/filesys.h" #include "interpreter/zpu.h" #include "interpreter/config.h" #include "interpreter/fizmo.h" #include "interpreter/streams.h" #include "interpreter/blorb.h" #include "sound_sdl2.h" #define TONE_880_HZ_SAMPLE_SIZE 400 #define TONE_880_HZ_REPEATS 8 #define TONE_330_HZ_SAMPLE_SIZE 800 #define TONE_330_HZ_REPEATS 6 #define AIFF_INPUT_BUFFER_SIZE 4096 #define SND_INPUT_BUFFER_SIZE 4096 static char *sdl2_interface_name = "libsdl2sound"; static char *sdl2_interface_version = "0.8.0"; struct sound_effect { Uint8 *data; int nof_frames; bool is_internal_effect; int nof_channels; int freq; int nof_repeats; int sound_volume; uint16_t routine_after_playback; }; static uint16_t *routine_stack = NULL; static int routine_stack_top_element = -1; static int routine_stack_size = 0; static struct sound_effect **sdl_sound_effect_fifo = NULL; static int sound_effect_top_element = -1; static int sound_effect_fifo_size = 0; static struct sound_effect *current_effect; static bool is_audio_open = false; static bool sound_output_active = false; static SDL_mutex *sound_output_active_mutex; static bool sound_init_performed = false; static SDL_Thread *effect_thread = NULL; static bool stop_effect_thread = false; static char *sdl_file_prefix = NULL; static char *sdl_file_prefix_lower = NULL; static char *sdl_file_prefix_upper = NULL; static char *sdl_directory_name = NULL; static long current_data_index; static char *sdl_snd_filename; static bool read_has_occurred = true; static bool flush_sound_effect_stack = false; static SDL_AudioDeviceID sdl_audio_device_id = -1; static SDL_TimerID sdl_finish_timer = -1; static SDL_AudioSpec current_audio_spec; static Uint8 *tone880hz_buf = NULL; static Uint8 *tone330hz_buf = NULL; static int aiff_input_buffer[AIFF_INPUT_BUFFER_SIZE]; static Uint8 snd_input_buffer[SND_INPUT_BUFFER_SIZE]; Uint8 tone880hz[] = { 0xfa, 0xf7, 0xbe, 0x68, 0x1d, 0x00, 0x1d, 0x68, 0xbe, 0xf7, 0xfa, 0xc5, 0x70, 0x23, 0x00, 0x18, 0x60, 0xb6, 0xf4, 0xfc, 0xcb, 0x78, 0x29, 0x01, 0x14, 0x59, 0xaf, 0xf0, 0xfe, 0xd2, 0x80, 0x2e, 0x02, 0x10, 0x51, 0xa8, 0xec, 0xff, 0xd8, 0x88, 0x35, 0x04, 0x0c, 0x4a, 0xa0, 0xe7, 0xff, 0xde, 0x90, 0x3c, 0x07, 0x09, 0x43, 0x98, 0xe2, 0xff, 0xe3, 0x98, 0x42, 0x09, 0x06, 0x3b, 0x90, 0xdd, 0xff, 0xe8, 0xa0, 0x49, 0x0c, 0x04, 0x35, 0x88, 0xd7, 0xff, 0xec, 0xa7, 0x51, 0x10, 0x02, 0x2e, 0x80, 0xd2, 0xfd, 0xf0, 0xb0, 0x59, 0x14, 0x01, 0x28, 0x78, 0xcb, 0xfc, 0xf4, 0xb6, 0x60, 0x19, 0x00, 0x23, 0x70, 0xc5, 0xfa, 0xf7, 0xbe, 0x68, 0x1d, 0x00, 0x1d, 0x68, 0xbe, 0xf7, 0xfa, 0xc4, 0x70, 0x23, 0x00, 0x18, 0x60, 0xb6, 0xf3, 0xfc, 0xcb, 0x78, 0x29, 0x01, 0x14, 0x59, 0xaf, 0xf0, 0xfe, 0xd2, 0x80, 0x2e, 0x02, 0x10, 0x51, 0xa7, 0xec, 0xff, 0xd8, 0x88, 0x35, 0x04, 0x0c, 0x4a, 0xa0, 0xe7, 0xff, 0xdd, 0x90, 0x3b, 0x06, 0x09, 0x42, 0x98, 0xe3, 0xff, 0xe3, 0x98, 0x42, 0x09, 0x07, 0x3c, 0x90, 0xdd, 0xff, 0xe8, 0xa0, 0x4a, 0x0c, 0x04, 0x35, 0x88, 0xd8, 0xff, 0xec, 0xa8, 0x51, 0x10, 0x02, 0x2e, 0x80, 0xd1, 0xfe, 0xf0, 0xaf, 0x58, 0x14, 0x01, 0x28, 0x78, 0xcb, 0xfc, 0xf4, 0xb6, 0x60, 0x18, 0x00, 0x23, 0x70, 0xc5, 0xfa, 0xf7, 0xbd, 0x68, 0x1d, 0x00, 0x1d, 0x68, 0xbe, 0xf7, 0xfa, 0xc5, 0x70, 0x23, 0x00, 0x18, 0x60, 0xb7, 0xf4, 0xfc, 0xcb, 0x78, 0x28, 0x01, 0x14, 0x58, 0xaf, 0xf0, 0xfe, 0xd2, 0x80, 0x2e, 0x03, 0x10, 0x50, 0xa7, 0xec, 0xff, 0xd8, 0x88, 0x35, 0x04, 0x0c, 0x49, 0xa0, 0xe7, 0xff, 0xdd, 0x90, 0x3b, 0x06, 0x09, 0x43, 0x98, 0xe3, 0xff, 0xe3, 0x98, 0x42, 0x09, 0x06, 0x3b, 0x90, 0xdd, 0xff, 0xe8, 0x9f, 0x4a, 0x0c, 0x04, 0x35, 0x88, 0xd8, 0xff, 0xec, 0xa7, 0x51, 0x10, 0x02, 0x2f, 0x80, 0xd1, 0xfe, 0xf0, 0xaf, 0x58, 0x14, 0x01, 0x29, 0x78, 0xcc, 0xfc, 0xf4, 0xb6, 0x60, 0x19, 0x00, 0x23, 0x70, 0xc5, 0xfa, 0xf7, 0xbe, 0x68, 0x1d, 0x00, 0x1d, 0x68, 0xbe, 0xf7, 0xf9, 0xc5, 0x70, 0x22, 0x00, 0x19, 0x60, 0xb6, 0xf4, 0xfc, 0xcb, 0x78, 0x29, 0x01, 0x14, 0x58, 0xaf, 0xf0, 0xfd, 0xd2, 0x80, 0x2e, 0x03, 0x10, 0x51, 0xa8, 0xec, 0xff, 0xd7, 0x88, 0x35, 0x04, 0x0c, 0x4a, 0xa0, 0xe7, 0xff, 0xdd, 0x90, 0x3b, 0x07, 0x09, 0x42, 0x98, 0xe3, 0xff, 0xe2, 0x98, 0x42, 0x09, 0x06, 0x3b, 0x90, 0xde, 0xff, 0xe7, 0xa0, 0x4a, 0x0c, 0x04, 0x35, 0x88, 0xd8, 0xff, 0xec, 0xa7, 0x51, 0x10, 0x03, 0x2f, 0x80, 0xd2, 0xfe, 0xf0, 0xaf, 0x58, 0x14, 0x01, 0x28, 0x78, 0xcb, 0xfc, 0xf4, 0xb7, 0x60, 0x18, 0x00, 0x23, 0x70, 0xc5 }; Uint8 tone330hz[] = { 0xee, 0xfb, 0xff, 0xfc, 0xf0, 0xdd, 0xc3, 0xa5, 0x84, 0x63, 0x44, 0x29, 0x14, 0x06, 0x00, 0x03, 0x0e, 0x21, 0x3a, 0x57, 0x78, 0x99, 0xb8, 0xd4, 0xea, 0xf9, 0xff, 0xfe, 0xf4, 0xe2, 0xca, 0xac, 0x8c, 0x6b, 0x4b, 0x2f, 0x18, 0x09, 0x01, 0x01, 0x0b, 0x1c, 0x33, 0x50, 0x70, 0x91, 0xb1, 0xce, 0xe5, 0xf6, 0xff, 0xff, 0xf7, 0xe7, 0xd0, 0xb4, 0x94, 0x73, 0x53, 0x36, 0x1d, 0x0c, 0x02, 0x01, 0x08, 0x17, 0x2d, 0x48, 0x68, 0x89, 0xaa, 0xc7, 0xe0, 0xf2, 0xfe, 0xff, 0xfa, 0xeb, 0xd6, 0xbb, 0x9c, 0x7b, 0x5a, 0x3c, 0x22, 0x10, 0x03, 0x00, 0x05, 0x12, 0x27, 0x41, 0x60, 0x81, 0xa2, 0xc0, 0xda, 0xef, 0xfb, 0xff, 0xfc, 0xf0, 0xdc, 0xc2, 0xa4, 0x83, 0x62, 0x44, 0x28, 0x14, 0x06, 0x00, 0x03, 0x0f, 0x21, 0x3a, 0x58, 0x79, 0x9a, 0xb9, 0xd5, 0xea, 0xf9, 0xff, 0xfe, 0xf3, 0xe1, 0xc9, 0xab, 0x8b, 0x6a, 0x4a, 0x2e, 0x18, 0x08, 0x01, 0x01, 0x0b, 0x1c, 0x34, 0x51, 0x71, 0x92, 0xb2, 0xce, 0xe6, 0xf6, 0xff, 0xff, 0xf6, 0xe7, 0xcf, 0xb3, 0x93, 0x72, 0x52, 0x34, 0x1d, 0x0b, 0x02, 0x01, 0x08, 0x18, 0x2d, 0x49, 0x69, 0x8a, 0xaa, 0xc8, 0xe1, 0xf3, 0xfe, 0xff, 0xf9, 0xeb, 0xd6, 0xba, 0x9b, 0x7a, 0x59, 0x3c, 0x22, 0x0f, 0x03, 0x00, 0x05, 0x13, 0x28, 0x42, 0x61, 0x82, 0xa3, 0xc1, 0xdb, 0xef, 0xfc, 0xff, 0xfb, 0xef, 0xdb, 0xc1, 0xa3, 0x82, 0x61, 0x42, 0x28, 0x13, 0x05, 0x00, 0x03, 0x0f, 0x22, 0x3b, 0x5a, 0x7a, 0x9b, 0xba, 0xd5, 0xeb, 0xfa, 0xff, 0xfe, 0xf3, 0xe0, 0xc8, 0xaa, 0x8a, 0x69, 0x4a, 0x2d, 0x17, 0x08, 0x01, 0x02, 0x0c, 0x1d, 0x35, 0x52, 0x72, 0x93, 0xb3, 0xcf, 0xe6, 0xf6, 0xff, 0xff, 0xf6, 0xe6, 0xce, 0xb2, 0x92, 0x71, 0x51, 0x34, 0x1c, 0x0b, 0x02, 0x01, 0x09, 0x18, 0x2f, 0x4b, 0x6a, 0x8b, 0xab, 0xc9, 0xe2, 0xf4, 0xfe, 0xff, 0xf9, 0xeb, 0xd5, 0xb9, 0x9a, 0x79, 0x58, 0x3a, 0x21, 0x0e, 0x03, 0x00, 0x06, 0x13, 0x29, 0x43, 0x62, 0x83, 0xa4, 0xc2, 0xdc, 0xf0, 0xfc, 0xff, 0xfc, 0xee, 0xda, 0xc1, 0xa2, 0x81, 0x60, 0x42, 0x27, 0x12, 0x05, 0x00, 0x03, 0x0f, 0x22, 0x3c, 0x5a, 0x7b, 0x9c, 0xbb, 0xd6, 0xeb, 0xfa, 0xff, 0xfd, 0xf3, 0xe0, 0xc7, 0xa9, 0x89, 0x68, 0x49, 0x2d, 0x17, 0x07, 0x00, 0x02, 0x0c, 0x1d, 0x36, 0x53, 0x73, 0x94, 0xb4, 0xd0, 0xe7, 0xf7, 0xff, 0xff, 0xf6, 0xe5, 0xce, 0xb1, 0x91, 0x70, 0x50, 0x33, 0x1c, 0x0a, 0x02, 0x01, 0x09, 0x18, 0x2f, 0x4b, 0x6b, 0x8c, 0xac, 0xc9, 0xe2, 0xf4, 0xfe, 0xff, 0xf9, 0xea, 0xd4, 0xb8, 0x99, 0x78, 0x58, 0x3a, 0x21, 0x0e, 0x03, 0x00, 0x06, 0x14, 0x29, 0x44, 0x63, 0x84, 0xa4, 0xc3, 0xdd, 0xf0, 0xfc, 0xff, 0xfb, 0xee, 0xda, 0xbf, 0xa1, 0x80, 0x5f, 0x40, 0x26, 0x12, 0x05, 0x00, 0x04, 0x10, 0x24, 0x3d, 0x5c, 0x7c, 0x9d, 0xbc, 0xd7, 0xec, 0xfa, 0xff, 0xfd, 0xf2, 0xdf, 0xc7, 0xa9, 0x88, 0x67, 0x47, 0x2c, 0x16, 0x07, 0x01, 0x02, 0x0c, 0x1e, 0x36, 0x54, 0x74, 0x95, 0xb5, 0xd1, 0xe8, 0xf7, 0xff, 0xff, 0xf5, 0xe5, 0xcd, 0xb0, 0x90, 0x6f, 0x4f, 0x32, 0x1b, 0x0a, 0x01, 0x01, 0x09, 0x19, 0x30, 0x4d, 0x6c, 0x8d, 0xad, 0xcb, 0xe3, 0xf4, 0xfe, 0xff, 0xf8, 0xe9, 0xd3, 0xb7, 0x98, 0x77, 0x56, 0x39, 0x20, 0x0e, 0x03, 0x00, 0x06, 0x15, 0x2a, 0x45, 0x64, 0x85, 0xa6, 0xc3, 0xdd, 0xf1, 0xfc, 0xff, 0xfb, 0xed, 0xd9, 0xbf, 0xa0, 0x7f, 0x5e, 0x3f, 0x25, 0x11, 0x04, 0x00, 0x04, 0x10, 0x24, 0x3e, 0x5c, 0x7d, 0x9e, 0xbd, 0xd8, 0xed, 0xfa, 0xff, 0xfd, 0xf1, 0xdf, 0xc5, 0xa8, 0x87, 0x66, 0x46, 0x2c, 0x16, 0x07, 0x00, 0x02, 0x0c, 0x1e, 0x37, 0x55, 0x75, 0x96, 0xb6, 0xd2, 0xe8, 0xf8, 0xff, 0xfe, 0xf5, 0xe4, 0xcd, 0xaf, 0x90, 0x6e, 0x4e, 0x31, 0x1a, 0x0a, 0x01, 0x01, 0x09, 0x1a, 0x31, 0x4d, 0x6d, 0x8e, 0xae, 0xcb, 0xe3, 0xf5, 0xfe, 0xff, 0xf8, 0xe9, 0xd2, 0xb7, 0x97, 0x76, 0x56, 0x38, 0x1f, 0x0d, 0x02, 0x00, 0x07, 0x15, 0x2b, 0x46, 0x65, 0x86, 0xa6, 0xc5, 0xde, 0xf1, 0xfd, 0xff, 0xfb, 0xed, 0xd8, 0xbe, 0x9f, 0x7e, 0x5d, 0x3f, 0x24, 0x11, 0x04, 0x00, 0x04, 0x11, 0x25, 0x3f, 0x5d, 0x7e, 0x9e, 0xbd, 0xd8, 0xed, 0xfb, 0xff, 0xfc, 0xf1, 0xde, 0xc5, 0xa7, 0x86, 0x65, 0x46, 0x2b, 0x15, 0x06, 0x00, 0x02, 0x0d, 0x1f, 0x38, 0x56, 0x76, 0x97, 0xb7, 0xd2, 0xe9, 0xf8, 0xff, 0xfe, 0xf4, 0xe3, 0xcb, 0xae, 0x8e, 0x6d, 0x4d, 0x31, 0x1a, 0x0a, 0x01, 0x01, 0x0a, 0x1a, 0x32, 0x4e, 0x6e, 0x8f, 0xaf, 0xcc, 0xe4, 0xf5, 0xfe, 0xff, 0xf7, 0xe8, 0xd2, 0xb6, 0x96, 0x75, 0x55, 0x37, 0x1e, 0x0d, 0x02, 0x00, 0x07, 0x16, 0x2b, 0x47, 0x66, 0x87, 0xa8, 0xc5, 0xdf, 0xf2, 0xfd, 0xff, 0xfa, 0xed, 0xd7, 0xbd, 0x9e, 0x7d, 0x5c, 0x3e, 0x24, 0x11, 0x04, 0x00, 0x04, 0x11, 0x25, 0x40, 0x5e, 0x7f, 0xa0, 0xbf, 0xd9, 0xee, 0xfb, 0xff, 0xfd, 0xf1, 0xdd, 0xc4, 0xa6, 0x85, 0x64, 0x45, 0x2a, 0x14, 0x06, 0x00, 0x03, 0x0e, 0x20, 0x39, 0x57, 0x77, 0x98, 0xb7, 0xd3, 0xe9, 0xf9, 0xff, 0xfe, 0xf4, 0xe2, 0xca, 0xad, 0x8d, 0x6c, 0x4c, 0x30, 0x19, 0x09, 0x01, 0x01, 0x0a, 0x1b, 0x32, 0x4f, 0x6f, 0x90, 0xb0, 0xcd, 0xe4, 0xf5, 0xff, 0xff, 0xf8, 0xe8, 0xd1, 0xb5, 0x95, 0x74, 0x54, 0x37, 0x1e, 0x0c, 0x02, 0x01, 0x08, 0x16, 0x2c, 0x48, 0x67, 0x88, 0xa9, 0xc6, 0xe0, 0xf2, 0xfd, 0xff, 0xfa, 0xec, 0xd7, 0xbc, 0x9d, 0x7c, 0x5b, 0x3d, 0x23, 0x10, 0x04, 0x00, 0x05, 0x12, 0x27, 0x40, 0x5f, 0x80, 0xa1, 0xbf, 0xda }; static void clear_all_effects_from_stack() { int i; for (i=sound_effect_top_element; i>=0; i--) if (sdl_sound_effect_fifo[i]->is_internal_effect == false) free(sdl_sound_effect_fifo[i]->data); sound_effect_top_element = -1; } static void clear_current_effect_from_stack() { //SDL_TimerID timer_to_terminate; TRACE_LOG("\n\n[sound]Clearing current effect from stack.\n\n"); if (sdl_finish_timer != -1) { SDL_RemoveTimer(sdl_finish_timer); } if (current_effect->is_internal_effect == false) free(current_effect->data); memmove( sdl_sound_effect_fifo, sdl_sound_effect_fifo + 1, sizeof(struct sound_effect*) * sound_effect_top_element); sound_effect_top_element--; } static Uint32 sdl_effect_finished(Uint32 UNUSED(interval), void* UNUSED(param)) { TRACE_LOG("\n\n[sound]effect finished on timer.\n\n"); SDL_mutexP(sound_output_active_mutex); sdl_finish_timer = -1; TRACE_LOG("\n\n[sound]effect finished(%d).\n\n", sound_effect_top_element); SDL_PauseAudioDevice(sdl_audio_device_id, 1); if (current_effect->routine_after_playback != 0) { routine_stack_top_element++; if (routine_stack_top_element == routine_stack_size) { routine_stack_size += 4; routine_stack = (uint16_t*)fizmo_realloc( routine_stack, routine_stack_size * sizeof(uint16_t)); } routine_stack[routine_stack_top_element] = current_effect->routine_after_playback; TRACE_LOG("[sound]routine_stack[%d] = %d.\n", routine_stack_top_element, current_effect->routine_after_playback); } clear_current_effect_from_stack(); sound_output_active = false; SDL_mutexV(sound_output_active_mutex); // We can't simply start a new sound directly from here, since a new // sound may have a new sample rate and setting a new sample rate // requires a SDL_OpenAudio call, which requires a SDL_CloseAudio // beforehand, which can't be issued from inside this callback routine. TRACE_LOG("\n\n[sound]alarm-callback call quit (effect finished).\n\n"); SDL_mutexV(sound_output_active_mutex); return 0; } void mixaudio(void *UNUSED(unused), Uint8 *stream, int len) { Uint32 interval; int size_to_process, remaining_size; //Uint8 *dest_index; TRACE_LOG("\n\n[sound]mixaudio call.\n\n"); SDL_memset(stream, 0, len); while ( (current_effect->nof_repeats != 0) && (len > 0) ) { remaining_size = current_effect->nof_frames * sizeof(int) * current_effect->nof_channels - current_data_index; size_to_process = len < remaining_size ? len : remaining_size; TRACE_LOG("\n\n[sound]repeats: %d, len:%d, size_to_process:%d, vol:%d.\n\n", current_effect->nof_repeats, len, size_to_process, current_effect->sound_volume); TRACE_LOG("\n\n[sound]Streaming %d bytes for buffer len %d.\n\n", size_to_process, len); SDL_MixAudioFormat( stream, current_effect->data + current_data_index, current_audio_spec.format, size_to_process, current_effect->sound_volume); stream += size_to_process; current_data_index += size_to_process; len -= size_to_process; remaining_size -= size_to_process; if (remaining_size == 0) { current_data_index = 0; if (current_effect->nof_repeats >= 0) { if (flush_sound_effect_stack == true) { SDL_mutexP(sound_output_active_mutex); if (sdl_finish_timer == -1) { // Wait to complete a full cycle. interval = ((double)size_to_process / (double)current_effect->freq) * 1000 + 1000; //timing-safety // + 100; //timing-safety TRACE_LOG("\n\n[sound]interval(%d/%d):%u ms\n", size_to_process, current_effect->freq, interval); sdl_finish_timer = SDL_AddTimer( interval, &sdl_effect_finished, NULL); } SDL_mutexV(sound_output_active_mutex); } current_effect->nof_repeats--; if (current_effect->nof_repeats == 0) { len = 0; break; } } } } TRACE_LOG("\n\n[sound]mixaudio call done.\n\n"); } void sdl2_init_sound() { int len; char *slashpos, *dotpos; int i; TRACE_LOG("[sound]sdl2_init_sound() called.\n"); if (sound_init_performed == true) return; TRACE_LOG("[sound]Initializing sound.n"); if ((slashpos = strrchr(active_z_story->absolute_file_name, '/')) != NULL) { len = slashpos - active_z_story->absolute_file_name; sdl_directory_name = (char*)fizmo_malloc(len + 1); memcpy(sdl_directory_name, active_z_story->absolute_file_name, len); sdl_directory_name[len] = '\0'; if ((dotpos = strchr(slashpos + 1, '.')) != NULL) len = dotpos - slashpos; else len = strlen(active_z_story->absolute_file_name) - len - 1; if (len > 6) len = 6; sdl_file_prefix = (char*)fizmo_malloc(len + 1); sdl_file_prefix_lower = (char*)fizmo_malloc(len + 1); sdl_file_prefix_upper = (char*)fizmo_malloc(len + 1); memcpy(sdl_file_prefix, slashpos + 1, len); for (i=0; ifreq; fmt_want.channels = current_effect->nof_channels; TRACE_LOG("[sound]New effect, freq: %d.\n", current_effect->freq); TRACE_LOG("[sound]errno:%d\n", errno); if ( (sdl_audio_device_id = SDL_OpenAudioDevice( NULL, 0, &fmt_want, ¤t_audio_spec, 0) ) == 0) { TRACE_LOG("[sound]Unable to open audio: %s\n", SDL_GetError()); return; } TRACE_LOG("[sound]got: freq %d, format %d, errno was :%d\n", current_audio_spec.freq, current_audio_spec.format, errno); errno = 0; is_audio_open = true; //routine_after_playback = routine; sound_output_active = true; if (current_effect->nof_repeats > 0) { interval = ((double)current_effect->nof_frames / (double)current_effect->freq) * current_effect->nof_repeats * 1000 + 100; //timing-safety TRACE_LOG("\n\n[sound]interval(%d/%d):%u ms\n", current_effect->nof_frames , current_effect->freq, interval); sdl_finish_timer = SDL_AddTimer(interval, &sdl_effect_finished, NULL); } SDL_PauseAudioDevice(sdl_audio_device_id, 0); } int effect_thread_routine(void* UNUSED(parameter)) { for (;;) { SDL_Delay(25); SDL_mutexP(sound_output_active_mutex); if ( (stop_effect_thread == true) || ( (sound_output_active == false) && (sound_effect_top_element < 0) ) ) { effect_thread = NULL; SDL_mutexV(sound_output_active_mutex); TRACE_LOG("\n\n[sound]effect_thread_routine quit.\n\n"); return 0; } if (sound_output_active == false) { // In case the sound has stopped playing, start the next one (if // there's at least one left on the stack) or quit this thread. start_next_effect(); } SDL_mutexV(sound_output_active_mutex); } } void sdl2_play_sound(int sound_nr, int volume, int repeats, uint16_t routine) { struct sound_effect *effect; int nof_repeats_from_file; z_file *in; int frequency; int frames_remaining, frames_to_read; #ifdef ENABLE_AIFF_FOR_SOUND_SDL2 SF_INFO sfinfo; SNDFILE *sndfile; int len; int i; long sound_blorb_index; int fd; Uint8 *data_ptr; int v3_sound_loops; int input_ptr, input_data; Uint8 input_byte; #endif // ENABLE_AIFF_FOR_SOUND_SDL2 if (sound_init_performed == false) { return; } effect = (struct sound_effect*)fizmo_malloc(sizeof(struct sound_effect)); if (sound_nr <= 2) { effect->is_internal_effect = true; effect->nof_channels = 1; effect->freq = 8000; if (sound_nr == 1) { if (tone880hz_buf == NULL) { tone880hz_buf = fizmo_malloc(TONE_880_HZ_SAMPLE_SIZE * sizeof(int)); data_ptr = tone880hz_buf; for (i=0; idata = tone880hz_buf; effect->nof_frames = TONE_880_HZ_SAMPLE_SIZE; effect->nof_repeats = TONE_880_HZ_REPEATS; } else if (sound_nr == 2) { if (tone330hz_buf == NULL) { tone330hz_buf = fizmo_malloc(TONE_330_HZ_SAMPLE_SIZE * sizeof(int)); data_ptr = tone330hz_buf; for (i=0; idata = tone330hz_buf; effect->nof_frames = TONE_330_HZ_SAMPLE_SIZE; effect->nof_repeats = TONE_330_HZ_REPEATS; } } else { #ifdef ENABLE_AIFF_FOR_SOUND_SDL2 TRACE_LOG("Trying to find blorb sound number %d.\n", sound_nr); if ((sound_blorb_index = active_blorb_interface->get_blorb_offset( active_z_story->blorb_map, Z_BLORB_TYPE_SOUND, sound_nr)) != -1) { //TRACE_LOG("fd: %d.\n", fd); fd = fsi->get_fileno(active_z_story->blorb_file); TRACE_LOG("Seeking pos %x\n", sound_blorb_index-8); lseek(fd, sound_blorb_index-8, SEEK_SET); memset(&sfinfo, 0, sizeof (sfinfo)); if ((sndfile = sf_open_fd( fd, SFM_READ, &sfinfo, SF_FALSE)) != NULL) { TRACE_LOG("open ok.\n"); if (sfinfo.channels > 2) { free(effect); sf_close(sndfile); return; } effect->is_internal_effect = false; effect->nof_channels = sfinfo.channels; effect->freq = sfinfo.samplerate; effect->nof_frames = sfinfo.frames; effect->data = fizmo_malloc( sfinfo.frames * sizeof(int) * sfinfo.channels); if (ver < 5) { v3_sound_loops = get_v3_sound_loops_from_blorb_map( active_z_story->blorb_map, sound_nr); effect->nof_repeats = v3_sound_loops >= 1 ? v3_sound_loops : -1; } else { effect->nof_repeats = repeats; } TRACE_LOG("[sound]channels: %d, freq: %d, samples: %ld, repeats:%d.\n", sfinfo.channels, sfinfo.samplerate, (long int)sfinfo.frames, effect->nof_repeats); data_ptr = effect->data; frames_remaining = effect->nof_frames; while (frames_remaining > 0) { frames_to_read = AIFF_INPUT_BUFFER_SIZE / sfinfo.channels < frames_remaining ? AIFF_INPUT_BUFFER_SIZE / sfinfo.channels : frames_remaining; if ( (len = sf_readf_int( sndfile, aiff_input_buffer, frames_to_read)) != frames_to_read) { TRACE_LOG("retval: %s\n", sf_strerror(NULL)); sf_close(sndfile); free(effect->data); free(effect); return; } // libsndfile converts the input to 32bit-signed integers which // we will now convert into single bytes for the mixaudio call. input_ptr = 0; while (input_ptr < frames_to_read * sfinfo.channels) { input_data = aiff_input_buffer[input_ptr++]; *(data_ptr++) = input_data >> ((sizeof(int)-1) * 8); for (i=0; idata); free(effect); return; } } else if #else // ENABLE_AIFF_FOR_SOUND_SDL2 if #endif // ENABLE_AIFF_FOR_SOUND_SDL2 ( (sdl_directory_name != NULL) && (sdl_file_prefix != NULL) ) { // Try ".SND" effects sprintf(sdl_snd_filename, "%s/%s%02d.snd", sdl_directory_name, sdl_file_prefix, sound_nr); TRACE_LOG("[sound]Trying to open sound file \"%s\".\n", sdl_snd_filename); if ((in = fsi->openfile(sdl_snd_filename, FILETYPE_DATA, FILEACCESS_READ)) == NULL) { sprintf(sdl_snd_filename, "%s/%s%02d.SND", sdl_directory_name, sdl_file_prefix, sound_nr); TRACE_LOG("[sound]Trying to open sound file \"%s\".\n", sdl_snd_filename); if ((in = fsi->openfile( sdl_snd_filename, FILETYPE_DATA, FILEACCESS_READ)) == NULL) { sprintf(sdl_snd_filename, "%s/%s%02d.SND", sdl_directory_name, sdl_file_prefix_upper, sound_nr); TRACE_LOG("[sound]Trying to open sound file \"%s\".\n", sdl_snd_filename); if ((in = fsi->openfile( sdl_snd_filename, FILETYPE_DATA, FILEACCESS_READ)) == NULL) { sprintf(sdl_snd_filename, "%s/%s%02d.snd", sdl_directory_name, sdl_file_prefix_lower, sound_nr); TRACE_LOG("[sound]Trying to open sound file \"%s\".\n", sdl_snd_filename); if ((in = fsi->openfile( sdl_snd_filename, FILETYPE_DATA, FILEACCESS_READ)) == NULL) { free(effect); return; } } } } // Skip over src_len bytes. fsi->readchar(in); fsi->readchar(in); nof_repeats_from_file = (int)fsi->readchar(in); TRACE_LOG("[sound]repeats to play from file: %d.\n", nof_repeats_from_file); // Skip over base_note. fsi->readchar(in); frequency = ((int)fsi->readchar(in) << 8) | fsi->readchar(in); fsi->setfilepos(in, 2, SEEK_CUR); effect->nof_frames = ((int)fsi->readchar(in) << 8) | fsi->readchar(in); effect->is_internal_effect = false; effect->nof_channels = 1; effect->freq = frequency; effect->data = fizmo_malloc(effect->nof_frames * sizeof(int)); frames_remaining = effect->nof_frames; data_ptr = effect->data; while (frames_remaining > 0) { frames_to_read = SND_INPUT_BUFFER_SIZE < frames_remaining ? SND_INPUT_BUFFER_SIZE : frames_remaining; TRACE_LOG("frames_remaining: %d, frames_to_read: %d.\n", frames_remaining, frames_to_read); if (fsi->readchars(snd_input_buffer, frames_to_read, in) != frames_to_read) { TRACE_LOG("Could not read requested number of SND frames.\n"); fsi->closefile(in); free(effect->data); free(effect); return; } input_ptr = 0; while (input_ptr < frames_to_read ) { input_byte = snd_input_buffer[input_ptr++]; // We have to shift a little bit since we've got unsigned // input and signed output. *(data_ptr++) = input_byte >> 1; *(data_ptr++) = input_byte << 7; for (i=0; iclosefile(in); if (repeats >= 1) effect->nof_repeats = (repeats == 255 ? -1 : repeats); else if (nof_repeats_from_file == 0) effect->nof_repeats = -1; else effect->nof_repeats = nof_repeats_from_file; TRACE_LOG("[sound]Repeats: %d, Volume: %d\n", effect->nof_repeats, effect->sound_volume); } else { TRACE_LOG("[sound]Not found.\n"); free(effect); return; } } effect->sound_volume = SDL_MIX_MAXVOLUME / 8 * volume; TRACE_LOG("[sound]volume:%d (%d), max:%d.\n", effect->sound_volume, volume, SDL_MIX_MAXVOLUME); effect->routine_after_playback = routine; SDL_mutexP(sound_output_active_mutex); sound_effect_top_element++; if (sound_effect_top_element == sound_effect_fifo_size) { sound_effect_fifo_size += 4; TRACE_LOG("[sound]Resizing stack to %lu bytes.\n", sizeof(struct sound_effect*) * sound_effect_fifo_size); sdl_sound_effect_fifo = fizmo_realloc( sdl_sound_effect_fifo, sizeof(struct sound_effect*) * sound_effect_fifo_size); } TRACE_LOG("[sound]%d\n", sound_effect_top_element); sdl_sound_effect_fifo[sound_effect_top_element] = effect; if (bool_equal(sound_output_active, false)) { if (effect_thread == NULL) { TRACE_LOG("[sound]Creating new effect_thread.\n"); effect_thread = SDL_CreateThread(&effect_thread_routine, "fizmo-libsndifsdl2", NULL); } start_next_effect(); SDL_mutexV(sound_output_active_mutex); } else { if (read_has_occurred == false) { TRACE_LOG("[sound]New sound during same read cycle, starting flush.\n"); flush_sound_effect_stack = true; } else { SDL_PauseAudioDevice(sdl_audio_device_id, 1); clear_current_effect_from_stack(); sound_output_active = false; } SDL_mutexV(sound_output_active_mutex); } } void sdl2_stop_sound(int UNUSED(sound_nr)) { if (sound_init_performed == false) return; SDL_mutexP(sound_output_active_mutex); if (sdl_finish_timer != -1) { SDL_RemoveTimer(sdl_finish_timer); } if (sound_output_active == true) { SDL_PauseAudioDevice(sdl_audio_device_id, 1); clear_all_effects_from_stack(); if (is_audio_open == true) { TRACE_LOG("[sound]errno: %d\n", errno); SDL_CloseAudioDevice(sdl_audio_device_id); TRACE_LOG("[sound]errno: %d\n", errno); errno = 0; is_audio_open = false; } sound_output_active = false; } SDL_mutexV(sound_output_active_mutex); } void sdl2_finish_sound(int UNUSED(sound_nr)) { } void sdl2_keyboard_input_has_occurred() { SDL_mutexP(sound_output_active_mutex); read_has_occurred = true; SDL_mutexV(sound_output_active_mutex); } uint16_t sdl2_get_next_sound_end_routine() { uint16_t result; SDL_mutexP(sound_output_active_mutex); if (routine_stack_top_element >= 0) { result = routine_stack[routine_stack_top_element]; routine_stack_top_element--; } else { result = 0; } SDL_mutexV(sound_output_active_mutex); return result; } static char *get_sdl2_interface_name() { return sdl2_interface_name; } static char *get_sdl2_interface_version() { return sdl2_interface_version; } static int sdl2_parse_config_parameter(char *key, char *value) { return -2; } static char *sdl2_get_config_value(char *key) { return NULL; } static char **sdl2_get_config_option_names() { return NULL; } struct z_sound_interface sound_interface_sdl2 = { &sdl2_init_sound, &sdl2_close_sound, &sdl2_prepare_sound, &sdl2_play_sound, &sdl2_stop_sound, &sdl2_finish_sound, &sdl2_keyboard_input_has_occurred, &sdl2_get_next_sound_end_routine, &get_sdl2_interface_name, &get_sdl2_interface_version, &sdl2_parse_config_parameter, &sdl2_get_config_value, &sdl2_get_config_option_names }; #endif /* sound_sdl2_c_INCLUDED */ fizmo-0.7.10/libsndifsdl2/src/sound_sdl2/sound_sdl2.h000644 000765 000024 00000003324 12606024332 023327 0ustar00chrenderstaff000000 000000 /* sound_sdl2.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef sound_sdl2_h_INCLUDED #define sound_sdl2_h_INCLUDED #ifndef sound_sdl2_c_INCLUDED extern struct z_sound_interface sound_interface_sdl2; #endif /* sound_sdl2_c_INCLUDED */ #endif /* sound_sdl2_h_INCLUDED */ fizmo-0.7.10/libsndifsdl2/doc/changelog.xml000644 000765 000024 00000010743 12606024332 021460 0ustar00chrenderstaff000000 000000 Implemented SDL2-compatible sound interface, forked from libsoundofsdl. Note: In case you're encountering messages from ALSA containing “snd_pcm_recover” and “underrun” errors, upgrade SDL2 to version 2.0.3. Fixed “AC_CONFIG_AUX_DIR” invocation. Added “clean-dev” build target for better cleanup of installed development files, which helps debian packaging. Fix compiler warnings. Added missing license/copyright information. Renamed “install-locales” to “install-data” build target. Adapted to new readchar function names in file system interface. Minor fix for libsndifsdl build target. Adapted to new autoconf/automake build process. Fixed missing $(DESTDIR) variable – should already have been present since version 0.7.1. Fixed missing “override” statments for CFLAGS in Makefiles. Fixed $(DESTDIR) evaluation in config.[default|macports].mk. Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. The “libsndifsdl” library has been taken out of fizmo version 0.6 and built to form a separate library. Implemented configuration option handling. Implemented new ENABLE_AIFF_FOR_SOUND_SDL variable in config files. This allows the sound-sdl-interface to at least play Infocom .snd files when no libsndfile is available. This marks the point for the first public beta release Implemented new “*.snd” search method: Generalized for all files, not only Lurking Horror and Sherlock, tries upper- and lowercase. Re-built SDL-Sound system (implemented sound effect stack, better sound-has-finished-detection and many, many fixes). Added support for AIFF-sounds in blorb files. Implemented SDL-sound-interface. To make SDL work in Mac OS X I've used MacPorts to install SDL (“port install libsdl”), on Debian I've been using “apt-get install libsdl-sound1.2-dev” (maybe “apt-get install alsa-base alsa-utils” is also required). Added “snd2aiff” commandline utility (this was the basis for the first sound interface experiments). fizmo-0.7.10/libsndifsdl2/doc/copyright.xml000644 000765 000024 00000003041 12606024332 021532 0ustar00chrenderstaff000000 000000

Copyright (c) 2009-2015 Christoph Ender
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

fizmo-0.7.10/libsndifsdl2/doc/create-mds.sh000755 000765 000024 00000001472 12606024332 021371 0ustar00chrenderstaff000000 000000 #!/bin/bash function xslt { if [ "$5" == "true" -a "$2" != "configuration-options" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.md" else OUTPUTFILE="${1}/${2}.md" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-md.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/md.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/libsndifsdl2/doc/create-txts.sh000755 000765 000024 00000001502 12606024332 021602 0ustar00chrenderstaff000000 000000 #!/bin/bash function xslt { if [ "$5" == "true" -a "$2" != "configuration-options" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.txt" else OUTPUTFILE="${1}/${2}.txt" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-ascii.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/ascii.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/libsndifsdl2/.git/branches/000755 000765 000024 00000000000 12606024330 020661 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/config000644 000765 000024 00000000462 12606024332 020270 0ustar00chrenderstaff000000 000000 [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true [remote "origin"] url = git@github.com:chrender/libsndifsdl2 fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master fizmo-0.7.10/libsndifsdl2/.git/description000644 000765 000024 00000000111 12606024330 021333 0ustar00chrenderstaff000000 000000 Unnamed repository; edit this file 'description' to name the repository. fizmo-0.7.10/libsndifsdl2/.git/HEAD000644 000765 000024 00000000027 12606024332 017521 0ustar00chrenderstaff000000 000000 ref: refs/heads/master fizmo-0.7.10/libsndifsdl2/.git/hooks/000755 000765 000024 00000000000 12606024330 020217 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/index000644 000765 000024 00000002410 12606024332 020125 0ustar00chrenderstaff000000 000000 DIRCV(V(m `wϴ|\-5ښS CHANGELOG.mdV(V(mye s7| ntx9R COPYRIGHT.mdV(V(m y&wTߺeĐb" Makefile.amV(V(nO>_n=IGconfig-conds.m4V(V(n6ePIG config-flags.m4V(V(n4JD)EE3iconfig-libs.m4V(V(nYxHsa|H(tZF['config-subst.m4V(V(n R_( configure.acV(V(nB UCW 5 @۬79doc/changelog.xmlV(V(n!dW"tѡ1=u(gdoc/copyright.xmlV(V(n:z 3}2,doc/create-mds.shV(V(n BZ{E*3doc/create-txts.shV(V(n K 2 y*9wesrc/sound_sdl2/Makefile.amV(V(n 8$ðX\N~qsrc/sound_sdl2/sound_sdl2.cV(V(nK5*G ۣq. src/sound_sdl2/sound_sdl2.h:dϹv?5w C@izmo-0.7.10/libsndifsdl2/.git/info/000755 000765 000024 00000000000 12606024330 020027 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/logs/000755 000765 000024 00000000000 12606024332 020042 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/objects/000755 000765 000024 00000000000 12606024330 020525 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/packed-refs000644 000765 000024 00000000477 12606024332 021215 0ustar00chrenderstaff000000 000000 # pack-refs with: peeled fully-peeled 844fb1c7a500635f65b84806cbae4c7247e7efe1 refs/remotes/origin/master 844fb1c7a500635f65b84806cbae4c7247e7efe1 refs/tags/fizmo_0-7-10 5a5befed8970353cbf3cf55c78b23f8756f40627 refs/tags/fizmo_0-7-10-public-beta-3 844fb1c7a500635f65b84806cbae4c7247e7efe1 refs/tags/libsndifsdl2_0-8-0 fizmo-0.7.10/libsndifsdl2/.git/refs/000755 000765 000024 00000000000 12606024332 020035 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/refs/heads/000755 000765 000024 00000000000 12606024332 021121 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/refs/remotes/000755 000765 000024 00000000000 12606024332 021513 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/refs/tags/000755 000765 000024 00000000000 12606024330 020771 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/refs/remotes/origin/000755 000765 000024 00000000000 12606024332 023002 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/refs/remotes/origin/HEAD000644 000765 000024 00000000040 12606024332 023420 0ustar00chrenderstaff000000 000000 ref: refs/remotes/origin/master fizmo-0.7.10/libsndifsdl2/.git/refs/heads/master000644 000765 000024 00000000051 12606024332 022333 0ustar00chrenderstaff000000 000000 844fb1c7a500635f65b84806cbae4c7247e7efe1 fizmo-0.7.10/libsndifsdl2/.git/objects/info/000755 000765 000024 00000000000 12606024330 021460 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/objects/pack/000755 000765 000024 00000000000 12606024332 021445 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/objects/pack/pack-7ccae6f96bde6138fd907ce28dfe56ca4ddf0f1a.idx000444 000765 000024 00000026340 12606024332 031270 0ustar00chrenderstaff000000 000000 tOc  #$%%'''(++-/1133378889;>?@ADEEIKLLNPRSTXY]`bcfgggllmmnpqrswxz  !""#$(()--...00035567799:;;=>>>?@CEFFGHHKKOPPRT[]__`bdeffghhijjlllmnsttTaeG7l4"M̗-nP_ Zf&}BkHEQrt|چ^Jo}o [{M֭{7xzr46P;"иH9d]/ A3yf;OPe"uoKOY)MAĹy<|@ i~*-vX$ٖ_̼Έ"$a XysDV{}D)f8;6T夈qF-޼+t}Xl@v:Xi9FV%*`N:t9*']LԻTg]QTYq0E:'h>TjZ-,{2Am>rMDywハf f?Lo#n78k&Kkuܻ;j" ea|GTZsM\B UCW 5 @۬79و]MڻS'!8[WXzW zFςa7ȣ0fT-OM0H]VAoqi:K<ۉtGBhzL8t4q~00A bi42黍4# a ?8t6+$W"a|"%Bt赮݁$pEZzA %(|0nP餁%i\YGXn\%/ ~3.n&wTߺeĐb"'!CYttBCBD(EJ1 k}V)Uc_kw"Ը>@"d)FhyiAmgҕo)B}d[s|<*rWqnop}/@s,G[=yAꅄoň,jR86˅u0~, 9$_o7[O2GKT,M@j?##ݟ- P:nB-<nEhsQڞ+.lb16`λ_.ɉaY0kgxjۘq30%`g+F0N1- l21ndV d~4%#1 Q̒<>[ߔQq2$x^oir6E2AWBC87R3^i[ᰧzF@4(acIX5;Z=ގd5 ?5"` ڸag=&h5K̀`\G3[<5uc4jo'! 6R{E))j  a?Ԡ7văxz07 $%v1IJe7ɧ)B0$TK#+7hƮO) H98[v\R=ŁTG8$ðX\N~q8ԛ5q#br]9Ehaij #7խS9hEYnx- ik:bsS;8S){%;Ìd T{!;㗦r~"%aܱW\utA]b1%*Վ5CdWDIIYED U8ځYinrDhw;~9t+*`DH".J"|2|Hq7y3CZH?i@y;F51 H枪mO cIAu1X'?DWNJa[-=|̲%>Y+1eJ7weR]6^MKDT6V::(dClK5*G ۣq. K_uL&u *!bgQ3O",Kyߟ"} tNqY_KU_Ϊd_ LT!Ntuzb@D'L-;ZqYpۋLX B }4EML`q8GJH%e'N& sdrbn:N-F^苪ORs>W5ثP`N͍P ֿԟ]'8hì&{6P]sPwutEC1PN_/#+5 PQ0X˅(QV uj;K@*bŋ4hQiRQB% NQRLGZGTE3^RYweXT-lIbRqkp%V-EqyQVȄVv8i83F)dWVRnɠUJ W,{ZH+`_ƄZ[p5<<\x?V'Z{E*3["ۨhYbϳ60M1Lh렠TeЫIi!KGSiɩMd1S'9a"(it\!Ummj_D̵  kE2ĒTlUQt:kK}Ysfl19J~ŭs慌lOtƾ-%},5lɂ1b'~iJ5m +*u\ 2zilum/jYpT䧮n*%l5.N}iFX^Kq&& !Ohu>XZЉ nI8#۬Un9+WsfD MGۉ)HʍwshyAQhYzlqn6Gq0Qc6DzckiIƋ͍$Rs#~%477Ue6qESwާkF&|3shZ|',7f: e"y޸µK/ Y)fjzy9zjD6 ;1R`XmD2jN:/gvxGA/b/*i-pN2Š{``#$!?qU{Uߥ\].Qܼ ju>^~Kxy;>,ǤxԼO\Ȝ_k{zzja'e9%!,@h(30z"FDrmZ!j afln=RfD9,z 3}2,`>?d D'MD|mK+[Ou!Vb5(ïv%.g~G4 m]t]M:gxaίt>~l^Z 󪹷ݬHCԭhG#|fY.T[0/PK^ct<0kf3uMw Qn|rF5݈aS")~yu%A\mhOf W+^ٖAW]ԩAs3B~'2M"|T_n=IGN[ r6L<TY?nHK[{v|S>e:L y6B"^GZ8fC"Sg@wa̓,nn,+ޝ%QL~f}8\>eg{U1Phƈ׽TA@`3?CKe7]wgNfBM'f )J5#!Nۍ[/uPV4JD)EE3iðWl?ZJ S.U9s1w(/kC(,i?Gu**)RŲ̋ r\R]ŎɉnNιpXz Q|u :ʑ sg~FR!Źƛ̹ѬtKinvB#fv͇q-4פ–`3T|ܖsUŌ7ޣG]}ϢSe&e:;L@{\ѷ0n#s̺т?δn2غԪ}$!5iDmԵ5 j>aB]%+RAz^: 0rD:u 7:+L{=]6[.] )mQ›zσmG60[;Q/o#HK5߫-# wg,z)2H%ԔlFOۼ{;U%oՙDpZIqµ\g> rDhDfcku`%k(ɪ#1HE-C 7M#L[|>X}&>=}\K(~ &vbóY򁮼Ua<fe <' 6`)lCWO(7_㳗%QZ-\%[17A[8v }#Zj;BOWښD˔A!;DcL"],'ICj,d'eN0=҂pm9%Vhh!D葉(aⶤ;A@f;'"-I7H( MĢs/΅82j-W6r NT nsy3|pP=v, ; kb5ꂍ}3@$ajF p)y`C389F}J.פD_щ,HDyZg^D+)w# +EBX$D=Flo)h:cNV/$+[ kr0hf} H/;""VqE .l&@ M?zx?0)FG5V8sq)^pB 'K0SܿYW)߳NYg!Nf\ooU6b=fF`M)B 1caKG`Sl:[Œoֺ8ZvJa|aFɨ8$6ZnkNR޷2Mpֳ[Gx =N XIdq~xCԸr}ZmY}(&lΪ$;Y!o+wV$!ZƒX~t¥ _O)lcaʒ.Ÿn r-:IƇ}\De E_qеfeUzMSq=ҒȑAMK \x Ǡ d 3\KHN|ø.fC5hxƯ%.E7⇿ g6N#)i I䦛A~=,S{ 1j]{_N:& /y1!aAG_j^rtCB@xVcHuI̤I!yJ*Rfql9IwWsʟbt\ 0u]`i$1z0!ʥMPf* 'baӂ]ZW\QHP0u[wFoD 秭 k(r$8 [6鴏C ТYPfvZ3o4'1zUE%GZ yN .Ώ)d7 lJ)Q7Y~vʡᬞk̓W0Z#>@ǽul ܲoɱ%ZoW<+ + +8,GRlr/v1HgIxճ̇..,A\{p1jnuoTiz 4Q8]BA ZԣܷpN*3pQĥV-^PzCJqD*S^ZgM ^P\-(4/3wW~f;;Y^ʢCk]X& RD3oӖ B! W z!}CϼC TKr+$;SҎc$ 9k:TiЭ(P$_= M?6E b B:Q{冱n(ɻ2"z*Nt2$#RȊ,AL=@kH0N=Zg\xr?$e]1 &V=3b'{J̵ >u!NpΆܽA"ӂi[D+fL o8:e؅6`9 n4J~*7+즳j(h}K(`8o3"=FS=6U h} ^R4τ{W`1tT25898:Xrn ǂj`$Ahcu>D2sY!bi$}4@MPyXgo}qu[We=Bo`* 55/( Bܗ>@m>Y7oRÙ4BeMbQjyN-v}M8|q0b?,0H.Rm"d#-$V|N+p1F/~,qmg\M0ŕJZcF0prڦe7WwW` ;_I+cO'D2D||AJCvq,Gev,_x^z;_JKc3qF (a C>+  p It3WI }-\caE)z),s'% .xhD O M"t$JEw8c_:+*H81} .t. EGAt @D_9 7nbs5pt/@_;"cJ& >=%mQ5! ZV2?2)3h.Y Ip q7G b GI>H  tF*6= W=xz^үA`7uZCI-@tx8fu7N~Z(K:J!~A 8X]0_2N63p9AޯN8 /1' q" cwiEpJQV#~znfb4$\iEJtOA ' MT6F# \pXh5]$,^[ڎ{e@)C`7?Pբ ZKNr= e&HH-٢HBV|ka8|VM.dꄆ&Giɨk^>Jf?~~Gad<`vtF *zTZ=r5EQܹ OG7\x̱N0_qRtN|n,!DgL,8rL=U 7h "hRڸ#ře}2FۙӉIF/ x;mRo҆ھ^AivQz>6uSP.p:~½ߊt)7.%GwE _`x;j1^>HZ%AYB:w>>hzg9AW!Dp2Cr.8mh3u@e޺HBl$iUD,1El%Jp.KQ1: |uY{%?~rжet%X~>8}0'xFkUv[ǠR+UXƐ2?t~`6xr,@",Im] xM 0F92&E<'L6%[\xJVt  X:"9'؁1UDZvkFwneLc^%m#֨?P}<\8uG-,S)Ĩ7XS|jU՟xKJ1}NQ{O`a":Uaz:M&z~Ņ'p7@>FKSc"YhQ(ުЎYLQ328iq1x8/eic睥_x8d&t66?v::x@J6V4m4aruRi Zx;j1^ްȒLH01qFW^-r|C +^o"M`S0“QH c)lIxL&eBQotdGA{Ԗh9Q9:+sm[u}I`/~r&SPHsi`bK?:IO3FK]V.x1N0E{bz6Lu !%';MDbGD}T8%lj+s] 9<y`@Da:sR$}0KRnV, ׏C-𧨭zr Ѥkk?5󾖪^;%T6n2yZ2]Q^xKj0@:Őm/J)(Ѹ6u,3VJPJO[8M<" k}VX.~y]rfD/o`% ι ZJ)xn! y +페"%U0`v24o_4>]3HQ[5H~2$d[-V$*,zDҨqsgeoDZ3 =1Ӛ]1-o9/WJھ d+q\W2|b)OP ,jjx]]>6+7N`-7R&XFKldzp"\h3bo]92\GLP#_\[4s}HʌCsʟV;JGgܞ??P+ftC^s-ֻx`MYz:ւuÞb:.F@<ң68-XoMmrvn~>O(wG ?ap'3R;;ϦމQU%q9Kʺu]jnr`/_xMn bmZ `)"Ez5 ''} 8z="6hI[h$/-YP@R2h)`wkd36T8M5^[Y&8ǯSrµ+녕(eck?6)oހR*o%1|/Z,ډl]bxIN0~5ׁv$!^ vbMƉ^JY1Z;0N9Oɐvϓ S;6]Z(avf6R uZ}ٚ|]Zm_[%n x6lm~,8HVz"&yJ+c}$<Ɏm s>̱zԿR ~!)^ԟxKj0EZ#Ä}BI6F4hԤ$FRbE ^jiGBb?`|To{+ykuX1WtLx!*@'+"eɭ)Q%o[.gw/{m? ,ȗT ZxJ0{"uLME\+{QPoe2lMQ|_^-"s>xc."{C:=Om;=otZ2SMyiZx0{}2AH\+"e/YBFN :F=i%vlu#Nl!@H*RCGk{,[&?_`xBmK{kq b];&~.%N2x)nW<xKj0нN1KJ ƣImXftӷttэ9LHd* Ձ 2TG%9ss9U*XC>7Ӭˣ}VE/wYInp Cv^!nһf.o˗T},mkOU$xAj0zK6VP`%c2 9h5cJ'Rϔ l Suz)],m1r%@8έܗ}V БG">ZSں.?5sT72s?Lϭ6x=*ݡZ"xMj0@N1d[bF#k*Q& ]>> f`gfQduF=sƌlC@B :g_CEC->R,޹=Ũ.k&Xc/ǹh,^O*\>Y X Dd d1j[gSo({_,>0:jTxAj0 E> 8R YR,ML=Ip<0o'Nǖ<1ب񒲲bvjvx:)G!aeN.M$ Xkїѷ}5K?1]j&-m ad=E4v̵1-OГGR3tj7\ўxAj0z F Ji)yA_ iWIbz8s"2X) nX0ٖ:cȈfO*[&DtX0Wo|I}i GoE_ k5#8Ŏ֚nwyN|0 #;t@z^:lE+ZxM !ཧp :At>gQm7::P{PGPS ,Dm5A L!xrKILERQ:11|v~Y5j[uηF;T|RVA(!X{8(>Z}5SxK 09EBy/ID/ #-.Ĝq16^UrRKDPd~eWfxMj0@N1H2Pr`<3MLEoENuRABX+:*za?ZKUc$CWr)q DGZ[׬oo E˺N*x| 1}>›jһfN{ހPu?nʃ.ZDxKj0нN1},YPJK r}fj2%o"'-"'S4gCDΘ"זdN8}%,fc`5%'bNس>2yocߋяN{#'|\P%]~>80ETo:fS_-IkamPGEXGxKj0EZś\?PB dqW ??Ŧed+rm0 N>4&gQ`Ԓ@ynMlo4Rh%"{KXu2P?JWTRgJN\rΰ׈_ 0i=WjT-o5أP$OeL h[gum _35+8q WВi @[SWFUVe0 CY@ - ^/MVv?^cyӸ+>dSIٕx 0y=xPi@d"+Y()zl )IL&0p`#JCrZzt u+t6X*!u6PZ yJ?h4i2p'p}[֟/oC x 1E|vL *ت?0I&J绍:,2Y.1HlCN&JP*UOj耾Q|F[6Ȅ(upYSwy\o~tu"/<BӇ l>\k//"=xN0{? 'A @xN,;r;q+jvͤH(*XVHI͵MlH>2X*lV4R4b+YV6A٦)U=ʶ8/+a*LMQ\N2 |7h!zq[ƀF0,\Ղx1n0{z#HQ4`yy\Z*, 5336(UҬ%Zʱ][+NXZ<Ddq3iY#kM^a/[ ]ϭbϾ,nf.dxlfg~B}lx6œӎz#m1DxAn0 ~o9)dZ-+zH v )Hi+" q@#ٹEЋ7W*rlz#'O4wSH1g̓cjCƆvVs6x{wh;t;wI۲f/ |S])^$m p5Mpw.<\P x;0D{b{D QrD LqCTS{3p@5e-g &#lzQC8EV-\+zlPցUnp;hkp("\pDz?#pv}s8IO k4@x;1 ={Zcx%-88bOz^-fY)  f$+GݦŖ 9WBGTZ34z4:}Z >[g7_Op]\y7-i]6o֗q2h5L&.rHx0 ~wI$V!tazYN)5H&(V(ð&%IUh] gRR:%ՈC|qim+Avjcx10 E;M4B(v mQz~ZUQ #՛lr4)IY\TukH1,|)QKP16eiF;Ч-{Lg@7G i_Қy"*( Sk- jj6|Exj0Eٗ1R PH ݦ(vϏgu۪*$P֌#ze%2NU%C{ (&)Y!ĨáGD++g~yKk|vQ~T} 4\[RSII{xA 0E9VI"xLlMJx}q[=*D1FĐ.BHNhKՎUrǨɏHp ~lbĢG &R~cp hǡlҚ9W Npgܛ0^Lh| F1Y}@G x;1 =H[pDZٕ؏B?)f"St5DW\6%DN]¶ZjQT&T+HGrkgL[IۏŐC=fx[y S7 i۪t~b>B? x;0D{b{%DI IqCxӛ֜ %a3vD9`(&zRCkqy- [ cLʢݷڠl[7XFkC=J=wSW &ot>#z=YO ?xn0w=!kB?%A>t5b+P<t/'Hn5l= [cyёwӈW)3cKZrg7kJgF|XA럻(cKH_zHqw3M?%Hm)OzB\~ږH+x0{GDZI䘂 =[H;PB5e d\DtrQ$ J^3{-d!a ްwB25-.dj:%5׊?Jё 7R?JEx0C|ʼnjuTuWKr$ eЭe.l`Oaqpv)EmK*`z!bMݠkbJ^XgD e!XE,7E,bH8 w_Koa^R(:kz?u`G}RG0lǫO,ټAx 0EًI* XPDT]I2n{Wgq<xΑLD ." Z,t2.8d0J+VF* n!tKFqvGKV| c߿r~z~ :75V;{T6taJ+Bҵ{,}/1nK~fv1D)Nx_ &axn0 w="-Y"91BV}tM7g 4Pke3_m;9Ys,#S&\չؐFI"A~4hg4"1 ضw3.j+zӺ7Fsc=ɞ Hxj0D=PHyV%֫Uc-lhW=޹*#'h8( >٨ʪp3u{C9 nz)fI*#n@϶pYIU7 ;xx8w>OK$n´^*y]a.c(Jj~[rR0x;n0{bHXO2h oo53`zȸF1)Hp<:ff)jk4h,\̓@l;k[Dzҋ26(+/K/N1Kfhz}1~wV Jg..T뜰['n/yp!=^l.x31Ҽ##X3o\YX/ox340031QMNMIKe48s@O][l!ey))9Fz ?SބxjeuEqLu Ӟ.ye:o/En z+sx340031QppswwMa:aK;[StQ;? 2#a54AkQnB&fe%2䕹/QrkBCE=^W9|*KKLR)z& ;?_kimt4-'1fW3.{)3Js2*^09s׹.g4]߻7d.@UY\T\QL9()ՏGQZZR2Q{TWgbz! PHOff\[Ψ83O rɗ E +[kl/7oZx31Ҽ#[Oܗ]7oY_mx340031QMNMIKe48s@O][l!ey))9Fz ob≮/,'KcfLu Ӟ.ye:o/En [*-x31Ҽ#kJ?-%#] Zͧx340031QMNMIKe48s@O][l!ey))9Fz )4RNizK2+S]ô-K^YΛKC![;sJ* x340031QHHKOO׫aɼO`B6OoXzPE%`mz-1T:NA*]BsSSĒTܔb U ~g_|F+*,(zϓj)bZ+e;z_MXΠ*L|qݞD6̟N>ٌdoAfa+'2!R=U줜w'y3#"[\e<7sAx340031QMNMIKe0#uҽ})Lp7(+/K/NKf<&`~ĺ^qϓ) PP ~ӈU?{ə-Hx31Ҽ/\,1?{icR_إx340031QMNMIKe0#uҽ})Lp7(+/K/NKfZzAK/ǴaDUW0e0Ȅ4?tUx,-x340031Qppsww+(aX1R S~q07/3(MNMIKe}eBƧWLK*x#TYr~^Zf.J)5aعQZMLs/ksTi9`|f7K |ʝwߛNAUVS=rm?NK}mEeiН 3O((-qq/&@P\0'jU; ]|eЯwMpx31ҼK.^,9Ԋex340031QMNMIKe0#uҽ})Lp7(+/K/NKf0[LC)6/b(` ?riv =V:-[x31Ҽ+-n5Ff 2}*[^ x340031QMNMIKe0:N<ܩsCga !ʊKRSrLox9Ӑ;Fx| 2d\y]*|gsxs,Ȥx31Ҽp7^Wogc-x340031QMNMIKe0:N<ܩsCga !ʊKRSrj&,~=%:ge.U3`P ~ӈU?{.x31Ҽ7y崟Μ}OS3f Ťx31ҼWӛW>6V;aSx31Ҽ]WNsXП#iD x31Ҽw?teϳc/ x340031Qppsww+(aR[UױjM]guVB&fe22.A 5`%kC$e륤%f3 |eΑo6~t871 z½.ںwBfSֻ* P(.Jf`x4LB4YN=mMx31ҼʇU_ _/3KJ&P !x31Ҽͫ+i\Yz\u|ͤx31Ҽm{ۜ6 Yx31ҼCމLlc}UB x340031QMNMIectka21+JW !jKRSr|/\[+XJ|鶛sn?,AsQkΦDA Pf.Qx31Ҽ u7\_"shZ ca7!y/x31Ҽa/N_T([nCo&Wx31Ҽw;u.{TF/颭he9 x340031QMNMIexxTto4nU~{&9?/-3]/%5-4D/7A349>yyҕ?9(@U\_TR Rms3ھo'lM꿀(%3|Wa7 vuB_x31Ҽ;ݿ_>8xl$Τx31ҼֈT5-{עx340031QMNMIe09}ߕdX;Q#3!DMq~i^J|qJ^2Ë~vH2^jU#% ]G>m8]56[q0Sx31ҼYwjOzyYYMX10x31Ҽ%49κhݽ& x31Ҽ#2jQ}Ś>MuKhx31Ҽ Y?gQ/n4x340031QMNMIe0yVg|/f=n!DMq~i^J|qJ^2C%cEٞ>$8* ]G>m8]56K20 x340031QMNMIeZ|ӗX!DMr~^Zf^JjZbiN^n6l&V#"0TŹE% l?va՟,o0 P(.Jf0/kg>\Q/Di|2 7y>:x[ʴiFyRIIJEyAIXGSC󉋼@s~nfIIjBZf,K-*SOSP*/K/N1KVF {xuVn8}WMK6Mz8E.MD$>v?/3ŐErx̙3t:Dt| [MME;>ۄUSrŵ眦g$3ULδuNkPw0 k**R;(4< $AK&n$'ԔjR*Jѿ1fԢ.wJ vƂlZc)HY vsWp1g0~,hC[p9_9lU? O@F̩| \Ekoy%[mʶi&a d{(gituWkNPd'B$ 1k1'F[rO][z FA;P!JJB0 楱Ӑۋ(VҋHJ `EƉvՔ>>;bB" GP~R=/Q]T$#aF&G" #~:|VUj5*JZ0C{9uj.׸(]"L*#~4q^yi{OTu}h'x"!:ATDQ"##CӍ\ oRx"DxBdA&<0xV]OX}ƿbD R(RwSQɱoU;(JoUdmV{&@BҗE-ؾ3gfxC,T7ʍ7 iMwU 3]}n*7tɚWiݔ9"Q2Ҧ5UVխJVJ`[&- 5T*VuZD=*t6s*+\6@$qm*E UiӨUy&hQ_ 0YVޥ eTrpKy\:L`TDH1VoM0SM6 _2).m;!pgQH;9 ! Ԙ, 2^h4\1Q⸢' ) e`9 .nH81X!"[ 92q%B|ڨ, ħ pH92"0mM|1Ps0 'L,¿ޓ1 , M O)n(|2ܻӄ3&+f.4m<x3}-M&%}iq1(O+ 82-tG"!z.MD*Up#FHȴ/Ww `bz#zΨsYLh4 Q5QU [z jзe%Ef鷳#[\LSe)T~ig ,a끄8Sϳ:N0@rucɔkeZԑ}BngOjܺ8y2g'"7.&Q.#<*bX,ע"b%- VѾq>Qu)J#eY'Qܰİ~BϜ_wy<-l:ZcmwgQ9e _HAƞ%>jpAˉzpPT܃+0aⳃ^?vu^:֞[tܕvwڪt̯_y=:= 髿)v5˥gpx}F. 9So.>oQGV}xֱ]eQXvvc+!S'{|ɷbp.5VZю= a׼wQCMQd$Ǝ{UMw4Y=h6:TóKKL(xS3<1MkPdMKzHÄZF}l] ÞOXg]xe+>ڋk+KTL1r^|6˖Ðzc@1/Dlx)SjFO^# ll+x)5Mj>IY"> x&kcNBQfzFIBQjqjQYjPi.gĢT+\N'OdtҶ y %U&g3yNTʬ!acg𣆹 ~.@4ٛktf'xNcb9y7dfVɞ3/JxmRn@=TU>`)+^\u Y K Y+ B]CR Ϩ?u'if7ofޛo~~EYSUyJ_/ls}<\#94r{G,!FbNwO@?A ES(cYqOܿ NdӺَ5mͪ:ǜCf!ҲpmF|B ծhsqMwDEE}|h;\Z,i@f# ;H,I kٷd=72T }:ME1&Y@+M*27\J dUY n)~(EHsҝ;hO9nDaѽEU?"!X~ cLaP!>dFClngoPdeM3?{{^V+˶99S\> bD.x&uWK_K84/%8%H/KA & ʲBZ Z 99 E% EũEe)zP.L@r PYbQBnjP|23Pb9p)d)d(2yD@6&/6! frofo5!3(|nw `)+^\u YBie0,u bKm/E?R?8NҖ,0o޼ׯ(,JXIqஏgkJҲ*b[[s_4E0ADȺ@yP&vǢ*=q=Mz;ִ5/T3a J\&Ec'9Id@,wMyɫnb& )wJ$jUi@f% ;`V'ǕLk۷=Mc>M'm772ME4s>C{d֑8짡FsO|ρ܁<}4 GJW}oPQ!sxW)ҿF?gy<ǰ| 9^Ay ըUƻl.^q#MA,#xmRn@]eUf5^`5+l\i cgd M50  -R R??hX s3O|R>,,=T?S`o!g6 H7g ☉b=,4_?"2EIYXniV;E3Mr3VݥȊ(?RICl P_y8K8؜!>1 t9] z7Zgze^.ys)V؄uIsWku&ƕqLkuN^]HU.2K^sfX{ر%e&f-8$szԑE#W2+<01Ǣsf# FoLYE}:xa ]: ɩh'Y%!9^_@<ܗPĢ Yn_QL4kox&(5xg9l2w)z%rqd&d%ZYqq&(%ErS8sP%Ndnì0K~ v YhZM7r2N>!69SDgY)뙁pjNNr8& έy;W#^E-otmZ J}'r in_uO5:C%/c{mpr 4cy-<dMvW}`ϥ_Es:付GuI&eVҧ<.㊀|c` V94laamhA68xmMG3vxI7H:h·JVQBM f\}x"yWK_K84/%8%G/KA & ʲBF E% y)Ez@ ǜbԢ=R& ˅,(U!7 (>(1ُ DMdt2J2RAj Xn7;bfuQ`) Z\\\ʙi@O!<¥ K.Ek2B6$(O4D*(3( 42 UߚK95/%3M9  T%(-Klex'O`Foc"cl7x;{wF:6 LlNx;{wF:6Ilx;{wF:6Hxrws sшvstqwtsR@%% J*yI9iiJ JyJ\\G@xRn@}+D5ge..%-V`*(wv6]fϜ9;slQmhٱKe8q`eڼh Ft58յ%|@:qm博W?|Zfȅ 0q]t#/xÏ/ 5ڲj#~I?LWċ t$ѲWC((s`p*Z~hzD&yLGW`VąM+*zgBT^"PDөL{%{jHVB/G$6jM;` 0u+E!<GM2|CNgq=u]U￐ʼn7%}YşUCP'qae(^7=9_b X]Yl>&W<8K8wl\?ߕm%r~I{fNmI#7sz{&4Qߟ21gx8o ?,hx8yT  $xX:_:$>3/94%U#9?/-3]7-'1X/Ds'c$|NfHz Ss|pSpFkXSK|@gDkpgJAQjZf?LR3 x vwpuw q ֈ.N1QК\n%% J*yI9iiJ @|%r.l奤e椂̓25*s2̴bm[%P -)x}j0 Zg1XdKtݪTr999-7`Y2 VhAJIA4{FA Wƀ:Jg 츒Ht2QIFrB2o, J^5kr: =':-Z3ӥh8~@bO )o $=/aS9p1 lM LCYW#Ѷ NmI.򃐤cǛgQMY3b\s478 b(NlS7Ph>Uxze+csFb^zjBfBIFfBZfNBFbYBIBRBnfQQ~Qj DABr~QQjqA~^Jf^BZQ~^Ij^ Rr~^ZfnqiRqnNfR1PIZqJ^b=..GP`GM0ex:I18M#$DAB%5/1)'584/EI(VZͥ0y>zhT@T8K& Vxty(ċ2vn>: J*I9)Eii9 *)9Fe@N^JZfN*4񼜇D̤b4P@xJ\\\0|xX]oH}ϯY+5]GӪIE" D[j{ #NBs%{cl^"x.sϹ;y) ك0iM i_s?6Ng; WccOmMi xIzQgvQS9 Kt|&f=h3{ Ȯ CTc=<6+#!3ڎH$ $޹wUʥ՟$^44Hcdƒ6ᾰf.dm q `|TF|AQᴓS5aSt,ERe7GKOQoZaa3֡_'+1|~.e/Ճ@Vv|?ᅂ/h(Rn"%&Hٗѓ!6c )` Ho&",$W,ޔA߆ b#7vL*PzB%b$qhY>,Y9ɭ:ɇ(&ZJr*wB('iz#B9$@S7# 2Q08ZbY2KRkz$+[՞~Sna=2UT۫^KPqTߤPʗOK 6gxU!J"Eznȳu&ÎD.R !S1O46ڃܾ8LF2P&ED}5-L*X/$5{Fr2a ZC* Ɉ bLZ1g [H[ [@i2(PI#}ANIᯨOݫeUax03*L?|,Lk&tCԢVX;σe&0/g7KI R' ~};ػ!gzz㯲[6 =g Ւ'w0Q- 7TI^)ULg)obi qM(PBu\J=0coCGU-\*6DOUtj#U$|vz{{7ߜ1%h|r`"(O9; 75J2 aI0눹0<*ܭS~2$Q-niuB!VPELsb `8\4J6„G(ǠB@$+V0Qc:D:;v)0<0=@Q]efJ#gM7 70æ{,53R4x6/$2=#|9Bh$*9$;ȕ|ەk`~A <8h+E)j%v=+q5۳H^O @X7|: lkmj3D9ɔ dCZ^ހf!s Khэ7ܵ=vg_YfX[뒪̯v."X|I{tvl ;ef]%t\ޘ嶋ng#kM U3>I?DPpKdxB捡~EO&;XTx{DyBNVɝlxpIaBd_&x85-2Kl  73$(bPbdj1!|p xpX~BƓJ6G102&O98`D̾EY6O`ٜˑΙaqO03䧧U*'+eeg($($&嗖(d*(U020P0222Tpv .= 7| 07 /&x;,[HKAAAK+,83?O@\LQĢ c#C--:]1,`z~vˬPH-I-R(O,K/La1f)ҼTSP &09m<~~$F`C`fV78Ms=1NFHAc/5 >C>2f`p+!fa豗,PKȆC)fP'Acd%̄3kpk4@hdфL-IM+IMQK-3y:w .SM1< cS06a5c+#S f~{x;,WnC Jw0r<9 mrx-GhF(N%qm-5x+wUHKAAAK+,83?O@\LK (01FL/n 9E Eyyz ǔbBNfrj^q~r~AeQfzFBf^Z~Qnb =..]]]l֚*<Û_(޻'ƍn4a w{r7qrsFk0ʮSo騷'WɶJB;>ɺ۞4G! P^3 EnH/8B/rI_>_>M,K\)BY,W@P$˴*"ilѴДRt ?Q>%(l*R7üY50F+&IZr+D8ebɓ{LD<Ӥ,ML9ixВcH?,҈Ԋ"Ln:3,p EJؒ͹W!Dž jU1UZBsy2ة|1WPgT(af`@AbZ(1X#2ͥ,VZ-5ă#CkWBy6 [&#Z/8cYP% f(-E\+y*|"}{G2b^l_x[ȳgB4ƘES*vxuPMk@_=,!P襗2@lJǹ*UPl#PekRYHJBrɱgW@ɡ:qUPx޼y̷Hp*g((v).lY_Akg:4e#4/|NqW{i*x_uWR07t1"C߰A6Z(eAʒ@eqLj9)eȕa R=R:dHd rk3h܄yb :0khW&OW !b lHΜG.5a';|j[T˷F>4}t{wFx;wo'F-FIWu#D̤⼔̴` g`[Ҽxl\F\ u\\lx;wo'Fl9N3xSj@h58H.Pq F\)N -v,^K6!{ȓ!.y˶ڥIo 73CS4{љ{zxbr%NdA8k1M9e8H9umAdF0́80,Oht^t8L∎ d,407W%w9#]J~S4!@.ꅚ4f1ZY'rhy=[Y-u?dHHlz(ZK(7:v^&ڼ,b+&`Z7O[`4s`ݮ$ee%bI4%;5Hrh/ ?hڞ㑫9$+ʦA$MVw kvNe]v14^;rq(qD.Q@CUs۴(Bٵڬ~,!%!b:o쒵i9x;iMFlx;wo'F/Fv1x{!BtC'@.s9ClOx{!BtF\!fx{!BtF3h &IDxIyMȕ#CG}S0 #ѧ-o]] M#` Gꯠ%>m*oeY\?f`Hws0*#~ȷKlZyݫَU|uxUv8oJmπf9>cB?rՅUs2BRF14"`t+8ff<$ϴElŒ__x{!TtC'@.s9mssRO M,*xmR]k0e{1e ́#vRdD-3ڽ7Go]A=ܣ{tkʚC+4}eos-lߦYU 1L9#, fNR@l )QѴ(CY@<,#GYl;UC.QYȴ$I@bjyUtܜ :>8onCZ֫%/\{I<Ekרှ̐":*_v,Ȓ;$2%A0}Qȼm 39(Q>Gd8hC9:7>O@]+O|EuO၉YP~d-|u = l|< f?c-ۋnm 7ӟ7~-~tmv5:bU$ִ?Huvx{*Dt+ͯf31O<Ӄ{x{*:k V_47(_xPO W7ψxW߀H.̪̜Դ [  M &Wj^JfdoY؛'rm!?l`x'O`Foc"awx'O`Fl&_MfN8x'O`Fp6FɋM6fxMx5W--*7?>43'%(5-VE5,)%> 3BsRV\) Ey))9 ٩2hRl]x ĸY3jxijgBisXwnx[g# f&5&U1x[sg4T.̪̜Դ [%  ͍]̌FXԘ AxgB\kX_pO|@g&BԼ4ox [ Lm_ 1 a OeR&l$Mx&RX|0YEx"#d#jzbna#Snx[dzg; f5&9Hx[dzg nf5&(nxȳg fn5&Xnxȳg fn5&Vx3gF&yos ZvLPֈ0qh&A G=RY|9tG\g wyDyG!C0pڀ5Y!+R y,5v;vVzK"XB_;9;sAQV+.f?xSYQ?)3O?)q#!324xmRmk0_qU %뾄euSSfWc+y<2)A{^Nҩ++-2ZWy3U#=g klNmp՗RcX?|z7~ҥ9 2=]{S=K|9O*Ai!Szd6<18~u8N}ކ@*|@X{L6L[e7RÄ& K: Fc 씔't˙V7~6 ^,7+\EX&jt*| [+,D띬̎r9OPs'J8 (T%Aa6Om J|Cs!c2#Kx-{^v%s b8FKzAx;vSYQ?)3O?)q#%34*x}s7+peR$cNX,&[#rBZ>߿3p({] 54 >Y[vlmO'ns7ԍz/q48z3uΒ\_?X\rG7d:qa7[qw88q>n swQ|ܿMˆ]7ա15|rf㏮7NVlj ܎^swoiuwч~_79 _]g4ĨX|Ҿop)kӀ3l28 z!E#ѴWP@T#S6KR zm3#F gwb=^3͇S*dXC~ni>g&(fl]M`lr7nsӋf>unx@\>ނh^S -ki|2M~57;T2 ļu.^pxtq}^6wg?ϛ޽?iȜ^+uztru:v}suN.I].VH};{5ϏoZ'˟婵痭sxǭֻ1el]yz.;<9 9i$:n7.uA#d]oK&D>B>E/OBxоQ|+<1LA}z!e 8=nlɰk'e=!d/kW7)]=FtѯufC3uoIoOw/zJqeE&~lN=niz0_ȱO!cz i"H?\wO_Lo_?Y[tJD (gxN|b#cm- ˳f{G?Wf6z!_}{mח9oo^^Ֆ/_m˗ m>y21ql ̵_5^‡|lҡ(Y.{3}ξ[f_ξfa6hj(:`y8"lZ5[q~gӢ0 db30F0wuՓS( C I!))FI(qOIS2e5tX^7$)t/#II#.h3!YSkki[V=+% }MS!zz3Ac蟻ٴu FMmY b@_)GT-Vaݻy3܆R-LQuoEgwjqn9 ]^[l*tށEA%uбkk~tzէ3dM6+ńa00SFm g!dN}MڣebMVۅfPlrNF !^^[{}t3YA/{:qm0+h&%a b&N޿pIlԗ1lNn=%UJ OWhܿ]9: |y}l.'OSxcƛOju^b{yYѵ򻞫ʫng;VTvzמٱε}}_ ᳬ#M{dO6dgfit>?vYgm!#rQ:-]uMyH5'GϷ婧ujbҋjHI|lK+jo@J݈OIt }H7ԓt&(]KwlOG_@F}IF}ґP DY8t5Hc^IipG5Y8#G<Έ!-{IEJpFz4Pdc|y-(G1Q#.4wXA,F4֖ezg()}Et8#%o4-g8žIE=-4gTcd?Y;hqFJE H>ΞI:ݜrglO}W4,'yod[4H]3IxNMsK`M_)@I־s8[9]]bHf8,݃[&}S3]Ecgf3rV3R,f=!ּi&e$x%>3AC12:}6'@11P#,6 -*ukׄ[w[r Q7i9Őg,S.9ʻ;,N6IÇ{5^|Iζɫ`v|U-ՠ|tX/.UI{ƈ'Tt@.=2b!H/WoK{# Z*-cGzSl{JxGUJzM.GJ;[ yV9QEwO*Ja)iǖRoF*>`{ ))dYۂUlA]i_Q8e+@A{h(TG#"%CbR.g VI0{< -hQEzJPE.XSR$!;'-*n%)'Q W;ȫ>%GEeA:kE͇Q:<Ai-5U%&Nvrқ]:87^\]]Bi\vi sojkhpP%rel7 6t$uR sǛaFL8Hb2ZW}rm/_?R-Vx' :k vMgRy~dKRE1j3n[kAfEI`}hXi^&gy i j [q\@5`yy_]Zmp6 ,8Ѳq ]pD@kIoFzߐXIv^^)>ƳZ^OK3oZfjcCjq]y"zPc @KCะVk1CZE[8OI+ @mdCl XCu$Ь Uý ũ域u-Y}4`€tl\ˉHHdLR@%wd\;#죃8aLW4ꛐ V}!_#>%C/xFn7몢LddeAc /ѰE*zєj&2|sx[k+ LM΁g5kvT @(nBcRJl]Q.ExwgeKRəJ ]׋l!Acjk>>(CD_fQ3Xb,L`):a͸L:shv=ȗ5 z GR`Ɖu([oC:zcgGFADk^>ۉJD+s@2Qh A8vϵYqkQ%zϫ6a#-v`Oi 62*k=Q!f9áuY H'0/l~LL͉&40:e2&7w bWdqpqOPiH\F 8dafF1LC0͸#O#~Mv=yiΤt&Z/־XZ2gg!MAs=LKfo^C8}hZs6F R'4xiqKk.V!4/*z1LJ+ 5$9N1_ KʪúI 6Q4w}3=+uC_3ٸ&%:6J+ |$[2 O/ L-D$VГgi:)*"y(Gi$ժTt7CPXȨ=5#BRQ8>rR~V'%QiXQ]&z` 4iwUgka5UfJ4uپIs/8~& (L&Z Fe]B|Jnѱə-#V2:I@SQ/jp NSGdOG`xNB9Ky!TDi/#R3u>bY*U-Y?u~Oڒ+'u@FbFϚt<^UP%mue6J1+ VX()8}kc^oZK|X OEo8Ɣnyvn)S:<5a5  d blNJ%a0:3_йf1Z+nxY2b=2& Ӂipu9Co@F#D'`ٽ7~9˓vdЭ/3`5 L0a76b {\(5<5wM1UxxZciBf맚RD"<H"%3pEsX$Zֹ^ 3Lm4GSbdͧx4nJS\&C}1$rkkae;]GEzF@A4RNM}vEt V6?^ũt!ogXs}oQ#e!OqBDIþF.*--׸ J+*X[0`zV(drJXAhʶd WŚ+Ԩ ~XޜXɊ#L.Hlujb3@k1pxW(/킻7z\U쭨:'VߜӾ=T[$*kY {&}5j}87P K"Ϲ*N~Qo ;_S B6}ѼԀ7at\ICBCj]5Oz\>i "3ڪoߵϛe7]ve(LP&[XϢdq:/%h7(ċ01΋f)1\h@J6K^s`+ZD"/8@xyY\]bFV+ YC?%rl5pi]8*+*wK':faRE͐eEa67E-U!u*^6&TmeIK_˰RV< ˩4l/CseM zp]~їӢ͗dt\FJ(&8z 7F+]c>vQl&<fq%;L#RkOj2PԎ"XpT^Dom+mr6_WJ$/_2>(3/S"+F3j@aSaa&3m\b&U(bR UU39 E{ O}w~P* +ڳ-`LN3-`Hf^ܭ\j4{Cޠ3 _TEUފC+=p Sc8^z_0Bںa BYQ2/*+}"Q`-+ZO"k7 TiYaE{ (F] Iu3I"+"VJ(6U#[lERfR55WxlL݊=}]="hvt%D5c CY:Ϭel 4ӱeZ դ:XQeX4Hn~u9Ji,e9i\[A>ⲋϒ"úxt^4ri²[v.^GA;?,TR6:vkUn?3XNU~rlWP<WpxY}l[W&i$m.Mo$'v%q|,im]6{}~Z!AYwU7YI @hIH6ʹ=N?{=_==7*" !HVŘ顗g0Rr ?/?JOpT^m1SVsevQV ?./qa^Șa3sfL3>$yqߜLb6K2+A\e㤃5u*& mRWifhRe"̂fq6Icv~naJ˿ijDDa8'LYB&ܨTV;pP7_Q~r, nr J0!eCdtIN蛘bRJ88E:dQ\.6HQj]7'|82 se9G9`VpS|WFj'I3!v;luBKG8iѱ*lD <׹J㶺O]*E>A3~%Z>@ wX3Ш.<3PD[[MמTЁ;Ydbq1IĹ(+osn5-!N,1<'[$9αQqH?ڤ9l \7xU]&(D+Qv`R*D'ψG#Paݣ=NO2SC!xJa .F~{&PKM8 TG>%NH`KFb X$\Zvgkjӥ7r(+Sl ;σnm!ùUV[.4"d|݄W0qhl\w]އSn>{|~,V~eF] VwȋsCo^ThцԑjX`ѡ05ʣEAʳwƻ'V |oKh. GƙN&%.kWr܂v}wa=*4CB?HR'ܬBnpVuI c9zabcb;u,:Os{b[ wb2'Z>bi51 eآ)b'PsUKߘ9lyN ˞f9Gп?N9T>t()t&;G:NZb4la|i8*FcazHGcDeJH\Jօ5tL2HG|Va`X]<Ո j)LL(aS$Pk3(0WõI|l'|m+WH4T'ͳI8L#( DUNk rį\HVD/j >!EEB;0J-SQ~SI!6Bέ#h9;/՝L(>F!#sٝ P!A'hdX,dPa9ط?ks{+BW9])~ `Nt&J`~LĐN9Z;ߊHu  R/GLZ(JR\)5^0|xo"2*U_V .1aZ J$Ae2Ɖh!惙^#;j8ܛΦYdF6 =8&8/pM1SJDt1xk^3C6i#`YGSՀmk #7ы[;uJ= 緫(\WitۤT Ra~c2*R쒌99oWf/9m1 cf^V;dbv+]X92vo$~^y@̷v#K; cm-b Fvz?19A:fnxY[PFp180 @F\IJ!`JZiW֮FNt }i/Cq26igMN'iЙMfy2,a0qʶ~te7ҲԥxAvvY8Ӿ!9㛚rͦI~A&, 5ѸLiB\R,g0 i9]t.tu~d"]|Xs0Ƽ|&+yLzd̡:K^n1S|f| %bLVߵo-hPc{ 㰻J8޸E&$HH6GѼ$YKs%."qEc9Fv3jn=Cc7:=Ш;(Nх:Q 2_(ԞsU&L0S{__0؊\~wƅPKN8o Tm{c^O(KFCbh,\gKjPLJM+ÕӓeV`WHYq ݘˬ畑C:Զ=AKF,abOQ!r:e8|ͺu r~,z2@k3-١7K_-(T$Bh}ȃ~= ps̿hW*J0+y,0c>gj[C"oݒd.MB‘q¢eJ[P?GaC9,t>95M*ڦ48HaUC #gۡ#ͅ~[mo_Dӵ"}LAk b ˰YJ\#?`c(>q i 7ٶ?/O6ɚc8k)cjۇJ}*)}/SV %[oc;NW"J!hf:́q%.F9ܚ"vE5g)0:_%gr>B6ݻ]r*a0p*JYK ͢bH6X `6* U҅>A>/8iحs/bmӃ.wV(@w˅  U}Ѵ^μ _}Q.LTyέ!6RxoS\M[ V)T-&#YA7!˧.t"P1o6c^(FB2He ½̷O 7~xM\6K>| ,L08˜]bcsSjwnhT4lԀgHv`Sz i7Bu.ɔ;ua_ov8⪅+f^hl+a_;Gt' n]|𫅞9~s~wx.u>N3Pg irAB }FvI$kkۇZO%-M'j/،?5AF=""$vT e u ʰn0ΟG4Z*}=  |@읲0V?Ձ퀯,6bٽjrJu^nx `D/KD^TDB"?/wJFiI4|U# l0č+J/f!{P G] Zq.݄3,'`z wt,P4U*)ҜV#j90F\ivxgtN]*3;%2үỉV̏é(N%η NaCGT|+0 dWlJL$'_%~2^]D# %'_kRp Lf~ќNb?g!A"?vx}vͧt OM'tٛy`a%Û1`:GqW/_D)i$y *iT{hz~2U*e.!Sd_eK͢:/]jgx8# V81kXw΃1}5߯T«Pt0 :} q/O<̑Uv@,!زLᔗ)u6 *NP Aq6V/j H:4D\ 2G{أ)8Gtgd{xDە~Y:܍yŋSia# *=5ʫl$nz.5!FjSIҧrb†x.zTgEoXSJƮT7+o!z M2ܐN^½i_Qsl<:N˻l8bvp5 MVB9д^|t[ސ2h|k!|J6E͍!惙ރ#; 8ܝΦYdF6[;&8/pM鳤˩bmqw3C6i=#`YTOUmk #<7O;GuN\خ:P _kmv+(a+W1* E/(NYs߁vSM-=FL«kGL4neKR#Ǒ.(Cs^ܩ_o5h1qL73S>wǻkxY[pWom'/9vXe[k[|ۍbYݬhWX)0P^dҎ:C af 3L;iW>Kэ;WU0DbQvgn0Tr?/?ӑbwr#li5̖vUJia>"<ML<;c ^ƠOD0)Bi*ǥuݪNvÅs 4\`C(EH2l1OmHm:$.P2E s b_+V 8-/kIi_BoP#lXb0$]^s%߆IV],mCތATơ:+ (5N&&,X|i |O)Pt=%zstKuAgwOg@bߦ|E#U03}}离og.BpGwvUA5l7֋;$/6TQZln'a/m@Ok/C5 ~ؼ)BǕ1ڭAYv>Hl 7FmfB5` _w2'/a3&1.BqgX8[z+5 E-BFY5 KT[YGBZibVzزہ zkfylBJx>P :wrZ-~JkS9 ,EU|[[pXf) 9|]Go-tWñ@1gdnBj~f}h2p!{c$ܯiXa7~4,/_QoOd#RN5PV[UC;"<">*v1UX={)F aV,ڲ=oՐMdIĝfM,i.ʲ?ɟGv4Z}JX$?O:-,}'4lkr0V?Ԃk//4BZr+ RUYNx2`$DY5DB"’ȇ)K|B -[9dMF(('.!{PR GB{8iBϙ@0ۊ)mm5j@!b[ Vae@--v_;_ Y:r2.LӞYx s+C0Qsc-nI \m.~$8lK?MŷBp/Iw{mȼkޯFk+BHaDUDs \w-~h6Lze9< K 4E晕)<22n6 y* oր95ޮ06\x8+huShC[ԃPrP)gwB7=N,W"mU2_9%%aHxšd,Y#Ewtիڢ1Cp~t^](K-r/wLaн.G3>g]/KH8l#IQ~Im06Q +3Dw@ju/ycG ]=Vv1PNɆ־vvjqf3Qd8uN;SZsKŠ~QD^N}(sFQ(RZ6I#pSDC}D"\)0h66# X b{bw?t/]-EEK_Ͼ[&*=dZ%[[[O|8+J!}WG';̅Q[vKJFM١M #cA'> /t͸ud'Ϟ5*)$Er)tBI9&$ z#O*p=RY]>l*oP;Oc&4 ^N0 Ҽ؍8%X`Zv8\πyF K@06NMCh_k1r VfLpFŻ,rDܱ9܋VAN)y;C턊" <ވq-֋ڑ܋v!f34R0ĤD5&vtqp MJB

h*| Jxkqfw:^Ix;o n\ݹZBnx;o ~kk7ax;o n\ݹZBx;o \̺IݹZPcXnx;o ~j7ExuSMlEULh`$NbqԍIiIF(z흵6^gױ $JEHH,U .(R9p.ZT!~%fmSs7ofw~׮+ϑxB?hJ䮧ҋO7#t  Cۨb9Q 4@ .!H`+Q)FTu_/ZY.AZ$C"<۪(8fVXM3c$cFO5_%+>q څ2985LߨԤ06 ת V=-\Fl[ދyEl7c.|Ws7,1ʎQm6S9q?V܊_G:#h$Zab'°&==OѺ{M΁q=bǍ' |ZAijCՔ{(wd5;>@JO횎+OY_5'g:K.i?jGi`e<ܯFsi,<\̐GZ38s3N]|8UF^)ۙͺq-3[6ۦf0<6(&-|'_4vpN♜ ,2/>˹3~΅ <֝7^ďE,eܑ4&(3n1;+RǪ6 ҅8S #\X½c-Pу*$.Oفz/|d7U;J[rYAU͎K.PߖIY3LG.X+[͈q K}_msb/H͛|1^HISs\/NE&M_"29&+XXzjIFfBBHdkLʚkr`),`صAT+AZqjjd4C\OR2>]QPG39'x8Ajaxk|qa6FDE6I`Ҕ| ;.̼ҔTl%liUua20nvz33$(HWe(! STR"~X?ɆjȆ''"̏OOIqhlb],xkxq<.Ff=xkxq<.Ff=xkx ㆈn.8yoaY{ RxkcncP(R6|q@3o?'~4u5 F>xkcncP(Tn%n=Gחŭh8 *x8,nn,+ޝ%QL~(,т?δn2غhFxkcnc,pDxkcncP(̽ oW0Z> ,x[ʸqIwKJbmdzpXkD Xx[ʸqcW~햖|+yE4zDc ,x}Q!mrz{r)|ZXx[ʸq[j߲Km3z國5k7 eix8cEӶ"824t⡱(6T夈qF-޼+=1x8?y|ܔFm:{:g~@!_O ,9guU$!"ɤLlhTtNMJ-ez6>%*cםMBewn{w< Z}8i u X?gi*cfGVa"E]K/~(^10cpi(^B,wԮf:~XdV /[pS9͕̈́Y U9*MX>ǰ8V* w 6 6{o~-=}$ߡ`O$j N x;!*,ťZT`ggʥ aLc OMQ*S0U0220Ppv Q0204(h ]nWx;!"42/K9&hpx;!UpHx;!C@KAA!,83?O@\dtn\i)x;![`3/5R=x;!P`2/!hƷ-hWx!Nnx!Fv"];hx[ɷq:'; nx;Y^s^6$kxg͆X!hxs{#~xw:}3@$ajF p)100644 Makefile.am 8b7쯌a <eP2lɂ1b'~iJ540000 srcsPݙ.CQQtB2XxEVru㗘Y’HO) xxZ;PN_/#+5 100644 Makefile.am}D)f8;쉑PާkF&|3shZ|n'rjxQ<s㉍vW|*RP2zr46P;"и40000 srcCWO(7_!d_x4iM}dדwd*&exN9ɉnNιpXz M%pH T;N]azN& sdrbn:#\x;xqeN~Ȼy7e+6>\}o\ *x;xqȾij-b_Q7T}\  *xRŲ̋ r\R]ŎA)xr8kE2ĒTlUQt:100644 Makefile,M@j?##ݟM ;;%DI;z20{r42s]740000 srcY?nHK[{v?Qx6fk컧h1 x(zJa[-=|̲%>Y+1eܑԘhExN9M#L[|>X}&>=}\MlOtƾ-%},5zN& sdrbn:Y"\x;xq<׃^\{οa}+ȃ *x;xqBR<+ly/6q*ϰ I*x;xqOƤf;3lŶX 2Qs. ZOxTMo@@VbU%kfKw;k;Ҥݙ͛"0 U8ݣ `M6[(܆8r&;b2k(LK~A#9d:g |7T 3TG֌Prixv?*qKVh^ [|N; x]4v!ouB`/~Ψ" ,9j'qm_Ewяp-b(zjNxv6bUR|`sFi:],d5IyyQ=`VT,C3,Զ 2AB\ˮY+8ѱ]AF ^ޢSu[G _4ϲgZ)}_JVĭn,]~z(/ qg>̖I:oR*/B7xk&2ڜyaUiu #9 ;8^ZH AEϻZ;|ͫf$8?ۍGl;E\A!D tP҂W{ ׊ZESPdo)ck3 OG}yWx5KE583Hsce- M?!xk52ZH?'?91+%(5-BVAE583HSE"ɕYD s$$ oB"WxsBzRf^JfFAQjZf>P+%$(?&' ȕ6x9@/8'> 3BVAE583HSH?'?91gvh;x9O=XVA7<1'HV%rqe*hhxihN̗QJ)N qruj/-.ONJKL8;3z)jxyslF剳exj0# a A^Y*j[Wh^c*y딆Ћ3̯gߞ~ڧY\2&W 4;/'䀢OPk(/:EKjo ;12,Uiq{h=nC=ӏQtkfHl8(pm[Aj}*v0݀{00kXTjL4ixU oH6.n[ @|`0L!Ay  w2Q=cG4!oy >P? oKYX.yєoOZO!.JzLWvsee2{sT^_RHg`hia!46jF ?PWEQt~m;x{qcsd6b-(D(xej@I #tsi\SЂ!$وt%O-̈́7#4;:#3;u[}%[6r, WVhịxU8ns:%7 y2&ak Kk(iʃQƢ7`:{eRŴ^ʸw߶\#4O?ף DH rKN]&BVo0:'rG/y᪑kVU/ZMq-- 4 +d]Rj5 蝥Y9dR;6D]#.c*|h0'Ft:q{Fl6 A;\ ">7 y]窴d4*m-'5C2kCb@n(%8 (KRls9ޡ'w-?IDΧ'CDXa7dR z/#߳zуsW׋u:pi`J/h^scD̡>3D ^V5'(ae_S7&:mv'jE5Sxw^5vOmw=6k*"[5 sɫnsίrA8 .W0dCRXAzpN6ׇKq9x+*`.T`7f8Jc:2 ]*x@rr7;**eHgx |2100644 sound_sdl.hhYbϳ60M1LZNx+*`.R`qI`Qg 'x+*R140031QMNMIeQۺV kr76x+*`.bÅ`>G׫^:[ m(x@rr7;Ե5 j>aB]%+100644 sound_sdl.hWXzW }2Nx+*`.7_)}NzǷdmw~Douݵ4xRMo0=׿bJ{K$$j-=dcbJ5Bڨ!j >^Rn B?3MZ4ojJ?l XR5` ռQ&Z)8 n8qeQvpiBI,xgܓp޳2awa[.d.Vxu 8f1]lfu3⢴$q>ivus¦x9= {JJ8ap _6x%ץ|U_P!M } ,LK-TsqqKhr-Іڀ=5/%3m3LPW3M/yLxTˮ0+FIܨJwABͅېjU 9`cS$7<jJHY04ZMeoJ;*LwHJ-J=.{C\'5,߅jx!ta.|Ιd 0Z.sLox+? #7|2/p5-%S0@4Ut`Rq,8 8,j 37f\4Ҝ( *h\N 0Cr%3cAJ<Õ3Èu=GieUA-ǖZVj⚥E5Bݗak4~TcdZܩv"nkyUq;S9Ӄ92VֵWzDA!7傮kn0MNq- )a@z:?H{4x;s~~A~N~rbWJjqIAQjZfkpgDP+)3/%, R;1VDo`Ox{yc_pO|@gkpg~~A~N~rbWߘtE?;x;񍣞YV!=91H,rvqtusrdjEIQ"WfZ^jkpg&_pO|@gPB+58S~~A~N~rbWj^J&co(xx1sB_pO|@g~iq~N~rb~~A~ZfUnƪ?iFxŹeJvԼԢĜ&fRƨ5Y)b2?L@ZyNf=6;xn0v(26?hGdK (R`hED!L)9QB :tazivx .%i%+' ']} /P*&VT9;*n&˷|g˥WꦞJSI0<2J=A*\6.bE˞=Q9 ӏDÞuo8$(t[(k g&F`V$5E$ G7Zmc{']qva/M< } MK~vP6YP@;/3+@wTHI>B|. )A>Z(Jgf/r桗Z4ב)L$X3rZe ?t4T=I˳f3nfUYeSawDuhƄBMjuD>a 9̔4#P͊FoЍzQmf?O~9 zx[űc9癝$\|\]#}}l 0x[csd RR2Ӹ`JIxU;N@ţ@hD @$BHyE# *]Xr jk@4#X}O[_FaپzuR(9,<ɣC\LIAzWNo|gT5 WSN_^ I-R0!@4(=.PA Pdai"K <@Ts人b1QTEwhvGn .OqgxU7o#zi`òF6TZX5*mzk{N;#&E@,%** (3q ZAec%p\LN,߿ܻp\ ;I8(LTmO? )x8qBZjnr# 'xA$100644 MakefileY}L,`WlWM?k.G$eRYweXT-lIbRhOx6=h렠TeЫIQh*Jvs?_܂5JDx8qBHs4g]/Owfڼ 'xA$100644 MakefileS.U9s1$eو]MڻxOx8qBȕUm* Md|e'mu. I'xA$100644 Makefile%(|0nP餁ϑ$eP_ Zf&}BkHXOx6=7Ue6qESwQE-C 7xW*DxxQD]KmaW]Ǫ5M2vi=Z5a.ix+*`.r_яvo2;~  P*x+*`.-g֓;^dq8mDou J(x+*`.F_fI4_zue:3 (x+*`.~UO'29]{Douʿx6=yAQhYzlqn6Q\tmd-̐)^+gFx8QD71;5-3'!+~S3[`}-RlgüU*VQ8x6=)Uc_kw"Ը>@"dQ`Ĵ$r.Ez'3.sfDx8qBHWnR8Njr5 *x8qBJJ5MJU{J^l]w *'x8qBH󣌐m_Hqt 'x_$100644 MakefileCA ^ٌ/L$G2[K3E3r{:&n`jXDy =)]>?vnRO0 #[ɖx&I.W(PvKHVܞN :Km\Y!uOl SS&~<:]Tbzr:6"Q#yfFFgʯ3γ&Au3 uȹL)} /|8l4x{fM"x+*`.IR_e~91~V *x+*`.Iy3YfzCo:v (x+*`.{]2^~Ik5ˉ 7xQ wWq߇hT(Pf\u`ˬp>N{ǎ)k!A099XUV[E1rd5#-R4ike3VX.\ePQ eY38̴1 fCB)WӦx340031QppswwMaH(s 1n !T@dGH]*GL&(6zWRQoU盘ˠVmY][X??N=2a}%t] Rk°sv^{oOJrJs|QmG_4sfI \WT=2P3[޻|`Vp#-b,""əƒDI;S\zu?PIʬdt~^Uu0 t%p#@pc؈|{eB? i 4h0<Wu&#|P@4 4X5jQy{88I8LI帜?x 1㣶$JHhQWF4 鈯9ݾ\vWeQH+.M07ĜI?䏴u8[b"5ྔ"n,c܌{0S D0qjpy(6BJ.4m^>PX"@S-FcwĻ' Y>|4'Z%y$Z-I:\$'i#4Q\X˲UKd)e3 4g!b!d@lGG,(%e&C4X"꒪Fe!8Վpjΐ+ ټ}0J}>8'l:60H{ʬ(L/<_g"jdt ;}Kzr5SYQ+)Z2O皽Y3(x{!jťZT`ggarI~RjP+Mtuu15뙁5&%g(B@MNed3V0ˁn 9@K2ҋ jupZb ī4/Ul1 oGXq7wIMNyl̐8@4inf7Ʃ)t,QeGg_ 6>g)nոxl)OpEIL0p{ nHLQ5I9y%) y@sb&O-e)4Z| cS06a5c+#ĐP f~|ka8|VMfizmo-0.7.10/libsndifsdl2/.git/logs/HEAD000644 000765 000024 00000000307 12606024332 020466 0ustar00chrenderstaff000000 000000 0000000000000000000000000000000000000000 844fb1c7a500635f65b84806cbae4c7247e7efe1 Christoph Ender 1444423898 +0200 clone: from git@github.com:chrender/libsndifsdl2 fizmo-0.7.10/libsndifsdl2/.git/logs/refs/000755 000765 000024 00000000000 12606024332 021001 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/logs/refs/heads/000755 000765 000024 00000000000 12606024332 022065 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/logs/refs/remotes/000755 000765 000024 00000000000 12606024332 022457 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/logs/refs/remotes/origin/000755 000765 000024 00000000000 12606024332 023746 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libsndifsdl2/.git/logs/refs/remotes/origin/HEAD000644 000765 000024 00000000307 12606024332 024372 0ustar00chrenderstaff000000 000000 0000000000000000000000000000000000000000 844fb1c7a500635f65b84806cbae4c7247e7efe1 Christoph Ender 1444423898 +0200 clone: from git@github.com:chrender/libsndifsdl2 fizmo-0.7.10/libsndifsdl2/.git/logs/refs/heads/master000644 000765 000024 00000000307 12606024332 023303 0ustar00chrenderstaff000000 000000 0000000000000000000000000000000000000000 844fb1c7a500635f65b84806cbae4c7247e7efe1 Christoph Ender 1444423898 +0200 clone: from git@github.com:chrender/libsndifsdl2 fizmo-0.7.10/libsndifsdl2/.git/info/exclude000644 000765 000024 00000000360 12606024330 021402 0ustar00chrenderstaff000000 000000 # git ls-files --others --exclude-from=.git/info/exclude # Lines that start with '#' are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] # *~ fizmo-0.7.10/libsndifsdl2/.git/hooks/applypatch-msg.sample000755 000765 000024 00000000704 12606024330 024357 0ustar00chrenderstaff000000 000000 #!/bin/sh # # An example hook script to check the commit log message taken by # applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. The hook is # allowed to edit the commit message file. # # To enable this hook, rename this file to "applypatch-msg". . git-sh-setup test -x "$GIT_DIR/hooks/commit-msg" && exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} : fizmo-0.7.10/libsndifsdl2/.git/hooks/commit-msg.sample000755 000765 000024 00000001600 12606024330 023476 0ustar00chrenderstaff000000 000000 #!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit" with one argument, the name of the file # that has the commit message. The hook should exit with non-zero # status after issuing an appropriate message if it wants to stop the # commit. The hook is allowed to edit the commit message file. # # To enable this hook, rename this file to "commit-msg". # Uncomment the below to add a Signed-off-by line to the message. # Doing this in a hook is a bad idea in general, but the prepare-commit-msg # hook is more suited to it. # # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" # This example catches duplicate Signed-off-by lines. test "" = "$(grep '^Signed-off-by: ' "$1" | sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { echo >&2 Duplicate Signed-off-by lines. exit 1 } fizmo-0.7.10/libsndifsdl2/.git/hooks/post-update.sample000755 000765 000024 00000000275 12606024330 023676 0ustar00chrenderstaff000000 000000 #!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". exec git update-server-info fizmo-0.7.10/libsndifsdl2/.git/hooks/pre-applypatch.sample000755 000765 000024 00000000616 12606024330 024361 0ustar00chrenderstaff000000 000000 #!/bin/sh # # An example hook script to verify what is about to be committed # by applypatch from an e-mail message. # # The hook should exit with non-zero status after issuing an # appropriate message if it wants to stop the commit. # # To enable this hook, rename this file to "pre-applypatch". . git-sh-setup test -x "$GIT_DIR/hooks/pre-commit" && exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} : fizmo-0.7.10/libsndifsdl2/.git/hooks/pre-commit.sample000755 000765 000024 00000003152 12606024330 023502 0ustar00chrenderstaff000000 000000 #!/bin/sh # # An example hook script to verify what is about to be committed. # Called by "git commit" with no arguments. The hook should # exit with non-zero status after issuing an appropriate message if # it wants to stop the commit. # # To enable this hook, rename this file to "pre-commit". if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi # If you want to allow non-ASCII filenames set this variable to true. allownonascii=$(git config --bool hooks.allownonascii) # Redirect output to stderr. exec 1>&2 # Cross platform projects tend to avoid non-ASCII filenames; prevent # them from being added to the repository. We exploit the fact that the # printable range starts at the space character and ends with tilde. if [ "$allownonascii" != "true" ] && # Note that the use of brackets around a tr range is ok here, (it's # even required, for portability to Solaris 10's /usr/bin/tr), since # the square bracket bytes happen to fall in the designated range. test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then cat <<\EOF Error: Attempt to add a non-ASCII file name. This can cause problems if you want to work with people on other platforms. To be portable it is advisable to rename the file. If you know what you are doing you can disable this check using: git config hooks.allownonascii true EOF exit 1 fi # If there are whitespace errors, print the offending file names and fail. exec git diff-index --check --cached $against -- fizmo-0.7.10/libsndifsdl2/.git/hooks/pre-push.sample000755 000765 000024 00000002504 12606024330 023171 0ustar00chrenderstaff000000 000000 #!/bin/sh # An example hook script to verify what is about to be pushed. Called by "git # push" after it has checked the remote status, but before anything has been # pushed. If this script exits with a non-zero status nothing will be pushed. # # This hook is called with the following parameters: # # $1 -- Name of the remote to which the push is being done # $2 -- URL to which the push is being done # # If pushing without using a named remote those arguments will be equal. # # Information about the commits which are being pushed is supplied as lines to # the standard input in the form: # # # # This sample shows how to prevent push of commits where the log message starts # with "WIP" (work in progress). remote="$1" url="$2" z40=0000000000000000000000000000000000000000 while read local_ref local_sha remote_ref remote_sha do if [ "$local_sha" = $z40 ] then # Handle delete : else if [ "$remote_sha" = $z40 ] then # New branch, examine all commits range="$local_sha" else # Update to existing branch, examine new commits range="$remote_sha..$local_sha" fi # Check for WIP commit commit=`git rev-list -n 1 --grep '^WIP' "$range"` if [ -n "$commit" ] then echo >&2 "Found WIP commit in $local_ref, not pushing" exit 1 fi fi done exit 0 fizmo-0.7.10/libsndifsdl2/.git/hooks/pre-rebase.sample000755 000765 000024 00000011527 12606024330 023460 0ustar00chrenderstaff000000 000000 #!/bin/sh # # Copyright (c) 2006, 2008 Junio C Hamano # # The "pre-rebase" hook is run just before "git rebase" starts doing # its job, and can prevent the command from running by exiting with # non-zero status. # # The hook is called with the following parameters: # # $1 -- the upstream the series was forked from. # $2 -- the branch being rebased (or empty when rebasing the current branch). # # This sample shows how to prevent topic branches that are already # merged to 'next' branch from getting rebased, because allowing it # would result in rebasing already published history. publish=next basebranch="$1" if test "$#" = 2 then topic="refs/heads/$2" else topic=`git symbolic-ref HEAD` || exit 0 ;# we do not interrupt rebasing detached HEAD fi case "$topic" in refs/heads/??/*) ;; *) exit 0 ;# we do not interrupt others. ;; esac # Now we are dealing with a topic branch being rebased # on top of master. Is it OK to rebase it? # Does the topic really exist? git show-ref -q "$topic" || { echo >&2 "No such branch $topic" exit 1 } # Is topic fully merged to master? not_in_master=`git rev-list --pretty=oneline ^master "$topic"` if test -z "$not_in_master" then echo >&2 "$topic is fully merged to master; better remove it." exit 1 ;# we could allow it, but there is no point. fi # Is topic ever merged to next? If so you should not be rebasing it. only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` only_next_2=`git rev-list ^master ${publish} | sort` if test "$only_next_1" = "$only_next_2" then not_in_topic=`git rev-list "^$topic" master` if test -z "$not_in_topic" then echo >&2 "$topic is already up-to-date with master" exit 1 ;# we could allow it, but there is no point. else exit 0 fi else not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` /usr/bin/perl -e ' my $topic = $ARGV[0]; my $msg = "* $topic has commits already merged to public branch:\n"; my (%not_in_next) = map { /^([0-9a-f]+) /; ($1 => 1); } split(/\n/, $ARGV[1]); for my $elem (map { /^([0-9a-f]+) (.*)$/; [$1 => $2]; } split(/\n/, $ARGV[2])) { if (!exists $not_in_next{$elem->[0]}) { if ($msg) { print STDERR $msg; undef $msg; } print STDERR " $elem->[1]\n"; } } ' "$topic" "$not_in_next" "$not_in_master" exit 1 fi exit 0 ################################################################ This sample hook safeguards topic branches that have been published from being rewound. The workflow assumed here is: * Once a topic branch forks from "master", "master" is never merged into it again (either directly or indirectly). * Once a topic branch is fully cooked and merged into "master", it is deleted. If you need to build on top of it to correct earlier mistakes, a new topic branch is created by forking at the tip of the "master". This is not strictly necessary, but it makes it easier to keep your history simple. * Whenever you need to test or publish your changes to topic branches, merge them into "next" branch. The script, being an example, hardcodes the publish branch name to be "next", but it is trivial to make it configurable via $GIT_DIR/config mechanism. With this workflow, you would want to know: (1) ... if a topic branch has ever been merged to "next". Young topic branches can have stupid mistakes you would rather clean up before publishing, and things that have not been merged into other branches can be easily rebased without affecting other people. But once it is published, you would not want to rewind it. (2) ... if a topic branch has been fully merged to "master". Then you can delete it. More importantly, you should not build on top of it -- other people may already want to change things related to the topic as patches against your "master", so if you need further changes, it is better to fork the topic (perhaps with the same name) afresh from the tip of "master". Let's look at this example: o---o---o---o---o---o---o---o---o---o "next" / / / / / a---a---b A / / / / / / / / c---c---c---c B / / / / \ / / / / b---b C \ / / / / / \ / ---o---o---o---o---o---o---o---o---o---o---o "master" A, B and C are topic branches. * A has one fix since it was merged up to "next". * B has finished. It has been fully merged up to "master" and "next", and is ready to be deleted. * C has not merged to "next" at all. We would want to allow C to be rebased, refuse A, and encourage B to be deleted. To compute (1): git rev-list ^master ^topic next git rev-list ^master next if these match, topic has not merged in next at all. To compute (2): git rev-list master..topic if this is empty, it is fully merged to "master". fizmo-0.7.10/libsndifsdl2/.git/hooks/prepare-commit-msg.sample000755 000765 000024 00000002327 12606024330 025141 0ustar00chrenderstaff000000 000000 #!/bin/sh # # An example hook script to prepare the commit log message. # Called by "git commit" with the name of the file that has the # commit message, followed by the description of the commit # message's source. The hook's purpose is to edit the commit # message file. If the hook fails with a non-zero status, # the commit is aborted. # # To enable this hook, rename this file to "prepare-commit-msg". # This hook includes three examples. The first comments out the # "Conflicts:" part of a merge commit. # # The second includes the output of "git diff --name-status -r" # into the message, just before the "git status" output. It is # commented because it doesn't cope with --amend or with squashed # commits. # # The third example adds a Signed-off-by line to the message, that can # still be edited. This is rarely a good idea. case "$2,$3" in merge,) /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; # ,|template,) # /usr/bin/perl -i.bak -pe ' # print "\n" . `git diff --cached --name-status -r` # if /^#/ && $first++ == 0' "$1" ;; *) ;; esac # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" fizmo-0.7.10/libsndifsdl2/.git/hooks/update.sample000755 000765 000024 00000007033 12606024330 022712 0ustar00chrenderstaff000000 000000 #!/bin/sh # # An example hook script to blocks unannotated tags from entering. # Called by "git receive-pack" with arguments: refname sha1-old sha1-new # # To enable this hook, rename this file to "update". # # Config # ------ # hooks.allowunannotated # This boolean sets whether unannotated tags will be allowed into the # repository. By default they won't be. # hooks.allowdeletetag # This boolean sets whether deleting tags will be allowed in the # repository. By default they won't be. # hooks.allowmodifytag # This boolean sets whether a tag may be modified after creation. By default # it won't be. # hooks.allowdeletebranch # This boolean sets whether deleting branches will be allowed in the # repository. By default they won't be. # hooks.denycreatebranch # This boolean sets whether remotely creating branches will be denied # in the repository. By default this is allowed. # # --- Command line refname="$1" oldrev="$2" newrev="$3" # --- Safety check if [ -z "$GIT_DIR" ]; then echo "Don't run this script from the command line." >&2 echo " (if you want, you could supply GIT_DIR then run" >&2 echo " $0 )" >&2 exit 1 fi if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then echo "usage: $0 " >&2 exit 1 fi # --- Config allowunannotated=$(git config --bool hooks.allowunannotated) allowdeletebranch=$(git config --bool hooks.allowdeletebranch) denycreatebranch=$(git config --bool hooks.denycreatebranch) allowdeletetag=$(git config --bool hooks.allowdeletetag) allowmodifytag=$(git config --bool hooks.allowmodifytag) # check for no description projectdesc=$(sed -e '1q' "$GIT_DIR/description") case "$projectdesc" in "Unnamed repository"* | "") echo "*** Project description file hasn't been set" >&2 exit 1 ;; esac # --- Check types # if $newrev is 0000...0000, it's a commit to delete a ref. zero="0000000000000000000000000000000000000000" if [ "$newrev" = "$zero" ]; then newrev_type=delete else newrev_type=$(git cat-file -t $newrev) fi case "$refname","$newrev_type" in refs/tags/*,commit) # un-annotated tag short_refname=${refname##refs/tags/} if [ "$allowunannotated" != "true" ]; then echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 exit 1 fi ;; refs/tags/*,delete) # delete tag if [ "$allowdeletetag" != "true" ]; then echo "*** Deleting a tag is not allowed in this repository" >&2 exit 1 fi ;; refs/tags/*,tag) # annotated tag if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 then echo "*** Tag '$refname' already exists." >&2 echo "*** Modifying a tag is not allowed in this repository." >&2 exit 1 fi ;; refs/heads/*,commit) # branch if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then echo "*** Creating a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/heads/*,delete) # delete branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a branch is not allowed in this repository" >&2 exit 1 fi ;; refs/remotes/*,commit) # tracking branch ;; refs/remotes/*,delete) # delete tracking branch if [ "$allowdeletebranch" != "true" ]; then echo "*** Deleting a tracking branch is not allowed in this repository" >&2 exit 1 fi ;; *) # Anything else (is there anything else?) echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 exit 1 ;; esac # --- Finished exit 0 fizmo-0.7.10/libglkif/CHANGELOG.txt000644 000765 000024 00000003770 12606024545 017506 0ustar00chrenderstaff000000 000000 Version 0.1.8 -- October 9, 2015 - Minor autoconf-changes to make build work with fizmo-dist-0.7.10. Version 0.1.7 -- March 19, 2014 - Adapted to automake v1.14 "subdir-objects" option. - Added "clean-dev" build target for better cleanup of installed development files, which helps debian packaging. - Added missing license/copyright information. Version 0.1.6 -- June 5, 2013 - Fixed verification of libglktermw location in "config-libs.m4". - Renamed "install-locales" to "install-data" build target. - Adapted to new readchar function names in file system interface. Version 0.1.5 -- November 30, 2012 - Fixed include statement in "configure.ac". Version 0.1.4 -- September 17, 2012 - Adapted to new autoconf/automake build system. Version 0.1.3 -- August 1, 2012 - Merged with Andrew Plotkin's iOS-fizmo implementation: replaced old "fizmo_register_ask_user_for_file_function" with "prompt_for_file" implementation in "glk_screen_if.c", added quote box support. Version 0.1.2 -- March 9, 2012 - Merged zarf's GLK changes into "glk_screen_if.c". The new version 0.1.2 fixes screen size detection, timed input and adds lowering of the input line. - Fixed missing $(DESTDIR) variable -- should already have been present since version 0.1.1. Version 0.1.1 -- November 6, 2011 - Fixed missing "override" statments for CFLAGS in Makefiles. - Fixed $(DESTDIR) evaluation in config.[default|macports].mk. - Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. Version 0.1.0 -- September 18, 2011 - libglkif was built from code in Andrew Plotkin's github repository. It represents an interface translating fizmo's Z-machine output operations into GLK-invocations. The current code should be seen as a first experimental release. Please note that bug reports should be sent to instead of sending them to Andrew Plotkin. - The "fizmo-glktermw" frontend relies on libglkif for it's GLK output. fizmo-0.7.10/libglkif/config-conds.m4000644 000765 000024 00000000000 12606024323 020242 0ustar00chrenderstaff000000 000000 fizmo-0.7.10/libglkif/config-flags.m4000644 000765 000024 00000000532 12606024323 020242 0ustar00chrenderstaff000000 000000 AC_ARG_WITH([glktermw-includedir], [AS_HELP_STRING([--with-glktermw-includedir], [Specify include directory to use for glktermw])], [], [with_glktermw_includedir=]) AC_ARG_WITH([glktermw-libdir], [AS_HELP_STRING([--with-glktermw-libdir], [Specify library directory for glktermw])], [], [with_glktermw_libdir=]) fizmo-0.7.10/libglkif/config-libs.m4000644 000765 000024 00000003454 12606024323 020105 0ustar00chrenderstaff000000 000000 libglkif_nonpkg_cflags="" libglkif_nonpkg_libs="" PKG_CHECK_MODULES( [ncursesw], [ncursesw], [AS_IF([test "x$libglkif_reqs" != "x"], [ libglkif_reqs+=", " ]) libglkif_reqs+="ncursesw"], [AC_MSG_ERROR([Could not find ncursesw.]) AS_EXIT]) AC_CHECK_HEADER([glkterm.h], [], [for dir in $with_glktermw_includedir /usr/include /usr/local/include ; do AC_MSG_CHECKING(for $dir/glkterm.h) if [ test -e $dir/glkterm.h ]; then AC_MSG_RESULT(yes) glk_h_dir=$dir break else AC_MSG_RESULT(no) fi done if [ test "x$glk_h_dir" == "x"] ; then echo "Could not find glk.h." echo "Try setting the location using --with-glktermw-includedir." AS_EXIT fi libglkif_nonpkg_cflags+="-I$glk_h_dir"]) AC_CHECK_LIB([glktermw], [main], [], [LIBS_OLD=$LIBS LIBS="-lglktermw $ncursesw_LIBS" for dir in $with_glktermw_libdir /usr/lib /usr/local/lib ; do AC_MSG_CHECKING(for libglktermw in $dir) LDFLAGS="-L$dir" AC_LINK_IFELSE( [AC_LANG_SOURCE( [[ #include #include "$glk_h_dir/glk.h" #include "$glk_h_dir/glkstart.h" glkunix_argumentlist_t glkunix_arguments[] = { }; int glkunix_startup_code(glkunix_startup_t *data) { } void glk_main(void) { glk_exit(); } ]])], [AC_MSG_RESULT(yes) glk_l_dir=$dir break], [AC_MSG_RESULT(no)]) done if [ test "x$glk_l_dir" == "x"] ; then echo "Could not find libglktermw." echo "Try setting the location using --with-glktermw-libdir." AC_MSG_ERROR([Could not find libglktermw.]) AC_MSG_ERROR([You need to specify libglktermw.a location using "--with-glktermw-libdir=".]) AS_EXIT fi LIBS=$LIBS_OLD libglkif_nonpkg_libs="-L$glk_l_dir -lglktermw" ]) fizmo-0.7.10/libglkif/config-subst.m4000644 000765 000024 00000001034 12606024323 020304 0ustar00chrenderstaff000000 000000 # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. AC_SUBST([LIBGLKIF_NONPKG_CFLAGS], "$libglkif_nonpkg_cflags") AC_SUBST([LIBGLKIF_NONPKG_LIBS], "$libglkif_nonpkg_libs") AC_SUBST([libglkif_CFLAGS], "-I$build_prefix_cflags $libglkif_nonpkg_cflags") AC_SUBST([libglkif_LIBS], "-L$build_prefix_libs -lglkif $libglkif_nonpkg_libs") fizmo-0.7.10/libglkif/configure.ac000644 000765 000024 00000004412 12606024323 017730 0ustar00chrenderstaff000000 000000 # configure.ac # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AC_ARG_ENABLE([tracing], [AS_HELP_STRING([--enable-tracing], [enable tracelog for debugging])], [], [enable_tracing=no]) m4_include(config-flags.m4) AC_INIT( [libglkif], [0.1.8], fizmo@spellbreaker.org, libglkif) AC_CONFIG_AUX_DIR([.]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_PROG_CC AC_PROG_RANLIB AM_PROG_AR libglkif_reqs="libfizmo >= 0.7.8" PKG_CHECK_MODULES([libfizmo], [libfizmo >= 0.7.8]) m4_include(config-libs.m4) AM_CONDITIONAL([ENABLE_TRACING], [test "$enable_tracing" = "yes"]) AC_SUBST([DEV_BUILD_PREFIX], "$DESTDIR$prefix") AC_SUBST([LIBGLKIF_REQS], $libglkif_reqs) AC_SUBST([LIBGLKIF_NONPKG_CFLAGS], $libglkif_nonpkg_cflags) AC_SUBST([LIBGLKIF_NONPKG_LIBS], $libglkif_nonpkg_libs) AC_CONFIG_FILES([Makefile src/glk_interface/Makefile]) AC_OUTPUT fizmo-0.7.10/libglkif/COPYRIGHT.txt000644 000765 000024 00000002725 12606024545 017566 0ustar00chrenderstaff000000 000000 Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. fizmo-0.7.10/libglkif/doc/000755 000765 000024 00000000000 12606024323 016206 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libglkif/Makefile.am000644 000765 000024 00000006641 12606024323 017504 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AUTOMAKE_OPTIONS = -Wno-override localedir = $(datarootdir)/fizmo/locales fizmo_build_prefix=$(DEV_BUILD_PREFIX) PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig PKGFILE = $(PKG_DIR)/libglkif.pc SUBDIRS = src/glk_interface . noinst_LIBRARIES = libglkif.a libglkif.a:: cd src/glk_interface ; make mv src/glk_interface/libglkif.a . install-dev:: libglkif.a mkdir -p $(fizmo_build_prefix)/lib/fizmo mkdir -p $(fizmo_build_prefix)/include/fizmo/glk_interface cp src/glk_interface/*.h \ $(fizmo_build_prefix)/include/fizmo/glk_interface cp libglkif.a $(fizmo_build_prefix)/lib/fizmo mkdir -p $(PKG_DIR) echo 'prefix=$(fizmo_build_prefix)' >$(PKGFILE) echo 'exec_prefix=$${prefix}' >>$(PKGFILE) echo 'libdir=$${exec_prefix}/lib/fizmo' >>$(PKGFILE) echo 'includedir=$${prefix}/include/fizmo' >>$(PKGFILE) echo >>$(PKGFILE) echo 'Name: libglkif' >>$(PKGFILE) echo 'Description: libglkif' >>$(PKGFILE) echo 'Version: 0.1.8' >>$(PKGFILE) echo 'Requires: $(LIBGLKIF_REQS) ' >>$(PKGFILE) echo 'Requires.private:' >>$(PKGFILE) echo 'Cflags: -I$(fizmo_build_prefix)/include/fizmo $(LIBGLKIF_NONPKG_CFLAGS)' >>$(PKGFILE) echo 'Libs: -L$(fizmo_build_prefix)/lib/fizmo -lglkif $(LIBGLKIF_NONPKG_LIBS)' >>$(PKGFILE) echo >>$(PKGFILE) install-data-local:: mkdir -p $(DESTDIR)$(localedir) for l in `cd src/locales ; ls -d ??_??`; \ do \ mkdir -p $(DESTDIR)$(localedir)/$$l; \ cp src/locales/$$l/*.txt $(DESTDIR)$(localedir)/$$l; \ done # About "-rmdir": make ignores errors of commands which are prefixed with # a - sign. rmdir may fail in clean-dev in case other libs have installed # development files, or in case clean-dev has been run before. clean-dev:: -rm "$(fizmo_build_prefix)/lib/fizmo/libglkif.a" -rmdir "$(fizmo_build_prefix)/lib/fizmo" rm -rf "$(fizmo_build_prefix)/include/fizmo/glk_interface" -rmdir "$(fizmo_build_prefix)/include/fizmo" -rmdir "$(fizmo_build_prefix)/include" -rm "$(PKGFILE)" -rmdir "$(PKG_DIR)" -rmdir "$(fizmo_build_prefix)/lib" fizmo-0.7.10/libglkif/Makefile.in000644 000765 000024 00000063207 12606024550 017520 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : subdir = libglkif ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libglkif_a_AR = $(AR) $(ARFLAGS) libglkif_a_LIBADD = libglkif_a_SOURCES = libglkif.c libglkif_a_OBJECTS = libglkif.$(OBJEXT) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = libglkif.c DIST_SOURCES = libglkif.c RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = $(datarootdir)/fizmo/locales localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AUTOMAKE_OPTIONS = -Wno-override fizmo_build_prefix = $(DEV_BUILD_PREFIX) PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig PKGFILE = $(PKG_DIR)/libglkif.pc SUBDIRS = src/glk_interface . noinst_LIBRARIES = libglkif.a all: all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 libglkif/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libglkif/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libglkif.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 @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 check-am: all-am check: check-recursive all-am: Makefile $(LIBRARIES) installdirs: installdirs-recursive installdirs-am: 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: 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-recursive clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: 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 -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-noinstLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local 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 installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile libglkif.a:: cd src/glk_interface ; make mv src/glk_interface/libglkif.a . install-dev:: libglkif.a mkdir -p $(fizmo_build_prefix)/lib/fizmo mkdir -p $(fizmo_build_prefix)/include/fizmo/glk_interface cp src/glk_interface/*.h \ $(fizmo_build_prefix)/include/fizmo/glk_interface cp libglkif.a $(fizmo_build_prefix)/lib/fizmo mkdir -p $(PKG_DIR) echo 'prefix=$(fizmo_build_prefix)' >$(PKGFILE) echo 'exec_prefix=$${prefix}' >>$(PKGFILE) echo 'libdir=$${exec_prefix}/lib/fizmo' >>$(PKGFILE) echo 'includedir=$${prefix}/include/fizmo' >>$(PKGFILE) echo >>$(PKGFILE) echo 'Name: libglkif' >>$(PKGFILE) echo 'Description: libglkif' >>$(PKGFILE) echo 'Version: 0.1.8' >>$(PKGFILE) echo 'Requires: $(LIBGLKIF_REQS) ' >>$(PKGFILE) echo 'Requires.private:' >>$(PKGFILE) echo 'Cflags: -I$(fizmo_build_prefix)/include/fizmo $(LIBGLKIF_NONPKG_CFLAGS)' >>$(PKGFILE) echo 'Libs: -L$(fizmo_build_prefix)/lib/fizmo -lglkif $(LIBGLKIF_NONPKG_LIBS)' >>$(PKGFILE) echo >>$(PKGFILE) install-data-local:: mkdir -p $(DESTDIR)$(localedir) for l in `cd src/locales ; ls -d ??_??`; \ do \ mkdir -p $(DESTDIR)$(localedir)/$$l; \ cp src/locales/$$l/*.txt $(DESTDIR)$(localedir)/$$l; \ done # About "-rmdir": make ignores errors of commands which are prefixed with # a - sign. rmdir may fail in clean-dev in case other libs have installed # development files, or in case clean-dev has been run before. clean-dev:: -rm "$(fizmo_build_prefix)/lib/fizmo/libglkif.a" -rmdir "$(fizmo_build_prefix)/lib/fizmo" rm -rf "$(fizmo_build_prefix)/include/fizmo/glk_interface" -rmdir "$(fizmo_build_prefix)/include/fizmo" -rmdir "$(fizmo_build_prefix)/include" -rm "$(PKGFILE)" -rmdir "$(PKG_DIR)" -rmdir "$(fizmo_build_prefix)/lib" # 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: fizmo-0.7.10/libglkif/src/000755 000765 000024 00000000000 12606024323 016230 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libglkif/src/glk_interface/000755 000765 000024 00000000000 12606024550 021027 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libglkif/src/locales/000755 000765 000024 00000000000 12606024323 017652 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libglkif/src/locales/de_DE/000755 000765 000024 00000000000 12606024323 020612 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libglkif/src/locales/en_US/000755 000765 000024 00000000000 12606024323 020663 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libglkif/src/locales/fr_FR/000755 000765 000024 00000000000 12606024323 020650 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libglkif/src/locales/libglkif_locales.c000644 000765 000024 00000003326 12606024323 023307 0ustar00chrenderstaff000000 000000 /* libglk_locales.c * * This file is part of fizmo. * * Copyright (c) 2011-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef libglk_locales_c_INCLUDED #define libglk_locales_c_INCLUDED #include "tools/types.h" z_ucs libglkif_module_name[] = { 'l', 'i', 'b', 'g', 'l', 'k', 'i', 'f', 0}; #endif /* libglk_locales_c_INCLUDED */ fizmo-0.7.10/libglkif/src/locales/libglkif_locales.h000644 000765 000024 00000003324 12606024323 023312 0ustar00chrenderstaff000000 000000 /* libglkif_locales.h * * This file is part of fizmo. * * Copyright (c) 2011-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef libglkif_locales_h_INCLUDED #define libglkif_locales_h_INCLUDED #define i18n_libglkif_NOT_YET_IMPLEMENTED_IN_LIBGLKIF 0 extern z_ucs libglkif_module_name[]; #endif /* libglkif_locales_h_INCLUDED */ fizmo-0.7.10/libglkif/src/locales/fr_FR/libglkif_i18n.txt000644 000765 000024 00000000041 12606024323 024026 0ustar00chrenderstaff000000 000000 Not yet implemented in libglkif. fizmo-0.7.10/libglkif/src/locales/en_US/libglkif_i18n.txt000644 000765 000024 00000000041 12606024323 024041 0ustar00chrenderstaff000000 000000 Not yet implemented in libglkif. fizmo-0.7.10/libglkif/src/locales/de_DE/libglkif_i18n.txt000644 000765 000024 00000000046 12606024323 023775 0ustar00chrenderstaff000000 000000 Noch nicht in libglkif implementiert. fizmo-0.7.10/libglkif/src/glk_interface/glk_blorb_if.c000644 000765 000024 00000007612 12606024323 023612 0ustar00chrenderstaff000000 000000 /* glk_blorb_if.c * * This file is part of fizmo. * * Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef glk_blorb_c_INCLUDED #define glk_blorb_c_INCLUDED #include #include #include #include #include #include #include "glk.h" //#include "glkint.h" #include "glkstart.h" /* This comes with the Glk library. */ #include #include #include #include #include #include #include #include //#include "glk.h" //#include "glkstart.h" /* This comes with the Glk library. */ #include "gi_blorb.h" z_blorb_map* glkint_init_blorb_map(z_file *blorb_file) { z_blorb_map *result; giblorb_map_t *map_ptr; if ((result = malloc(sizeof(z_blorb_map))) == NULL) return NULL; giblorb_create_map((strid_t)blorb_file->file_object, &map_ptr); result->blorb_map_implementation = map_ptr; return result; } long glkint_get_blorb_offset(z_blorb_map *blorb_map, int usage, int resnum) { giblorb_map_t *map_ptr = (giblorb_map_t*)blorb_map->blorb_map_implementation; giblorb_result_t res; glui32 glk_usage; if (usage == Z_BLORB_TYPE_PICT) glk_usage = giblorb_ID_Pict; else if (usage == Z_BLORB_TYPE_SOUND) glk_usage = giblorb_ID_Snd; else if (usage == Z_BLORB_TYPE_EXEC) glk_usage = giblorb_ID_Exec; else return -1; if (giblorb_load_resource( map_ptr, giblorb_method_FilePos, &res, glk_usage, resnum) == giblorb_err_None) return res.data.startpos; else return -1; } int glkint_get_frontispiece_resource_number(z_blorb_map *blorb_map) { glui32 frontispiece_type = giblorb_make_id('F', 's', 'p', 'c'); giblorb_map_t *map_ptr = (giblorb_map_t*)blorb_map->blorb_map_implementation; giblorb_result_t res; uint8_t *ptr; giblorb_load_chunk_by_type( map_ptr, giblorb_method_Memory, &res, frontispiece_type, 0); if (res.length != 4) return -1; else { ptr = res.data.ptr; return (ptr[0] << 24) | (ptr[1] << 16) | (ptr[2] << 8) | (ptr[3]); } } int glkint_free_blorb_map(z_blorb_map *blorb_map) { giblorb_destroy_map((giblorb_map_t*)blorb_map->blorb_map_implementation); return 0; } struct z_blorb_interface glkint_blorb_interface = { &glkint_init_blorb_map, &glkint_get_blorb_offset, &glkint_get_frontispiece_resource_number, &glkint_free_blorb_map }; #endif // glk_blorb_c_INCLUDED fizmo-0.7.10/libglkif/src/glk_interface/glk_blorb_if.h000644 000765 000024 00000003416 12606024323 023615 0ustar00chrenderstaff000000 000000 /* glk_blorb_if.h * * This file is part of fizmo. * * Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef glk_blorb_h_INCLUDED #define glk_blorb_h_INCLUDED #include #ifndef glk_blorb_c_INCLUDED extern struct z_blorb_interface glkint_blorb_interface; #endif // glk_blorb_c_INCLUDED #endif // glk_blorb_h_INCLUDED fizmo-0.7.10/libglkif/src/glk_interface/glk_filesys_if.c000644 000765 000024 00000030655 12606024323 024173 0ustar00chrenderstaff000000 000000 /* glk_filesys_if.c * * This file is part of fizmo. * * Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef glk_filesys_c_INCLUDED #define glk_filesys_c_INCLUDED #include #include #include #include #include #include #include "glk.h" //#include "glkint.h" #include "glkstart.h" /* This comes with the Glk library. */ #include #include #include #include #include #include #include #include #include #include "../locales/libglkif_locales.h" #include "glk_filesys_if.h" #include "glk_interface.h" static char *vsnprintf_buf = NULL; static size_t vsnprintf_buf_size = 0; static z_file *glkint_openfile(char *filename, int filetype, int fileaccess) { frefid_t fileref = NULL; strid_t str = NULL; glui32 usage, fmode; z_file *result; int implementation = -1; TRACE_LOG("openfile: %s\n", filename); if (filename == NULL) return NULL; if (filetype == FILETYPE_SAVEGAME) { usage = fileusage_SavedGame | fileusage_BinaryMode; implementation = FILE_IMPLEMENTATION_GLK; } else if (filetype == FILETYPE_TRANSCRIPT) { usage = fileusage_Transcript | fileusage_TextMode; implementation = FILE_IMPLEMENTATION_GLK; } else if (filetype == FILETYPE_INPUTRECORD) { usage = fileusage_InputRecord | fileusage_TextMode; implementation = FILE_IMPLEMENTATION_GLK; } else if (filetype == FILETYPE_DATA) { usage = fileusage_Data | fileusage_BinaryMode; implementation = FILE_IMPLEMENTATION_STDIO; } else if (filetype == FILETYPE_TEXT) { usage = fileusage_Data | fileusage_TextMode; implementation = FILE_IMPLEMENTATION_STDIO; } else return NULL; if (implementation == FILE_IMPLEMENTATION_GLK) { if (fileaccess == FILEACCESS_READ) fmode = filemode_Read; else if (fileaccess == FILEACCESS_WRITE) fmode = filemode_Write; else if (fileaccess == FILEACCESS_APPEND) fmode = filemode_WriteAppend; else return NULL; fileref = glk_fileref_create_by_name(usage, filename, 0); if (!fileref) return NULL; TRACE_LOG("new open file: %s\n", filename); str = glk_stream_open_file(fileref, fmode, 2); /* Dispose of the fileref, whether the stream opened successfully * or not. */ glk_fileref_destroy(fileref); if (!str) { TRACE_LOG("Couldn't GLK-open: %s\n", filename); return NULL; } if ((result = malloc(sizeof(z_file))) == NULL) return NULL; result = zfile_from_glk_strid(str, filename, filetype, fileaccess); } else if (implementation == FILE_IMPLEMENTATION_STDIO) { if ((result = z_filesys_interface_c.openfile( filename, filetype, fileaccess)) != NULL) result->implementation = FILE_IMPLEMENTATION_STDIO; } else return NULL; return result; } int glkint_closefile(z_file *file_to_close) { if (file_to_close == NULL) return -1; if (file_to_close->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.closefile(file_to_close); else { if (file_to_close->file_object) glk_stream_close((strid_t)file_to_close->file_object, NULL); if (file_to_close->filename) free(file_to_close->filename); file_to_close->file_object = NULL; file_to_close->filename = NULL; free(file_to_close); return 0; } } int glkint_readchar(z_file *fileref) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.readchar(fileref); else { int ch = glk_get_char_stream((strid_t)fileref->file_object); if (ch < 0) return -1; return ch; } } size_t glkint_readchars(void *ptr, size_t len, z_file *fileref) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.readchars(ptr, len, fileref); else return glk_get_buffer_stream((strid_t)fileref->file_object, ptr, len); } int glkint_writechar(int ch, z_file *fileref) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.writechar(ch, fileref); else { glk_put_char_stream((strid_t)fileref->file_object, ch); return ch; } } size_t glkint_writechars(void *ptr, size_t len, z_file *fileref) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.writechars(ptr, len, fileref); else { glk_put_buffer_stream((strid_t)fileref->file_object, ptr, len); return len; } } int glkint_writestring(char *s, z_file *fileref) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.writestring(s, fileref); else return glkint_writechars(s, strlen(s), fileref); } int glkint_writeucsstring(z_ucs *s, z_file *fileref) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.writeucsstring(s, fileref); else { int len; for (len=0; s[len]; len++) { }; glk_put_buffer_stream_uni((strid_t)fileref->file_object, s, len); return len; } } int glkint_vfileprintf(z_file *fileref, char *format, va_list ap) { long ret_val; size_t new_size; char *new_buf; va_list ap_copy; do { va_copy(ap_copy, ap); ret_val = vsnprintf(vsnprintf_buf, vsnprintf_buf_size, format, ap_copy); if ((ret_val == -1) || (ret_val > (int)vsnprintf_buf_size)) { new_size = vsnprintf_buf_size + 8192; if ((new_buf = realloc(vsnprintf_buf, new_size)) == NULL) return -1; vsnprintf_buf = new_buf; vsnprintf_buf_size = new_size; ret_val = -1; } } while (ret_val == -1); TRACE_LOG("fileprintf: \"%s\".\n", vsnprintf_buf); return glkint_writestring(vsnprintf_buf, fileref); } int glkint_fileprintf(z_file *fileref, char *format, ...) { va_list args; int result; va_start(args, format); if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) result = z_filesys_interface_c.vfileprintf(fileref, format, args); else result = glkint_vfileprintf(fileref, format, args); va_end(args); return result; } int glkint_vfilescanf(z_file *fileref, char *format, va_list ap) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.vfilescanf(fileref, format, ap); else { i18n_translate_and_exit( libglkif_module_name, i18n_libglkif_NOT_YET_IMPLEMENTED_IN_LIBGLKIF, -0x010d); return -1; } } int glkint_filescanf(z_file *fileref, char *format, ...) { va_list args; int result; va_start(args, format); if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) result = z_filesys_interface_c.vfilescanf(fileref, format, args); else result = glkint_vfilescanf(fileref, format, args); va_end(args); return result; } long glkint_getfilepos(z_file *fileref) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.getfilepos(fileref); else return glk_stream_get_position((strid_t)fileref->file_object); } int glkint_setfilepos(z_file *fileref, long seek, int whence) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.setfilepos(fileref, seek, whence); else { if (whence == SEEK_SET) glk_stream_set_position( (strid_t)fileref->file_object, seek, seekmode_Start); else if (whence == SEEK_CUR) glk_stream_set_position( (strid_t)fileref->file_object, seek, seekmode_Current); else if (whence == SEEK_END) glk_stream_set_position( (strid_t)fileref->file_object, seek, seekmode_End); return 0; } } int glkint_unreadchar(int c, z_file *fileref) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.unreadchar(c, fileref); else { i18n_translate_and_exit( libglkif_module_name, i18n_libglkif_NOT_YET_IMPLEMENTED_IN_LIBGLKIF, -0x010d); return -1; } } int glkint_flushfile(z_file *fileref) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.flushfile(fileref); else { i18n_translate_and_exit( libglkif_module_name, i18n_libglkif_NOT_YET_IMPLEMENTED_IN_LIBGLKIF, -0x010d); return -1; } } time_t glkint_get_last_file_mod_timestamp(z_file *fileref) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.get_last_file_mod_timestamp(fileref); else { i18n_translate_and_exit( libglkif_module_name, i18n_libglkif_NOT_YET_IMPLEMENTED_IN_LIBGLKIF, -0x010d); return -1; } } int glkint_get_fileno(z_file *fileref) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.get_fileno(fileref); else { i18n_translate_and_exit( libglkif_module_name, i18n_libglkif_NOT_YET_IMPLEMENTED_IN_LIBGLKIF, -0x010d); return -1; } } FILE* glkint_get_stdio_stream(z_file *fileref) { if (fileref->implementation == FILE_IMPLEMENTATION_STDIO) return z_filesys_interface_c.get_stdio_stream(fileref); else { i18n_translate_and_exit( libglkif_module_name, i18n_libglkif_NOT_YET_IMPLEMENTED_IN_LIBGLKIF, -0x010d); return NULL; } } char *glkint_get_cwd() { return getcwd(NULL, 0); } int glkint_ch_dir(char* dirname) { return chdir(dirname); } z_dir* glkint_open_dir(char *dirname) { z_dir *result; if ((result = malloc(sizeof(z_dir))) == NULL) return NULL; if ((result->dir_object = opendir(dirname)) == NULL) { free(result); return NULL; } return result; } int glkint_close_dir(z_dir *dirref) { int result; result = closedir((DIR*)dirref->dir_object); free(dirref); return result; } int glkint_read_dir(struct z_dir_ent *result, z_dir *dirref) { struct dirent *dir_ent; if ((dir_ent = readdir((DIR*)dirref->dir_object)) == NULL) return -1; result->d_name = dir_ent->d_name; return 0; } static int glkint_make_dir(char *path) { return z_filesys_interface_c.make_dir(path); } bool glkint_is_filename_directory(char *filename) { int filedes; struct stat stat_buf; bool result; if ((filedes = open(filename, O_RDONLY)) < 0) return false; if (fstat(filedes, &stat_buf) != 0) return false; result = stat_buf.st_mode & S_IFDIR ? true : false; close(filedes); return result; } struct z_filesys_interface glkint_filesys_interface = { &glkint_openfile, &glkint_closefile, &glkint_readchar, &glkint_readchars, &glkint_writechar, &glkint_writechars, &glkint_writestring, &glkint_writeucsstring, &glkint_fileprintf, &glkint_vfileprintf, &glkint_filescanf, &glkint_vfilescanf, &glkint_getfilepos, &glkint_setfilepos, &glkint_unreadchar, &glkint_flushfile, &glkint_get_last_file_mod_timestamp, &glkint_get_fileno, &glkint_get_stdio_stream, &glkint_get_cwd, &glkint_ch_dir, &glkint_open_dir, &glkint_close_dir, &glkint_read_dir, &glkint_make_dir, &glkint_is_filename_directory }; #endif // glk_filesys_c_INCLUDED fizmo-0.7.10/libglkif/src/glk_interface/glk_filesys_if.h000644 000765 000024 00000003607 12606024323 024175 0ustar00chrenderstaff000000 000000 /* glk_filesys_if.h * * This file is part of fizmo. * * Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef glk_filesys_h_INCLUDED #define glk_filesys_h_INCLUDED #include #define FILE_IMPLEMENTATION_GLK 0 #define FILE_IMPLEMENTATION_STDIO 1 #ifndef glk_filesys_c_INCLUDED extern struct z_filesys_interface glkint_filesys_interface; extern int glkint_closefile(z_file *file_to_close); #endif // glk_filesys_c_INCLUDED #endif // glk_filesys_h_INCLUDED fizmo-0.7.10/libglkif/src/glk_interface/glk_interface.c000644 000765 000024 00000010746 12606024323 023776 0ustar00chrenderstaff000000 000000 /* glk_interface.c * * This file is part of fizmo. * * Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include #include #include "glk.h" #include "glkstart.h" /* This comes with the Glk library. */ #include "glk_filesys_if.h" #include "glk_screen_if.h" #include #include #include #include #include #include #include #include static void stream_hexnum(glsi32 val); /* get_error_win(): Return a window in which to display errors. The first time this is called, it creates a new window; after that it returns the window it first created. */ static winid_t get_error_win() { static winid_t errorwin = NULL; if (!errorwin) { winid_t rootwin = glk_window_get_root(); if (!rootwin) { errorwin = glk_window_open(0, 0, 0, wintype_TextBuffer, 1); } else { errorwin = glk_window_open(rootwin, winmethod_Below | winmethod_Fixed, 3, wintype_TextBuffer, 0); } if (!errorwin) errorwin = rootwin; } return errorwin; } /* stream_hexnum(): Write a signed integer to the current Glk output stream. */ static void stream_hexnum(glsi32 val) { char buf[16]; glui32 ival; int ix; if (val == 0) { glk_put_char('0'); return; } if (val < 0) { glk_put_char('-'); ival = -val; } else { ival = val; } ix = 0; while (ival != 0) { buf[ix] = (ival % 16) + '0'; if (buf[ix] > '9') buf[ix] += ('A' - ('9' + 1)); ix++; ival /= 16; } while (ix) { ix--; glk_put_char(buf[ix]); } } /* Write a message to the error window, and exit. */ void glkint_fatal_error_handler(char *str, glui32 *ustr, char *arg, int useval, glsi32 val) { winid_t win = get_error_win(); if (win) { glk_set_window(win); glk_put_string("Fizmo fatal error: "); if (str) glk_put_string(str); if (ustr) glk_put_string_uni(ustr); if (arg || useval) { glk_put_string(" ("); if (arg) glk_put_string(arg); if (arg && useval) glk_put_string(" "); if (useval) stream_hexnum(val); glk_put_string(")"); } glk_put_string("\n"); } glk_exit(); } /* Create a Fizmo file for a given Glk stream. */ z_file *zfile_from_glk_strid(strid_t str, char *filename, int filetype, int fileaccess) { z_file *result; if ((result = malloc(sizeof(z_file))) == NULL) return NULL; result->file_object = str; result->filename = filename != NULL ? strdup(filename) : NULL; result->filetype = filetype; result->fileaccess = fileaccess; result->implementation = FILE_IMPLEMENTATION_GLK; return result; } /* Replace the Glk stream in an existing Fizmo file. This awkward maneuver is only necessary because of the way we autosave-restore on iOS. It's not used otherwise. */ void zfile_replace_glk_strid(z_file *result, strid_t str) { result->file_object = str; } fizmo-0.7.10/libglkif/src/glk_interface/glk_interface.h000644 000765 000024 00000003632 12606024323 023777 0ustar00chrenderstaff000000 000000 /* glk_interface.h * * This file is part of fizmo. * * Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef glk_interface_h_INCLUDED #define glk_interface_h_INCLUDED #include #include "glk.h" void glkint_fatal_error_handler(char *str, glui32 *ustr, char *arg, int useval, glsi32 val); z_file *zfile_from_glk_strid(strid_t str, char *filename, int filetype, int fileaccess); void zfile_replace_glk_strid(z_file *file, strid_t str); #endif // glk_interface_h_INCLUDED fizmo-0.7.10/libglkif/src/glk_interface/glk_screen_if.c000644 000765 000024 00000055037 12606024323 023775 0ustar00chrenderstaff000000 000000 /* glk_screen_if.c * * This file is part of fizmo. * * Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef glk_screen_if_c_INCLUDED #define glk_screen_if_c_INCLUDED #include #include #include #include #include #include "glk.h" #include "gi_dispa.h" #include "glkstart.h" /* This comes with the Glk library. */ #include "glk_interface.h" #include #include #include #include #include #include #include #include #include static char* interface_name = "glk-screen"; static char* interface_version = "0.1.8"; static z_file *(*game_open_interface)(z_file *) = NULL; static z_file *story_stream = NULL; static winid_t mainwin = NULL; static winid_t statusline = NULL; static winid_t statuswin = NULL; static bool instatuswin = false; static int statuscurheight = 0; /* what the VM thinks the height is */ static int statusmaxheight = 0; /* height including possible quote box */ static int statusseenheight = 0; /* last height the user saw */ static int screenestwidth = 0; /* width of screen in status-line characters */ static int screenestheight = 0; /* height of screen in status-line characters */ static int inputbuffer_size = 0; static glui32 *inputbuffer = NULL; static void glkint_resolve_status_height(void); static void glkint_estimate_screen_size(void); static char *glkint_get_game_id(void); z_file *glkint_open_interface(z_file *(*game_open_func)(z_file *)) { /* Clear all of the static variables. We might be restarting (on iOS) so we can't rely on the static initializers. */ mainwin = NULL; statusline = NULL; statuswin = NULL; instatuswin = false; statuscurheight = 0; statusmaxheight = 0; statusseenheight = 0; screenestwidth = 0; screenestheight = 0; /* Skip inputbuffer; that's just a malloced block and a size, so it can persist across restarts. */ /* Set up the game-ID hook. (This is ifdeffed because not all Glk libraries have this call.) */ #ifdef GI_DISPA_GAME_ID_AVAILABLE gidispatch_set_game_id_hook(&glkint_get_game_id); #endif /* GI_DISPA_GAME_ID_AVAILABLE */ /* The awkward nature of iOS autosave-restore means that we need to retain a reference to the story_stream, and possibly fix it up later on. If this isn't iOS, just ignore this juggling. */ game_open_interface = game_open_func; story_stream = game_open_interface(NULL); if (!story_stream) { return NULL; } mainwin = glk_window_open(NULL, 0, 0, wintype_TextBuffer, 1); glk_set_window(mainwin); instatuswin = false; if (1) { /* First approximation of the screen size has to be based on the story window. When a status window is opened, we'll refine this. */ glui32 width, height; glk_window_get_size(mainwin, &width, &height); screenestwidth = width; screenestheight = height; } return story_stream; } char *glkint_get_interface_name() { return interface_name; } bool glkint_return_false() { return false; } bool glkint_return_true() { return true; } uint8_t glkint_return_0() { return 0; } uint8_t glkint_return_1() { return 1; } /* This is called after an autosave-restore (iOS only). We've just pulled a new Glk library state from disk. We need to go through it and set mainwin, statuswin, etc appropriately. Note that at this point, the Glk streams opened by the interpreter (the original story file, and a transcript stream if any) have been closed. We'll need to update the interpreter with replacements. */ void glkint_recover_library_state() { strid_t storystream = NULL; strid_t transcriptstream = NULL; z_file *transcriptzfile = NULL; winid_t win; strid_t str; glui32 rock; mainwin = NULL; statusline = NULL; statuswin = NULL; instatuswin = false; zfile_replace_glk_strid(story_stream, NULL); /* Close the old transcript stream, if there was one. */ transcriptzfile = get_stream_2(); /* This is a little bit fiddly, because the underlying Glk stream is already gone. We mark this by removing the pointer to it, and then the z_file can be closed safely. */ if (transcriptzfile) { zfile_replace_glk_strid(transcriptzfile, NULL); restore_stream_2(NULL); } statuscurheight = 0; statusmaxheight = 0; statusseenheight = 0; win = NULL; while ((win=glk_window_iterate(win, &rock)) != NULL) { if (rock == 1) mainwin = win; else if (rock == 2) statuswin = win; else if (rock == 3) statusline = win; } if (statuswin) { glui32 truewidth, trueheight; glk_window_get_size(statuswin, &truewidth, &trueheight); statuscurheight = trueheight; statusmaxheight = trueheight; statusseenheight = trueheight; } str = NULL; while ((str=glk_stream_iterate(str, &rock)) != NULL) { if (rock == 1) storystream = str; else if (rock == 4) transcriptstream = str; } /* Close the old story stream which we found in the library state. (We're about to open a fresh version.) */ if (storystream) { glk_stream_close(storystream, NULL); } game_open_interface(story_stream); /* If we found a transcript stream, pass it to the library. */ if (transcriptstream) { transcriptzfile = zfile_from_glk_strid(transcriptstream, NULL, FILETYPE_TRANSCRIPT, FILEACCESS_APPEND); restore_stream_2(transcriptzfile); } glkint_estimate_screen_size(); } uint8_t glkint_get_screen_height() { return screenestheight; } uint8_t glkint_get_screen_width() { return screenestwidth; } z_colour glkint_get_default_foreground_colour() { return Z_COLOUR_BLACK; } z_colour glkint_get_default_background_colour() { return Z_COLOUR_WHITE; } int glkint_parse_config_parameter(char *UNUSED(key), char *UNUSED(value)) { return 1; } char *glkint_get_config_value(char *UNUSED(key)) { return NULL; } char **glkint_get_config_option_names() { return NULL; } void glkint_link_interface_to_story(struct z_story *UNUSED(story)) { if (ver <= 3) { if (statusline) { glk_window_close(statusline, NULL); } statusline = glk_window_open( mainwin, winmethod_Above | winmethod_Fixed, 1, wintype_TextGrid, 3); /* glk_set_window(statusline); glk_set_style(style_Normal | stylehint_ReverseColor); glk_window_clear(statusline); glk_set_window(mainwin); */ } } /* Called at @restart time. */ void glkint_reset_interface() { if (statuswin) { glk_window_close(statuswin, NULL); statuswin = NULL; } instatuswin = false; glk_set_window(mainwin); glk_set_style(style_Normal); glk_window_clear(mainwin); /* Leave the screen-size estimates alone. Closing the status window doesn't give us new information. */ } /* This is called from two points: abort_interpreter() with an error message, and close_streams() with no error message. For the abort case, we call glkint_fatal_error_handler(), which does a glk_exit. This is necessary because abort_interpreter() is going to do a libc exit(), and we need to get Glk shut down first. However, close_streams() is different -- that's the normal interpreter exit (a @quit opcode). For that case, it's better to return and do nothing, so that close_streams() can flush fizmo's buffers. It will immediately exit through the end of fizmo_main(), which is the end of glk_main(), so we'll get a normal Glk shut down anyway. */ int glkint_close_interface(z_ucs *error_message) { if (error_message) glkint_fatal_error_handler(NULL, error_message, NULL, 0, 0); return 0; } void glkint_set_buffer_mode(uint8_t UNUSED(new_buffer_mode)) { } void glkint_interface_output_z_ucs(z_ucs *z_ucs_output) { /* Conveniently, z_ucs is the same as glui32. */ glk_put_string_uni(z_ucs_output); } int16_t glkint_interface_read_line(zscii *dest, uint16_t maximum_length, uint16_t tenth_seconds, uint32_t verification_routine, uint8_t preloaded_input, int *tenth_seconds_elapsed, bool UNUSED(disable_command_history), bool UNUSED(return_on_escape)) { int ix; zscii zch; int i; glkint_resolve_status_height(); if (!inputbuffer) { inputbuffer_size = maximum_length+16; inputbuffer = malloc(inputbuffer_size * sizeof(glui32)); } else if (maximum_length > inputbuffer_size) { inputbuffer_size = maximum_length+16; inputbuffer = realloc(inputbuffer, inputbuffer_size * sizeof(glui32)); } for (i=0; i= (0x100000000 - keycode_MAXVAL)) { switch (ch) { case keycode_Left: return 131; case keycode_Right: return 132; case keycode_Up: return 129; case keycode_Down: return 130; case keycode_Delete: return 8; case keycode_Return: return 13; case keycode_Func1: return 133; case keycode_Func2: return 134; case keycode_Func3: return 135; case keycode_Func4: return 136; case keycode_Func5: return 137; case keycode_Func6: return 138; case keycode_Func7: return 139; case keycode_Func8: return 140; case keycode_Func9: return 141; case keycode_Func10: return 142; case keycode_Func11: return 143; case keycode_Func12: return 144; case keycode_Escape: return 27; default: return -1; } } return unicode_char_to_zscii_input_char(ch); } void glkint_show_status(z_ucs *room_description, int status_line_mode, int16_t parameter1, int16_t parameter2) { char buf[128]; glk_set_window(statusline); glk_window_clear(statusline); glk_set_style(style_Subheader); glk_put_string_uni(room_description); glk_set_style(style_Normal); if (status_line_mode == SCORE_MODE_SCORE_AND_TURN) { snprintf(buf, 128, " Score: %d, Turns: %d", parameter1, parameter2); glk_put_string(buf); } else if (status_line_mode == SCORE_MODE_TIME) { snprintf(buf, 128, "%02d:%02d", parameter1, parameter2); glk_put_string(buf); } glk_set_window(mainwin); } void glkint_set_text_style(z_style text_style) { if (text_style & Z_STYLE_FIXED_PITCH) { glk_set_style(style_Preformatted); } else if (text_style & Z_STYLE_ITALIC) { glk_set_style(style_Emphasized); } else if (text_style & Z_STYLE_BOLD) { glk_set_style(style_Subheader); } else { glk_set_style(style_Normal); } } void glkint_set_colour(z_colour UNUSED(foreground), z_colour UNUSED(background), int16_t UNUSED(window)) { } void glkint_set_font(z_font font_type) { if (instatuswin) return; if (font_type == Z_FONT_COURIER_FIXED_PITCH) glk_set_style(style_Preformatted); else glk_set_style(style_Normal); } void glkint_split_window(int16_t nof_lines) { int oldvmheight = statuscurheight; statuscurheight = nof_lines; /* We do not decrease the height at this time -- it can only increase. This ensures that quote boxes don't vanish. */ if (statuscurheight > statusmaxheight) statusmaxheight = statuscurheight; /* However, if the VM thinks it's increasing the height, we must be careful to clear the "newly created" space. */ if (statuswin && statuscurheight > oldvmheight) { strid_t stream = glk_window_get_stream(statuswin); int ix, jx; glui32 truewidth, trueheight; glk_window_get_size(statuswin, &truewidth, &trueheight); for (jx=oldvmheight; jx<(int)trueheight; jx++) { glk_window_move_cursor(statuswin, 0, jx); for (ix=0; ix<(int)truewidth; ix++) { glk_put_char_stream(stream, ' '); } } glk_window_move_cursor(statuswin, 0, 0); } if (!statuswin) { statuswin = glk_window_open(mainwin, winmethod_Above | winmethod_Fixed, statusmaxheight, wintype_TextGrid, 2); } else { glk_window_set_arrangement(glk_window_get_parent(statuswin), winmethod_Above | winmethod_Fixed, statusmaxheight, statuswin); } glkint_estimate_screen_size(); } /* If the status height is too large because of last turn's quote box, shrink it down now. */ static void glkint_resolve_status_height() { if (statusseenheight == statusmaxheight) statusmaxheight = statuscurheight; if (statuswin) { if (statusmaxheight == 0) { glk_window_close(statuswin, NULL); statuswin = NULL; } else { glk_window_set_arrangement(glk_window_get_parent(statuswin), winmethod_Above | winmethod_Fixed, statusmaxheight, statuswin); } } statusseenheight = statusmaxheight; statusmaxheight = statuscurheight; glkint_estimate_screen_size(); } /* Construct an estimate of the current screen size, and pass it to the VM. The estimate uses the width (in status chars) of the status window -- that's what's important for 99% of games. For the height, we add the number of lines in the status and story windows; this won't be perfect (because the fonts are different) but it's close enough. */ static void glkint_estimate_screen_size() { glui32 width, height; if (!statuswin) { /* Leave the screen-size estimates alone. Closing the status window doesn't give us new information. It's better to keep using an old exact measurement of the status window than to approximate it in the story window. */ return; } glk_window_get_size(statuswin, &width, &height); screenestwidth = width; screenestheight = height; glk_window_get_size(mainwin, &width, &height); screenestheight += height; fizmo_new_screen_size(screenestwidth, screenestheight); } /* 1 is the status window; 0 is the story window. */ void glkint_set_window(int16_t window_number) { if (!window_number) { glk_set_window(mainwin); instatuswin = false; } else { if (statuswin) glk_set_window(statuswin); else glk_set_window(NULL); instatuswin = true; } } void glkint_erase_window(int16_t window_number) { if (!window_number) { glk_window_clear(mainwin); } else { if (statuswin) glk_window_clear(statuswin); } } void glkint_set_cursor(int16_t line, int16_t column, int16_t window) { if (window && statuswin) glk_window_move_cursor(statuswin, column-1, line-1); } /* Glk doesn't support this. */ uint16_t glkint_get_cursor_row() { return 0; } /* Glk doesn't support this. */ uint16_t glkint_get_cursor_column() { return 0;} void glkint_erase_line_value(uint16_t UNUSED(start_position)) { } void glkint_erase_line_pixels(uint16_t UNUSED(start_position)) { } void glkint_output_interface_info() { (void)streams_latin1_output(interface_name); (void)streams_latin1_output(" interface version "); (void)streams_latin1_output(interface_version); (void)streams_latin1_output("\n"); } void glkint_game_was_restored_and_history_modified() { } int glkint_prompt_for_filename(char *UNUSED(filename_suggestion), z_file **result, char *UNUSED(directory), int filetype, int fileaccess) { frefid_t fileref = NULL; strid_t str = NULL; glui32 usage, fmode, strrock; if (filetype == FILETYPE_SAVEGAME) { usage = fileusage_SavedGame | fileusage_BinaryMode; strrock = 3; } else if (filetype == FILETYPE_TRANSCRIPT) { usage = fileusage_Transcript | fileusage_TextMode; strrock = 4; } else if (filetype == FILETYPE_INPUTRECORD) { usage = fileusage_InputRecord | fileusage_TextMode; strrock = 5; } else if (filetype == FILETYPE_DATA) { usage = fileusage_Data | fileusage_BinaryMode; strrock = 6; } else if (filetype == FILETYPE_TEXT) { usage = fileusage_Data | fileusage_TextMode; strrock = 7; } else return -1; if (fileaccess == FILEACCESS_READ) fmode = filemode_Read; else if (fileaccess == FILEACCESS_WRITE) fmode = filemode_Write; else if (fileaccess == FILEACCESS_APPEND) fmode = filemode_WriteAppend; else return -1; fileref = glk_fileref_create_by_prompt(usage, fmode, 0); if (!fileref) return -1; str = glk_stream_open_file(fileref, fmode, strrock); /* Dispose of the fileref, whether the stream opened successfully * or not. */ glk_fileref_destroy(fileref); if (!str) return -1; *result = zfile_from_glk_strid( str, NULL, // cannot fetch filename from fileref? filetype, fileaccess); return 0; } static char *glkint_get_game_id() { /* This buffer gets rewritten on every call, but that's okay -- the caller is supposed to copy out the result. */ static char buf[32]; char ch; int ix; int jx; if (!z_mem) return NULL; /* This is computed in a way similar to the game-identifier chunk for the save file. */ jx = 0; /* Release number: */ for (ix=2; ix<4; ix++) { ch = z_mem[ix]; buf[jx++] = (((ch >> 4) & 0x0F) + 'A'); buf[jx++] = ((ch & 0x0F) + 'A'); } /* Serial number: */ for (ix=0x12; ix<0x18; ix++) { ch = z_mem[ix]; buf[jx++] = (((ch >> 4) & 0x0F) + 'A'); buf[jx++] = ((ch & 0x0F) + 'A'); } /* Checksum: */ for (ix=0x1C; ix<0x1E; ix++) { ch = z_mem[ix]; buf[jx++] = (((ch >> 4) & 0x0F) + 'A'); buf[jx++] = ((ch & 0x0F) + 'A'); } buf[jx++] = '\0'; return buf; } struct z_screen_interface glkint_screen_interface = { &glkint_get_interface_name, &glkint_return_true, /* is_status_line_available */ &glkint_return_true, /* is_split_screen_available */ &glkint_return_true, /* is_variable_pitch_font_default */ &glkint_return_false, /* is_colour_available */ &glkint_return_false, /* is_picture_displaying_available */ &glkint_return_true, /* is_bold_face_available */ &glkint_return_true, /* is_italic_available */ &glkint_return_true, /* is_fixed_space_font_available */ &glkint_return_true, /* is_timed_keyboard_input_available */ &glkint_return_true, /* is_preloaded_input_available */ &glkint_return_false, /* is_character_graphics_font_availiable */ &glkint_return_false, /* is_picture_font_availiable */ &glkint_get_screen_height, &glkint_get_screen_width, &glkint_get_screen_height, &glkint_get_screen_width, &glkint_return_1, /* get_font_width_in_units */ &glkint_return_1, /* get_font_height_in_units */ &glkint_get_default_foreground_colour, &glkint_get_default_background_colour, &glkint_return_0, // get_total_width_in_pixels_of_text_sent_to_output_stream_3 &glkint_parse_config_parameter, &glkint_get_config_value, &glkint_get_config_option_names, &glkint_link_interface_to_story, &glkint_reset_interface, &glkint_close_interface, &glkint_set_buffer_mode, &glkint_interface_output_z_ucs, &glkint_interface_read_line, &glkint_interface_read_char, &glkint_show_status, &glkint_set_text_style, &glkint_set_colour, &glkint_set_font, &glkint_split_window, &glkint_set_window, &glkint_erase_window, &glkint_set_cursor, &glkint_get_cursor_row, &glkint_get_cursor_column, &glkint_erase_line_value, &glkint_erase_line_pixels, &glkint_output_interface_info, &glkint_return_false, /* input_must_be_repeated_by_story */ &glkint_game_was_restored_and_history_modified, &glkint_prompt_for_filename, NULL, /* do_autosave */ NULL /* restore_autosave */ }; #endif // glk_screen_if_c_INCLUDED fizmo-0.7.10/libglkif/src/glk_interface/glk_screen_if.h000644 000765 000024 00000003624 12606024323 023775 0ustar00chrenderstaff000000 000000 /* glk_screen_if.h * * This file is part of fizmo. * * Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef glk_screen_if_h_INCLUDED #define glk_screen_if_h_INCLUDED #include #ifndef glk_screen_if_c_INCLUDED extern struct z_screen_interface glkint_screen_interface; #endif // glk_screen_if_c_INCLUDED z_file *glkint_open_interface(z_file *(*game_open_func)(z_file *)); void glkint_recover_library_state(void); #endif // glk_screen_if_h_INCLUDED fizmo-0.7.10/libglkif/src/glk_interface/Makefile.am000644 000765 000024 00000003552 12606024323 023066 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AUTOMAKE_OPTIONS = subdir-objects AM_CFLAGS = $(libfizmo_CFLAGS) $(LIBGLKIF_NONPKG_CFLAGS) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) $(LIBGLKIF_NONPKG_LIBS) localedir = $(datarootdir)/fizmo/locales noinst_LIBRARIES = libglkif.a libglkif_a_SOURCES = ../locales/libglkif_locales.c glk_interface.c glk_blorb_if.c glk_filesys_if.c glk_screen_if.c if ENABLE_TRACING AM_CFLAGS += -DENABLE_TRACING= endif fizmo-0.7.10/libglkif/src/glk_interface/Makefile.in000644 000765 000024 00000052327 12606024550 023105 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : @ENABLE_TRACING_TRUE@am__append_1 = -DENABLE_TRACING= subdir = libglkif/src/glk_interface ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libglkif_a_AR = $(AR) $(ARFLAGS) libglkif_a_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp am_libglkif_a_OBJECTS = ../locales/libglkif_locales.$(OBJEXT) \ glk_interface.$(OBJEXT) glk_blorb_if.$(OBJEXT) \ glk_filesys_if.$(OBJEXT) glk_screen_if.$(OBJEXT) libglkif_a_OBJECTS = $(am_libglkif_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libglkif_a_SOURCES) DIST_SOURCES = $(libglkif_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = $(datarootdir)/fizmo/locales localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AUTOMAKE_OPTIONS = subdir-objects AM_CFLAGS = $(libfizmo_CFLAGS) $(LIBGLKIF_NONPKG_CFLAGS) \ $(am__append_1) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) $(LIBGLKIF_NONPKG_LIBS) noinst_LIBRARIES = libglkif.a libglkif_a_SOURCES = ../locales/libglkif_locales.c glk_interface.c glk_blorb_if.c glk_filesys_if.c glk_screen_if.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 libglkif/src/glk_interface/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libglkif/src/glk_interface/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) ../locales/$(am__dirstamp): @$(MKDIR_P) ../locales @: > ../locales/$(am__dirstamp) ../locales/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ../locales/$(DEPDIR) @: > ../locales/$(DEPDIR)/$(am__dirstamp) ../locales/libglkif_locales.$(OBJEXT): ../locales/$(am__dirstamp) \ ../locales/$(DEPDIR)/$(am__dirstamp) libglkif.a: $(libglkif_a_OBJECTS) $(libglkif_a_DEPENDENCIES) $(EXTRA_libglkif_a_DEPENDENCIES) $(AM_V_at)-rm -f libglkif.a $(AM_V_AR)$(libglkif_a_AR) libglkif.a $(libglkif_a_OBJECTS) $(libglkif_a_LIBADD) $(AM_V_at)$(RANLIB) libglkif.a mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f ../locales/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@../locales/$(DEPDIR)/libglkif_locales.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glk_blorb_if.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glk_filesys_if.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glk_interface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glk_screen_if.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)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@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)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@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 $(LIBRARIES) 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) -rm -f ../locales/$(DEPDIR)/$(am__dirstamp) -rm -f ../locales/$(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-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ../locales/$(DEPDIR) ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-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 -rf ../locales/$(DEPDIR) ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic 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-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile # 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: fizmo-0.7.10/libglkif/doc/changelog.xml000644 000765 000024 00000007070 12606024323 020663 0ustar00chrenderstaff000000 000000 Minor autoconf-changes to make build work with fizmo-dist-0.7.10. Adapted to automake v1.14 “subdir-objects” option. Added “clean-dev” build target for better cleanup of installed development files, which helps debian packaging. Added missing license/copyright information. Fixed verification of libglktermw location in “config-libs.m4”. Renamed “install-locales” to “install-data” build target. Adapted to new readchar function names in file system interface. Fixed include statement in “configure.ac”. Adapted to new autoconf/automake build system. Merged with Andrew Plotkin's iOS-fizmo implementation: replaced old “fizmo_register_ask_user_for_file_function” with “prompt_for_file” implementation in “glk_screen_if.c”, added quote box support. Merged zarf's GLK changes into “glk_screen_if.c”. The new version 0.1.2 fixes screen size detection, timed input and adds lowering of the input line. Fixed missing $(DESTDIR) variable – should already have been present since version 0.1.1. Fixed missing “override” statments for CFLAGS in Makefiles. Fixed $(DESTDIR) evaluation in config.[default|macports].mk. Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. libglkif was built from code in Andrew Plotkin's github repository. It represents an interface translating fizmo's Z-machine output operations into GLK-invocations. The current code should be seen as a first experimental release. Please note that bug reports should be sent to instead of sending them to Andrew Plotkin. The “fizmo-glktermw” frontend relies on libglkif for it's GLK output. fizmo-0.7.10/libglkif/doc/copyright.xml000644 000765 000024 00000003065 12606024323 020744 0ustar00chrenderstaff000000 000000

Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender.
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

fizmo-0.7.10/libglkif/doc/create-mds.sh000755 000765 000024 00000001472 12606024323 020575 0ustar00chrenderstaff000000 000000 #!/bin/bash function xslt { if [ "$5" == "true" -a "$2" != "configuration-options" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.md" else OUTPUTFILE="${1}/${2}.md" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-md.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/md.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/libglkif/doc/create-txts.sh000755 000765 000024 00000001502 12606024323 021006 0ustar00chrenderstaff000000 000000 #!/bin/bash function xslt { if [ "$5" == "true" -a "$2" != "configuration-options" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.txt" else OUTPUTFILE="${1}/${2}.txt" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-ascii.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/ascii.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/libfizmo/CHANGELOG.txt000644 000765 000024 00000147377 12606024545 017552 0ustar00chrenderstaff000000 000000 Version 0.7.10 -- October 9, 2015 - Adapted print_table opcode to work in lower window. This fixes output errors in "Sherlock". - Fix for Debian bug #795800: When the ncurses screen is resized when Inform's menu library displays hints or instructions fizmo will no longer exit and complain about an error in the "output_rewind_paragraph" function. Thanks to Lewis Gentry for reporting this problem. - Implemented "flush-output-on-newline" configuration option. This will ensure that any output is flushed to history and interface before a newline. This allows interfaces to store paragraph-relevant attributes in the history with minor fuzz (which is used by fizmo-sdl). - Added new metadata-type "paragraph attribute" for the purpose described above, along with auxiliary callbacks "paragraph_attribute_function" and "paragraph_removal_function" which are invoked from the history. - Minor changes in processing when converting font 3 to unicode. - Fixed possible garbled upper window after erase_window(-1) invocation. - Minor fixes for lib detection, will remove some warnings and possible some build issues on linux. - Fix in history/remove_chars_from_history. - Fix for missing prompt after interpreter commands. - Implemented "alter_last_paragraph_attributes". - Implemented backwards-history reading. - Minor extensions and bugfixes to history. - Fix for erroneous upper window text in history. Version 0.7.9 -- May 25, 2014 - Fixed conflicting array-size in zpu.h / zpu.c which could result in invalid memory assumptions by the compiler. Thanks to Michael Tautschnig. Version 0.7.8 -- March 19, 2014 - Fixed missing lowering of input case for versions >= 5, thanks to irb. - Adapted to automake v1.14 and fixed compiler warning. - Fixed "encode_text" and tokenizing for cases in which the "unrecognized"-flag is set. This fixes a bug with the "name" spell in Beyond Zork, thanks to irb. - Fixed "AC_CONFIG_AUX_DIR" invocation. - Fixed wrapping of long lines without spaces as in ASCII art. Thanks to David Batchelder for pointing out the problem. - Made output_rewind_paragraph count rewound chars. This makes refereshing the screen a bit easier for the ncursesw interface. - After a restore, the current screensize is now written into the header. This should correct upper windows display problems after loading of savegames. - Added "clean-dev" build target for better cleanup of installed development files, which helps debian packaging. - When breaking long lines, multiple spaces are now skipped at the linebreak point to avoid superfluous spaces at the start of the next line. Thanks to Lewis Gentry. - Fixed UTF-8 for input from file. Thanks to Mikko Torvinen for reporting the bug. Version 0.7.7 -- June 5, 2013 - Fixed wordwrapper for cases in which text was written on the same line as read_char was invoked. This makes output of multiline-hints in PRIZM's Invisiclues work. Thanks to David Batchelder. - Renamed getchar, getchars and ungetchars from the file system interface to readchar, readchars and unreadchars. This makes fizmo compile on systems where getchar() is implemented as a macro. - Added missing evalation of fixed-pitch font flag in the flags2 header. - Altered close_interface function to allow z_mem access during shutdown. - Fixed several compiler warnings. - Invoking "/config" without setting color defaults will no longer crash the interpreter. - Added z_rgb_colour datatype. - Renamed "install-locales" into "install-data-local" build target. - Other minor bugfixes. Version 0.7.6 -- December 27, 2012 - Reparied "math.h" name collision, fixing missing "rint" function declaration. - Fixed universal builds on Mac OS X. - Fixed warning in "cmd_hst" compilation. - Searching for z-code files will now automatically create ~/.config/fizmo so that search results are no longer lost, thanks to B. Watson. Version 0.7.5 -- November 30, 2012 - Fix for preloaded input removal, thanks to Lewis Gentry. - Fixed missing characters in transcripts. - Fixed swallowing of dots, commas and quotation marks at line starts in case hyphenation is disabled -- thanks to Lewis Gentry. - Fixed crash which occurred when invoking fizmo-ncursesw with the "-fi" flag, also thanks to Lewis Gentry. - Colors are now correctly set for all windows on screen in case no window is specified for @set_colour. - Re-implemented line-wrapper, fixing several issues. - Fix for memory corruption in command-history, thanks to Lewis Gentry. Version 0.7.4 -- August 17, 2012 - Implemented new build system based on autoconf/automake. Version 0.7.3 -- August 1, 2012 - Merged Andrew Plotkin's iOS-fizmo changes: No more raw exit() calls, added screeninterface-specific filename prompt, new screeninterface-specific filename prompt replaces fizmo_register_ask_user_for_file_function, fixed autosave-functionality, added "disable-stream-2-wrap" and "max-undo-steps" config option and fix for an overlong property issue that made "Heist" crash. - Implemented memory-cleanup and fixed variable states after story end to allow fizmo_start() to be called repeatedly. - Fixed some minor memory leaks. - Fixed segfault which would occur after storing 10240 undo steps. - Added new option to set number of maximum stored undo steps. - Changed blockbuffer initialization to allow for output at any time, made fizmo_new_screen_size adapt blockbuffer size correctly. - Fixed a buffer overflow during tokenization, thanks for Andrew Plotkin. - Implemented binary chop dictionary search. Version 0.7.2 -- March 9, 2012 - Made fizmo comply to "praxix.z5" test. - Merged zarf's DISABLE_PREFIX_COMMANDS functionality. - Fixed missing $(DESTDIR) variable -- should already have been present since version 0.7.1. - Fixed an error which would occur for empty pathnames when starting up a game on 32-bit platforms, thanks to Samuel Verschelde. - The transcription and fixed font bits will now correctly survive a restore, as defined in the Z-Maschine standard. Version 0.7.1 -- November 6, 2011 - Fixed missing "override" statments for CFLAGS in Makefiles. - Fixed $(DESTDIR) evaluation in config.[default|macports].mk. - Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. - Fixed an error in the stack restoration in "opcode_restore_undo". Thanks to Lewis Gentry for reporting this bug. - Implemented first debugger stubs. The debugger is available via network socket and will currently only dump PC, locals and stack contents. Version 0.7.0 -- September 18, 2011 - Module name change: The ncursesw- and console-interface, the sdl-sound interface and the X11-specific code have been moved into separate modules named "fizmo-ncursesw", "fizmo-console", "libsndifsdl" and "libdrilbo". This module has been renamed from "fizmo" to "libfizmo", providing only the base interpreter functionality without any interface. - Implemented Frank Liangs TeX hy-phen-a-tion algorithm into the wordwrapper. Patterns were taken from the "hyph-utf8" project at http://www.ctan.org/tex-archive/language/hyph-utf8/. Re-implemented the word wrapper. - Rebuilt locales system. So far, all available locales were directly compiled into the binary and stored using a rather inflexible method which wasted some memory. Version 0.7.0 now stores the locales on the disk, reading only those languages and modules which are currently required. All i18n-invocations do now directly accept a module identifier, make the old switch functionality obsolete. Adapted all i18n calls to new method. - Rebuilt output history storage. This has been reimplemented using a single memory stream instead of storing text and metadata separately. - Moved "i18n", "tracelog", "z_ucs" and "types" into a new "tools" package adding "stringmap", "list" and "tools_test" on the way. The tools package is supposed to be used by interpreter-related tools which don't require the interpreter itself. - Rebuilt the interpreter core of fizmo into a set of static libraries. - Implemented saving of text history using a non-standard chunk type "TxHs" in quetzal savegames. - Added configuration variable "save-text-history-paragraphs" which defines the maximum number of paragraphs to store in a savegame. - Added variable interpretation -- so far, only $(HOME) is implemented -- for config files. - Re-implemented the entire build process. Libraries may now be compiled and installed on their own, pkg-config is used whereever possible to ease compilation and installation. Version 0.6.9 -- April 24, 2011 - Bugfix release: Fixed negative count for unsorted dictionaries in the tokenise opcode. This fixed the crash in "Beyond Zork" which occurred while executing "i" after an item was name, thanks to irb. - Fixed "get_utf8_code_length". This fixes output of non-latin1 output codes in the transcript file, thanks to Lewis Gentry, closes debian issue #617714. - Increased maximum allowed option size to 512 to allow for longer filenames. - Added NCURSESW_INCLUDE_FROM_W_DIRNAME to configs to allow usage of Apple's ncurses implementation, added GDKPIXBUF_INC_DIR configuration variable. Version 0.6.8 -- January 12, 2010 - Bugfix release: Interpreter and interface information is now correctly written into the header after restarting, additionally the input length for transcript and command input/output-stream filenames has been fixed. Thanks to Samuel Verschelde. - Added "sync-transcript" option: When enabled, it'll flush the wordwrapper and file output buffer as soon as possible. Version 0.6.7 -- December 14, 2009 - Fixed trunction of babel data input. So far, the last byte was cut off from the input, resulting in an error if the file was encoded using unix newlines, but no errors as long as DOS newlines were used. This fixes missing metadata issues in the story browser. Thanks again to Zachary Kline. Version 0.6.6 -- December 14, 2009 - Fixed story browser to remove ".zblorb" suffixes from story titles which are not backed by babel information and evaluated from the filename. This will only work for new stories which are added to the list, to re-index your current story-list the old file has to be removed and re-built. "rm $HOME/.config/fizmo/story-list.txt" should be run first, followed by the command "fizmo -u". Thanks to Zachary Kline. - Minimal changes to the seeding of math.c's "srand" and "init_by_array" in hopes of increasing input entropy. Version 0.6.5 -- October 13, 2009 - Bugfix release: Recommend for MacPorts, will make compiling work for parallel builds in MacPorts version 1.8.0+. - Transcription will be kept active after restarts, thanks to Samuel Verschelde. - Fixed Makefiles for parallel builds (make -j). Version 0.6.4 -- May 24, 2009 - Bugfix release: Definitely recommend for read_char fix. - Fixed interface to supply default colors in case ncurses' "pair_content" returned invalid colors (thanks to Samuel Verschelde). - Input from read_char is no longer re-echoed to the screen (thanks to Samnuel Verschelde). Version 0.6.3 -- April 26, 2009 - The top-level Makefile may now be invoked with "CONFIG_FILE=". - Adapted "config.macos.mk" to MacPorts portfiles and ports-filesystem so that fizmo is now easily MacPorts-buildable. - Added license information to every file. - Improved GNU coding compliance: install now goes to "($DESTDIR)/usr". Version 0.6.2 -- April 25, 2009 - Bugfix release: Corrected save opcode and prepared for debianization. - Adapted manpage to make lintian work. - Corrected "src/c/interface.h". - Fixed typo in manpage. - Fixed save opcode to not wrap data into IFF and to disable compression when only a table from memory is saved (operands 2 and 3 for address and length are set). This fixes "Comp96.z5". Version 0.6.1 -- March 30, 2009 - Bugfix release: minor addition of several features (may now compile without libsndfile and libSDL alone, implemented XDG base directory specification). - Removed unused references to SDL-mixer (which isn't used for anything anymore). - Improved and documented default "config.*.mk" files and added config default for cygwin with sound support (to my own great surprise, sound really works under Cygwin). - Added more information to "INSTALL.txt". - Implemented new ENABLE_AIFF_FOR_SOUND_SDL variable in config files. This allows the sound-sdl-interface to at least play Infocom .snd files when no libsndfile is available. - Added config-file options to manpage. - Changed location of fizmo config directory from fixed "$HOME/.fizmo" to XDG_CONFIG_HOME standard and implemented use of XDG_CONFIG_DIRS. Thanks for suggestions and debugging help from Eric Forgeot. Specifications and more information found at http://freedesktop.org/wiki/Software/xdg-user-dirs. - Fixed broken space allocation, forgotten NULL-checks and fixed some issues to make frontispiece work better on GenToo. Thanks for these patches from David Leverton (see also line #50 in "src/ncursesw/Makefile"). This fixes possible startup crashes. - Added FIZMO_BIN_DIR variable to Makefile. Version 0.6.0 -- March 25, 2009 - (find c cgi cpp fizmo ncursesw simple-c simple-cpp single-turn sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 29953 lines of output) - This marks the point for the first public beta release. Killed all known bugs as far as I could find them and made fizmo work on Linux -- tested with a 64-bit distribution of Debian/Lenny -- and Mac OS X 10.5 with a 32-bit Intel machine and MacPorts for SDL. New features since version 0.5 include an SDL-based sound interface, support for charachter font via unicode translation, partial (z)blorb-support -- runs code from blorbs, can display frontispiece images in XTerms and play AIFF-sounds, a story file navigator, interface margins, restore from command line, a much improved streams implementation, a manpage and many other small features as well as a large amount of bugfixes. - Implemented conversion of font 3 (charachter font) to unicode. This appears to make Beyond Zork's map appear at least readable. - All directories in the "ZCODE_ROOT_PATH" are now recursively searched for Z-machine games. - Implemented recording and replaying of timed input. - Implemented new "*.snd" search method: Generalized for all files, not only Lurking Horror and Sherlock, tries upper- and lowercase. - Fixed scan_table opcode. This fixes Beyond Zork window output. - The filename input for save and restore may now be cancelled using the escape key. - Pressing arrow up/down during filename input no longer displays the command history. - Implemented wordwrapper / ncursesw margins. - Flags are now correctly restored during undo and restore opcodes. - Added progress indicator for story-list update. - Fixed a bug that would damage the story list in case a game had a release code with a length equal 5. - Fixed an issue that would cause bits > 0xffff from routine address to be lost on timed-routine-calls. - Implemented "no-update" command line flag and config option to avoid long startup scan times (for example on slow notebook drivers with many story files). - Implemented "--search" and "--recursively-search" command line invocations. - Fixed bug in scrollback parapgraph position cache. - Fixed a memory leak from getcwd(NULL, 0) in "filelist.c". - Fixed scroll-down display for scrolling to bottom. - Fixed crash that occured when a read-instruction was recursively called from a timed input verification-routine. - Modified LOADB / LOADW opcodes to store 0 in target instead of doing nothing when trying to read from an illegal address. This appears to make the russian version of "All Roads" ("AllRoadsR.z5") work. - Fixed a bug in the story-title evaluation from filename when the story name did not contain any slashes. - Fixed display error on refresh of preloaded input from history. - Implemented IGNORE_TOO_LONG_PROPERTIES_ERROR config define which makes "property.c" ignore too long properties (fixes "HugeCave.z8"). - Implemented forced predictable mode (ignores seeding random generator). - Fixed story-list for directly invoked files with relative pathname. - Many, many other minor fixes and extensions. Version 0.5.3 -- March 11, 2009 - (find c cgi cpp fizmo ncursesw simple-c simple-cpp single-turn sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 28499 lines of output) - Re-built SDL-Sound system (implemented sound effect stack, better sound-has-finished-detection and many, many fixes). - Re-wrote Makefile system. Releveant module defaults are now kept in separate .mk-files. - Added support for AIFF-sounds in blorb files. - Added support for extra-blorb files (these are specified on the command line directly after the story file name). - Added "-Wextra" flag to CFLAGS and cleaned up new warnings caused by the new flag. - Cleaned up config file, fixed a minor bug and made boolean vars work "more" correctly. - Fixed "VERIFY" opcode. - Several fixes: Patched "savegame.c" to re-enable use of "CMem" save method, removed a superfluous free in streams.c which tried to free a static string. - Many minor fixes (option system, running X11-enabled fizmo in text-only console, etc). Version 0.5.2 -- January 17, 2009 - (find c cgi cpp fizmo ncursesw simple-c simple-cpp single-turn sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 27123 lines of output) - Implemented filelist (which remembers all files invoked and files in searched directories). - Added use of libxml2 to parse metadata from the babel XML file. - Implemented story selection menu in ncursesw interface. - Implemented parsing of rc file. - Added bold-for-bright-foreground and blink-for-bright-background terminal options. - Implemented dont-use-color and force-color option. - Fixed interface for > 121 colors. - Added "help" command. - Implemented "savegame-path" configuration option which specifies the directory for savegames. - Implemented text paragraph position cache to speed up scrollback for large amounts of text (not elegant, but works). - Savegames are no longer restored in case serial, release or checksum don't match. - Removed non-standard "FILE" chunk again, the storyfiles for directly invoked savegames (from the command line) are now located via the filelist. - Implemened "force-quetzal-umem" config option from the command line. - Added manpage. - Fixed "verify" opcode. - Basic implementation of input stream 1. - Implemented basic blorb support (meaning that blorb files are detected, information about pictures and sound is parsed and the first found "ZCOD" chunk is executed). - Fizmo now always keeps a FILE* to the story file open, eliminating the need for a lot of open / close calls (and simplyfing blorb handling). - Stories may now be started from the command line using their "real name" in case they are stored in the story-list. Example: "fizmo sorcerer". - Many, many small fixes (scrollback, winch-redisplay, negative score, Version 0.5.1 -- November 4, 2008 - (find fizmo simple-c simple-cpp c cgi single-turn cpp ncursesw qzinspect snd2aiff sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 23265 lines of output) - Implemented SDL-sound-interface. To make SDL work in Mac OS X I've used MacPorts to install SDL ("port install libsdl"), on Debian I've been using "apt-get install libsdl-sound1.2-dev" (maybe "apt-get install alsa-base alsa-utils" is also required). - Fixed scrollback and i18n-exit-translation. - Fixed libfizmo to also use setitimer/sigaction (makes fizmo work better on linux). - Implemented foreground/background color command line parameters for ncursesw interface. - Fixed get-cursor-[column|row] for ncursesw (makes PRINT_TABLE and Sherlock work). - Added "UMem" support for quetzal. - Added "snd2aiff" commandline utility (this was the basis for the first sound interface experiments). - Added "qzinspect", a simple commandlinetool which uses libfizmo to list the contents of a quetzal savegame. - Added non-standard "FILE" chunk to savegames which contains the absolute file name of the story file which saved the game. - Implemented restore from the command line: In case a quetzal-savegame containing the non-standard-chunk "FILE" is given on the command line, fizmo will try to restore the savegame using the story filename stored in this chunk. Version 0.5.0 -- October 30, 2008 - (find fizmo simple-c simple-cpp c cgi single-turn cpp ncursesw -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 21963 lines of output) - This version is now definitely usable to play all non-v6 games. Did extensive testing using Borderzone, "LostPig.z8", "Zokoban.z5", "crashme.z5", "etude.z5", "paint.z5", "random.z5", "reverzi.z5" and "unicode.z5". Only two minor known bugs remain: Scrollback sometimes miscalculates the current row after a lot of scrolling back and forth (which is always "fixable" to pressing any-key which correctly rebuilds the current output page, and a display anomaly on the frontpage of "vampire.z8" which I intended to keep after a lot of code-inspection (since fizmo appears to be implementing the screen modell correctly and fixing this display problem breaks a lot of other games). This version has been tested on Linux, Darwin (Mac Os X) and a little bit on XP/Cygwin (using a self-built ncursesw). - Added "z_ucs_rchar" to "z_ucs.c". - Re-implemented word-wrapper to not compress multiple spaces, keep spaces after newlines and buffer more than on line. The fixes the map display problem in "Enchanter". - Changed opcode_restore to read dynamic memory and stack of the restored game into a freshly allocated memory block instead of directly into the game data. This makes it possible to now continue the current game instead of dropping back to the command line. - Fixed opcode_save to not exit in case an errors occurs during saving, but to merely give a warning (and correctly evaluate the branch). Now the currently active game isn't lost anymore in case a save goes wrong. - Added a LOT of error checking in "iff.c" and "savegame.c". There's possibly a better way, but checking every single return value also works. - Added table-saving extensions to save- and restore-opcodes. - Fixed tokenizing for version 5+. - Fixed timed-input detection for "read" opcode. This fixes the crash in ZTUU when the lantern goes out. - Ran fizmo through (sp)lint, fixed memory leaks, minor bugs, many typecasts, some double and inconsistent definitions, cleanup up code. - Fixed Makefile dependencies. - Fixed a possible SIGSEV when using fprintf with "%ls" output format. This tended to crash when used on wchar_t on darwin. - Implemened scrollback for ncursesw interface, added support method for scrollback in "history.c". - Added last missing v5 opcodes. - Fixed end-of-stack detection so that stack is now correctly enlarged when required. - Added module-based localization, removed unused localization entries. - Fixed space detection in wordwrapper. - Fixed metadata-handling (memcpy) in history.c - Added "single-turn" interface. - Fixed operand handling in zpu. - Added configuration system. - Re-built save/restore, should be finally 100% quetzal compatible. - Implemented output stream 4. - Fixed output stream 2. - Some split-window / set_window / set_cursor fixed for ncursesw-interface. - Substitued ualarm/signal with setitimer/sigaction since the first one won't catch SIGALRM on linux and manpage says that ualarm is obsolete. - Fixed color management so that ncurses color pair is avaiable for reading. - Many, many minor bugfixes. Version 0.4.1 -- November 14, 2007 - (16373 lines in *.h and *.c files) - Fixed a bug in "parse_utf_8_char", this fixes i18n-messages. - Added C++ wrapper. - Implemented demo C++ screen interface. - Separated code in core, interface, c and cpp interfaces. - Improved upper window handling (trinity sundial) and blockbuffer (zork1.z5). Version 0.4.0 -- March 20, 2007 - (13718 lines in *.h and *.c files) - Moved to this new version on March 3, 2007. The old version has been lying around untouched since November 15, 2006. - Abandoned the internal use of UTF-8. It is just much too complicated to handle in the interface. I'm not even sure that with all the code necessary to handle UTF-8 handling that there is much space wasted. The important point for me is that using UCS-4 -- fixed, 32-bit sized characters -- is much more easier, and thus safer to use. - Re-implemented everything using wchar_t. The barebones C-Interface is the first converted. Everything took only a few hours. - Compacted code a little bit (tracelog.h, etc.). - Re-implemented the history-buffer in "streams.c". It is controlled by the Z_HISTORY_INCREMENT_SIZE and Z_HISTORY_MAXIMUM_SIZE constants in file "config.h". The buffer is re-alloced until it reaches the given maximum size. At that time, wrap-around is used to keep the buffer up to date. A debug function named "log_history" exists. - Converted the error handling to wchar_t. - Implemented SIGWINCH-handler for interfaces and associated handling in "ncrws-if.c". - Implemented metadata (color and style) storage for the history. - Implemented set_font opcode. - Fixed two minor issues in the wordwrapper. - Fixed a missing string-terminator in the zchar_to_ucs_4-function. Over two years that thing was working without it ... unbelievable. - Fixed a token-length problem in parsing. - Implemented correct UTF8-filename-handling for savefiles. - Implemented CATCH and THROW opcodes, both untested. - Re-built interpreter commands with new wchar-base, prompt-repetition from history and user-configurable prefix. - Re-implemented scripting with UCS-4. - Implemented buffering of metadata -- colour, styles and font -- in the history buffer. Windows may now be resized and keep their styles intact. - Fixes in property-management for version 4 games. - The sound-effect opcode is accepted now for effects 1 and 2, although it doesn't do anything yet. - Improved split-screen in ncurses-interface: In case the upper window becomes smaller, its content is copied over into the lower window (making reading the sundial in trinity.z4 working). - Fixed set_window to set cursor to (0,0) when selection upper window (this makes the sonarscope in Seastalker work). - Fixed wordwrapper to accomodate for styles which are sent after normal text which is followed by a space -- so far the style was activated before the space was output. - Implemented command history. - Fixed a bug that would cause screen resizes in versions before 5 try to set colours. - Implemented specialized blockbuffer for upper window. - Threw away wchar_t- and locale.h-usage. The problem is that they are not suported on older compilers, embedded systems or in emulations like cygwin. According to specifications, wchar_t may even only have 8 bits width and is compiler-implementation dependant, so it's practically not useable to store unicode-data. So i've implemented a z_ucs type which is always used for internal processing of characters. Thus every interface gets its output in z_ucs chars (which are simple int32_t types) and can happily typecast it into wchar_t if desired. Interfaces may still use wchar_t (in fact, ncursesw does), but the core is now completely autonomous. - Fizmo now compiles fine without warning on Cygwin. Both the c- and the ncursesw-interfaces seem to work nicely. - Fixed a bug in the wordwrapper which caused the zchar-converter-state and the linebuffer to overlay in a single byte. - Added "z" parameter to i18n string, representing z_ucs-strings. - Fixed stream-3-output: Current length is now always updated, not only when closing the stream. - Fixed input to make it work all across the screen and not only on the last line. - Fixed cursor movements and screen splits for version 4 and 5. - Splitted files into fizmo-core and interfaces. The interpreter itself is now put into a static library and linked in from the interfaces. - Moved "extern" statements into header files. Version 0.3.1 - (12276 lines in *.h and *.c files) - Added a few ZSCII/ASCII/ISO-8859-1/UTF-8 conversion functions in "text.c". - Improved the ncursesw-interface to handle US-ASCII and UTF-8 directly. - Implemented detection if a character has a suitable ZSCII representation before adding it to the input line. - Fixed a bug which prevented correct assembly of multi-Z-characters. - Fixed a bug that caused multi-Z-character constructions to have a wrong word length. - Extended ncurses interface to handle scrolling on the input line. - Once input of a new line is finished, it is erase and then output again using the interface's output_utf8 function. This allows output which is longer than a single line to be word-wrapped. - Implemented correct delete and insert in the ncurses interface. Version 0.3.0 -- November 10, 2006 - (13302 lines in *.h and *.c files) - Abandoned the concept to pack absolutely everything in UTF8f. Having to think though the fork-8f is simply more complicated than necessary. In the name of "Keep it simple, stupid" I'll revert to my old idea of having a function in the interface for every output function like color setting, changing font style and so on. - Removed wordwrapper, pager, decoder, utf8conv, fork8f and fpipe. Reverted the system to the plain-style-C interface. I'll use the break in the development chain to clean up the code and take a second look at most things which has proven quite benefical in similar occasions. - Cleaned up most of the code. I've now got a clean, simple version without any real interface around running again. Better yet, since my last tries with ncursesw I've finally found out how to reliably produce UTF-8 output: By simply calling the setlocale function from #include and setting LC_ALL to "". Once the system locale is now set to something using UTF-8, ncurses delivers correct output. - Implemented a new, much simpler wordwrapper that should now also wrap UTF-8 correctly. - Fixed quetzal saving. The main FORM chunk has now the correct length so that both frotz and Zoom now correctly load savegame files. - Implemented a whole new wordwrapper. This one correctly wraps UTF-8 and is capable of storing "metadata" -- colors and styles -- into the text. This allows color and style changes in the middle of a word without having to flush buffers. - Implemented colors. - Implemented text style. - The etude.z5-test is running again. So far I've got everything working except the character output. - Implemented v3 window handling. - The random.z5 test is now running okay. - Implemented [More] prompt. Version 0.2.1 - Improved command line parameter handling. - Fixed a REAL nasty bug in the line-history resulting in buffer overflows in very rare cases. - Fixed another minor bug that would let the word wrapper start a new line after input with a space (Wishbringer's "read message and move leaves") by added the wordwrap_reset_wrapper method (which correctly reset the number of consecutive spaces). - Fixed a bug that would cause a crash when games were saved in a restarted game (forgotten store_empty_stack_frame). - (Successfully completed Wishbringer -- 96/100 points, one wish used. I just have to find a way to unlock the chains down in the tower...) - Fixed paging module, long lines causing wrap-arounds are now correctly accounted for. Modified the module to keep one more line than required on the screen to ease continued reading. - Tested compatibility to Zork I, Z-Machine version 1, release 2, serial number AS000C. This version appears to have a bug at $585b. It occurs when the command "open mailbox and read leaflet" is executed right at the beginning. To circumvent this, a skip-underflow-check can be enabled in variable.c. - I've posted a related newsgroup-message at http://groups.google.de/group/rec.arts.int-fiction/browse_frm/thread/c77652b28be69f2d/a52b9f652fc75928#a52b9f652fc75928 - Added the "@info" command. - Added automatic detection of "problem" games. This way, the "AS000C" hack is automatically activated at start-up. - Activated hacks are displayed using the "@info" command. - (0.20.1 finished) - Enchanhed the pipe/filter system. Each filter will now receive the destination function (and "object-struct") directly. Thus, no more extra forwarding functions are required. - Rebulid the windowing system in the curses interface. - No more flushes are sent from the fizmo "core" any longer. The interface will flush it's filters by itself if required (sending a flush into the first filter in case input is required or the interface is closed). - ABSOLUTELY FASCINATING to discover how many can bugs can still reside in a program just to creep up occassionally ... or is that just a sign of a bad programming style? Now I begin to grasp even more the significance of Java's Array-out-of-bounds-exception. I found a bug in the utf8x-buffer (forgot a multiplation by factor 3, resulting in a much too small buffer. I must have had a lot of overflows without ever noticing them in the past). Found another bug in the UTF8x-Converter where I simply referenced the wrong variable. - Fixed a forgotton "converter->utf8f_parameter_bytes_to_copy = 0" in utf8conv.c which SOMETIMES (grrr!) caused an error which caused the screen output to vanish. - Reorganized piping in the curses interface. Every window now has its own combination of wordwrapper, converter, pager and decoder. General window commands like split_window or erase_window are caught by a enhanced type of decoder named fork8f and passed along to the correct window structure. The random.z5 seems to work fine and I hope it's sufficiently correct to finally try my luck with Seastalker. - (0.20.2 finished) - Fixed status line display. - Fixed ncurses color recycling. Version 0.2.0 -- April 15, 2006 - (12794 lines in *.h and *.c files) - Version 0.2.0 adds an unix interface, allowing for timed intput, and an [n]curses interface including color, better wordwrapping and accented characters. Zinc now runs random.z5 and passes all of the etude tests. I completed Moonmist without encountering any strange behaviour. - Put the conversion of UTF-8 to [ASCII|ISO-8859-1|UTF-8] in utf8conv.[c|h]. That way, c_if.c is now down to a minimum size, and all it's "outsourced" functions -- wordwrapping and UTF-8-conversion -- can now be used without any problems by other functions or interfaces. - Cleaned up Makefile. - Implemented call_vs2 and call_vn2 opcodes. - Made PRINT_NUM output signed instead of unsigned numbers (found it thanks to etude.z5). - Corrected OPCODE_MOD to correctly handle signed operand 0 values (etude again). - Corrected a REAL nasty mistake: Replaced sizeof() in a utf8conv.c malloc-call with a simple . This made the system crash under OS X PPC (though not on linux and some other unix-variant). - Re-organised the makefile a bit. Interface dependencies are now correctly resolved and build dependencies are in order again. - Renamed the interpreter from the project name "zint" -- meaning Z-Machine-Interpreter -- to "ZInC", meaning Z-INterpreter-Code. - Corrected the Makefile again. - Implemented the Unix-Interface. This one assumes that it's running on a unix machine terminal without any specials (not even curses). It uses select and tc[g|s]etattr to implement timed and preloaded input and a get_char implementation. - Fixed a bug in unix_if.c that would cause a segfault on startup. - Some more i18n, cleaner tc[g|s]etattr in unix_if.c - Implmented correct input line restoration after timed-input output. - Modified text.c so that the streams_echo_input command is executed no matter whether the first word could be found in the vocabluary or not. - Implemented preloaded input in the Unix-Interface. - Implemented correct READ_CHAR in Unix-Interface. - Fixed a LOT of tiny bugs and itches. - Implemented [MORE] paging via additional pager module. - Fixed german translation of i18n messages. - Fixed ZSCII-to-UTF8 encoding, ZInC now passes etude's accented character test. - Implemented a curses interface. At the moment raw constructs for the upper and lower window and a status line. Basic color management. Adapted wordwrap.c a little bit in order to achieve corrent linebreaks. - Completely re-wrote wordwrapping in order to get rid of trailing spaces and other problems evident when using curses. - Completely re-wrote the entire output stream system. It turned out that the usage of flags caused problems buffering text: In order for everything to work correctly the flags would have to be buffered along with the text output. Text-relevant formatting data like color is now passed directly along with the UTF-8 text: Internally I'm now using an encoding that can encode special formatting sequences into the UTF-8 stream -- see UTF8X.txt for more information. These conversions added the utf8x.* and decoder.* files. Although quite a major change, the encoding helps to make the whole system a lot cleaner. - Numerous fixes to the [n]curses interface, addition of status line, better color management with careful consideration of availiable color pairs. - Using the ncurses interface, the interpreter now passes the etude.z5 test with the exception of the text styles and undo capability. - Modified the i18n_translate_and_exit and close_streams functions to support a message-on-exit. This way, error messages are supported without regard for what's left in the UTF8x output pipe and error output can be seperated from the other valid stream output. This way, the ncurses interface can correctly endwin() and output the message to read on stderr. - So far, multiple invocations of READ or READ_CHAR with timed input casued a "nested timed input not availiable" error. This is a problem for the random.z5 test which appears to use this feature. The nested behaviour has been altered to an overwrite behaviour. In case a second timed input is requested, the old timer and routine are erased from memory and replaced with the new data. - Fixed interface commandline choice. - The random.z5 tests now apperas to run correctly. - Fixed a tiny bug in wordwrapping directly after read_line, fixed command line parsing, i18n-string-length and a few tiny localization issues. - Added text styles to the curses interface. - Finally added modifiable names for game saving and restoring. - (Successfully completed the red storyline of Moonmist). - Renamed ZinC (name already exists) to fizmo: Fizmo Interprets Z-Machine Opcodes. Version 0.1.4 -- December 9, 2005 - (8848 lines in *.h and *.c files) - The 0.1.4 complies to the strictz.z5 test, allows transcripting (even on startup via command line switch). A few minor bugs were fixed and a history of the last output is kept, allowing for a faithfully original prompt after an interpreter command has been finished. - Compacted locate_dictionary_entry (so that the zscii_string_length function is no longer needed) and adapted it to version 4+ files. - Implemented the object-number-unequal-zero-checks (in order to run strict.z5). - Adapted read opcode to version 4+. - Renamed c_iface.c to c_if.c in order to gain more space for other interface names. - Fixed zchar_to_utf_8 so that multibyte-characters are handeled correctly between two zchar_to_utf_8 function calls (when continuing on the first call's source string due to output buffer shortage). - Implemented basic transcipting in streams.c and moved the trace functions there. All output is now channeled from text.c through stream.c into the active interface. The input is seperately written to to the streams, in order to be able to distinguish it from regular output (and to write it only to the streams requested). - Implemented "-s" / "--start-script" startup option to start scripting right away. This allows to capture really all input emitted by the game. - Implemented input of file name (supplying a default filename) for transcripts. - Fixed a bug in the parsed word position which would cause the following garbeled Moonmist-output: - Implemented CALL_VN opcode. - Added STRICT_Z definition in config.h and implemented a lot of checks in object.c together with a warning mechanism in i18n.c in order to make this interpreter compliant to strictz.z5. - Fixed a bug in the length-code-size determination in properties.c (replaced "& 80" with "& 0x80"). - Added a lot of STRICT_Z tests to properties.c. - Implemented READ_CHAR opcode (not very well, since in stanard C without any Operating-System-specific calls there's no single read of a char, thus you still have to press enter). - Zinc now passes the strictz.z5 test and looks close enough to the frotz output stored at http://www.ifarchive.org/if-archive/infocom/interpreters/old/frotz/frotz_zstrict_result (with other warning messages, of course). - Implemented wordwrapping as a seperate re-usable module in wordwrap.[c|h]. The C-interface and the function for output to stream 2 currently use it both. - Implemented line_history_buffer, a circular buffer that will record the last output sent to the streams. It's supposed to be used for reconstruction of the current prompt in case an interpreter command is entered an the original prompt should be restored after executing it and later for easier handling of preloaded input. - Interpreter commands will now prompt with the last line that was output by the Z-program after finishing command processing. Version 0.1.3 -- November 27, 2005 - (6013 lines in *.h and *.c files) - This 0.1.3 version adds localization for error- and startup messages, corrects a few minor bugs abd adds UTF-8 support. - Made mod (remainder-after-divison) signed (due to 2.2.1). - Corrected opcode_div so that the divisor, not the dividend, is verified not to be 0. Added divisor-not-0-check to mod. - A few paranoid sanity checks in opcode_read. - Modified opcode_read so that the whole line of input is always read, no matter how much can actually be stored so that the next line of input does not begin with left-over-text. The non-used input is discarded. - Removed use of input_to_zscii-function in text.c, since the input does not have to be converted. - Extended store_ZSCII_as_zchar in text.c to accept not only characters in the current alphabet, but also to encode other chars as multi-z-chars, thus also allowing the '@' as input which I want to use to identify interpreter commands. - Implemented the "@predictable" command to switch interpreter in or out of predicatable random mode as suggested in the spec. - Made random generator more spec conforming by using negative values to seed the generator to this value. - Implemented parsing of command line options. Currently only used to start up interpreter in predictable random mode. - Implemented UTF-8 handling. The data traffic between the core interpreter and the interface(s) has been modified to use exclusively UTF-8. It is now also possible to output a whole string via the utf_8_output function. - The C interface can now be put in three output modes -- ASCII, ISO-8859-1 and UTF-8. Characters that cannot be printed in the ASCII and ISO-8859-1 modes are substituted by a '?'. - Implemented UTF-8 output as defined by the Z-Machine specification v1. So far only implemented without testing. - Implemented loclization. In order to avoid special cases in which it is not possible to tell the user that the localized files cannot be loaded since the files have not been loaded yet in his own language :-) I'm using the prepi18n binary to convert the locales/xx_XX.txt into the file locales.c which can be directly complied into the interpreter binary. - The localization files are supposed to be encoded in UTF-8 so they can be easily output using the usual interface functions. - Split the activate_interface function into activate_interface and link_active_interface_to_story. The first call actually initializes the interface which is used to make output possible (in case the story file can't be loaded), the second call performs the necessary initializations with the story file's header. - Extended localization to use parameters the like "Could not open \{0}.". - So far, parameters are only allowed to contain ASCII values. - Moved last remaining function in output.c, read_zscii_string, into text.c. - Implemented forgotten lowering of case after reading input from the keyboard. Now it's possible to answer "YES" to Moonmist when it asks for "YES or NO". - Cleaned up stack.c a bit and fixed a bug that would have caused the stack not to enlarge in case it was supposed to. - Extended localization to use type identifiers. In the beginning I decided to skip them, but to make error messages useful to the user and handier in the code I decided to give it a shot. Parameters are now specified by using \{0s} for a string and \{0d} for a decimal. Together with a few supporting wrapper functions, the main file already looks much cleaner. Due to the buffering of the Z-Machine output, messages are even correctly word-wrapped. - Implemented switching between ASCII / ISO-8859-1 / UTF-8 into zinc.c. - Logically it would have been better to put it in to c_iface, but since it will be required more often and don't want any copied code I decided to leave it this way. - Implemented echo option in the C interface in order to be able to read the input from input piped into the interpreter. - Converted all current 51 conditions-to-translate from FATAL_ERROR and [s|f|]printf to i18n_translate[and_exit]. The FATAL_ERROR macro has been removed. - Compacted the zchar-storage-functions. - Completely replaced read_zscii_string with zscii_to_utf_8. The new functions will output z-char-strings of an arbitrary length into an limited-size output buffer. Multiple calls to this function for the same source string will continue with the output where the last call of the functions had to stop. Version 0.1.2 -- October 20, 2005 - (5094 lines) - 0.1.2 fixes my currently last known problems with playing the 840726 Zork I revision. Word wrapping makes it look a little bit nicer and the barebones-C-interface is now probably as good as it can get. Did quite a lot of code-cleanup. - Implemented NOT opcode. - Implemented NOP opcode. - Implemented RESTART opcode. - Implemented POP opcode. - Implemented SHOW_STATUS opcode. - Allowed output of tab -- ZSCII 9 -- for version 3 (due to the guidebook in the Dam Lobby). - Implemented VERIFY opcode. - Implemented PIRACY opcode (we're all honest, so an evaluate_branch(1) sounds okay, right?). - Fixed a bug in INC_CHK (wrong cast to unsigned value instead of signed). - Totally forgot about the 8.3-filename-limits on DOS machines, files were renamed and merged together -- /(.*)_opcodes.c/ joined /$1.c/. - Fixed a bug in the random opcode which allowed 0 as a minimum result value to the random call (should have been 1). Fighting with the thief now results in much less garbled text output. - Cleanly wrapped TRACE_LOG calls in curly braces, meaning disabling tracing now works correctly. The zinc binary now has a size of 82308 bytes with logging enabled, and 54700 bytes without logging. - Created Makfile-dependency for zinc.h from iface.h (by using the touch command, is the okay?). Made all and clean .PHONY targets. - Removed globals.c, moved globals into zinc.c and created "extern" references in other source files. - Moved globals to corresponding source files (which eliminates a lot of non-needed "extern" references). - The linux manpages tell me bzero is outdated. Faithfully replaced bzero with memset calls. - Replaced memcpy call with a loop that assembles uint16_t values byte by byte. This will avoid problems on little-endian machines (i386 and the like), since the Z-machine uses a big-endian model. - Used the Mersenne Twister as random generator. Only the genrand_int32 function is used, the rest of the functions, with exception of the two init calls, were deleted from the mt19937ar.c file. The generator is seeded by an init vector consisting of the number of seconds since 1970, a standard C random generator number, the number of milliseconds since 1970, followed by another standard C random generator number. - Splitted zinc.h in a header file for each .c file. Adjusted Makefile and #includes accordingly. - Changed **z_opcode_procedures into *z_opcode_functions and moved it from zinc.c to zpu.c (thus avoiding external reference and setup). Now z_opcode_functions is a one-dimenstional array indexed by the value instruction_form + instr_code. This allows saving the space for 32 pointers in the smaller opcode classes (with only 16 instead of 32 opcodes). - Implemented buffering / word-wrapping in the C Interface. With this change, the C interface should be complete. Comparing to everything else it's still very raw, but hey, it works. - Implemented BUFFER_MODE opcode. - Moved all the configuration options from zinc.h to config.h. Version 0.1.1 -- September 23, 2005 - 0.1.1 was the first version that was able to save and restore games. - Implemented OR opcode. - Implemented MOD opcode. - Changed get_prop_len so that get_prop_len(0) returns 0 (for 1.1 standard). - Updated property.c, splitted up property search in three functions in order to allow easier implementation of the GET_NEXT_PROP opcode. - Implemented GET_NEXT_PROP (you can now pick up the elven sword). - Implemented CALL_2S. - Implemented CALL_2N. - Implemented SET_COLOUR (but does not have no effect in c_interface). - Implemented all remaining 2OP-opcodes with the exception of THROW. - Implemented DEC opcode. - Implemented PRINT_ADDR opcode. - Implemented CALL_1S opcode. - Implemented REMOVE_OBJ opcode. - Implemented LOAD opcode. - Modified the tokenising routine to correctly return position and length of a word even if it was not found in the dictionary. - Implemented dummy stack frame storage for quetzal compatibility. - Implemented SAVE opcode. - Implemented RESTORE opcode. Version 0.1.0 -- September 14, 2005 - 0.1.0 is the first version that allows basic playing of version 3 games. The only game used for testing so far is Zork 1 which was drawn from the well-known site of Peter Scheyen. - Moving around the house, object movement (taking and dropping of the leaflet) all seems to work quite okay now. - Implementing more missing opcodes. - Fixing a few not-so-easy to find bugs (like the property addresses etc). - Fixed a bug in the branch-address calculation. - Fixed a bug in the object-unlinking mechanism that would not correctly remove the object-to-be-unlinked from an object further up the sibling line. Version 0.0.4 - Implemented the c_interface, which allows very bare-bone input / output provided by standard C facilities (meaning fprintf / fgets). - Implementing of user input, tokenising and dictionary parsing. Version 0.0.3 - Major cleanup of the code. - distribution of the old interpreter.c file into multiple .c files. - First appearance of the interpreter.h interface. Version 0.0.2 - Further implementation of the basic capabilities, including property management etc. Version 0.0.1 - First basic implementation of memory, variables, stack and primary opcodes. fizmo-0.7.10/libfizmo/config-conds.m4000644 000765 000024 00000001773 12606024314 020314 0ustar00chrenderstaff000000 000000 AM_CONDITIONAL([ENABLE_BABEL], [test "$enable_babel" != "no"]) AM_CONDITIONAL([ENABLE_STRICT_Z], [test "$enable_strict_z" = "yes"]) AM_CONDITIONAL([ENABLE_SEGFAULT_ON_ERROR], [test "$enable_segfault-on-error" = "yes"]) AM_CONDITIONAL([ENABLE_FILELIST], [test "$enable_filelist" != "no"]) AM_CONDITIONAL([ENABLE_BLOCKBUFFER], [test "$enable_blockbuffer" != "no"]) AM_CONDITIONAL([ENABLE_COMMAND_HISTORY], [test "$enable_command_history" != "no"]) AM_CONDITIONAL([ENABLE_OUTPUT_HISTORY], [test "$enable_output_history" != "no"]) AM_CONDITIONAL([ENABLE_CONFIG_FILES], [test "$enable_config_files" != "no"]) AM_CONDITIONAL([ENABLE_PREFIX_COMMANDS], [test "$enable_prefix_commands" != "no"]) AM_CONDITIONAL([ENABLE_DEBUGGER], [test "$enable_debugger" = "yes"]) AM_CONDITIONAL([FIZMO_DIST_VERSION], [test "x$fizmo_dist_version" != "x"]) fizmo-0.7.10/libfizmo/config-flags.m4000644 000765 000024 00000000000 12606024314 020260 0ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/config-libs.m4000644 000765 000024 00000001024 12606024314 020124 0ustar00chrenderstaff000000 000000 AS_IF([test "x$enable_babel" != "xno"], [ PKG_CHECK_MODULES([libxml2], [libxml-2.0]) AC_CHECK_LIB([xml2], [xmlParseFile]) libfizmo_reqs="libxml-2.0" ]) # Checking for the math library doesn't seem to make much sense since # it appears that the math functions are often automatically included # (which leads to something like "error: conflicting types for built-in # function 'cos'"). Since there's probably no C installation without libm # we'll include it by default. # AC_CHECK_LIB([m], [cos], m_LIBS="-lm") m_LIBS="-lm" fizmo-0.7.10/libfizmo/config-subst.m4000644 000765 000024 00000001177 12606024314 020344 0ustar00chrenderstaff000000 000000 # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. #libfizmo_CFLAGS="-I$build_prefix_cflags $xml2_CFLAGS $m_CFLAGS" #libfizmo_LIBS="-L$build_prefix_libs -lfizmo $xml2_LIBS $m_LIBS" # #AC_SUBST([libfizmo_CFLAGS], $libfizmo_CFLAGS) #AC_SUBST([libfizmo_LIBS], $libfizmo_LIBS) AC_SUBST([libfizmo_CFLAGS], "-I$build_prefix_cflags $xml2_CFLAGS $m_CFLAGS") AC_SUBST([libfizmo_LIBS], "-L$build_prefix_libs -lfizmo $xml2_LIBS $m_LIBS") fizmo-0.7.10/libfizmo/configfile-example.txt000644 000765 000024 00000002007 12606024545 021775 0ustar00chrenderstaff000000 000000 # fizmo example configuration file. # This should go to ($HOME)/.config/fizmo/config # -- libfizmo options #locale = en_US #locale = de_DE #locale = fr_FR background-color = white foreground-color = black #background-color = blue #foreground-color = yellow #savegame-path = $(HOME)/.quetzal-savegames #transcript-filename = $(HOME)/.quetzal-savegames/transcript.txt #start-script-when-story-starts #sync-transcript save-text-history-paragraphs = 100 # All directories in the colon-separated "z-code-path" are searched for story # files: #z-code-path = /foo:/bar # Directories listed in the "z-code-root-path" are searched recursively. #z-code-root-path = /foo:/bar # -- libcellif options # Margins may provide for a better view, especially when used in terminal # windows. left-margin = 1 right-margin = 1 #disable-color #disable-hyphenation # -- fizmo-ncursesw options enable-xterm-title #bold-for-bright-foreground #blink-for-bright-background #dont-update-story-list #disable-x11-graphics #display-x11-inline-image fizmo-0.7.10/libfizmo/configure.ac000644 000765 000024 00000007371 12606024314 017767 0ustar00chrenderstaff000000 000000 # configure.ac # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AC_ARG_ENABLE([tracing], [AS_HELP_STRING([--enable-tracing], [enable tracelog for debugging])], [], [enable_tracing=no]) AC_ARG_ENABLE([babel], [AS_HELP_STRING([--disable-babel], [disable babel functionality which means that libxml2 will \ not be required for building])], [], [enable_babel=yes]) AC_ARG_ENABLE([strict-z], [AS_HELP_STRING([--enable-strict-z], [enforce strict Z-Machine handling])], [], [enable_strict_z=no]) AC_ARG_ENABLE([segfault-on-error], [AS_HELP_STRING([--enable-segfault-on-error], [deprecated debug helper])], [], [enable_segfault-on-error=no]) AC_ARG_ENABLE([filelist], [AS_HELP_STRING([--disable-filelist], [disable story-list-keeping functionality])], [], [enable_filelist=yes]) AC_ARG_ENABLE([blockbuffer], [AS_HELP_STRING([--disable-blockbuffer], [disable buffering ability for upper window])], [], [enable_blockbuffer=yes]) AC_ARG_ENABLE([command-history], [AS_HELP_STRING([--disable-command-history], [disable history of previously entered commands])], [], [enable_command_history=yes]) AC_ARG_ENABLE([output-history], [AS_HELP_STRING([--disable-output-history], [disable history of recent screen output])], [], [enable_output_history=yes]) AC_ARG_ENABLE([config-files], [AS_HELP_STRING([--disable-config-files], [disable parsing of configuration files])], [], [enable_config_files=yes]) AC_ARG_ENABLE([prefix-commands], [AS_HELP_STRING([--disable-prefix-commands], [disable in-game interpreter commands])], [], [enable_prefix_commands=yes]) AC_ARG_ENABLE([debugger], [AS_HELP_STRING([--enable-debugger], [enable experimental debugging functionality])], [], [enable_debugger=no]) AC_INIT( [libfizmo], [0.7.10], fizmo@spellbreaker.org, libfizmo) AC_CONFIG_AUX_DIR([.]) m4_include(config-libs.m4) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_PROG_CC AC_PROG_RANLIB AM_PROG_AR AC_SUBST([LIBFIZMO_REQS], $libfizmo_reqs) AC_SUBST([DEV_BUILD_PREFIX], "$DESTDIR$prefix") AM_CONDITIONAL([ENABLE_TRACING], [test "$enable_tracing" = "yes"]) m4_include(config-conds.m4) AC_CONFIG_FILES([Makefile src/tools/Makefile src/interpreter/Makefile]) AC_OUTPUT fizmo-0.7.10/libfizmo/COPYRIGHT.txt000644 000765 000024 00000004423 12606024545 017613 0ustar00chrenderstaff000000 000000 Copyright (c) 2009-2015 Christoph Ender All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- This package includes software written by other authors: libfizmo includes the Mersenne Twister random number generator, available at http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html. This is available via a BSD license, which is stored in the source file "libfizmo/src/interpreter/mt19937ar.c". libfizmo includes hyphenation patterns provided by the hyph-utf8 project at http://www.ctan.org/tex-archive/language/hyph-utf8/. For every file's detailed respective copyright information, please refer to the description stored at the top of the corresponding file: - "src/locales/en_US/patterns.txt" from hyph-utf8's "hyph-en-us.tex". - "src/locales/de_DE/patterns.txt" from hyph-utf8's "hyph-de-1996.tex". - "src/locales/fr_FR/patterns.txt" from hyph-utf8's "hyph-fr.tex". fizmo-0.7.10/libfizmo/doc/000755 000765 000024 00000000000 12606024314 016236 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/libfizmo-initialization.txt000644 000765 000024 00000004161 12606024545 023102 0ustar00chrenderstaff000000 000000 libfizmo initialization 2011-08-23 OVERVIEW There are six initialization steps: - “fizmo_register_screen_interface” - “fizmo_register_sound_interface” - optional: “parse_fizmo_config_files” - “fizmo_start” - “parse_fizmo_config_files” if not happened before - implicit: “link_active_interface_to_story” fizmo config files: - “/etc/fizmo.conf”, always parsed. - All “fizmo/config” files in all directories from colon-spearated “XDG_CONFIG_DIRS” path. - “$HOME/.config.fizmo” --- COLOR INITIALIZATION The screen default colors are stored in variables “default_foreground_colour” and “default_background_colour” inside “output.c”. By default, the foreground is initialized as white, the background as black. Initialization is as follows: 1. By default, the foreground color is set to white, the background to black in “output.c”. 2. The screen interface's functions “get_default_foreground_colour” and “get_default_background_colour” are evaluated. In case these return valid z_colour values, these are used as the default colors. That means that by returning -1 for one or both of the functions, the screen interface may choose not to alter the interpreter's default values. 3. The “foreground-color” and “background-color” config variables are evaluated from the configuration file(s). 4. The “fizmo-start” function's variables “screen_default_foreground_color” and “screen_default_background_colour” are evaluated. In case these contains valid z_colour values, they're used as the new default. As in step 2, that means that the default, as evaluated up to this step, may be kept by setting one or both of the values to -1. Why the additional step 4? While it's already possible to read color information from the screen interface in step 2, step 4 ensures that it's possible to still override the information parsed from the config files in step 3 from the screen interface. fizmo-0.7.10/libfizmo/Makefile.am000644 000765 000024 00000011440 12606024314 017525 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AUTOMAKE_OPTIONS = -Wno-override tmplibdir = libfizmotmp localedir = $(datarootdir)/fizmo/locales fizmo_build_prefix=$(DEV_BUILD_PREFIX) PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig PKGFILE = $(PKG_DIR)/libfizmo.pc SUBDIRS = src/tools src/interpreter . noinst_LIBRARIES = libfizmo.a libfizmo.a:: cd src/tools ; make cd src/interpreter ; make mkdir -p "$(tmplibdir)" ; \ cd "$(tmplibdir)" ; \ "$(AR)" x ../src/tools/libtools.a ; \ "$(AR)" x ../src/interpreter/libinterpreter.a ; \ "$(AR)" $(ARFLAGS) ../libfizmo.a *.o ; \ "$(RANLIB)" ../libfizmo.a ; \ cd .. ; \ rm -r "$(tmplibdir)" install-dev:: libfizmo.a mkdir -p "$(fizmo_build_prefix)/lib/fizmo" cp libfizmo.a "$(fizmo_build_prefix)/lib/fizmo" mkdir -p "$(fizmo_build_prefix)/include/fizmo/interpreter" cp src/interpreter/*.h "$(fizmo_build_prefix)/include/fizmo/interpreter" mkdir -p "$(fizmo_build_prefix)/include/fizmo/tools" cp src/tools/*.h "$(fizmo_build_prefix)/include/fizmo/tools" mkdir -p "$(fizmo_build_prefix)/include/fizmo/screen_interface" cp src/screen_interface/*.h \ "$(fizmo_build_prefix)/include/fizmo/screen_interface" cp src/screen_interface/*.cpp \ "$(fizmo_build_prefix)/include/fizmo/screen_interface" cp -r src/sound_interface "$(fizmo_build_prefix)/include/fizmo/" cp -r src/filesys_interface "$(fizmo_build_prefix)/include/fizmo/" cp -r src/blorb_interface "$(fizmo_build_prefix)/include/fizmo/" mkdir -p "$(PKG_DIR)" echo 'prefix=$(fizmo_build_prefix)' >"$(PKGFILE)" echo 'exec_prefix=$${prefix}' >>"$(PKGFILE)" echo 'libdir=$${exec_prefix}/lib/fizmo' >>"$(PKGFILE)" echo 'includedir=$${prefix}/include/fizmo' >>"$(PKGFILE)" echo >>"$(PKGFILE)" echo 'Name: libfizmo' >>"$(PKGFILE)" echo 'Description: libfizmo' >>"$(PKGFILE)" echo 'Version: 0.7.10' >>"$(PKGFILE)" echo "Requires: $(LIBFIZMO_REQS)" >>"$(PKGFILE)" echo 'Requires.private:' >>"$(PKGFILE)" echo 'Cflags: -I$(fizmo_build_prefix)/include/fizmo $(LIBXML2_NONPKG_CFLAGS)' >>"$(PKGFILE)" echo 'Libs: -L$(fizmo_build_prefix)/lib/fizmo -lfizmo $(LIBXML2_NONPKG_LIBS)' >>"$(PKGFILE)" echo >>"$(PKGFILE)" install-data-local:: mkdir -p "$(DESTDIR)$(localedir)" for l in `cd src/locales ; ls -d ??_??`; \ do \ mkdir -p "$(DESTDIR)$(localedir)/$$l" ; \ cp src/locales/$$l/*.txt "$(DESTDIR)$(localedir)/$$l" ; \ done # About "-rmdir": make ignores errors of commands which are prefixed with # a - sign. rmdir may fail in clean-dev in case other libs have installed # development files, or in case clean-dev has been run before. clean-dev:: -rm "$(fizmo_build_prefix)/lib/fizmo/libfizmo.a" -rmdir "$(fizmo_build_prefix)/lib/fizmo" rm -rf "$(fizmo_build_prefix)/include/fizmo/interpreter" rm -rf "$(fizmo_build_prefix)/include/fizmo/tools" rm -rf "$(fizmo_build_prefix)/include/fizmo/sound_interface" rm -rf "$(fizmo_build_prefix)/include/fizmo/filesys_interface" rm -rf "$(fizmo_build_prefix)/include/fizmo/blorb_interface" -rm "$(fizmo_build_prefix)/include/fizmo/screen_interface/ScreenInterface.cpp" -rm "$(fizmo_build_prefix)/include/fizmo/screen_interface/ScreenInterface.h" -rm "$(fizmo_build_prefix)/include/fizmo/screen_interface/screen_interface.h" -rmdir "$(fizmo_build_prefix)/include/fizmo/screen_interface" -rmdir "$(fizmo_build_prefix)/include/fizmo" -rmdir "$(fizmo_build_prefix)/include" -rm "$(PKGFILE)" -rmdir "$(PKG_DIR)" -rmdir "$(fizmo_build_prefix)/lib" fizmo-0.7.10/libfizmo/Makefile.in000644 000765 000024 00000066005 12606024550 017547 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : subdir = libfizmo ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libfizmo_a_AR = $(AR) $(ARFLAGS) libfizmo_a_LIBADD = libfizmo_a_SOURCES = libfizmo.c libfizmo_a_OBJECTS = libfizmo.$(OBJEXT) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = libfizmo.c DIST_SOURCES = libfizmo.c RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = $(datarootdir)/fizmo/locales localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AUTOMAKE_OPTIONS = -Wno-override tmplibdir = libfizmotmp fizmo_build_prefix = $(DEV_BUILD_PREFIX) PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig PKGFILE = $(PKG_DIR)/libfizmo.pc SUBDIRS = src/tools src/interpreter . noinst_LIBRARIES = libfizmo.a all: all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 libfizmo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libfizmo/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfizmo.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 @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 check-am: all-am check: check-recursive all-am: Makefile $(LIBRARIES) installdirs: installdirs-recursive installdirs-am: 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: 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-recursive clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: 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 -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-noinstLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local 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 installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile libfizmo.a:: cd src/tools ; make cd src/interpreter ; make mkdir -p "$(tmplibdir)" ; \ cd "$(tmplibdir)" ; \ "$(AR)" x ../src/tools/libtools.a ; \ "$(AR)" x ../src/interpreter/libinterpreter.a ; \ "$(AR)" $(ARFLAGS) ../libfizmo.a *.o ; \ "$(RANLIB)" ../libfizmo.a ; \ cd .. ; \ rm -r "$(tmplibdir)" install-dev:: libfizmo.a mkdir -p "$(fizmo_build_prefix)/lib/fizmo" cp libfizmo.a "$(fizmo_build_prefix)/lib/fizmo" mkdir -p "$(fizmo_build_prefix)/include/fizmo/interpreter" cp src/interpreter/*.h "$(fizmo_build_prefix)/include/fizmo/interpreter" mkdir -p "$(fizmo_build_prefix)/include/fizmo/tools" cp src/tools/*.h "$(fizmo_build_prefix)/include/fizmo/tools" mkdir -p "$(fizmo_build_prefix)/include/fizmo/screen_interface" cp src/screen_interface/*.h \ "$(fizmo_build_prefix)/include/fizmo/screen_interface" cp src/screen_interface/*.cpp \ "$(fizmo_build_prefix)/include/fizmo/screen_interface" cp -r src/sound_interface "$(fizmo_build_prefix)/include/fizmo/" cp -r src/filesys_interface "$(fizmo_build_prefix)/include/fizmo/" cp -r src/blorb_interface "$(fizmo_build_prefix)/include/fizmo/" mkdir -p "$(PKG_DIR)" echo 'prefix=$(fizmo_build_prefix)' >"$(PKGFILE)" echo 'exec_prefix=$${prefix}' >>"$(PKGFILE)" echo 'libdir=$${exec_prefix}/lib/fizmo' >>"$(PKGFILE)" echo 'includedir=$${prefix}/include/fizmo' >>"$(PKGFILE)" echo >>"$(PKGFILE)" echo 'Name: libfizmo' >>"$(PKGFILE)" echo 'Description: libfizmo' >>"$(PKGFILE)" echo 'Version: 0.7.10' >>"$(PKGFILE)" echo "Requires: $(LIBFIZMO_REQS)" >>"$(PKGFILE)" echo 'Requires.private:' >>"$(PKGFILE)" echo 'Cflags: -I$(fizmo_build_prefix)/include/fizmo $(LIBXML2_NONPKG_CFLAGS)' >>"$(PKGFILE)" echo 'Libs: -L$(fizmo_build_prefix)/lib/fizmo -lfizmo $(LIBXML2_NONPKG_LIBS)' >>"$(PKGFILE)" echo >>"$(PKGFILE)" install-data-local:: mkdir -p "$(DESTDIR)$(localedir)" for l in `cd src/locales ; ls -d ??_??`; \ do \ mkdir -p "$(DESTDIR)$(localedir)/$$l" ; \ cp src/locales/$$l/*.txt "$(DESTDIR)$(localedir)/$$l" ; \ done # About "-rmdir": make ignores errors of commands which are prefixed with # a - sign. rmdir may fail in clean-dev in case other libs have installed # development files, or in case clean-dev has been run before. clean-dev:: -rm "$(fizmo_build_prefix)/lib/fizmo/libfizmo.a" -rmdir "$(fizmo_build_prefix)/lib/fizmo" rm -rf "$(fizmo_build_prefix)/include/fizmo/interpreter" rm -rf "$(fizmo_build_prefix)/include/fizmo/tools" rm -rf "$(fizmo_build_prefix)/include/fizmo/sound_interface" rm -rf "$(fizmo_build_prefix)/include/fizmo/filesys_interface" rm -rf "$(fizmo_build_prefix)/include/fizmo/blorb_interface" -rm "$(fizmo_build_prefix)/include/fizmo/screen_interface/ScreenInterface.cpp" -rm "$(fizmo_build_prefix)/include/fizmo/screen_interface/ScreenInterface.h" -rm "$(fizmo_build_prefix)/include/fizmo/screen_interface/screen_interface.h" -rmdir "$(fizmo_build_prefix)/include/fizmo/screen_interface" -rmdir "$(fizmo_build_prefix)/include/fizmo" -rmdir "$(fizmo_build_prefix)/include" -rm "$(PKGFILE)" -rmdir "$(PKG_DIR)" -rmdir "$(fizmo_build_prefix)/lib" # 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: fizmo-0.7.10/libfizmo/README.txt000644 000765 000024 00000003724 12606024545 017203 0ustar00chrenderstaff000000 000000 libfizmo aims to provide a Z-Machine interpreter core library in plain C. The goal is to have an interpreter library with as little dependencies as possible to allow for easy portability. In order to use it stand-alone, you have to invoke the "fizmo_start" function in "src/interpreter/fizmo.c" with a screen interface. Check fizmo-console for an example. Currently the interpreter is in beta status, which means it seems to run all non-version-6 games quite well without any known bugs. Dependencies: - libxml2 for parsing of .ifiction files (optional) Please send bug reports (or other requests) to fizmo@spellbreaker.org. libfizmo was written by Christoph Ender in 2005-2015. For the latest version, see http://spellbreaker.org/~chrender/fizmo/. libfizmo uses the Mersenne twister from http://www.math.sci.hiroshima- u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html as a random number generator implementation: "A C-program for MT19937, with initialization improved 2002/1/26. Coded by Takuji Nishimura and Makoto Matsumoto. Copyright (C) 1997 -- 2002, Makoto Matsumoto and Takuji Nishimura, All rights reserved." For full copyright notice see "src/fizmo/mt19937ar.c". libfizmo includes hyphenation patterns provided by the hyph-utf8 project at http://www.ctan.org/tex-archive/language/hyph-utf8/. For every file's detailed respective copyright information, please refer to the description stored at the top of the corresponding file: - "src/locales/en_US/patterns.txt" from hyph-utf8's "hyph-en-us.tex". - "src/locales/de_DE/patterns.txt" from hyph-utf8's "hyph-de-1996.tex". - "src/locales/fr_FR/patterns.txt" from hyph-utf8's "hyph-fr.tex". Currently fizmo is in beta status, meaning it might do unexpected things such as stop with an error message, crash or cleesh your machine into a frog. There is no warranty of any kind whatsoever and you're entirely on your own when running it. fizmo-0.7.10/libfizmo/src/000755 000765 000024 00000000000 12606024314 016260 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/src/blorb_interface/000755 000765 000024 00000000000 12606024314 021400 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/src/filesys_interface/000755 000765 000024 00000000000 12606024314 021756 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/src/interpreter/000755 000765 000024 00000000000 12606024550 020625 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/src/locales/000755 000765 000024 00000000000 12606024314 017702 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/src/screen_interface/000755 000765 000024 00000000000 12606024314 021557 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/src/sound_interface/000755 000765 000024 00000000000 12606024314 021430 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/src/test/000755 000765 000024 00000000000 12606024314 017237 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/src/tools/000755 000765 000024 00000000000 12606024550 017422 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/src/tools/filesys.c000644 000765 000024 00000003465 12606024314 021252 0ustar00chrenderstaff000000 000000 /* filesys.c * * This file is part of fizmo. * * Copyright (c) 2011-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef filesys_c_INCLUDED #define filesys_c_INCLUDED #include #include "filesys_c.h" struct z_filesys_interface *fsi = &z_filesys_interface_c; void fizmo_register_filesys_interface( struct z_filesys_interface *filesys_interface) { fsi = filesys_interface; } #endif /* filesys_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/tools/filesys.h000644 000765 000024 00000003500 12606024314 021245 0ustar00chrenderstaff000000 000000 /* filesys.h * * This file is part of fizmo. * * Copyright (c) 2011-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef filesys_h_INCLUDED #define filesys_h_INCLUDED #include "types.h" #include "../filesys_interface/filesys_interface.h" #ifndef filesys_c_INCLUDED extern struct z_filesys_interface *fsi; #endif void fizmo_register_filesys_interface( struct z_filesys_interface *filesys_interface); #endif /* filesys_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/tools/filesys_c.c000644 000765 000024 00000016364 12606024314 021556 0ustar00chrenderstaff000000 000000 /* filesys_c.c * * This file is part of fizmo. * * Copyright (c) 2011-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef filesys_c_c_INCLUDED #define filesys_c_c_INCLUDED #include #include #include #include #include #include #include #include #include "filesys_c.h" #include "tracelog.h" #include "types.h" #include "z_ucs.h" #include "../filesys_interface/filesys_interface.h" #if defined (__WIN32__) static char *fileaccess_string[] = { "rb", "wb", "ab" }; #else static char *fileaccess_string[] = { "r", "w", "a" }; #endif // defined (__WIN32__) static z_file *openfile_c(char *filename, int filetype, int fileaccess) { z_file *result; int access_index; if ((result = malloc(sizeof(z_file))) == NULL) return NULL; if (fileaccess == FILEACCESS_READ) access_index = 0; else if (fileaccess == FILEACCESS_WRITE) access_index = 1; else if (fileaccess == FILEACCESS_APPEND) access_index = 2; else return NULL; TRACE_LOG("Trying to fopen(\"%s\", \"%s\").\n", filename, fileaccess_string[access_index]); if ((result->file_object = (void*)fopen(filename, fileaccess_string[access_index])) == NULL) { free(result); return NULL; } result->filename = strdup(filename); result->filetype = filetype; result->fileaccess = fileaccess; return result; } static int closefile_c(z_file *file_to_close) { // Since the fclose manpage says that even if "fclose" fails no further // access to the stream is possible, the "closefile_c" function will always // clear up the z_file structure. int result = fclose((FILE*)file_to_close->file_object); free(file_to_close->filename); file_to_close->file_object = NULL; file_to_close->filename = NULL; free(file_to_close); return result; } static int readchar_c(z_file *fileref) { int result = fgetc((FILE*)fileref->file_object); return result == EOF ? -1 : result; } static size_t readchars_c(void *ptr, size_t len, z_file *fileref) { return fread(ptr, 1, len, (FILE*)fileref->file_object); } static int writechar_c(int ch, z_file *fileref) { return putc(ch, (FILE*)fileref->file_object); } static size_t writechars_c(void *ptr, size_t len, z_file *fileref) { return fwrite(ptr, 1, len, (FILE*)fileref->file_object); } int writestring_c(char *s, z_file *fileref) { return writechars_c(s, strlen(s), fileref); } int writeucsstring_c(z_ucs *s, z_file *fileref) { char buf[128]; int len; int res = 0; // FIMXE: Re-implement for various output charsets. while (*s != 0) { len = zucs_string_to_utf8_string(buf, &s, 128); res += writechars_c(buf, len-1, fileref); } return res; } static int fileprintf_c(z_file *fileref, char *format, ...) { va_list args; va_start(args, format); int result = vfprintf((FILE*)fileref->file_object, format, args); va_end(args); return result; } static int vfileprintf_c(z_file *fileref, char *format, va_list ap) { return vfprintf((FILE*)fileref->file_object, format, ap); } static int filescanf_c(z_file *fileref, char *format, ...) { va_list args; va_start(args, format); int result = vfscanf((FILE*)fileref->file_object, format, args); va_end(args); return result; } static int vfilescanf_c(z_file *fileref, char *format, va_list ap) { return vfscanf((FILE*)fileref->file_object, format, ap); } static long getfilepos_c(z_file *fileref) { return ftell((FILE*)fileref->file_object); } static int setfilepos_c(z_file *fileref, long seek, int whence) { return fseek((FILE*)fileref->file_object, seek, whence); } static int unreadchar_c(int c, z_file *fileref) { return ungetc(c, (FILE*)fileref->file_object); } static int flushfile_c(z_file *fileref) { return fflush((FILE*)fileref->file_object); } static time_t get_last_file_mod_timestamp_c(z_file *fileref) { struct stat stat_buf; if (fstat(fileno((FILE*)fileref->file_object), &stat_buf) != 0) return -1; else return stat_buf.st_ctime; } static int get_fileno_c(z_file *fileref) { return fileno((FILE*)fileref->file_object); } static FILE* get_stdio_stream_c(z_file *fileref) { return (FILE*)fileref->file_object; } static z_dir *open_dir_c(char *dirname) { z_dir *result; if ((result = malloc(sizeof(z_dir))) == NULL) return NULL; if ((result->dir_object = opendir(dirname)) == NULL) { free(result); return NULL; } return result; } static int close_dir_c(z_dir *dirref) { int result; result = closedir((DIR*)dirref->dir_object); free(dirref); return result; } static int read_dir_c(struct z_dir_ent *result, z_dir *dirref) { struct dirent *dir_ent; if ((dir_ent = readdir((DIR*)dirref->dir_object)) == NULL) return -1; result->d_name = dir_ent->d_name; return 0; } static int make_dir_c(char *path) { return mkdir(path #if !defined (__WIN32__) ,S_IRWXU #endif // !defined (__WIN32__) ); } static char* get_cwd_c() { return getcwd(NULL, 0); } static int ch_dir_c(char *dirname) { return chdir(dirname); } static bool is_filename_directory_c(char *filename) { int filedes; struct stat stat_buf; bool result; if ((filedes = open(filename, O_RDONLY)) < 0) return false; if (fstat(filedes, &stat_buf) != 0) return false; result = stat_buf.st_mode & S_IFDIR ? true : false; close(filedes); return result; } struct z_filesys_interface z_filesys_interface_c = { &openfile_c, &closefile_c, &readchar_c, &readchars_c, &writechar_c, &writechars_c, &writestring_c, &writeucsstring_c, &fileprintf_c, &vfileprintf_c, &filescanf_c, &vfilescanf_c, &getfilepos_c, &setfilepos_c, &unreadchar_c, &flushfile_c, &get_last_file_mod_timestamp_c, &get_fileno_c, &get_stdio_stream_c, &get_cwd_c, &ch_dir_c, &open_dir_c, &close_dir_c, &read_dir_c, &make_dir_c, &is_filename_directory_c }; #endif /* filesys_c_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/tools/filesys_c.h000644 000765 000024 00000003404 12606024314 021552 0ustar00chrenderstaff000000 000000 /* filesys_c.h * * This file is part of fizmo. * * Copyright (c) 2011-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef filesys_c_h_INCLUDED #define filesys_c_h_INCLUDED #include "../filesys_interface/filesys_interface.h" #ifndef filesys_c_c_INCLUDED extern struct z_filesys_interface z_filesys_interface_c; #endif // filesys_c_c_INCLUDED #endif /* filesys_c_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/tools/i18n.c000644 000765 000024 00000107620 12606024314 020351 0ustar00chrenderstaff000000 000000 /* i18n.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef i18n_c_INCLUDED #define i18n_c_INCLUDED #include #include #include #include #include "i18n.h" #include "tracelog.h" #include "z_ucs.h" #include "stringmap.h" #include "list.h" #include "filesys.h" #include "../locales/libfizmo_locales.h" #define LATIN1_TO_Z_UCS_BUFFER_SIZE 64 static z_ucs i18n_fallback_error_message[] = { 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 'i', '1', '8', 'n', ' ', 'e', 'r', 'r', 'o', 'r', '.', 0 }; static char *locale_aliases[4][5] = { { "en_US", "en-GB", "en-US", "en", NULL }, { "de_DE", "de", NULL }, { "fr_FR", "fr", NULL }, { NULL } }; //z_ucs *active_locale = NULL; static z_ucs *current_locale_name = NULL; static char *current_locale_name_in_utf8 = NULL; static char *default_locale_name_in_utf8 = NULL; static int (*stream_output_function)(z_ucs *output) = NULL; static void (*abort_function)(int exit_code, z_ucs *error_message) = NULL; static char *locale_search_path = NULL; static stringmap *locale_modules = NULL; // indexed by locale_name #ifdef I18N_DEFAULT_SEARCH_PATH char default_search_path[] = I18N_DEFAULT_SEARCH_PATH; #else char default_search_path[] = "."; #endif // I18N_DEFAULT_SEARCH_PATH void register_i18n_stream_output_function( int (*new_stream_output_function)(z_ucs *output)) { stream_output_function = new_stream_output_function; } void register_i18n_abort_function( void (*new_abort_function)(int exit_code, z_ucs *error_message)) { abort_function = new_abort_function; } static int i18n_send_output(z_ucs *z_ucs_data, int output_mode, z_ucs **string_target) { char *output; if (z_ucs_data == NULL) { return 0; } else if (output_mode == i18n_OUTPUT_MODE_STREAMS) { if (stream_output_function == NULL) { if ((output = dup_zucs_string_to_utf8_string(z_ucs_data)) == NULL) return -1; fputs(output, stdout); free(output); return 0; } else return stream_output_function(z_ucs_data); } else if (output_mode == i18n_OUTPUT_MODE_STRING) { (void)z_ucs_cpy(*string_target, z_ucs_data); *string_target += z_ucs_len(z_ucs_data); return 0; } else if (output_mode == i18n_OUTPUT_MODE_DEV_NULL) { return 0; } else { return -1; } } static z_ucs input_char(z_file *in) { z_ucs input; if ((input = parse_utf8_char_from_file(in)) == UEOF) { TRACE_LOG("Premature end of file.\n"); exit(-1); } return (z_ucs)input; } static locale_module *parse_locale_file(z_ucs *module_name, char* locale_dir_name, char* module_name_utf8) { char *filename; z_file *in; z_ucs *locale_data; locale_module *result; char in_char; long nof_zucs_chars; z_ucs input; z_ucs *linestart; list *lines; TRACE_LOG("locale_dir_name: \"%s\".\n", locale_dir_name); TRACE_LOG("module_name_utf8: \"%s\".\n", module_name_utf8); // open-resource: if ((filename = malloc(strlen(locale_dir_name) + strlen(module_name_utf8) + 2)) == NULL) { // exit-point: TRACE_LOG("malloc() returned NULL.\n"); return NULL; } TRACE_LOG("locale_dir_name: \"%s\".\n", locale_dir_name); TRACE_LOG("module_name_utf8: \"%s\".\n", module_name_utf8); strcpy(filename, locale_dir_name); strcat(filename, "/"); strcat(filename, module_name_utf8); TRACE_LOG("Parsing locale file \"%s\".\n", filename); // open-resource: if ((in = fsi->openfile(filename, FILETYPE_DATA, FILEACCESS_READ)) == NULL) { // exit-point: TRACE_LOG("openfile(\"%s\") returned NULL.\n", filename); free(filename); return NULL; } nof_zucs_chars = 0; while ((parse_utf8_char_from_file(in)) != UEOF) nof_zucs_chars++; nof_zucs_chars++; // Add space for terminating zero (yes, really required). if (fsi->setfilepos(in, 0, SEEK_SET) == -1) { // exit-point: TRACE_LOG("setfilepos() returned -1.\n"); fsi->closefile(in); free(filename); return NULL; } TRACE_LOG("Allocating space for %ld z_ucs chars.\n", nof_zucs_chars); // open-resource: if ((locale_data = malloc(nof_zucs_chars * sizeof(z_ucs))) == NULL) { // exit-point: TRACE_LOG("malloc(%ld) returned NULL.\n", nof_zucs_chars * sizeof(z_ucs)); fsi->closefile(in); free(filename); return NULL; } TRACE_LOG("Locale data at %p, ends at %p.\n", locale_data, locale_data+nof_zucs_chars); // open-resource: if ((result = malloc(sizeof(locale_module))) == NULL) { // exit-point: free(locale_data); fsi->closefile(in); free(filename); return NULL; } TRACE_LOG("New module at %p.\n", result); result->locale_data = locale_data; TRACE_LOG("Locale data starts at %p.\n", locale_data); /* --- */ // open-resource: lines = create_list(); //printf("new list created: %p\n", lines); in_char = fsi->readchar(in); while (in_char != EOF) { linestart = locale_data; // Found a new line. fsi->unreadchar(in_char, in); for (;;) { input = input_char(in); if (input == Z_UCS_BACKSLASH) { //*locale_data++ = input; input = input_char(in); if (input == Z_UCS_BACKSLASH) { *locale_data++ = Z_UCS_BACKSLASH; } else if (input == 'n') { *locale_data++ = Z_UCS_NEWLINE; } else if (input == '{') { *locale_data++ = Z_UCS_BACKSLASH; *locale_data++ = (z_ucs)'{'; input = input_char(in); if ((input < 0x30) && (input > 0x39)) { fprintf(stderr, "Variable number expected.\n"); exit(EXIT_FAILURE); } *locale_data++ = input; input = input_char(in); if ( (input != (z_ucs)'s') && (input != (z_ucs)'d') && (input != (z_ucs)'x') && (input != (z_ucs)'z') ) { fprintf(stderr, "Invalid parameter type.\n"); exit(EXIT_FAILURE); } *locale_data++ = input; input = input_char(in); if (input != (z_ucs)'}') { fprintf(stderr, "Expected '}'.\n"); exit(EXIT_FAILURE); } *locale_data++ = (z_ucs)'}'; } else { fprintf(stderr, "Undefined control sequence \\%c.\n",(char)input); exit(EXIT_FAILURE); } } else if (input == Z_UCS_NEWLINE) { *locale_data++ = 0; TRACE_LOG("New line at %p.\n", linestart); add_list_element(lines, (void*)linestart); //TRACE_LOG_Z_UCS(linestart); break; } else { // Here we've found some "normal" output. *locale_data++ = (z_ucs)input; } } //messages_processed++; in_char = fsi->readchar(in); } *locale_data = 0; TRACE_LOG("Wirte last byte at %p.\n", locale_data); /* --- */ TRACE_LOG("Read %d lines.\n", get_list_size(lines)); // close-resource(l), open-resource(result->messages): result->nof_messages = get_list_size(lines); result->messages = (z_ucs**)delete_list_and_get_ptrs(lines); TRACE_LOG("Messages at %p.\n", result->messages); TRACE_LOG("First msg at %p.\n", result->messages[0]); if ((result->module_name = malloc(sizeof(z_ucs) * (z_ucs_len(module_name)+1))) == NULL) { // exit-point: free(result->messages); free(result); free(locale_data); fsi->closefile(in); free(filename); return NULL; } z_ucs_cpy(result->module_name, module_name); // close-resource: fsi->closefile(in); // close-resource: free(filename); TRACE_LOG("Returning new module at %p.\n", result); return result; } static void delete_locale_module(locale_module *module) { TRACE_LOG("Deleting locale module at %p.\n", module); free(module->messages); free(module->locale_data); free(module->module_name); free(module); } // Returns malloc()ed string which needs to be free()d later. static char *get_path_for_locale(z_ucs *locale_name) { z_dir *dir; char *search_path; z_ucs *search_path_zucs, *path_ptr, *colon_index, *zucs_ptr; z_ucs *zucs_buf = NULL; size_t bufsize = 0, len, dirname_len; struct z_dir_ent z_dir_entry; char *dirname; char *locale_name_utf8, *locale_dir_name = NULL; search_path = locale_search_path == NULL ? default_search_path : locale_search_path; search_path_zucs = dup_utf8_string_to_zucs_string(search_path); path_ptr = search_path_zucs; TRACE_LOG("Search path: \""); TRACE_LOG_Z_UCS(search_path_zucs); TRACE_LOG("'.\n"); // open-resource: locale_name_utf8 = dup_zucs_string_to_utf8_string(locale_name); while (*path_ptr != 0) { colon_index = z_ucs_chr(path_ptr, Z_UCS_COLON); len = colon_index == NULL ? z_ucs_len(path_ptr) : (size_t)(colon_index - path_ptr); TRACE_LOG("len: %ld\n", (long)len); if (len > 0) { if (bufsize < len + 1) { TRACE_LOG("realloc buf for %ld chars / %ld bytes.\n", (long)len + 1, (long)sizeof(z_ucs) * (len + 1)); // open-resource: if ((zucs_ptr = realloc(zucs_buf, sizeof(z_ucs) * (len + 1))) == NULL) { // exit-point: TRACE_LOG("realloc() returned NULL.\n"); free(zucs_buf); free(locale_name_utf8); free(path_ptr); return NULL; } bufsize = len + 1; zucs_buf = zucs_ptr; } z_ucs_ncpy(zucs_buf, path_ptr, len); zucs_buf[len] = 0; // open-resource: if ((dirname = dup_zucs_string_to_utf8_string(zucs_buf)) == NULL) { // exit-point: TRACE_LOG("dup_zucs_string_to_utf8_string() returned NULL.\n"); free(zucs_buf); free(locale_name_utf8); free(path_ptr); return NULL; } TRACE_LOG("Path: '%s'\n", dirname); // open-resource: if ((dir = fsi->open_dir(dirname)) != NULL) { while (fsi->read_dir(&z_dir_entry, dir) == 0) { TRACE_LOG("Processing \"%s\".\n", z_dir_entry.d_name); if (strcasecmp(locale_name_utf8, z_dir_entry.d_name) == 0) { dirname_len = strlen(dirname) + strlen(z_dir_entry.d_name); TRACE_LOG("dirname_len: %ld.\n", (long)dirname_len); // open-resource: if ((locale_dir_name = malloc(dirname_len + 2)) == NULL) { // exit-point: TRACE_LOG("malloc() returned NULL.\n"); fsi->close_dir(dir); free(dirname); free(zucs_buf); free(locale_name_utf8); free(path_ptr); return NULL; } strcpy(locale_dir_name, dirname); strcat(locale_dir_name, "/"); strcat(locale_dir_name, z_dir_entry.d_name); break; } } // close-resource: fsi->close_dir(dir); } // close-resource: free(dirname); } if (locale_dir_name != NULL) break; path_ptr += len + (colon_index != NULL ? 1 : 0); } free(search_path_zucs); // close-resource: free(locale_name_utf8); // close-resource: free(zucs_buf); //TRACE_LOG("res:'"); //TRACE_LOG_Z_UCS(locale_dir_name); //TRACE_LOG("\n"); return locale_dir_name; } static locale_module *create_locale_module(z_ucs *locale_name, z_ucs *module_name) { z_dir *dir; locale_module *result = NULL; char *ptr; struct z_dir_ent z_dir_entry; char *module_name_utf8, *locale_dir_name = NULL; stringmap *module_map; TRACE_LOG("Creating module '"); TRACE_LOG_Z_UCS(module_name); TRACE_LOG("' for locale '"); TRACE_LOG_Z_UCS(locale_name); TRACE_LOG("'.\n"); if ((locale_dir_name = get_path_for_locale(locale_name)) == NULL) { // No directory containing an entry named equal to local name was foudn. TRACE_LOG("locale_dir_name is NULL.\n"); return NULL; } // open-resource: module_name_utf8 = dup_zucs_string_to_utf8_string(module_name); if ((ptr = realloc(module_name_utf8, strlen(module_name_utf8) + 9)) == NULL) { TRACE_LOG("realloc() returned NULL.\n"); free(module_name_utf8); free(locale_dir_name); return NULL; } module_name_utf8 = ptr; strcat(module_name_utf8, "_i18n.txt"); // open-resource: if ((dir = fsi->open_dir(locale_dir_name)) != NULL) { TRACE_LOG("Trying file \"%s\".\n", module_name_utf8); while (fsi->read_dir(&z_dir_entry, dir) == 0) { if (strcasecmp(module_name_utf8, z_dir_entry.d_name) == 0) { TRACE_LOG("File matches \"%s\".\n", module_name_utf8); if ((result = parse_locale_file( module_name, locale_dir_name, module_name_utf8)) == NULL) { TRACE_LOG("parse_locale_file() returned NULL.\n"); fsi->close_dir(dir); free(module_name_utf8); free(locale_dir_name); return NULL; } } } // close-resource: fsi->close_dir(dir); } // close-resource: free(module_name_utf8); // close-resource: free(locale_dir_name); if (result == NULL) { TRACE_LOG("Could not find module'"); TRACE_LOG_Z_UCS(module_name); TRACE_LOG("'.\n"); return NULL; } if (locale_modules == NULL) locale_modules = create_stringmap(); if ((module_map = (stringmap*)get_stringmap_value(locale_modules, locale_name)) == NULL) { module_map = create_stringmap(); if ((add_stringmap_element(locale_modules, locale_name, module_map)) != 0) { TRACE_LOG("add_stringmap_element() failed.\n"); delete_locale_module(result); } } if (add_stringmap_element(module_map, module_name, result) != 0) { TRACE_LOG("add_stringmap_element() failed.\n"); delete_locale_module(result); } return result; } static locale_module *get_locale_module(z_ucs *locale_name, z_ucs *module_name) { stringmap *module_map; locale_module *result = NULL; TRACE_LOG("Getting module '"); TRACE_LOG_Z_UCS(module_name); TRACE_LOG("' for locale '"); TRACE_LOG_Z_UCS(locale_name); TRACE_LOG("'.\n"); if ( (locale_modules != NULL) && ((module_map = (stringmap*)get_stringmap_value(locale_modules, locale_name)) != NULL) ) result = (locale_module*)get_stringmap_value(module_map, module_name); if (result == NULL) result = create_locale_module(locale_name, module_name); return result; } static void i18n_exit(int exit_code, z_ucs *error_message) { char *output; if ( (error_message == NULL) || (*error_message == 0) ) error_message = i18n_fallback_error_message; if (abort_function != NULL) { TRACE_LOG("Aborting using custom abort function.\n"); abort_function(exit_code, error_message); } else { TRACE_LOG("Aborting using default method: fputs and exit(code).\n"); if ((output = dup_zucs_string_to_utf8_string(error_message)) != NULL) { fputs(output, stderr); free(output); } } exit(exit_code); } char *get_default_locale_name() { if (default_locale_name_in_utf8 == NULL) if ((default_locale_name_in_utf8 = dup_zucs_string_to_utf8_string(default_locale_name)) == NULL) return NULL; return default_locale_name_in_utf8; } // "string_code" is one of the codes defined in "utf8.h". // "ap" is the va_list initialized in the various i18n-methods. // "output_mode" is either "i18n_OUTPUT_MODE_DEV_NULL" for no output // at all (useful for string length measuring), "i18n_OUTPUT_MODE_STREAMS" // for sending output to "streams_utf8_output" and "i18n_OUTPUT_MODE_STRING" // to write the output to a string. static long i18n_translate_from_va_list(z_ucs *module_name, int string_code, va_list ap, int output_mode, z_ucs *string_target) { z_ucs *locale_name; locale_module *module; z_ucs *index; char parameter_types[11]; // May each contain 's', 'z' or 'd'. Using 11 // instead of ten so that a null byte may be // placed after a char to print the error // message as string. char *string_parameters[10]; // pointers to the parameters. z_ucs *z_ucs_string_parameters[10]; char formatted_parameters[10][MAXIMUM_FORMATTED_PARAMTER_LENGTH + 1]; z_ucs *start; uint8_t match_stage; int i,k; int n; z_ucs buf; size_t length; z_ucs *start_index; char index_char; z_ucs z_ucs_buffer[LATIN1_TO_Z_UCS_BUFFER_SIZE]; char *ptr; locale_name = current_locale_name != NULL ? current_locale_name : default_locale_name; TRACE_LOG("Trying to get module '"); TRACE_LOG_Z_UCS(module_name); TRACE_LOG("' for locale '"); TRACE_LOG_Z_UCS(locale_name); TRACE_LOG("'.\n"); if ((module = get_locale_module(locale_name, module_name)) == NULL) { TRACE_LOG("Module not found.\n"); i18n_exit(-1, NULL); } TRACE_LOG("Got module at %p with %d messages at %p.\n", module, module->nof_messages, module->messages); if (string_code >= module->nof_messages) { TRACE_LOG("String %d code too large, exiting.\n", string_code); i18n_exit(-1, NULL); } index = module->messages[string_code]; if (index == NULL) return -1; TRACE_LOG("Translating string code %d at %p.\n", string_code, index); n = 0; while ((index = z_ucs_chr(index, (z_ucs)'\\')) != NULL) { index++; start_index = index; index_char = zucs_char_to_latin1_char(*index); if (index_char == '{') { TRACE_LOG("'{' found.\n"); index++; index_char = zucs_char_to_latin1_char(*index); } else { index = start_index; continue; } if ((index_char >= '0') && (index_char <= '9')) { TRACE_LOG("'[0-9]' found.\n"); index++; index_char = zucs_char_to_latin1_char(*index); } else { index = start_index; continue; } if ( (index_char == 's') || (index_char == 'z') || (index_char == 'd') || (index_char == 'x') ) { TRACE_LOG("'[szdx]' found.\n"); parameter_types[n] = index_char; index++; index_char = zucs_char_to_latin1_char(*index); } else { index = start_index; continue; } if (index_char == '}') { TRACE_LOG("'}' found.\n"); index++; index_char = zucs_char_to_latin1_char(*index); n++; } else { index = start_index; continue; } } TRACE_LOG("Found %d parameter codes.\n", n); if (n == 0) { TRACE_LOG("No parameter.\n"); // In case we don't have a single parameter, we can just print // everything right away and quit. if (i18n_send_output( module->messages[string_code], output_mode, (string_target != NULL ? &string_target : NULL)) != 0) return -1; else return z_ucs_len(module->messages[string_code]); } length = 0; for (i=0; imessages[string_code]; i = 0; match_stage = 0; while (start[i] != 0) { if (match_stage == 1) { // We've already found a leading backslash. if ((start[i] == Z_UCS_BACKSLASH) && (match_stage == 1)) { // Found another backslash, so output. (void)latin1_string_to_zucs_string( z_ucs_buffer, "\\", LATIN1_TO_Z_UCS_BUFFER_SIZE); if (i18n_send_output(z_ucs_buffer, output_mode, (string_target != NULL ? &string_target : NULL)) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -1, "i18n_send_output"); match_stage = 0; length++; i++; } else if (start[i] == (z_ucs)'{') { // Here we've found a parameter. First, output everything up to // the parameter excluding "\{". In order to achive that, we'll // replace the first byte that shouldn't be printed with the // string-terminating 0 and restore it after that for the next // use of this message. buf = start[i-1]; start[i-1] = 0; if (i18n_send_output( start, output_mode, (string_target != NULL ? &string_target : NULL)) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -1, "i18n_send_output"); length += z_ucs_len(start); start[i-1] = buf; // After that, output parameter (subtract 0x30 == ASCII:'0') k = (int)(start[i+1] - 0x30); if (parameter_types[k] == 's') { ptr = string_parameters[k]; TRACE_LOG("%s\n", ptr); while (ptr != NULL) { ptr = latin1_string_to_zucs_string( z_ucs_buffer, ptr, LATIN1_TO_Z_UCS_BUFFER_SIZE); if (i18n_send_output( z_ucs_buffer, output_mode, (string_target != NULL ? &string_target : NULL)) !=0 ) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -1, "i18n_send_output"); } } else if (parameter_types[k] == 'z') { if (i18n_send_output( z_ucs_string_parameters[k], output_mode, (string_target != NULL ? &string_target : NULL)) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -1, "i18n_send_output"); } else { ptr = formatted_parameters[k]; while (ptr != NULL) { ptr = latin1_string_to_zucs_string( z_ucs_buffer, ptr, LATIN1_TO_Z_UCS_BUFFER_SIZE); if (i18n_send_output( z_ucs_buffer, output_mode, (string_target != NULL ? &string_target : NULL)) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -1, "i18n_send_output"); } } start += i + 4; i = 0; match_stage = 0; } else { i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_INVALID_BACKSLASH_SEQUENCE_IN_LOCALIZATION_DATA, -1); } } else { if ((start[i] == Z_UCS_BACKSLASH) && (match_stage == 0)) { // Found leading backslash; match_stage = 1; i++; } else { // Found nothing, next char (non memchar since operating on z_ucs) i++; } } } if (i != 0) { if (i18n_send_output( start, output_mode, (string_target != NULL ? &string_target : NULL)) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -1, "i18n_send_output"); } length += z_ucs_len(start); TRACE_LOG("Final length:%zd.\n", length); return length; } void i18n_translate_and_exit( z_ucs *module_name, int string_code, int exit_code, ...) { va_list ap; size_t message_length; z_ucs *error_message; TRACE_LOG("Exiting with message code %d.\n", string_code); va_start(ap, exit_code); message_length = i18n_translate_from_va_list( module_name, string_code, ap, i18n_OUTPUT_MODE_DEV_NULL, NULL); va_end(ap); TRACE_LOG("Message length: %zu.\n", message_length); if ((error_message = (z_ucs*)malloc((message_length+3) * sizeof(z_ucs))) == NULL) return; TRACE_LOG("Error message at: %p.\n", error_message); va_start(ap, exit_code); // Translate message into "error_message": if (i18n_translate_from_va_list( module_name, string_code, ap, i18n_OUTPUT_MODE_STRING, error_message) < 0) { TRACE_LOG("Code < 0\n"); free(error_message); i18n_exit(exit_code, NULL); } va_end(ap); TRACE_LOG("Exit message: \""); // error_message is now defined: TRACE_LOG_Z_UCS(error_message); TRACE_LOG("\".\n"); error_message[message_length] = Z_UCS_NEWLINE; error_message[message_length+1] = 0; i18n_exit(exit_code, error_message); } size_t _i18n_va_translate(z_ucs *module_name, int string_code, va_list ap) { return i18n_translate_from_va_list( module_name, string_code, ap, i18n_OUTPUT_MODE_STREAMS, NULL); } size_t i18n_translate(z_ucs *module_name, int string_code, ...) { va_list ap; size_t result; va_start(ap, string_code); result = _i18n_va_translate(module_name, string_code, ap); va_end(ap); return result; } size_t i18n_message_length(z_ucs *module_name, int string_code, ...) { va_list ap; size_t result; va_start(ap, string_code); result = i18n_translate_from_va_list( module_name, string_code, ap, i18n_OUTPUT_MODE_DEV_NULL, NULL); va_end(ap); return result; } // Returnes malloc()ed string which needs to be free()d later on. z_ucs *i18n_translate_to_string(z_ucs* module_name, int string_code, ...) { va_list ap; size_t message_length; z_ucs *result; va_start(ap, string_code); if ((message_length = i18n_translate_from_va_list( module_name, string_code, ap, i18n_OUTPUT_MODE_DEV_NULL, NULL)) < 1) return NULL; va_end(ap); if ((result = (z_ucs*)malloc((message_length+1) * sizeof(z_ucs))) == NULL) return NULL; va_start(ap, string_code); // The "i18n_translate_from_va_list"-call defines "result". if (i18n_translate_from_va_list( module_name, string_code, ap, i18n_OUTPUT_MODE_STRING, result) == -1) { free(result); return NULL; } va_end(ap); return result; } char *get_i18n_search_path() { return locale_search_path == NULL ? default_search_path : locale_search_path; } int set_i18n_search_path(char *path) { char *path_dup; if ((path_dup = strdup(path)) == NULL) return -1; if (locale_search_path != NULL) free(locale_search_path); locale_search_path = path_dup; TRACE_LOG("New search path: \"%s\".\n", locale_search_path); return 0; } char **get_available_locale_names() { z_dir *dir; char *search_path; z_ucs *search_path_zucs, *path_ptr, *colon_index, *zucs_ptr; z_ucs *zucs_buf = NULL; size_t bufsize = 0, len; struct z_dir_ent z_dir_entry; char *dirname; list *result_list = create_list(); char *new_locale_name; int j; search_path = locale_search_path == NULL ? default_search_path : locale_search_path; search_path_zucs = dup_utf8_string_to_zucs_string(search_path); TRACE_LOG("Search path: \""); TRACE_LOG_Z_UCS(search_path_zucs); TRACE_LOG("'.\n"); path_ptr = search_path_zucs; while (*path_ptr != 0) { colon_index = z_ucs_chr(path_ptr, Z_UCS_COLON); len = colon_index == NULL ? z_ucs_len(path_ptr) : (size_t)(colon_index - path_ptr); TRACE_LOG("len: %ld\n", (long)len); if (len > 0) { if (bufsize < len + 1) { TRACE_LOG("realloc buf for %ld chars / %ld bytes.\n", (long)len + 1, (long)sizeof(z_ucs) * (len + 1)); // open-resource: if ((zucs_ptr = realloc(zucs_buf, sizeof(z_ucs) * (len + 1))) == NULL) { // exit-point: TRACE_LOG("realloc() returned NULL.\n"); free(zucs_buf); free(path_ptr); for (j=0; jopen_dir(dirname)) != NULL) { while (fsi->read_dir(&z_dir_entry, dir) == 0) { TRACE_LOG("Processing \"%s\".\n", z_dir_entry.d_name); if ( (strcmp(".", z_dir_entry.d_name) != 0) && (strcmp("..", z_dir_entry.d_name) != 0) ) { for (j=0; jclose_dir(dir); } // close-resource: free(dirname); } path_ptr += len + (colon_index != NULL ? 1 : 0); } free(search_path_zucs); // close-resource: free(zucs_buf); //TRACE_LOG("res:'"); //TRACE_LOG_Z_UCS(locale_dir_name); //TRACE_LOG("\n"); return (char**)delete_list_and_get_null_terminated_ptrs(result_list); } z_ucs *get_current_locale_name() { return current_locale_name != NULL ? current_locale_name : default_locale_name; } char *get_current_locale_name_in_utf8() { return current_locale_name_in_utf8 != NULL ? current_locale_name_in_utf8 : get_default_locale_name(); } int set_current_locale_name(char *new_locale_name) { char *locale_dir_name = NULL; z_ucs *locale_dup; char *locale_dup_utf8; int i, j; if (new_locale_name == NULL) return -1; // Check if the locale name given was an alias: If, in case "en" was // given as locale name, this should be interpreted as "en_US" instead -- // see the "locale_aliases" definition above. i = 0; while (locale_aliases[i][0] != NULL) { // Test all aliases for current locale name: j = 1; while (locale_aliases[i][j] != NULL) { if (strcmp(locale_aliases[i][j], new_locale_name) == 0) break; j++; } if (locale_aliases[i][j] != NULL) { // We've found an alias. new_locale_name = locale_aliases[i][0]; TRACE_LOG("Locale name \"%s\" is an alias for \"%s\".\n", new_locale_name, new_locale_name); break; } i++; } if ((locale_dup = dup_utf8_string_to_zucs_string(new_locale_name)) == NULL) return -1; if ((locale_dup_utf8 = strdup(new_locale_name)) == NULL) { free(locale_dup); free(locale_dup_utf8); return -1; } if ((locale_dir_name = get_path_for_locale(locale_dup)) == NULL) { free(locale_dup); free(locale_dup_utf8); return -1; } free(locale_dir_name); if (current_locale_name != NULL) { free(current_locale_name); free(current_locale_name_in_utf8); } current_locale_name = locale_dup; current_locale_name_in_utf8 = strdup(locale_dup_utf8); TRACE_LOG("New locale name: '"); TRACE_LOG_Z_UCS(current_locale_name); TRACE_LOG("'.\n"); return 0; } char *get_i18n_default_search_path(void) { return default_search_path; } void free_i18n_memory(void) { z_ucs **locale_names, **locale_name; z_ucs **module_names, **module_name; stringmap *module_map; locale_module *module= NULL; if (locale_modules != NULL) { locale_names = get_names_in_stringmap(locale_modules); locale_name = locale_names; while (*locale_name != NULL) { module_map = (stringmap*)get_stringmap_value(locale_modules,*locale_name); module_names = get_names_in_stringmap(module_map); module_name = module_names; while (*module_name != NULL) { module = (locale_module*)get_stringmap_value(module_map, *module_name); delete_locale_module(module); module_name++; } free(module_names); delete_stringmap(module_map); locale_name++; } free(locale_names); delete_stringmap(locale_modules); locale_modules = NULL; } if (current_locale_name != NULL) { free(current_locale_name); current_locale_name = NULL; free(current_locale_name_in_utf8); current_locale_name_in_utf8 = NULL; } if (default_locale_name_in_utf8 == NULL) { free(default_locale_name_in_utf8); default_locale_name_in_utf8 = NULL; } } #endif /* i18n_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/tools/i18n.h000644 000765 000024 00000005441 12606024314 020354 0ustar00chrenderstaff000000 000000 /* i18n.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef i18n_h_INCLUDED #define i18n_h_INCLUDED #include "types.h" // 2^64 results in a number containing 20 digits. #define MAXIMUM_FORMATTED_PARAMTER_LENGTH 20 #define i18n_OUTPUT_MODE_DEV_NULL 0 #define i18n_OUTPUT_MODE_STREAMS 1 #define i18n_OUTPUT_MODE_STRING 2 #include typedef struct { z_ucs *locale_data; z_ucs *module_name; z_ucs **messages; int nof_messages; } locale_module; void register_i18n_stream_output_function( int (*new_stream_output_function)(z_ucs *output)); void register_i18n_abort_function( void (*new_abort_function)(int exit_code, z_ucs *error_message)); size_t _i18n_va_translate(z_ucs *module_name, int string_code, va_list ap); size_t i18n_translate(z_ucs *module_name, int string_code, ...); void i18n_translate_and_exit(z_ucs *module_name, int string_code, int exit_code, ...); size_t i18n_message_length(z_ucs *module_name, int string_code, ...); z_ucs *i18n_translate_to_string(z_ucs *module_name, int string_code, ...); char *get_i18n_search_path(); int set_i18n_search_path(char *path); z_ucs *get_current_locale_name(); char *get_current_locale_name_in_utf8(); int set_current_locale_name(char *new_locale_name); char **get_available_locale_names(); char *get_i18n_default_search_path(void); void free_i18n_memory(); #endif /* i18n_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/tools/list.c000644 000765 000024 00000006673 12606024314 020553 0ustar00chrenderstaff000000 000000 /* list.c * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef list_c_INCLUDED #define list_c_INCLUDED #include #include "list.h" list *create_list() { list *result; if ((result = malloc(sizeof(list))) == NULL) return NULL; result->elements = NULL; result->nof_elements_stored = 0; result->space_available = 0; return result; } int add_list_element(list *l, void *value) { void **ptr; //printf("list: %d / %d\n", // l->nof_elements_stored, l->space_available); if (l->nof_elements_stored == l->space_available) { if ((ptr = realloc(l->elements, sizeof(void*) * (l->space_available + LIST_INC_SIZE))) == NULL) return -1; l->elements = ptr; l->space_available += LIST_INC_SIZE; } l->elements[l->nof_elements_stored] = value; l->nof_elements_stored++; //printf("new-nof: %d\n", l->nof_elements_stored); return 0; } int get_list_size(list *l) { return l->nof_elements_stored; } void *get_list_element(list *l, int list_index) { return l->elements[list_index]; } bool list_contains_element(list *haystack, void *needle) { size_t index = 0; while (index < haystack->nof_elements_stored) { if (haystack->elements[index] == needle) return true; index++; } return false; } void delete_list(list *l) { free(l->elements); free(l); } void **delete_list_and_get_ptrs(list *l) { void **result = l->elements; if (l->space_available > l->nof_elements_stored) if ((result = realloc(l->elements, sizeof(void*) * l->nof_elements_stored)) == NULL) result = l->elements; free(l); return result; } void **delete_list_and_get_null_terminated_ptrs(list *l) { void **result = l->elements; if (l->space_available > l->nof_elements_stored + 1) if ((result = realloc(l->elements, sizeof(void*) * (l->nof_elements_stored + 1))) == NULL) result = l->elements; result[l->nof_elements_stored] = NULL; free(l); return result; } #endif /* list_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/tools/list.h000644 000765 000024 00000005154 12606024314 020551 0ustar00chrenderstaff000000 000000 /* list.h * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * The "list" represents an arbitrary amount of pointers. In order to * generalize it and make it useable for multiple types of data the * data is stored as pointers to void. It should be noted that although void * pointers may be arbitrarily converted into other types, wild type * conversions on not-aligned objects may cause errors. Thus, the stored * objects should be malloc()ed in their correct type, then cast to void * and may then be safely stored in a "list". For usage, the list elements * have to be retrieved and then converted back to their original type. * */ #ifndef list_h_INCLUDED #define list_h_INCLUDED #include "types.h" #define LIST_INC_SIZE 32 typedef struct { void** elements; size_t nof_elements_stored; size_t space_available; } list; list *create_list(); int add_list_element(list *l, void *value); int get_list_size(list *l); void *get_list_element(list *l, int list_index); bool list_contains_element(list *haystack, void *needle); void delete_list(list *l); void **delete_list_and_get_ptrs(list *l); void **delete_list_and_get_null_terminated_ptrs(list *l); #endif /* list_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/tools/Makefile.am000644 000765 000024 00000004032 12606024314 021453 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AUTOMAKE_OPTIONS = subdir-objects localedir = $(datarootdir)/fizmo/locales AM_CFLAGS = # Don't run ranlib directly, since in case OS X universal libraries are # built, files processed by ranlib cannot be any longer processed by ar # (which is required to assemble libfizmo later on). RANLIB = true noinst_LIBRARIES = libtools.a libtools_a_SOURCES = ../locales/libfizmo_locales.c filesys.c filesys_c.c \ i18n.c list.c stringmap.c tracelog.c types.c z_ucs.c if ENABLE_TRACING AM_CFLAGS += -DENABLE_TRACING= endif AM_CFLAGS += -DI18N_DEFAULT_SEARCH_PATH=\"$(localedir)\" fizmo-0.7.10/libfizmo/src/tools/Makefile.in000644 000765 000024 00000053174 12606024550 021501 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : @ENABLE_TRACING_TRUE@am__append_1 = -DENABLE_TRACING= subdir = libfizmo/src/tools ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libtools_a_AR = $(AR) $(ARFLAGS) libtools_a_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp am_libtools_a_OBJECTS = ../locales/libfizmo_locales.$(OBJEXT) \ filesys.$(OBJEXT) filesys_c.$(OBJEXT) i18n.$(OBJEXT) \ list.$(OBJEXT) stringmap.$(OBJEXT) tracelog.$(OBJEXT) \ types.$(OBJEXT) z_ucs.$(OBJEXT) libtools_a_OBJECTS = $(am_libtools_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libtools_a_SOURCES) DIST_SOURCES = $(libtools_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ # Don't run ranlib directly, since in case OS X universal libraries are # built, files processed by ranlib cannot be any longer processed by ar # (which is required to assemble libfizmo later on). RANLIB = true SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = $(datarootdir)/fizmo/locales localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AUTOMAKE_OPTIONS = subdir-objects AM_CFLAGS = $(am__append_1) \ -DI18N_DEFAULT_SEARCH_PATH=\"$(localedir)\" noinst_LIBRARIES = libtools.a libtools_a_SOURCES = ../locales/libfizmo_locales.c filesys.c filesys_c.c \ i18n.c list.c stringmap.c tracelog.c types.c z_ucs.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 libfizmo/src/tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libfizmo/src/tools/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) ../locales/$(am__dirstamp): @$(MKDIR_P) ../locales @: > ../locales/$(am__dirstamp) ../locales/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ../locales/$(DEPDIR) @: > ../locales/$(DEPDIR)/$(am__dirstamp) ../locales/libfizmo_locales.$(OBJEXT): ../locales/$(am__dirstamp) \ ../locales/$(DEPDIR)/$(am__dirstamp) libtools.a: $(libtools_a_OBJECTS) $(libtools_a_DEPENDENCIES) $(EXTRA_libtools_a_DEPENDENCIES) $(AM_V_at)-rm -f libtools.a $(AM_V_AR)$(libtools_a_AR) libtools.a $(libtools_a_OBJECTS) $(libtools_a_LIBADD) $(AM_V_at)$(RANLIB) libtools.a mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f ../locales/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@../locales/$(DEPDIR)/libfizmo_locales.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filesys.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filesys_c.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i18n.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stringmap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tracelog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/types.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z_ucs.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)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@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)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@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 $(LIBRARIES) 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) -rm -f ../locales/$(DEPDIR)/$(am__dirstamp) -rm -f ../locales/$(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-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ../locales/$(DEPDIR) ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-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 -rf ../locales/$(DEPDIR) ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic 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-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile # 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: fizmo-0.7.10/libfizmo/src/tools/README.txt000644 000765 000024 00000002066 12606024314 021122 0ustar00chrenderstaff000000 000000 This "tools" directory contains some utilities which are not strictly fizmo-related. They were separated from the rest of the code in order to allow easier building of fizmo-related tools, such as the simple test programs or separate libraries like drilbo. In particular, the "tools" set is made up from the following utilies: - i18n: Modularizable localization-tools. - stringmap: A simple mapping associating *void indexed by *z_ucs. - types: All types related to fizmo, essentially providing Z-machine types. - z_ucs: Support for wide characters requiring no wchar-C-Compiler support. - list: A simple set of *void pointers for easier list managment. - tracelog: A simple set of macros allowing to trace code execution. - unused: A macro provoding the "UNUSED()" expression. The Makefile supports the folloing targets: all (default): Will build "libtools.a". clean: Will remove all objects, test code and "tracelog.txt". distclean: Will execute "clean" and also remove "libtools.a". test: Will build and execute a tiny tools-test program. fizmo-0.7.10/libfizmo/src/tools/stringmap.c000644 000765 000024 00000010200 12606024314 021561 0ustar00chrenderstaff000000 000000 /* stringmap.c * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef stringmap_c_INCLUDED #define stringmap_c_INCLUDED #include #include "stringmap.h" #include "types.h" #include "z_ucs.h" #include "tracelog.h" stringmap *create_stringmap() { stringmap *result; if ((result = malloc(sizeof(stringmap))) == NULL) return NULL; result->elements = NULL; result->nof_elements_stored = 0; result->space_available = 0; return result; } static int get_stringmap_value_index(stringmap *map, z_ucs *name) { size_t i; TRACE_LOG("Looking for value with key '"); TRACE_LOG_Z_UCS(name); TRACE_LOG("'.\n"); if ( (map == NULL) || (name == NULL) ) return -1; for (i=0; inof_elements_stored; i++) { TRACE_LOG("Found '"); TRACE_LOG_Z_UCS(map->elements[i]->name); TRACE_LOG("'.\n"); if (z_ucs_cmp(map->elements[i]->name, name) == 0) { TRACE_LOG("Successfully found key at index %ld.\n", (long int)i); return i; } } return -1; } int add_stringmap_element(stringmap *map, z_ucs *name, void *value) { stringmap_element *element_ptr; stringmap_element **element_ptr_ptr; if (get_stringmap_value_index(map, name) >= 0) return -1; if (map->nof_elements_stored == map->space_available) { if ((element_ptr_ptr = realloc( map->elements, sizeof(stringmap_element) * map->space_available + MAP_INC_SIZE)) == NULL) return -1; map->elements = element_ptr_ptr; map->space_available += MAP_INC_SIZE; } if ((element_ptr = malloc(sizeof(stringmap_element))) == NULL) return -1; if ((element_ptr->name = z_ucs_dup(name)) == NULL) { free(element_ptr); return -1; } element_ptr->value = value; map->elements[map->nof_elements_stored] = element_ptr; TRACE_LOG("Stored new value with key '"); TRACE_LOG_Z_UCS(element_ptr->name); TRACE_LOG("'.\n"); map->nof_elements_stored++; return 0; } void *get_stringmap_value(stringmap *map, z_ucs *name) { int result_index = get_stringmap_value_index(map, name); return result_index >= 0 ? map->elements[result_index]->value : NULL; } z_ucs **get_names_in_stringmap(stringmap *map) { z_ucs **result; size_t i; if (map->nof_elements_stored == 0) return NULL; if ((result = malloc(sizeof(z_ucs*) * (map->nof_elements_stored+1))) == NULL) return NULL; for (i=0; inof_elements_stored; i++) result[i] = map->elements[i]->name; result[i] = NULL; return result; } void delete_stringmap(stringmap *map) { size_t i; if (map == NULL) return; for (i=0; inof_elements_stored; i++) free(map->elements[i]); free(map->elements); } #endif /* stringmap_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/tools/stringmap.h000644 000765 000024 00000004072 12606024314 021600 0ustar00chrenderstaff000000 000000 /* stringmap.h * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef stringmap_h_INCLUDED #define stringmap_h_INCLUDED #include "types.h" #define MAP_INC_SIZE 32 typedef struct { z_ucs *name; void *value; } stringmap_element; typedef struct { stringmap_element** elements; size_t nof_elements_stored; size_t space_available; } stringmap; stringmap *create_stringmap(); int add_stringmap_element(stringmap *map, z_ucs *name, void *value); void *get_stringmap_value(stringmap *map, z_ucs *name); z_ucs **get_names_in_stringmap(stringmap *map); void delete_stringmap(stringmap *map); #endif /* stringmap_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/tools/tools_test.c000644 000765 000024 00000006345 12606024314 021773 0ustar00chrenderstaff000000 000000 /* tools_test.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef tools_test_c_INCLUDED #define tools_test_c_INCLUDED #include #include "i18n.h" #include "tracelog.h" #include "z_ucs.h" #include "unused.h" #include "../locales/libfizmo_locales.h" #define STREAM_BUFSIZE 128 int i18n_test_stream_output(z_ucs *output) { int len; char buf[STREAM_BUFSIZE]; while (*output != 0) { len = zucs_string_to_utf8_string(buf, &output, STREAM_BUFSIZE); fwrite(buf, 1, len-1, stdout); } return 0; } int main(int UNUSED(argc), char *UNUSED(argv[])) { z_ucs *path; z_ucs german_locale_name[] = { 'd', 'e', '_', 'D', 'E', 0 }; printf("\nStarting tools-test.\n"); turn_on_trace(); if ((path = dup_latin1_string_to_zucs_string("../locales")) == NULL) return -1; set_i18n_search_path(path); free(path); register_i18n_stream_output_function(&i18n_test_stream_output); printf("\nTrying to display first localized error message:\n "); TRACE_LOG("Starting tools_test.\n"); i18n_translate( libfizmo_module_name, i18n_libfizmo_COULD_NOT_OPEN_TRACE_FILE_P0S, "foo1"); printf("\n\nTrying to display second localized error message:\n "); i18n_translate( libfizmo_module_name, i18n_libfizmo_INVALID_PARAMETER_TYPE_P0S, "foo2"); if (set_current_locale_name(german_locale_name) != 0) { printf("set_current_locale_name() failed.\n"); exit(-1); } printf("\n\nTrying to display german localized error message:\n "); i18n_translate( libfizmo_module_name, i18n_libfizmo_COULD_NOT_OPEN_TRACE_FILE_P0S, "foo1"); printf("\n"); TRACE_LOG("End of tools_test.\n"); printf( "\nTools-test finished, you might want to examine \"tracelog.txt\".\n\n"); return 0; } #endif /* tools_test_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/tools/tracelog.c000644 000765 000024 00000006071 12606024314 021370 0ustar00chrenderstaff000000 000000 /* tracelog.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * Why tracelog at all? Some errors, for example when resizing screens or * other procedures, simply do not occur when running under gdb, so an * extra debug method is very welcome. Furthermore, the tracelog also * allows to get a very detailed log of a user's error without having to * install or explain a debugger fist. * */ #ifndef tracelog_c_INCLUDED #define tracelog_c_INCLUDED #include #include #include "tracelog.h" #include "i18n.h" #include "types.h" #include "z_ucs.h" #include "filesys.h" #include "../locales/libfizmo_locales.h" z_file *stream_t = NULL; #ifdef ENABLE_TRACING void turn_on_trace(void) { if (stream_t != NULL) { TRACE_LOG("Tracelog already active.\n"); return; } stream_t = fsi->openfile( DEFAULT_TRACE_FILE_NAME, FILETYPE_TEXT, FILEACCESS_WRITE); if (stream_t == NULL) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_COULD_NOT_OPEN_TRACE_FILE_P0S, -1, DEFAULT_TRACE_FILE_NAME); } void turn_off_trace(void) { if (stream_t == NULL) { TRACE_LOG("Tracelog already deactivated.\n"); return; } fsi->flushfile(stream_t); fsi->closefile(stream_t); stream_t = NULL; } void _trace_log_z_ucs(z_ucs *output) { char utf_8_output[80 * UTF_8_MB_LEN + 1]; if (stream_t != NULL) { while (*output != 0) { zucs_string_to_utf8_string(utf_8_output, &output, 80 * UTF_8_MB_LEN + 1); fsi->writestring(utf_8_output, stream_t); fsi->flushfile(stream_t); } } } #endif /* ENABLE_TRACING */ #endif // tracelog_c_INCLUDED fizmo-0.7.10/libfizmo/src/tools/tracelog.h000644 000765 000024 00000004301 12606024314 021367 0ustar00chrenderstaff000000 000000 /* tracelog.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef tracelog_h_INCLUDED #define tracelog_h_INCLUDED #include #include #include #include "types.h" #include "filesys.h" #define DEFAULT_TRACE_FILE_NAME "tracelog.txt" #ifndef tracelog_c_INCLUDED extern z_file *stream_t; #endif // tracelog_c_INCLUDED #ifdef ENABLE_TRACING #define TRACE_LOG(...) \ if (stream_t != NULL) \ { fsi->fileprintf(stream_t, __VA_ARGS__); fsi->flushfile(stream_t); } #define TRACE_LOG_Z_UCS _trace_log_z_ucs void turn_on_trace(void); void turn_off_trace(void); void _trace_log_z_ucs(z_ucs *output); #else /* ENABLE_TRACING */ #define TRACE_LOG(...) ; #define TRACE_LOG_Z_UCS(...) ; #endif /* ENABLE_TRACING */ #endif // tracelog_h_INCLUDED fizmo-0.7.10/libfizmo/src/tools/types.c000644 000765 000024 00000011720 12606024314 020731 0ustar00chrenderstaff000000 000000 /* types.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * Why tracelog at all? Some errors, for example when resizing screens or * other procedures, simply do not occur when running under gdb, so an * extra debug method is very welcome. Furthermore, the tracelog also * allows to get a very detailed log of a user's error without having to * install or explain a debugger fist. * */ #ifndef types_c_INCLUDED #define types_c_INCLUDED #include #include #include "types.h" char* z_colour_names[] = { "current", "default", "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white", "msdos-grey", "amiga-grey", "medium-grey", "drak grey" }; bool is_regular_z_colour(z_colour colour) { if ( (colour == Z_COLOUR_BLACK) || (colour == Z_COLOUR_RED) || (colour == Z_COLOUR_GREEN) || (colour == Z_COLOUR_YELLOW) || (colour == Z_COLOUR_BLUE) || (colour == Z_COLOUR_MAGENTA) || (colour == Z_COLOUR_CYAN) || (colour == Z_COLOUR_WHITE) || (colour == Z_COLOUR_MSDOS_DARKISH_GREY) || (colour == Z_COLOUR_AMIGA_LIGHT_GREY) || (colour == Z_COLOUR_MEDIUM_GREY) || (colour == Z_COLOUR_DARK_GREY) ) return true; else return false; } short color_name_to_z_colour(char *colour_name) { if (colour_name == NULL) { return -1; } else if (strcasecmp(colour_name, "black") == 0) { return Z_COLOUR_BLACK; } else if (strcasecmp(colour_name, "red") == 0) { return Z_COLOUR_RED; } else if (strcasecmp(colour_name, "green") == 0) { return Z_COLOUR_GREEN; } else if (strcasecmp(colour_name, "yellow") == 0) { return Z_COLOUR_YELLOW; } else if (strcasecmp(colour_name, "blue") == 0) { return Z_COLOUR_BLUE; } else if (strcasecmp(colour_name, "magenta") == 0) { return Z_COLOUR_MAGENTA; } else if (strcasecmp(colour_name, "cyan") == 0) { return Z_COLOUR_CYAN; } else if (strcasecmp(colour_name, "white") == 0) { return Z_COLOUR_WHITE; } else { return -1; } } z_rgb_colour new_z_rgb_colour(uint8_t red, uint8_t green, uint8_t blue) { return ((uint32_t)red << 16) | ((uint32_t)green << 8) | ((uint32_t)blue); } z_rgb_colour z_to_rgb_colour(z_colour z_colour_to_convert) { if (z_colour_to_convert == Z_COLOUR_BLACK) { return new_z_rgb_colour(0, 0, 0); } else if (z_colour_to_convert == Z_COLOUR_RED) { return new_z_rgb_colour(255, 0, 0); } else if (z_colour_to_convert == Z_COLOUR_GREEN) { return new_z_rgb_colour(0, 255, 0); } else if (z_colour_to_convert == Z_COLOUR_YELLOW) { return new_z_rgb_colour(255, 255, 0); } else if (z_colour_to_convert == Z_COLOUR_BLUE) { return new_z_rgb_colour(0, 0, 255); } else if (z_colour_to_convert == Z_COLOUR_MAGENTA) { return new_z_rgb_colour(255, 0, 255); } else if (z_colour_to_convert == Z_COLOUR_CYAN) { return new_z_rgb_colour(0, 255, 255); } else if (z_colour_to_convert == Z_COLOUR_WHITE) { return new_z_rgb_colour(255, 255, 255); } else { printf("invalid colour: %d\n", z_colour_to_convert); return Z_INVALID_RGB_COLOUR; } } uint8_t red_from_z_rgb_colour(z_rgb_colour rgb_colour) { return (uint8_t)(rgb_colour >> 16); } uint8_t green_from_z_rgb_colour(z_rgb_colour rgb_colour) { return (uint8_t)(rgb_colour >> 8); } uint8_t blue_from_z_rgb_colour(z_rgb_colour rgb_colour) { return (uint8_t)rgb_colour; } #endif /* types_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/tools/types.h000644 000765 000024 00000012040 12606024314 020732 0ustar00chrenderstaff000000 000000 /* types.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef types_h_INCLUDED #define types_h_INCLUDED #include #include #include // for time_t #include // for off_t #define Z_COLOUR_UNDEFINED -2 #define Z_COLOUR_UNDER_CURSOR -1 #define Z_COLOUR_CURRENT 0 #define Z_COLOUR_DEFAULT 1 #define Z_COLOUR_BLACK 2 #define Z_COLOUR_RED 3 #define Z_COLOUR_GREEN 4 #define Z_COLOUR_YELLOW 5 #define Z_COLOUR_BLUE 6 #define Z_COLOUR_MAGENTA 7 #define Z_COLOUR_CYAN 8 #define Z_COLOUR_WHITE 9 #define Z_COLOUR_MSDOS_DARKISH_GREY 10 #define Z_COLOUR_AMIGA_LIGHT_GREY 10 #define Z_COLOUR_MEDIUM_GREY 11 #define Z_COLOUR_DARK_GREY 12 #define Z_INVALID_RGB_COLOUR 0xffffffff; #define Z_FONT_PREVIOUS_FONT 0 #define Z_FONT_NORMAL 1 #define Z_FONT_PICTURE 2 #define Z_FONT_CHARACTER_GRAPHICS 3 #define Z_FONT_COURIER_FIXED_PITCH 4 #define Z_STYLE_ROMAN 0 #define Z_STYLE_REVERSE_VIDEO 1 #define Z_STYLE_BOLD 2 #define Z_STYLE_ITALIC 4 #define Z_STYLE_FIXED_PITCH 8 #define Z_BLORB_TYPE_PICT 0 #define Z_BLORB_TYPE_SOUND 1 #define Z_BLORB_TYPE_EXEC 2 #define bool_equal(a,b) ((a) ? (b) : !(b)) //#define FIZMO_UNIQUE_EXIT_CODE(filecode) (-(((filecode) << 16) | __LINE__)) //#define FIZMO_UNIQUE_EXIT_CODE(filecode) (__LINE__) #define NOF_Z_COLOURS 8 typedef uint8_t zscii; typedef uint32_t z_ucs; typedef int16_t z_colour; typedef int16_t z_font; typedef int16_t z_style; typedef uint32_t z_rgb_colour; struct commandline_parameter { char* short_parameter_name; char* long_parameter_name; int i18n_description_code; }; struct z_file_struct { void *file_object; // Used to store z_filesys_interface-dependent data. char *filename; int filetype; int fileaccess; int implementation; // used by glk_if }; typedef struct z_file_struct z_file; struct z_dir_struct { void *dir_object; }; typedef struct z_dir_struct z_dir; struct z_dir_ent { // Using only d_name since "this is the only field you can count on in // all POSIX systems". char *d_name; }; struct z_blorb_map_struct { void *blorb_map_implementation; }; typedef struct z_blorb_map_struct z_blorb_map; struct z_story { uint8_t *memory; uint8_t version; uint16_t release_code; char serial_code[7]; uint16_t checksum; char *title; z_file *z_story_file; z_file *blorb_file; z_blorb_map *blorb_map; //char *absolute_directory_name; char *absolute_file_name; long story_file_exec_offset; uint8_t *dynamic_memory_end; uint8_t *static_memory; uint8_t *static_memory_end; uint8_t *high_memory; uint8_t *high_memory_end; uint32_t routine_offset; uint32_t string_offset; uint8_t *global_variables; uint8_t *abbreviations_table; uint8_t *property_defaults; uint8_t *object_tree; uint8_t object_size; uint16_t maximum_object_number; uint8_t maximum_property_number; uint8_t maximum_attribute_number; uint8_t object_node_number_index; uint8_t object_property_index; uint8_t *alphabet_table; uint8_t *dictionary_table; uint8_t score_mode; /* int nof_sounds; int nof_images; int frontispiece_image_no; struct z_story_blorb_sound *blorb_sounds; struct z_story_blorb_image *blorb_images; */ int max_nof_color_pairs; }; extern char* z_colour_names[]; bool is_regular_z_colour(z_colour colour); short color_name_to_z_colour(char *colour_name); z_rgb_colour new_z_rgb_colour(uint8_t red, uint8_t green, uint8_t blue); z_rgb_colour z_to_rgb_colour(z_colour z_colour_to_convert); uint8_t red_from_z_rgb_colour(z_rgb_colour rgb_colour); uint8_t green_from_z_rgb_colour(z_rgb_colour rgb_colour); uint8_t blue_from_z_rgb_colour(z_rgb_colour rgb_colour); #endif /* types_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/tools/unused.h000644 000765 000024 00000003415 12606024314 021077 0ustar00chrenderstaff000000 000000 /* unused.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef unused_h_INCLUDED #define unused_h_INCLUDED #ifdef UNUSED #elif defined(__GNUC__) # define UNUSED(x) UNUSED_ ## x __attribute__((unused)) #elif defined(__LCLINT__) # define UNUSED(x) /*@unused@*/ x #else # define UNUSED(x) x #endif #endif // unused_h_INCLUDED fizmo-0.7.10/libfizmo/src/tools/z_ucs.c000644 000765 000024 00000022420 12606024314 020707 0ustar00chrenderstaff000000 000000 /* z_ucs.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include "z_ucs.h" #include "types.h" #include "filesys.h" size_t z_ucs_len(z_ucs *string) { z_ucs *start_index = string; if (string == NULL) return 0; while (*string != 0) { string++; } return (size_t)(string - start_index); } z_ucs *z_ucs_cpy(z_ucs *dst, z_ucs *src) { while (*src != 0) { *dst = *src; dst++; src++; } *dst = 0; return dst; } void z_ucs_ncpy(z_ucs *dst, z_ucs *src, size_t len) { memmove(dst, src, len * sizeof(z_ucs)); } // Returns > 0 in case s1 > s2, 0 if equal and < 0 otherwise. int z_ucs_cmp(z_ucs *s1, z_ucs *s2) { while ( (*s1 != 0) || (*s2 != 0) ) { if (*s1 != *s2) return *s1 - *s2; s1++; s2++; } return 0; } z_ucs *z_ucs_chr(z_ucs *s1, z_ucs chr) { while (*s1 != 0) { if (*s1 == chr) return s1; s1++; } return NULL; } z_ucs *z_ucs_chrs(z_ucs *s1, z_ucs *chars) { z_ucs *ptr; while (*s1 != 0) { if ((ptr = z_ucs_chr(chars, *s1)) != NULL) return s1; s1++; } return NULL; } z_ucs *z_ucs_rchr(z_ucs *s1, z_ucs chr) { z_ucs *ptr = s1 + z_ucs_len(s1); while (ptr >= s1) { if (*ptr == chr) return ptr; ptr--; } return NULL; } z_ucs *z_ucs_rchrs(z_ucs *s1, z_ucs *chars) { z_ucs *ptr = s1 + z_ucs_len(s1), *ptr2; while (ptr >= s1) { if ((ptr2 = z_ucs_chr(chars, *ptr)) != NULL) return ptr; ptr--; } return NULL; } z_ucs *z_ucs_cat(z_ucs *dst, z_ucs *src) { dst += z_ucs_len(dst); while (*src != 0) *(dst++) = *(src++); *dst = 0; return dst; } z_ucs *z_ucs_dup(z_ucs *src) { z_ucs *result; if ((result = malloc(sizeof(z_ucs) * (z_ucs_len(src) + 1))) == NULL) return NULL; z_ucs_cpy(result, src); return result; } z_ucs latin1_char_to_zucs_char(char c) { return (z_ucs)((unsigned char)c & 0xff); } char *latin1_string_to_zucs_string(z_ucs *dest, char *src, size_t max_dest_size) { if (max_dest_size < 2) return NULL; while (*src != (char)0) { if (max_dest_size == 1) { *dest = 0; return src; } *dest = (z_ucs)(*src & 0xff); dest++; src++; } *dest = 0; return NULL; } char zucs_char_to_latin1_char(z_ucs src) { if ((src & 0xffffff00) == 0) return (char)(src & 0xff); else return (char)('?'); } z_ucs *z_ucs_cat_latin1(z_ucs *dst, char *src) { while (*src != 0) *(dst++) = latin1_char_to_zucs_char(*(src++)); *dst = 0; return dst; } int z_ucs_cmp_latin1(z_ucs *s1, char *s2) { while ( (*s1 != 0) || (*s2 != 0) ) { if ((char)*s1 != *s2) return -1; if ((*s1 & 0xffffff00) != 0) return -1; s1++; s2++; } if (*s2 != '\0') return -1; else return 0; } z_ucs *dup_latin1_string_to_zucs_string(char *src) { z_ucs *result; int len, i; if (src == NULL) return NULL; len = strlen(src); if ((result = malloc(sizeof(z_ucs) * (len + 1))) == NULL) return NULL; for (i=0; ireadchar(in)) == EOF) return UEOF; if ((current_char & 0x80) == 0) return (z_ucs)current_char & 0x7f; len = 2; cmp_value1 = 0xe0; cmp_value2 = 0xc0; while (len <= 6) { if ((current_char & cmp_value1) == cmp_value2) { cmp_value1 = 1; for (i=0; i<6-len; i++) { // cmp_value1 is never negative. cmp_value1 <<= 1; cmp_value1 |= 1; } result = (z_ucs)(current_char & cmp_value1); // Found a sequence of length len. for (i=0; ireadchar(in)) == EOF) return UEOF; result <<= 6; result |= (current_char & 0x3f); } return result; } cmp_value1 >>= 1; cmp_value1 |= 0x80; cmp_value2 >>= 1; cmp_value2 |= 0x80; len++; } return UEOF; } z_ucs utf8_char_to_zucs_char(char **src) { // FIXME: Fail on overlong UTF-8 characters. int len; int i; int cmp_value1; int cmp_value2; z_ucs result; if ((**src & 0x80) == (char)0) { result = (z_ucs)**src & 0x7f; (*src)++; return result; } len = 2; cmp_value1 = 0xe0; cmp_value2 = 0xc0; while (len <= 6) { if (((int)(**src) & cmp_value1) == cmp_value2) { // Found a sequence of length len. cmp_value1 = 1; for (i=0; i<6-len; i++) { cmp_value1 <<= 1; cmp_value1 |= 1; } result = (z_ucs)(**src & cmp_value1); (*src)++; for (i=0; i>= 1; cmp_value1 |= 0x80; cmp_value2 >>= 1; cmp_value2 |= 0x80; len++; } return -1; } char *utf8_string_to_zucs_string(z_ucs *dest, char *src, int max_dest_size) { if (max_dest_size < 1) return NULL; while (*src != (char)0) { if (max_dest_size == 1) { *dest = 0; return src; } *dest = utf8_char_to_zucs_char(&src); max_dest_size--; dest++; } *dest = 0; return NULL; } z_ucs *dup_utf8_string_to_zucs_string(char *src) { int len = 0; char *ptr = src; z_ucs *result; while (*ptr != 0) { utf8_char_to_zucs_char(&ptr); len++; } len++; if ((result = malloc(sizeof(z_ucs) * len)) == NULL) return NULL; utf8_string_to_zucs_string(result, src, len); return result; } static int get_utf8_code_length(z_ucs zucs_char) { if ( (zucs_char & 0xffffff80) == 0) return 1; else if ((zucs_char & 0xfffff800) == 0) return 2; else if ((zucs_char & 0xffff0000) == 0) return 3; else if ((zucs_char & 0xffe00000) == 0) return 4; else if ((zucs_char & 0xfc000000) == 0) return 5; else if ((zucs_char & 0x80000000) == 0) return 6; else return -1; } int zucs_string_to_utf8_string(char *dst, z_ucs **src, size_t max_dst_size) { int len = 0; int char_len; int i; z_ucs mask1; z_ucs mask2; z_ucs src_val; if ( (max_dst_size < 1) && (dst != NULL) ) { return -1; } while (**src != 0) { char_len = get_utf8_code_length(**src); if (char_len == -1) { printf("Illegal code: %c/%x\n", (char)**src, (unsigned)**src); printf("&0xfffff800: %x.\n", (unsigned)(**src & 0xfffff800)); return -1; } if (dst != NULL) { if (max_dst_size < (size_t)(char_len + 1)) { *dst = (char)0; return len + 1; } if (char_len == 1) { *dst = (char)**src; dst++; } else { mask1 = 0x01; mask2 = 0xfc; for (i=0; i<6-char_len; i++) { mask1 <<= 1; mask1 |= 1; mask2 <<= 1; } mask2 &= 0xff; dst += char_len - 1; src_val = **src; for (i=0; i>= 6; dst--; } *dst = (char)((src_val & mask1) | mask2); dst += char_len; } max_dst_size -= char_len; } (*src)++; len += char_len; } if (dst != NULL) *dst = (char)0; return len + 1; } char *dup_zucs_string_to_utf8_string(z_ucs *src) { char *dst; z_ucs *src_ptr; size_t len = 0; src_ptr = src; while (*src_ptr != 0) { len += get_utf8_code_length(*src_ptr); src_ptr++; } if ((dst = malloc(len + 1)) == NULL) return NULL; src_ptr = src; if ((zucs_string_to_utf8_string(dst, &src_ptr, len + 1)) != (int)(len + 1)) { free(dst); return NULL; } return dst; } fizmo-0.7.10/libfizmo/src/tools/z_ucs.h000644 000765 000024 00000006255 12606024314 020724 0ustar00chrenderstaff000000 000000 /* z_ucs.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef z_ucs_h_INCLUDED #define z_ucs_h_INCLUDED #include #include #include "types.h" #define UEOF ((z_ucs)-1) #define UTF_8_MB_LEN 6 #define Z_UCS_NEWLINE ((z_ucs)'\n') #define Z_UCS_SPACE ((z_ucs)' ') #define Z_UCS_BACKSLASH ((z_ucs)'\\') #define Z_UCS_SLASH ((z_ucs)'/') #define Z_UCS_COLON ((z_ucs)':') #define Z_UCS_DOT ((z_ucs)'.') #define Z_UCS_MINUS ((z_ucs)'-') #define Z_UCS_SOFT_HYPEN ((z_ucs)0xad) #define Z_UCS_COMMA ((z_ucs)',') typedef struct { z_ucs *data; size_t len; size_t bytes_allocated; } zucs_string; size_t z_ucs_len(z_ucs *string); z_ucs *z_ucs_cpy(z_ucs *dst, z_ucs *src); void z_ucs_ncpy(z_ucs *dst, z_ucs *src, size_t len); int z_ucs_cmp(z_ucs *s1, z_ucs *s2); z_ucs *z_ucs_chr(z_ucs *s1, z_ucs chr); z_ucs *z_ucs_chrs(z_ucs *s1, z_ucs *chars); z_ucs *z_ucs_rchr(z_ucs *s1, z_ucs chr); z_ucs *z_ucs_rchrs(z_ucs *s1, z_ucs *chars); z_ucs *z_ucs_cat(z_ucs *dst, z_ucs *src); z_ucs *z_ucs_dup(z_ucs *src); z_ucs latin1_char_to_zucs_char(char c); char *latin1_string_to_zucs_string(z_ucs *dest, char *src, size_t max_dest_size); char zucs_char_to_latin1_char(z_ucs src); z_ucs *z_ucs_cat_latin1(z_ucs *dst, char *src); int z_ucs_cmp_latin1(z_ucs *s1, char *s2); z_ucs *dup_latin1_string_to_zucs_string(char *src); z_ucs parse_utf8_char_from_file(z_file *fileref); z_ucs utf8_char_to_zucs_char(char **src); char *utf8_string_to_zucs_string(z_ucs *dest, char *src, int max_dest_size); z_ucs *dup_utf8_string_to_zucs_string(char *src); int zucs_string_to_utf8_string(char *dst, z_ucs **src, size_t max_dst_size); char *dup_zucs_string_to_utf8_string(z_ucs *src); //void z_ucs_output_number(z_ucs *dst, long int number); // dead? #endif // z_ucs_h_INCLUDED fizmo-0.7.10/libfizmo/src/test/abent.z5000644 000765 000024 00000367000 12606024314 020616 0ustar00chrenderstaff000000 000000 llQ>X8_J980419B{^ 6.15 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ^0123456789.,?"/-:()FAd (@0@ V@ z@ @ @ @@8@^@|@@Đ  3CJ^@t@@@@@#@ [@!@@#@"$@"%"&""'B"(f"@@@./@-V@0r@/@2@1311@'@@>@7[6r9@8:@8;8>%=B@a@?A@?@D@CE@ @CF@C7HF@GIZGiUM@LD-@UmT@Sc+JXnWZY\[2^\ @]`H_o@5@O@@q@j@il@@kn1@@mNk >d ( Z @!@!;!R!v!!@!"@"4@"i"""@ @"#@#9@#U#v@#@@####$$$B$]$$$$@$%%-%Y%%%%&&@&i&&&''-'[@'~''@'@(('(=(Z(@(((@) @ )#@)@)W)s@@)) @)* @*#*7@*H*`****++)+O+t+++ @+,,,7,d,,,,-@---\---@-@.@@.,@.D@.e@.@..@@.@./ @ @/C/q@//@//0/030L0011@1}11242q22@3@3; 3\ 3{33334@ 4  46@  4e@@ 4@44@451B=HBk.EB]ӰBJc%)@ieHB"TL]19 (pӤieHUB````j`&.!iieHUBcrgggjf.!iieHU Baaaa;jqXf.!iieHU Bjhk%k.k7jN$c19 (pӤieHU B`~```jNqXf.!iieHU Ba```j`$c19 (pӤieHU BfKh hhj`'c19 (pӤieHUBh:hh(j* ieHUBQWb[&ZTSieHUBi-ci[JZT'XaW4ќieHUB:s*'ieHUBMX`#%nHc&a^*+=Hpn&dmdljidc&g]FED:kR*C7s:kR8C7zE\x+7(C7EP=J+I+H+G/Bj_.)zͅtOfs cOjjUf_gg*ܥtOms41d=cOoU=T%S=YdJh_^fgSeW*H1WcOO3J6UxeN̥684cO]gG]Rc*:llcOJ8I49*NQnscO^OE=\]j\*\a k9@WcOO JQI=D>tQcQZr]9s cQffdwjQs?CKbPcQˁ`$Tek*\MG*-1cQ^>PWO>JKHGGW)f֪tRKs cRLhgGgtTT)c:EtRSs cRThggbZNgG4ȥsD>AUn)79\\ȥcRvGCtcR`eE8dtRscR^RE$BJ c19 *`M %WGKcRPRJRICD>$BJ c19 +S%@%WGKcRPRJPIRGP>/>$BJ.F%seScS ^SE_f;1]KLcS^SU>4S>7]]ToysKLcS*TT] c19 *`S%@%W(E*cS5OpJQILHpGLD>: c19 *`S%@%W&ML4EcSoPSOPJRIPGS c19 *`S%@%W&ML4EcSIQHGS ehjiDp+_lcSJQI]HRGV+_ls cS]]*$*iEnSfScSBU%F$ *i|nSfScSRSHSBUF**`W2ZnfScSOCNJ]ICH[GYD>>6&͊s cS^TF>Hd8]`c3Z3Z{k[YZ`]o n)79D`cEcT9PhHWG_D_seT\cTO^TWE]D>b$x jscTɁWk :] )i*n*8ecTP_OC *xeW*\2EfUKcTI_D>nd!S@bBcjO姄bcUUBcW`ltU]s bcU^BcZrhyZ`c39 ezUqsbcUsBckg,nWtU{s bcU}BcX2cca\"_a KY}(T`̨cUOYJmIiM %W_GcUQkPkJhtUs cUD>qZr]c*\2EcUPUOi9tUscU쁄ffkm G9L-QaS\ȥcUPIhjtVscVWSSgGg,g5F}D^ȥnV"cV$RV3Bo .AE_F}E_%nV"cV$RV3OPJIqHsGpBo .AE_F}E_EnV"cV$RV3JpIsHrBo .AE_F}E_enV"cV$RV3PxIqHuGBo .AE_F}E_nV"cV$RV3POJpIvHwGqBo .AE_F}E_nV"cV$RV3JyIuBo .AE_F}E_nV"cV$RV3PyJtIrHzBo%F$ *i|nSfScSRsJsBU%F$ *i|nSfScSRsJsBU%F$ *i|nSfScSRrOrBU .AE_F}E_nV"cV$RV3OuJtIzH{Bo .AE_F}E_nV"cV$RV3PO{JuIyHzG}Bo .AE_F}E_%nV"cV$RV3JyH|GzBo%F$ *i|nSfScSR{J{BU .AE_F}E_%nV"cV$RV3P~JzIG}Bo%F$ *i|nSfScSR}O}BUiNMW_GcV8P=J}IHGSQuVetVdcVfD>uc{_ ahZ`c3s cVqD>xZrk_g%F$ *i|nSfScSRIBU NMWJ;**`+_lcV{OmJIG*%HEcVPOmJIHGD>{!)* cVMKJIHD>zWscWD>SZYgGZ`c3c19 *`S%@%XqN2S\cWPOW0JID>6jO*l%sd>D>aTBgT9Ykm]_j_g[\Tx4zWdscWg^Z`i6Zr *\+E5S_GcWtOD>DEs d>D>C7aTBgT9Ykm]_j_g[\Txc19 *`S%@%XqN2S\cXFPJIjGDEtXs cXD?bWh]gG *\[E5S_GcXOc̥zXscXD?Ra2]4zXscX́^Z`i6Zr_&-Q\ȥcXOHG&Qs cYD?hC\jGDscYSSWgPWW5NI@ehB&EcY%PHGD?&5NI@ehB&EcY1PHG +_jl7)\ ):J\B&JJ̥cY?LHGS*M&1WRcYaNLG" *ep]!lcYqRH5NI@hB&J@*)**l*`RcYxPJIWD?*ehB&EcYHG" *epDȥcYG *\ ^aSDpRcYJIG*`@&C.cYP?.GD?4&C.scYD?8g#gZ`5NI@RcZ R?HI?>G?CD?I7 escZK^ZUF?ZU_S|V:c3Z{k[Z3dYX_ _*Vsd?sE{J{L{N{P{Q{R{S{U{V{W{X{Y{Z{[{\H&I/J0K0L MJN<L L L L L OLL L L LL LL LL LL LL LL LL PQLL RSTBFBx@x@x@ FMFNFOFPFQFRFSFTFUFVFWFXFYFZF[F\F]F^F_F`FaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzF{F|F}F~FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGG G G G G GGGGGGGGGGGGGGGGGGG G!G"G#G$G%G&G'G(G)G*G+G,G-G.G/G0G1G2G3G4G5G6G7G8G9G:G;GG?G@GAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG[G\G]G^G_G`GaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzG{G|G}G~GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHH H H H H HHHHHHHHHHHHHHHHHHH H!H"H#H$H%H&H'H(H)H*H5H6H7H8H9H:H;HH?H@HAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHRHSHTHUHVHWHXHYH[H\H]H^H_H`HaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzH{H|H}H~HHHHHHHHHHHHHHHHHHHHHHHHV eW?[ [ ([U UYTT (T U# (Vp VU (Vg (V^VyV (UbUkU Ut (U} U (\\ \ (\ \ (_( (_1_L_: (_C _U (es[e|[e [e ([e [e ([[Z[Z[ Z[ (Z[ Z[ (ZUhpU,\|Z W  U(VUliUjXeFfQ`H k V l U j XeOf Q`Ql`HHHHHHHHHHHHHHHHHHJJJJJJJJJKKKK KKK!K%KGKNKaKzKKKLLL4LPLWLgLLLLLLLMM*M.M2M6M@MSMZMgMnMMMNNKNRNVNcNpNNNNNNNNNNNNNOOO"O)O0O7OJOcOjOqOxOOOOOOOPPP PPPPP P$P(P,P3P:P>   BbdBReBVUBVU BReh  )BQ`Bj;B\X*BRSBRS)Bj;B\BRS]BlEbWR[ b\RiBRSPblErRSR` PblER` Bhb\RVCyCyb\RVB\XiBZ`jBk  BRS"b\RV!BiY B` B\YBi6 YBSs '#B_kBRSB\kkB\BRe   YBi6 B\Y B\,-?@@ ABUGABUGBi6 "IJB_GKKBQKBjLN]BlEM%bVURQ&BRe%bVURQ&BReHBRS%%bVURQ&BRe%bVURQ&BRe($B_$BQ`#B_BRS#BRSB_BWR BlEQBi6 SBi6 ZB` +XBVUXUVVbRSRi6TOCDDBRSE/00BRS11BRS2344BQ555BlE67F<<BQ.BQ.B_BQ=>9::B[\;Bi688B_lmccB_beBjbRSri6rlER\fBa2bRSri6rlER\aaBReef_^dnopqrsg`tuvB_/j666666666337,7D7c88@8)8W8889 99S9Y9r9v:1:5:9:K:::::;;;&;A;P;\;o;{;};;;;x>xtU/=AeH'= >xbVT/>xVT/>x\7T'=nT'/R T'/RdT'/ReT'/RmQ7T'=nT'/R T'/RdT'/ReT'/Rmk\+-T'= T'/RdT'/RaT'/Rs9R/-T'= T'/RdT'/RaT'/Rs >xbVT/>xVT/>xVT/>xtU/=AnOU/=Ar@U/=Ae1U/=+.C\'= U'= U'= /=AsOU/=Ae@U/=As1U/=+.C\'= U'= U'= /=Ae6U/=As'U/=+.CR'= U'= /=Ar6U/=Ae'U/=+.CR'= U'= /=An6U/=Ae'U/=+.CR'= U'= /=As]U/=+.CH'= /=An]U/=+.CH'= /=Ae]U/=+.CH'= ݰ-ALL]1 AL`&.A Lf.A LqXf.zA NN$c1 jA NN'c1 ZA N`$c1 JAN`'c1 :AJP̥.AJjye"AJ:sSAJXS 3 HOQĥBKI5׏/daS؏ BdABWd/7S%WXd -AHӌyAJmAJ&긥aAJmܥUAJ,eIAJaH=AJaʝS1AJ 䥌%A JMZ̥A J}M̥ A H+A J+A L&;eALm_eAL,MALaH7eANaS}M̥AL geALMZOeBCcX X /iW ALOaAL&;SALm_EAL,M7ALaH7?)ALaŠAL g A IMZOXE B EW X ^,Ha EkHpEkJY\ȷ*[\O\aJ:{*y就JJaӤH>-AGH컰AOn!`hje!ATh;c4\ATh rMSAYHEIA#HōI AGIAGI%AGI1A [+;gQ'SAQ*!A K(;9A GI8A GIHA GISAGI[AW*N NMf!M78&nEAGIdAGImAN%4*'%AGIvAGI}AGIAGIAGIA_:Nxd /qn!]H5SEAGIAU)(iW /kQAGI»AHIɌAY.+ j_i49 AGIӻAGIڻA Y:7c $n!, :!A!GI㻰A"GIA#(4*eM(9 d`; %v 1R)dc%ȥA$GIA%GJA&[.+ `mW*eM(!M7%ȥA'GJ A(.iL9d䥧v /ewM7 @aM*eȥA)GJA*8J e z/3l&nAHaӤb) זEA+On!`hje!A,Yn!` tLc xV!!A-RL)c 'EA.R`)c 'E A/GJ&A0'L:1c @aE"ʲ/eE-#*eԧA15J3aE"ʲ/eE%-#EH \L9ELRNdA2M*:`N+id9 CL*䥌5*9I]䥲R/3ljpCENA3GJ9A4!eU@)(|DR` ؀JHA5][g*7A@T(-APEZ!+%A /e/'a FaSAZ1X!S*`ji*i eSA^/e/'**;hAVEJ\M EZ!*iPA&/e/'a FaSS$)W'AHJQAXEZ!*iS$M~eA NEZ!iA Nl+SA X/e/'A JQkeA PQk*`\WAN1X!SeAZ1X!S*`jij_64c ̥ALS$WqA\/e/'**SAV/eSeR9;ALK-AN`PL`AJ`AM`:s*'AE-ARiL9`-AL5NcAR;n!aY% AGJX%/JJS䥳c ]X:̲AW-AHJ_ AEJfA-AHJnAMMM7%ȥA-AGJwAM]3jlEA,-AU&`b9 *NclEAM]3jlEAX-AGJ~AGJA*-AGJAY4)NjNLfO]deA&-AGJAU*i( +7xBW*ರAGJA GJƻA R:c Xi dA -AGJͻAI :jARM~*eAZL *M 1M9*eAR))SmAT/3gWAT/qAAXNj]/w'A T`/qA M*R̿A m#ز.+ Hb* 4d@:c 5Wjpe@nEY9 `?^H7%LM \CL]̲ *@A z-A/#ֲ*\WSC*c&M p׀*\WSC*c&M ;JԻAS%*(%1@-%SAWmWa 9I*xe@e@Xi iARf `?^A,-AW:7c M78, :ȥAK:7%A-AKNISEAGJڻA[4)(9 d/eJỰA.:F9+*JJnX/qj6J̲AU: /T6EA2J;P.(!:j &`!:y@/q@1M*eȥA6J;P.(!:j &`!:y))t/q@aN̲A\/l/'M7 n4%SEA Z//'n!-SEA $JN.(:i &` @H\זEA ,JN.(:i &` -XeH7 r'`c%ȥA GJ绰A *)/kӀkRD|h!-j̿Ap-A&JO/ /a R`5ܲAU: /TM7%ȥAW)(iW /kAOfF*MDaSEAZ-A\JL(i +;JﻰA&JP*%% *+zL REAKSej^yEA-A=:Zc/k*d L+t\ /, g`M*]X*1SNxAGJAU.Mڬ/kJAGKAYMM@/*d)A_&d)D|)ڬ/qEAKH7%ȥA]:*3/kڬ/k:Nxd9 d)р/eJSn]M[*5\ %'`)*ȥA?Y`*ya j)9.!M7%ȥA@GLAAK*Q9 EABYpdc 5\)(yrACGLADGL!AE!:Nx/dn!N{R1 ̲AFW&IW]N!d h9 gȥAG#j:eL hs /Tn!NO*1*eȥAH%j:eL hs /T,9 g)c*F*̲AIGL)AJ2-AU: /Tn!EASL0/k%Qc%ȥKLMb-A$JN.(:i X-XeH7%ȥAS:c $hMeQAU-Sc*n!AGL6AN/-AGL=AU&`c ANM@!jlEAGLDAO:-AY4e@%NM@Ri()%זEAW&IW]N!d h9 gȥAP\-AK:;AGLJAQX-AGLTAGL\RSUXJY :jOxACALP P B@R/?+&6Tp6p bPt b4 xtbutpuPt bZt/>t+&P AO] BR/; OAP &=>x &=>x D>x &=>xC>x  -E"/("F {O_-.߇H SYkIGO``>aE"a/;U4c/UU/;.aZ)*uFE 'EB -a ЌUS t A[IA_E t Q \ W X J K: RT U#;?U {UU/x  SJJJLJHa"HAD k l m n q oOp r(cC (.  TFc/Fat T/F k qT/Fipp4T/F-AIHllAIHll//ooE oA FHllFHl lsR RRL k HllQ\\\S"V k  mdAtE tHlls.*/3nAH k CV n k -mUrHllA[.j;Rej;j;ĖؖCmGDJJ@_SRQA_Z/;aD/c8KԏcaBE[APXH-YL-ZLX'D- A[-{c }{AH c cAL4cd c AH-dc c-c AE   ^.OvOw//9-v-w, TÏF/FaE-xv-yw R _p_p_pH-v-w" s- /( -R-A:**uFE'DUqˏ(- Ո-AR[AD H 8::Tc# /:/-U /:/-b܌=Nqˏ(- xAQ/)LH R H-  /-U/-bA**uEF'DTqˏ(- *-ARaEAOK- R-Q- t.iQiQiQQrRaVT4 H RkQrRaVF5 Q::  ^ \A -j"AkIlBmdRCmN i-hm RTW W+;?U sAnK s- X - *-tEcBAJ<c1.iQiQiQ TTfTTQrRaVAf AH<CR/+Aՠ^ī\E-\U+;?UcEAL &>?2 ?2Q\\\S"RA<: b#tB?[/<Tt+:t:'/.Տ=>T=/=U/=tbu0 b[4/>t+=tU'= =t==U=b=='AL &>?2 ?2PI!/K=>'\}-\bUu/;?Ea=4O= p'= B@ӍLv/;??2/;?B/;?'s/;?// TFcPT/F/;?a8/F?2B@$la0^SS?2 C/;?Տ'//F?2B@&la0]USeL'?2 ?2J/=o?2?O-tbWT/=+=tU==4O= p'= >b5T/>+=O= p=AxEBxM'= ' U < c/<+=-FE?ANaEG-AWaFSaEJJǕ-ANaEG-?aAG-ANaEǕ-AKaaǕ-AKfaG-AQ/)LAG-/=u/+=8ADALI<kE l,EAkIlA R : ,,_bmZt B?Q JJ LaE +C AH  AE A Qt +:-bmUBmdQ R-hm:it :-j bM'<  bk/<\+< Tb7/<(/</<+,AQ /<+<A L5+<-CCk?   b*/<'CaDcN- /<ADAE ^,jH  :c1AjL/:aPAjZ/:fP/:+::AjqA_l  :c٣E/:aDAtC<  :c%E/:aP/:+:::DIlT-IlT-IlT-Il T-oT-  _H   b/< IlaEFT-IlaFFT-IlJ FT-Il J T-oaoFT-bL#<a J 2aEItaFIt JAT 'Ct6////@,ipĕ/=t+=8 bB/<0UaG#-bWT/<+<閁Ǖ O b!/<B/=cH--BE/<#< aAAQ0JQ02Q0Q0a@OA-B-C-'1f0-RRŤWRRŤW b( bVooaE   b( bVooaE  װ-/M/CD -bUN/;?E: HH(AHH'Տ'//F/3U -{-|{. avK-xv-yw -EȣJTU+.AE  cRDR:A?F I c/:a+:::  c;/:a+-cT/:+::  : c/:j/-bCdOBd1KUdj-;dVUVUo+>xo+>x { }{AEK/CEAA\a/-aAI&-a4JJI*-*-JJI*-&-k$*-EEEJJOEE*-JJJFJz/--/.E -z-B-zA[QCBI'1fBLA[QCBI'1fB/ASR,C'1F,ALaBE C AHzB-B-zkRaFNzKA-B*-AIaaEnz/-`c/-.ALa"H'.2BBR/FaH'.2-/.EC Cr\ar-r/.ECH-r(-Ba/-AI*-RIO+3CR4~'1f ~*RŤ- 6bRo&-B~U~&-A~O/1AE d/-CbcK- 6BA bQ/<a迁+< ucOk up'.2Q0YOA-'1f0C?tAFHuuIu!sH kK k l mHllmE md+.2E]OA.ALa"H BBR/FaH -/CBDCH-yU+.Qk OAZB7 PItu.U+.ڕPIthuu.---.-DDBī5-D+Do+DWU coa+Do+DWU coa bUp4+>>&>?2?2._p_p_pCF Tc/FaGTPI>xcEVU/>x(VU/>x/=A,GOTA.GOT۫>xcG.VT/>x/=V/>x --.-/3nBīVT/>xԏ=U/>x+CīBOAE dAE  AE   U c~p A 0H _A 1H UA 2H KA 3H AA 4H 7A 5H -A 6H #A 7H A 8H A 9H v tW CGO'JAJ JE JE JE NH  AFTAFTJFTTuW 6 TtP cp==cH=TcWU/=+=+===bUO= p#E(E*A#Ix>xVVC`ZC^>H6YmYdMI7DA#RQLɻBiZc!b'L'1f/EACCADAD+DCJ+1f+C+C/EK3AP+CCAJ+1f+CJ+C+1fAL.#-%+Do+CU bQ/:?a bS/:?E-VB@3R(H3+:?( bT/:?aER(H3':?( bW//:?a bS/:?E-VB@3/+:? bZ//:?aE':?K-- W<X<-- BF5[ux>xVV>xR2C2#H0.EBcE-3AEgA 1K*2Q2 3-5-4  ?T!E P_-B ?Wu o _-B ?_HU o H_-B ?_HU o A2HHH_(['Dǭ'CEa C I -  NnR4aE  VvOAF4 ZzA E /[U3'CE?!E P_-B ?Wu4 o 5'CEAEvAEA^qEL P)zHa"FHܰkR/%1F/AR.%1F.A-k kJMOk/3!'D%%1F%/3!-k'2-k-k kJPOk/3!-k'2-k-k kJPOk/3!-k'2-k-kOk/3!-k/H* Tc/H*aMT/H*OI3OoaCBGBðBBEɏɏcCFFFōFEF@ɏ* ORW BN0Mt^@<=>?8F@3CAieWVeW׏E؏@)eWVeW*:._aW8zHF>FC(@._*e(E67BC+Qa+Ōɏ*̠IJŌɏ*JJEūI* AI*JJJFJB/3@B/3@I*"JJJJJ J J J +,B"BQa̢BN BNڒB̒BnB̒Bn-BSQHBQaIBBB QaU+4B܌C-B ?BaN/4!B-* .+4JCYBaN/4!Bɏ*РMJɡBɏ*JJIBЌ/</<-  +3tBSQĕɏ*+ALJȍHHI*ʲ Տ**tTBE -  +3bqpf  +3 T +3  ?b :p /Q'Q +3 ATp T  - c Qpa5paΕ+3p Q+Q/1=LQaDQ -  Bpa5paΕ+3Q+ZQaG+3 QQ aŌ4Q/1= #-  -- - b BQQ a5 p a 5 p aΕ +3  QQ aD-A-EI*t.6/4:A A b -St pt /3l QI*ŲI*Dz- *A  /-Bt.C'1fAE;Q+-,.*4J. + ,A OI Ų /-Bt.C'1fI I*C-* Qv5*5AExpA,ɏ*/3gɏ*/k/)ɏ*p&2p/3l%1F*5I*AEHCE`-  - +3c -Q+Q/1=LQaDQ -  +3coQ+QaGT+3QQaŌQ/1=I*t.6/4:AB-  +3  QQ a/3l QI*ŲI*Dz- *A /-Bt.C'1fAE;Q+-,.*4J. + ,AOI Ų /-Bt.C'1fI I*C-* QCu*5AEMɏ*/3gɏ*/k/*5I*UaEHUbE`I*t.6/4:I*;Q3 /%1FA#I*EHE`I*ûI* J JJ TJJJTJUJJMBFTAJx>x\\\``6`6RRŤWO'DŌ bQoaDÏŌ/7/7ð+7{"a"#"aJRJΠA;(AU<(J0>(LʻQ;S/ULԻ;(J0>(;'D;U/3^;7JY*L4 :zO*ܲAP;#$GMA^O8@68A_O_@6_A`YYp)k?*i!aQEA+MM*\\%/"/\/$CM čM軰J /1'DdMHL L f"f3*:jU(c X1Ll*eȥ/"J #M'CNAP*:jU(:7Q *ȥGNMGN/"/ǍN-A ON7J ٳ@(c :@1S."XE'CMBU`%7!EZ!+%ȥ`%F EZ!+%ȥA.I0%AFGN=A%S'CMCǍNP;GN];I'CNNiA%KK /1A&EL LF;(GNV;I0>NA>n(Bٳ.(.&a (c W)`R1E&&# )(.(.&a (c OStF c ܲ/^*(.(.&a (c OStF qENAa+(BY.(.&a (c a R`EJ\%(BNA=K)0=A=J0=AI6,AGO33 '3  (iWc $;9*K圥334D4D14JW$;9*c*7 Qk*eȥJ ǍO{A')/>@( *`B*:jLn* .80b>A^H6"AJpLKZ۳N1SdJ.!HM78c*ENۉNNL K P9/NNL NK NP@n!`9W䲱A PF7GPPA[A<7I0cP/k<QF7LP0bc(F7GP&7"ǍP&;"GPǻN7 7PݻAb1F7ǍP仰 7n/XJXP뻰/IQ Q/AGQ7SRU;8!\ 8!*!ABRF7GQNQY/I"J #QCAM;AGQJTK/I"GRD?A R/I"GR]RkAVH6A:%NǍR #:c +M7 1X!-yEAMALIA;ERALD ALDKLAIA;ES\A /XZ; A;OdC#ǍS򻰱SRIc!APW;I0B0;ARA;>I>TTABGT$AJ #T2AMdCōTA_H6"Ad@/"LU6ưAIGUCVH6AVH6AVH6Ae;MdCP A;MdCP A;OdC2OA;MdC< A;OdCKOAGVʻ/6AA;JdCPNA; OdC2ǍW!LKAW:F!d+:Rdq}EȥAM;GW:COAGWDWRA I'1f$AVWCOAJ0VAVY;COGW'COAGWAGWAGWȻAVE'COA[Xdj)(ENM@D}E!AKW6ALW6AGWAeo&("ǍX(BAS.(.&a (c EJܲA*I*X )'DYOAKX AHX'AQX6 %CO0 AfI0eA I'C$!LKAU:F!d9 *gEA=SOXeK M7%ȥAR&("ǍX0>(ARA<(I0>(X!LKAU:F!d9 *gEAIA;E-AIA; E-dC(ěudC2ě{s:VI0!LQnJ@%4kJJ̲AD/GZAD/GZ'A8,ZT/Z8A8-^X4 *p( 5Wn!EAB\ INdFaS%SAY*\&!Lc jj\g19 EAPW;ǍZa/ZtAK&GZ&GZZABGZ1/M ǍZ˻A:J #[ A`MD% E J0'i e@J_.(d\ieA'L G[׻A(P G[仰[Af]&("S*(O* \\Ae\&("S)(O) \\)A'G\1A]gF!M7 %S_ @k9!"G\AG\AV&F]/]$ABN/],G]: "I-AK/"Eƍ]һ "I-AJ/"Dō^ AdS/"G6_AMA;I0 /"RG^ӻ^ỰJG^󻰍^A T G_ _2A'G_:A#%A<_HJG_RKЍ_dABG_AG`AKDAOI`/AYA; dC_Ǎ`a6ѰBG`ݻA:J #aRAIGaZACGaA:%/Ga #:c +M7 1X!-yE1"1 #b /Gb9/b@b]/۳*\fF ;n]M8 5SEAD AEޛABGbPe'D;ө; UbA;&Gb*\fF MK M*i/k;`jy*i /;LS$:/;bϻGbݻRSGb㻰bA:#&Gc #:c +M7 1X!-yEA:I04 [(9H5SM*\\ v;4%'CPǍe'CQǍfAGffAB%/"K0P'CQGf'f1AP.;0;'CQGf>/fHA-A;&U&%CQfV'CQGfmfySRGfA ?*\\c +]RS`'CQGfjiW)!:R9Xc='CQ׳:F!d9 *g Gf%CP1fb-'CPG%CP1&I܍ffAf^AY%WjRd*L3%ȥnfĻJ Gf̻fػA[J VCQǍf컰fA#RCQǍfA$KJ ǍgA#GgWA;^N/^hh;ABGhGA!GhXA"Gh_AGhgA`KNLTܲA`ITܲACQ)H/1GJJ CQ)dc0&&C&X- )qh/hͻa/ACJJ CdC`ՃA/hٌdCKFJ/Kh໰AGh𻰍h?C_ #ji79kd%\*)d%AJiAgGi AP@;1Aߩ/- )qi /i30;Oj'6 ABNjC TAGkAS`EX`ISA1MkH#CTABJ#CT #k_AGlAJOn!`9W䲱  $111:1BISHO*iW1d :%SlNMX\ٳ*y+W*p^bJ;*JճJ;*Wc*\B&c E,ճJ;*)*BѳM]SINc*_ȥB׳_,+g*MSSeZ]WBdճW,]S*`*y+W*EB#ͳ*y+W*EB ˳jj.ME*jEJ l[AJ #lk3R 4O5l{A#DA3J 4O5l~A3J 4O5lA3J 4O5lA3J 4O5lA3$llm3mOmmn9n* @%A3Wnwnڍoxopwp̍q3qqr)rrsbssՍttߍu3uuf8R)`]%DA3YuvvCvvˍvw"c+:`$`EHw5w[whwwwwwʍwwA#2{x BXBj 2{x%BXBjB:Nx/k;n!fM̲:Nx/k;n!.9SE&("I0a(c \,\paW&("I0a(q` ĵ&'"ӳ:c ANM@&JE0%'&'"ӳ:c ANM@&JE0&'n!`9Wn!`9Wn!`9WBBBBa F!'`9 e`:JPR返AS On!`9W&"&HxF H7%!&"FU"MCγLuAGxO ]3jlEJ;!OXM mEEȥ4)NLx/E;Ex]<׳]S1SH7 >L;%ȥxgxq0B; ӳwk]]S$n!X NT# #x~ XNT #x #x໰A#F #圥Ǎx𻰠Ey AEy-AEyK6B-AK 63YEA[6!:q9 NM@B:1@6%ȥAQ4  e@M7%!-AHyjAHy AGyU A$"Bڢ"Bn'DU"B̢"Bn%' ' '  #6"F;-M.h?A_R?얅uMNNE_SRQ--M.LLhgJCNF.L--ɏdI/5a/3gɏQɏ?׏8ɏ׏QOCSPtTOɏO5{OCMbIoVrzHo+DoK EDy+DoXBB@Gq EDyOBc\/EpA)AE!- ---8쪫 -- AAFEAGQo?Ovs#  V P J D B$B@r H rŤ-gB@BETFP*E +Do K EDyU 0ɏ@%IAH A@H  AFI?6bo o /EpA- --- AH->-8- ALo  pAMo y aAOo  PAPo  >ARo 쪿 *ASo 쪯 AQo 쪫 -- - ī AJo o +DoK EDy- o+DoK EDy- oB@KCGrɏGI/5aR+Dɏ׏QCSPtTTɏ@oI/5aɏ?׏+DAO6tUVT|tW/06tT#ET+ERFJB@BH@aHȏQO OGTPtTܱB@TCPrŤ+Doɏ@-UPIACA@DAOUPI?UPBc(FGE@/EpAIAE AHFGB@JrA+DoABHFFBcW@U/Epa-AKCAFAKC@FCFEDyRRŤ- WbOoa B0TjHkl B@OAErrrŤ-,(rŤaW bPpRRCQ tTOaO PQPtTO;Oɏɏ a#Pa[ TbPp*(_S:JW^AN"&yͻFIP)zHB[;N5/3g<`P^*/CO5{OBbٲit\ ~5W=H俲4E*BcA#E|FBě#E|(BěaCBGBðBBEɏɏcC/EpADADAMFCð09Iϕ0I?I@  I?aDtBGT-A@f IC@B'D@;H'C@AI&C@AK&C@CHEDB&C@AAi+DO5 EDyB+E'D@U!\41QEi%X8_Rn! Dd ^M*̵:c :@MWL :j`4aX`)_SMS4` NM@2c iQEEȥ*\4 Ec` :jHT\M,6&;9O.IY*%AS*Q*eH%WNO1@aME3 :@c*̲*\4 Ec` :jHT\M,6&;9O.IY*%AS*Q*eH+p]@\``%Sk lOY}SE.(^]@a$hEN̲*\4 Ec` :jHT\M,6&;9O.IY*%AS*Q*eȥjl)eQ7)a*y:JeW.)@*\ :9k ldHqXeSEXdj)ONH*6%_*'jiEX.)L 9WNM(a Dc DH*eȥX)*" \k!a HA%Xd 9W6F" y+XaSE*!eXd 9WNM@2%R*i(*!U*:jU(c 5\9@EZ!+ 5QIJ4:`b.8M da ( 9@g*]Lkȥhsc %E@Q( :jU(9 d ]t_5S@b4]@XaW&Iڬh !ANM@W`|g*]L)@:F9+c \kJJN" ̲hR1eXd+*)TAS`+aN*NeL h :i+ji@g*]L!H!( 9 &\W:s*`$` ` :jLYRFeS :@&:y4:RNM(HOL;%ȥh)c XaW\"LH 9X+g*]Lh R*̲Xd :j}S%@) DE.( EPfa (DJ8Lc M7 XRi*46jM%Hq!:R*L9 gK]L*i+Ta_%ȲS2%]E5WqNa@a7 +bX` 9@g*]L O1*L:iE.+ 9**`a$ O1*L`aM @M78J6LgE&` :9`p` h:snEWqNa@:`%U(j`@O`;NL+J`T\eW9SEB*eXd 9WNM@EJ]@q5Eȥ:c $]NgLM \L *q5Eȥ.(.&a (c X!9Xb.!$h )&!`IDc2 ;*L )e^1dh**eȥXd 9Wn!`H 9@q5@@,F*̲.(.&a (c OS**ji*\*`;fcȥ)e^1䥔e^I49Md X(R*`paWE)e^1䥔e^I49Md X(R*`n%ȥ:c IeS)`INMR.)jLd, :j\aNeEȥ:c IeS)*\L5@)+e-S*`M )*\aEȥ:c :`)*@&DHp$(L :jH4E *))9`Yd :zO*]q9Xc%ȥ*:jL,c LDg5Wd 0}@c \ +!` j4 :jL ,}Se+*\]NeSTdH-Q` :zO*\ g;&`4g LC*\-QaSE:cn!:] NMSe^k*y:JeW)*`9:cn!:] NMSe^k*y:JeW)*`9,M`O.IY*%XdF` :`,M`}Se+*\]NeWTdH-QaS`'W!%S&`paWq9Xc%ȥ:cn!:] NMSe^k*y:JeW)*`9:c :`)*aS+*\+*i*`j_.)zMH%WQ*Lc I]H@)*"@]H@eHC ;NLd:*`1eW`c&6%L*(5X+4L :l*&c Lc%H)7Q*j`4g ,6.(mWe/SaS+*\+i:)d ̲c%QX)`9@)ONH+:`fNMDaS+g*ܲ$;9*;-a FaS`\:)dL :jHENMSRSeWNMR7.a *`c%Q**`g*\S*\%HAEH)n)79\00Uq*NdB/)*eL _ 5)9 gS0qXeSE-+']@?Xd].LxPEXE:9H7WRc*:j:] NMSn)79L'W!l@XdHS*`)7!`E7 @S%@%Xj5MEXd :`B*:j\@-`qN%EȥXd 9WNMS)*`mWDaS*`9*NQn:c :`%W!g0R*Had )e^1d; 1*H}Z0&`R`%WW.%Q (Mb^9]*@NL9I]*L]NeWj5MIRc*:jLc mWc4UyNda k9S$a DH*)(!9W9DH _ L4SS$ +*eH)(N;`%Wi&k*dda +_ xxE;99g%ȥ.(N;DeY$H;5XR|a pINMRc.1SeWLH*iXd :`)*`JeW&M\c&; )*@^e*`*M*ENL :jLIY*D1WdNd :jHS9Lc*^``)*@S%@E3 :`%W.(Bc&F'\" d*!ji*e!NM@;1](\_sd+?d 9@iyE:c :`)*a q]*eLj9LSqXdRE:c :`)*@2c_.1S`}MLIY*6*`jEH%%@a$ )wRM@qa@Xl*@)@NM@a q](B&J@jiNM@3Y(T`( )Li`%Wc19 *`ji, *qXf.!LaNe@qLtL 9X*@jEȥB*eNL \6.!\ENMWQD;?d 9WS$:l*\ENM@t1Q)S2%]E4k:@Qn*\ \6.!)(n* a 5\M a3%ȥ g*L^JLn* &49 d%WQDc X*H@-.;%H圥:c %S)*`t1Q6@N`'@9` *@Qn0:Rc q$ \*k19 tL :qL..)̲:Nxd *`t1QfML*'@@OL9 d\*eȥ*\n* 4e@ANM@3` h *:pXd*qSL h 9 H*d:Wc%ZS$ hsc 9n!fM̲:eRlc %SQDHqN%S@-̖E*\n* ;gn!9ȥ*\ENM@t1Q)d; q%WO8!S*m).( \jj!l(L %R!%dF j_1Sd9Mc 'EL W.(a D1@$Rl)3 4ٖE*\ENM@t1Q)d; q%WO8!S*m)*L \jjL&!LL %R!%dF j_1Sd9Mc 'EL *\n* @)*@SK!L5@mWNyd9@!] qL1GD*eȥ*\ENM@t1Qq9LdL 9@w))ٖEWd9 d jl]@*aMO a4 5Wf!%S>%SH1S`4*k*`$c*t1Q/YeWnL*`p]*E`D` Q *L^JLMB.!Ln* :`w9I*eȥ*\ENM@t1Qdj`f@ :`Z*mWa q%YE*:jL,c Lc )(ENM@h`rX!*L)aS(G[JF*L:j+T`( M*d 9W`Ik( :j`!*LbG*`*\)*_%H2ELLc*:`1MJM@7**xgK*`,6L :zMW.(2Eȥ.(bG*d9Q6FDG$` h :ij5D1SZseX:.)dH*`%W_G(; 1G^5S*@M.(bG*d9Q6FDG$` h :ij5D1SZseXB*e` *h*1*`7%S;*`jQ*\bG ; 6a HmDh! 8&c'@5'W!*&MLO*c%ȥjQd :`qNc \$UeLR*_; `paW`%SFLR`; @; :`Y*`a7%HHN`9W1f-jL**;d :`O;KNM@e-@h`qQ!OSeWHpaWe]:)dL :jH*i( :j\ +G.1S1(E (9 `k*!qNe@L4qXeSWc7)d`  k.zMLi`1(aNeS@*\L5@,6NM@;*eNO7*( SeS@.(4E@;,F9Nda p*`qNc LMG*8`qQ!LS$ *!(L (*s((M.0*eH)G*\q$Dc %]UU@64`  )(T`(i`%WU}@)*VO*\ :H2@)c:-Se]*`K.(CUUEȥ:Nxd 9@Vn!!eN1SE%.(c*:y]UU@,6f!jy*eȥ2.( ^*`)c:-Se]*`64i`%j4:`M7 a5\ h 9d&!i5SNd *@p:7c%ȥX)`9@qSL `E4(L/B*g*^eȥ.+;NL9I]*j@INMW G8JLN;`%Wi$'@qc +M7 %gK*`64:l*e.(N;DeY$'@qc +M7 %gK*`64:l*e2Xd :`2c ` jp*3%XR)c%]*E3 )S+/SAQM*`2'@%47*bC;R1t_6&1S`$` h 9@A@*iWc xddhVM̲.(B:/ ;39M%!:)dH[E5SiNMWGKdE (9 d\ 9@0}@F*:] a MN%Y@*\MG* ;*}J.!%7%LM %GKdc @;%LH9@@*VM̲-( ;j4P9*E:)di`%Wc19 *` ;**\B:/ :`%W(EF*E.(B:/ ;)ٖE:c 'W!)()n)79S$]Ne@c1@1P^5S`T1* WS$&.!%W(EF*E()L U}S[FE`%*a$%HeSNM@;1](\_sdj`%GK(\_sd 9@iyS$ 8.\RNd *`0 :e\\ ]NE.(B:/ a7 mDh]Ndkj@aWb:l*eȥ:)dH+E5SM**\MG*-1(:`M&1W`;*\B) 00 _ qNeWf!c*LM )%W*1MdL]7:Mt]*L *`,6NM@B*:j`8IY**%RQ*̲:c 'W!)()n)79S$]Ne@c1@1P^5S`T1* WS$&.!%W(EF*E:)dH[E5SM*NMW 6D1S1(-SM@ ;*NSR( c*L)d9 NL]NeW]!lf!PL R*`,6NLji+L k )*`4S+*\]NeXQ f!jy*eȥ:)dH+E5SM*NMW 6D1S`EJ]S1(L 9@F*6.+d :j6FE@t]%hT`(̲:)dL :j\BkM)*6*`ehT`(M )*M&1SDpc1Eȥ:;dSn* q4L 9X*@NE" :c `)(`Ac D3%ȥ:_6 Q*\\Dj]1M*`Hc LR`r*'@@c%ȥ:c :`%W1( +]9`IL):`1*`!jl*eȥzLn*1)7 M7 qB.!:`1(]7:M̲:JXd9 dL *6&Mt\긲4%@M7 I\ *K9Q*eL*s4 9 RENM@]a( \M@2JN1@6&MQ9Wd *`0%zL  %!l( )*`t1Qj_6:M̲X 5\9 gp`9@+*`p]*XaW.\9QEN!ȥ.(a D1@i)*`1Md _*xn!S$c ;*OaM\ )eQEȴ(:Rddd +*`%4F:)dL :j\9I]*`ehT`())*@4!:@%S@&`F4 _ 5jy*@)*hT`̨(:ij^Zf.!)**`qWd%Xd 9W:'*dE!:c :@j@K*\E5S)٨Bdܥ(:iE@aM\ v;d%Xd 9Wc'kES:c :@j@K*\+E5S)( *F**`W2Zn3H)(T`( _ 5\)*L4+*`jif!P̲aQS(:i*\fj@)+=I*`zIH: _!Xd 9Wn**}SmE:)dL :jH ^aSR`INMWf!]*LNMWf!c*LM )*FiW` (Q *jH-Q`HS*eH)S+$x c*7 KNMR*8*`:`%W;9( +jXE)( Q(c.JJ3%tdGL4%NL ^aX(di`%S*8*`1R9E:c :`)*@:] )i*n*8*eHW1d `bG*̲:)dL :jH9I]*`jO*jiW."d :j+1@h`qQ!f!*`XaW9 g;*e]d*%SdM*k19 !`IM\GO0IY*qNeWSeS@jLR`qNc HMG* I)*`%SQ*LM %_G(*jQ] L4) g%7*\)5SdjiR&`-Sc*\)LPk8H$RCW}R*1\+ L(:C 1L*e\\L *hS$ g6`JeWSej^yd :`N.!`-Sc*\h :jH ^*i eY*`jEHHN`)(!g*M/*9\)LE (h :WC.(!g*M/*9\:pd :W@%.( :9e]dj]f!eSEȥX)`9@)ONH+jO*ȥ](c be, :j@%SQ*LO*Lk *`@O`ji.(%HA@;W4W M7 a7'ȥ:@G-Sa719 c '@5\9 dF*:jEa 9*my.(!g*M/*9\9MdPk8(*i eEL *(KIWCJ ; @*)̲:c :`)*a KY}*eH :l(Q *jLT`(HS*`;NLB) 00 +*`,6NM@2c @\ :;NLF4h :j\M*]SE:)dH\%@)*B*:jLG*L ^+9*L2EH)]!le]d +*eȥB*e(9MdPkqN`+H2.!p]EL :zO*_B*g*^eȥ:)di`%R_S$ :j\ENMS_G(; )*@B*:jL4E *5W)jiLaq9Xc 'W!q}(bG*̲:cn!:] .+ O1STeSq.(9*`.I]S!@)*BV.}_*Lc7jj:@jG ̲:)dL :jH ^aSR,F9Ndd*`jG L` )S+4!:@%S@\D:iTeS`jiNM@c1@,6f!eSEc&hXM 4cjG Lc&h1EL ;1SE&:y:c :`)*@&:y4k1\ji*jLENMSLNM@q.(M*]Eȥ*9 eW`dG1Yeȥ:)dH\$ :j\)+*\9K*`hNd :j\;jL\1SEEL 9@)(p$ :zO*]e]dhO*c 5\ :zO*^+9*`\ h%Xd9 d)\"5KBIS@&`DzO- g!K*_ DL45@.HR͊(9MdkqN`'@`9OSeWB*g*^`@Ny+E:E_eXd :zO*^+9*RJ65WXK:i*eHE:)dL :j\RUE9WeS]ZS0:jn)79%EsS$9EptLN%SE^i+ :`)*`45W*`9H5MX*HS*`jiW1d Nd :jLb}_0L]7:Mc*L`  H4 :jL ^aSR&\W@.(GKdc -Z!*ȥ:c :`%WeUU*" `)(l(SqXdc1@I5WL\\DH9@IeQ`K1c*5 MWCS%SQ(&.!LE4i`Q*\jy*ȥ:c :`)9LENMS5WL *IB!LM OS\" * 6\4W5E:c :`)*@jEL +*`Ri( :jHa qN}W( EN!L-jO!E5@c1S5Sf!c*Lc*LjiH))*`\IXd**3 INMRS*`Q`2M,+)ӖE:c :`)9LENMS5WL *IB!LM OS\" * 6\4W5EX_S%c*eXdj)+1WF:c @qXf.!L*I( +)_G*wR``  )S+4!:`%WiW*\2@`%aRM**`\KȥXd .!@qNdSS$ NdMW]N!ȥXd .!@qNdSS$ NdMW]N!ȥ.(bg*`9WJeW5SQ*xeS1Q`` *qXf.!L2EȥXd 9WNMS+1SQ*xeS1Q`%W` *qXf.!L2@X*HF4 *k7E*%W_G&`F4c :`%WiW*\2@`%aRM**`\Kȥ:)di`%R_S$ *qXf.!L2@:@)_G*wR@Xd :`2c `F4L *M +<!+*\\\ :ȥXd 9Wn!`P h :fipEYeWLO*c%HSk?(fied%W_SeW j@%_G(h**eȥXd 9WNM@q})(Uq(L *h@(:*9c \*LHEXd 9WNMSn*JeW5SQ*xeS1Q`qQ!\9 *`X*\2@c7)d\\F9c \%!*!Xd 9WNMS0e!LMSc*MDE *a4 9@0}@YL,j@4!c7):c %.&O!*+9*S$ *&Mdk%W_G( :fkȧ:+9*d 9@D}@64M 4eXd j4 4!`%W)(.(Uq(  XMMIS$9K(sW}QLM @L9 d *k +1S]*̲:c M78R.(Uq(h Ndh 9XaSE.(Uq(!_9*9RT_ $DR`9*`eWLM .3%td*Թ.(Uq(7*M*O6jF*I!:`%(圥.(Uq(7]V4aO_.0M ,F9*L2M %Wj()`圥:c %.&OWfRpd ()NyF L (c%L9@;EH圥:c @f.!L*i( +)_G*wR`*%S*;W`d; I%^s*`jGDeS`qQ!XWEN!*`%_G*`5jy*k)*eH+4*)*`0L *`hLR)L*(5W.(T`*`nc*L +*`mW%Y@Xd\\DD!\*$NO1@2c Q dL *M %*W*\+E5S_G(5:n!D1SNxB*e(:)*`VC.a fd^.!]UUS.(2SOSeWE:)di`%R_S$ *f.!L2@:@)_G*wR@Xd 9WNLENMX:`nDn :`)*HA@%W_GnD%X)`9@NH+qE:c M78]:&`n f1SZseX:c M78]:&`n f1SZseX*%W_G&`F4c :`%WiW.ܲ:)dL :j\ ^aS`M&1S`_S%SR*L *L*`nNMWISaS`n*\%HA@1K1*jLd* 1G:)+ q$xjFjE|c19 S$+E4R`5\L :r 2c L*%M =Y K1KG I*8%Y*eHM&1@B*:jL ]Sf!t]*LM L4`%S`ji.( *`3 bRf!c*LR.(%Y( *Ȳ.(c =Y %WQ*L 9WEXM OWONH(-Q`AEȥ:c :`)*1M)*`ehB&J@*)*@2c L\Ȳ:c :`)*1M)*`ehB&J@*)*}J.!2c LT`̨:)dL :jH ):JL'W!lNMW]ZS0R`&8B&JJLE ( R*eL *`jif!P 5S@.(&.!dP ^`9@%%W*`N%S`ISE:c :`)*@2c L9I]*`jEHB) 0Me]*`L4N%S`PM .+ \B) 00c )(`Ac E:c :`)*1M)*`R`qQ!*nc*L +*`mWDiy@(]Z a4; )*aM\ MLB&J@,M`JeW;*\O*L*s:OSeW1Mc%L *&Md h9QEN!n!J6W:c `)*;*Lc*F*NMW 6a H*`epB&JEȥ.(B&J@q$ 9W6FDR;*\ *`@1Ql*eȥ:c :`)*2c LPpDH:`M&1WS1W]!le]d :jLIY*L4N%SS$!:y!$Lh _;*^eȥNL ^aWd; 4M*\%HA@ji9 d `L *`%SOSeW@:ZseXdL6@5jy*EYeWLM $Lj@%S]1S`\ 5WZseXd h6`M7 IM\ ^9 *`j@q%W!j+9*E:ZseXd*k19 H :zO*^+9*`\ hsc mW1XaS`q%W!jJJ̲:c :`)*1M)*`R@.(X0MM :@t]*LM :@eSE*\&!L9Md 5W%WE4kH'@bG*c XaWn!j_!Lt\;BISE*\&!L9Md 5W%WE4kH'@bG*c @XeSn!j_!Lt\;BISE:E]E!h (L :jL&!L; 4c L4M*L+jl*e!S2&h9 `M7 p\4%@M7 IH *K9Q*`qSL!%4NL9X9\*L ]I*7 *`mWb^*LqL:^+j^Zf.!XaWf6LN`'@%NM@4c L4M*OY}S^+c&g %aX:l.(]3 4J4`R`%S." La j*`%X\5S`:F9+*d *`7 *`:`qLjl:l*e!*\&!LIQdi`%R***9 _R*\UWaWeUU4c 5\i`%RQ*Lk ()+%ȥ%X\5S*\@^\ :j`9X9L*eLS*L&!OE3 KNMW)٨:c a R`1SiS5NDM]7*d%.(B&J@,6NL'W!:fM*\R`jGD" Lp0aEȥ.+;.(`Ac *`U*̲:c %!g_M( +\*`1Kji*e!Xd 9@47i*`U*L,F9Nd]N!*EW_%!.(a ?f5@%X:eSd 9W:c :`)*@D1S`*l*`^&`qQ!\9 `k*!qNe@L4qXeSWc7)dH[E5SM*d :`4!L j4*(5X:NM@SIS1@nDg*^`*ECE:eR1c 5S$]7.\ M@%.(%S9*aM*`X`9@@6jOeS1Q`%S:!*+9*c j@5]_BIS`K+9R̲)ӹ:)dSNMR)*`,F*WNMRS*`jEH'@@Ny+*5jy*EYeWL*'@p]Xd9 d 9L9I*67B*g*^eH+4NM@c1EL*(5@W@ R*`,6E:c :@1y;5SR@.(%HA@5\c @64 *:jU(R(h**i eS@.)jL ]Sf!eS`t&*`ji*eH:@c*Lc %O6/ $-Jn( Q@. o 51P]}Q51P]}Q(Y+%td)@-t( Ro ȹnE*MS9W̥&`MXdc 1KG I4MSE*MS9WL%Xd 9WNL ^aX+`nDR`2%S*`N*.(T`( 9WdFA_ nNMR^E5S:xgW:)dL :jH*i( :j\JJO LN$]%pE^Xdj)( ^aEL ; ^j*\qLf!t]*Lc mWb^tL :j\;jLc.1S`)**`%^E*\qLf!t]*L _ 'W!)(;j`^e(NaWM@%^E.(a 9W(:i4d:] 1WS+ ji]*L9 n!qL*eȥNdF %WO]S3S0.( ` *c*d %L 9@%^-s*eL%@9 n!t_6&1S`aWMZdh!9XaSE :`P*@p9@;6E&`n 4.(a 9W( +6N*`b$`9@a4j`\)L:`H4*sXNM(xfMMBeYE:c M78R( NdhZ*̲.(a 9W(:izLS&D j5^eYS$**`a49 d+*eȥ:c M78R( Ndhc ^eȥ.(d]@a q3 sH7.0ie;:BKNM@c)k5@ȥ:)dL :j\ji*L46*Nd :jHX!M*L4*\\\ :jL E}WM*LpaW,D :zO*]eR1dL :jL Rs*%Sf%QS$ j4 :`4!:@%Sj_7M*dL ]Sf!]*LM L4qXeSEEY e@M7 :`)*@fc$5jy*!:R*e!*\&;";%HC IfQ4eSkES*4XNMSNd?\**L\_1S*`7):c :@qN!L\H9@Ri(:i%HC I7]SR1S`%WQ*L; )*@%ASK*MS*9 @TSI)d 9@*" E*\eUU4c aM\R)E(!:jLa 1 63Yb]SE:nM*c M78.1S%XO*\ *`t]Rl*eȥX)Oq>U!`G%Q9 +TSXEX]eR1dL )*M @n!`SXdj))+LY*j`AaSEbFF mQmYF4p9X-( Fܲ.+;&`]O&E!:R*H9(]O&E!ESH*9S%HAS.(pM*@NM@EN!sS%S(T`( _ L4S9 gS0N%S`)(M*]@c1@,6f!]4c*LS$ :`Ri(jiBn(9H5M,6f!c*̲9R*y. (!:jLISa *`ji9W(%SEXd :j\) E5ELS(I0faE!,\) E4, `eS(c L.(I0fa@,F9O*\M }W!E:c % NISS$i`%SQ*L +6*i*_%Had*^5SE.(l(c @*U-&.!j@8)R9*Sk?dh**eȥ)ӹqWf4*\*`;W`d; qWf4aSR*1x!\̲()Lkq*\]XdR`pNNFD :j4M@fa@p@4*k*`:*iNLDJJDk( 1*l*&c L ̲:tEd :jH]NeS,R*LSXaW*`M )*2c L46*_R@; jy*eL j4 *`%7*L)aS(Dd :`aQgIXDa *`@4]S@*\MG* c*9, j4 :jTe@:`%W)(9@*e]*`5Xf!]*LM c*̲:JXd9 d:E41Si5W`j@aSeWcH5SE:c :`)*na (:`B*:j\RqXf.!\Uf$!:y!L4j*.c&O@*)*@NL w7*@*l*:NjD _ L4S*eH*a7 X(*sW.!}W[Jg5SF9(:`jm)E5X9 dc @i*L*i(h)̲1S$ g`'@fQd!:yn!Nd :'W!%Sjs* @TaS@:F!dH+*`mSdS$c :*iYp*ȥ:c :`)*@B*:jL\H*\R`)*@jm)E5S*`.!WEZ!+ ;@NL w7*@a H*:NjD _ 5Xf!c*L:`'SB*\B]R,6f!t]4c*̲1S$ g`'@fQd!:yn!Nd :'W!%Sjs* @TaS@:F!dH+*`mSdS$c :*iYp*ȥ)Ӫe(gp9WM ]*x*Q9 ^Xd 9WNMSHtL *a@)+(gp;!:c :@'SB*L\H:`^&`%Wf!]*L _%Lc %WNO1@aMȥNM@Ha(.(iNMDaS(d* ;a ]eYNd:D:&,\&c'@.!*L jpESR!c%!%Xd 9WNM@\9*`V&eNd()*q1E!.(V&eWN%@4"@ ;*N%Rl(%:)dL :j\ +Z'eS1(:jRF*Nc1@,6( :r qNeWf!PLM L4S*eLW(c =Y n\JJ^`4"*@.(GKd9H7 L4IJ_c ܲ:c :`)*@2c L\H*\k %*y1XeNL *k )iS]*@*\*`ji.(pM*M *NdKX!GAS`%*Lc*:`)1G+9+ a$:jq (T`( );*\ SeS`jiNM@:*iq)*e]d *eH)(9I](4M*M%pMT`( _ n*`5W]N̲:9Lc %a@NMNMDp+*\c*\9 d j4 9X(ENM@c1E!:]3.+ :j:m'IY*p*zbZa * M7 'W!%a@B*:j1y;Xd 9WNM@*t^Jk*H9(a *d +a FaSEXd 9WNM@*t^J*zbZa *%H9(a *d +a FaSEeW+y@X5NO%LGP+<K*\jy*)( *c*\ +6(LeMd1S$ g`c aQgHL 9X*@d(*sNLrd&`!:R*sXc*`=Y )(+J:jlS9(%1S$ g` 9O.a +O)!E+ȥ:c M7 c&^1SiLH 9@jOXKX!D; 4c L4M*LhYkMSEd9 dd@ *z0R.(mSkk5Q-s*eȥ.(XeW9 dieLW:Se*"d9 g8k*:@MWL9@a LW 2*9 )*\NM@2%R*i(UWE@,F9` *jOXKX!DM ^G qL@J:j(.+KX`:E4 :jk*aNL4Mb%W`d@H9*O.-9W*`nqNa .1RE|`JJ\ `i dXdj`q%W1X!.(a *d)D`c 9Ndl]-Sn!;BISE2%Ri(c jlD.!2c!*\aNe@E3 )( DOM**(%:c :`)*@D1S`1\ji*jLB]RI4,*D/*eS%SE:c :`)*+<&8IY*;*L`Ac E:c :`)*@t^jEL*(5WNMWS*`c1@:@eSe]dENM@c1S5Sf!c*LM 5K@.(b]StL~.!L2S1SM Qk*x9 f.!ȥ, :jHa :)*\GKd 9W)1X!9G*`$46*t!:`Nd :y*%aWeQEEHqNeW1M*`KN1S+aP d2WRxfC.Rx1X*1a yXRld)W*:jN@UeȥEY%nES.a *`5ZeEXd 9WNM( *EY*LX0*`%W)a ]ddPx46*Mt_5Sk*%ȥX:d:EN$.(}Ng6/*L:ia ]SqW1!ȥ):c qB.!@S%@%W)5N:c @S%@%W)5NdL ]S0L*1(@!jl*eȥ:c :`)9LENMS5WL *IBG jifM*c %S)4"*:] NMS^E5S:xgW|h;zLj]*\4W5E:c :`)9LENMS5WL *IBG ji, +M*MS)LL 9@jT`(j]1P):c :`)*+<!+*\+*i*`t]%pB&JEH%WQ*Lc I)d; qNc HMG*%L *nR*`5W)[NG9@.(pM*M *&;9JeW!H`)*@jx9 d]Sjpd)W.\il)Rldc )SR*; ;.1WU1Q@WRldL *Ng*\EQ*LB&J\%SE%Wi)FL :`B*:j`-Sc*\Yp,M)+*\)*eȥK1M%*\b)Dc Qk*g,\ 9@*( .(( h)c%L w7*@)* aӤ*\b)Dc Qk*g,\ 9@*( .(( h)c%L w7*@)* aӤ:Nxd6`n*Xn!W]N!̲:)dL :jH9I]*`jO*LR`rX:NM@]a(2@*EC`%`k*!qNe@]N!@*\*`;S%Zf.!a7'L\\ /6`JeW;*\O*L!*LR`qNc HMG* I)*`%S_S$ *h@(**`%7*\i`%W.N LaNeEH}N!LHc&hj@$*xeW_R 5S`GP@_9 H$ 9WqX*`p]EH%*1S*%S$ g7 JeW0c )6q9 +jO*L*(5XNMSWEZ!+*L\HEC%H)(!g*M/*9\c a7'L*(5@@%\"d_%ȥ.( :9dHqXeS`W]ZS:]3S$]7.\ M@%.(!g*M/*9\:pd :W@%:)dH\$ :j` ^aSSeW:;5S+ _t:@NM@jij7!9R0()aS(G,F9*L\HM \)!a MQD *eH%W)@q$R`)*@!1KG%L*(5W` :jHF4L *M +< ]N+*\W4d_S$ *SX!R1`paWa *`:*ir:@jQ@$9@)}(T`( )\"L4`%SE&`paWd ;9`ji:^+E *]]SE:c :`)*@D1S`CWm*`^&`qQ!\9 ,)(aNeS`k*!qNe@q%YE*\B]Rq%Y!c*: \,M _SeWE:)di`)* ;*NMW&ML.)jLB:/%H)7]W;*jQ`qQ!\R`jy*`Kc*9`mW'SAQd 9@!, 9@qNd O+*e@i*)(:``'c19 * ,60R`%WGKdL :jL +M*MSR94ܲ*\Uf$:i+ a4qXf.!ȥ4!bC;R1t\&c'@%\" W[J_c&g @b:l*eȥ\(G'@%%W(aNe@*)7)!%\" SeW*H1\9 d +RLE *%IWt!.3*@:&c*c mW9jG L44d*:`%RiL9`r%\" `IS!`c4F_:\"jieR1c :`%GK*\fF Dc.!M7 nNE*\fF H7 )*`6g MG*`%W\" _t\M 4"**:jLqLEpB.(9Md ( :jp6q9 (*jxd:*\" NM@pB.1@G\" Wc7)d9 W.(B:/%Haj_7M*dHMG*%HKNMR!E%L `%\" 5KeYd)$4d |E@%S^D%c7R7R1(:if5@j_M9( *jG LM 4*`)(4d9@)5S^ENLfJJ\fF c*7 MG*`%W\" S$+)&\,&c'@9NM@c')q/`[R'@%\" W[J]S&]x*\fF D7 Dd\\ )*`UNN.!LmWcH4Lh*+?*eȥ*\fF MK %NM@c')S$ + $; qLc \a7<)٨eZ1*8c ANM@ANLDeW*`fF8@*L9@H4JJ\d :jE\"LRxd9W*i$3Y+M<*`\ `c M7 qWgtF 1Siȹ:Rd D"9 :ZseX7R1( *`OWE5@Oj_e̲.(W]Xe@%W\" *`fF8jiNLS*\\M K*H2M %WGKdh)̲.(W]Xe@a$h)SeSE:c K*\)**y-WMYLaNe@%WGKd:`N$c19 * ,60R`%WGKdi`%aW)٨4!.\+*nDRL :.(](\^*dO9]1SE:c :`)*@D1Sc%h+B]RH)7!`2F*Lc n; 5WZ̲*\Uf$*qN3 a4 9W@.(:p(qN3S0 _ L4N&eS@NL jU-X^ES5NO :`%aW9 gS0Y*@qW%S@.() e@9M,6]<+E4 :j*9 e@_jOSeW@*\4W0R9.\ _ 5W)` *@c*̲.(pM*M 5\9RE4@tLN%S\c )Oy+4Nj^`@4]S`bDd&c%OE@@}eWL!:y@NM@i*e]dp_8S$ :`M&1W]!l7 Sp_8E:)dH\%@)+*H\S%SL9`)SeW.\c )e*zFL` *@]a(IS1Sa J}S*&l5WXr*`ji)*\L 9@.)j\"!*eH%W*i(-Q` ]e^1d 9@*yEL*xeS:p* %WE@INMRk7S*L-Z*!:eL *1*@)(M:Q9 (F@]@Wa )jlj^*9@.(GKdc *G nq*%Sjp*`Xa (M %R7]S*!n!)jD9@Ri(:i;`j@a\6LS$ 4Nj^`%Xj0xWdO 1(M*]S*SX!@NMYeY.(*D/*e@*" ; *%M ^]%StL*!jl*jL.H:*`X:jH;*@c*\E ( $c*]@.!nO*L*!:zMLi`%S%S_]Z*eHKNMW)(  +)(9K(a GH7%L )e^1d; )*@*` ` ^+.K*L-QaS`%c 5S`8S9( **ijD 7aQ( )iS@NLJJO \-Z*GX`\7 X*Le-S*`oQ@`*sd)*`0 j4 9@6:!S$d_NM@*qS _G( :zO*\; ECn.\i`%W!*` ;*Wj9Wd :`:R*x*{\k2%]M*H$U`Bei^.!XNMW6*L:x* :`%W;9( :j`!)q9LaJ`*\Ih*@.()Sej^y() e@M 2%]qR*iNMRN1S*eL GT]X}]S%S9 dE +%Wqba R`4F.a *`*jNM@X~.!-WL;5@ d*)d:j:N(S5NJ.!e]dE4 :fkȥ4L%j4k!e+1@JML +6TGMWf1S\`k%Rj0`ji7VLj].(e-S@*\ D5S%@jG*G %Sf*1Sc*LqAQ*\46*Nd :jHGY^*`jiWa )`%WERNM@jm)E5EL_5NOS0*)Xa -(TCff\pt\S@f1Y2$R-*Eȥ}WB%]y%NMYeY.(*D/*e@*" ; *%M ^]%StL*!jl*jL.H:*`X:jH;*@c*\E ( $c*]@.!nO*L*!:zMLi`%S%S_]Z*eȥeʬ.(!i dc 1KG INMR|]S4`k2eX@ )t^Y*`jG L.(k)L` e@%W+K* 4!g Dd9@1MJ̲*\-Z*GX`\7 X*Le-S*`oQ@`*sd)*`0 j4 9@6:!S$d_NM@*qS _G( :zO*\; ECn.ܲ:Rx*\1^a` D5S%RU, _Ue_ Bei^.!XNMW6*L:x* :`%W;9( :j`!)q9LaJ`*\Ih*E:c :`)*@B*:jL\H )e^1d; 2c L-QaS@.(pM*M aM\@.(GKdL *@j@q$ j4 9@gH*eAS7AS$*)}(X00c )f!c*L ]S%W]!l`'W!%SNL9K+R1*`*XM 0|R**8*eHaM pȲaQS)(Xp:7Sf&M)*EN!sS%S*`t]%hT`(.(k *)+ ;Nd 9Le.K*L@C).H:*eȥIW)*\VM.\ :j+*1w*I9R`L:)dH)00 :j` ^aS`EJ]SR`i`)*@*%R:ll-XeeS!E c*7%tdR9 d R:@jE!%, *@5$eMdt_!\H\H%:c :@EJ]SR@.(;9( +jXdE**Ik(R`)MdWW*`:@Ge]*`qNd)xM**`\KH%WNO1@aM;*\qLtLP h *:pXW)`9@NH*GE2NL ^aW`|IWtE.\ ENL ]I*Y*g3 %4R@qNd O+*eS%W*`S%@%XR`%NL ]ZM19 *Y*ggDaSNMW" ENLiw9I*`XaM*i*Rb}_ :`%W(Iܲ*\\c mWq_%;WF OW*:`w+S$)ӖEINd )*`4c L4M*L)L*aNME**m%EԵ*\\c mWq_%;WF OW*:`w+S$)ӖE.(j]j69LM D%YjS*H\:(9 d R*Lsc%ȥ*\\!:ld 9W9%NL+*`5jy*H$ 5NO *a4+7719 _M9LM q$Q\9RE4 ]ZM19 E*\\!:y*:jHl(d9 d)eW+9Wdh)ӖEM4p*:`1GS H4 *`ROWt!peS%W.+;NL\; aM\*n02Wȥ\ \!:yw+S&.!@aN̲*\\c :R*N4L 9@M 1P+9+%ȥ]3jl`%WtE.\j`jM*ȥ*\\dj@7R1`qQ!\ :jL _6"*`68kdcS$ tMc*d*R1d 9@j]tEM$i`ji6*M*_ W*\\!*i*0R`%זE%W&WO*\ :jM*ȥ2S*\\:\" )G*LR`)*Ha*`2%S*` g*ENM@Ha( R)*j+9(9Ldil+" G K*H*e!.(AYe@4." E%W`;jH2$%(c @2JN1Sjc,+64c L%(c @.jiE5Sjc,+64c ̲X ANMS)@RnNR.(AYe@KX!9XaS``*k19 !XaW*\IH4;kq$9 n!)*\!9XaSE:6.+d 9@ g*,M K]Nc %S6JLܲ&:y:c :`)*@&:y4k1\ji*jLENMSL%@i*` 9@i*E:c :`)*@&:y4k1\ji*jLENMSL%@i*` 9@i*E:c :`)*@&:y4k1\ji*jLENMSL%@i*` 9@i*E:c :`)*@&:y4k1\ji*jLENMSL%@i*` 9@i*E:c :`)*@&:y4k1\ji*jLENMSL%@i*` 9@i*E:c :`)*@&:y4k1\ji*jLENMSL%@i*` 9@i*E:c :`)*@&:y4k1\ji*jLENMSL%@i*` 9@i*E:c :`)*@&:y4k1\ji*jLENMSL%@i*` 9@i*E:c :`)*@&:y4k1\ji*jLENMSL%@i*` 9@i*E:c :`)*@&:y4k1\ji*jLENMSL%@i*` 9@i*E:c :`)*@&:y4k1\ji*jLENMSL%@i*` 9@i*E" (*\L5@%Xk4H٪e:c )(`Ac W]N!@Xd 9WNMSFcmSk4H*eȥ:@G.(IeNGS0Y+%Ld9@;n!&`DzO-*\U aNM@4~c*)Lc%ȹJEH@*;NM@Ng*::M:`%Sd *;?*9`:`)*:I*`6/%ȥ.(q)jl, *@f*LY+%td:}SNLH ]!9**`@*9*eȹ_L5*H h 9@E^*`:`%S}NMz]`1XeHC 4d %Wk4HNLMa *i+\k4R`a4S$ :`.a (eW9SeR1dR%NM@e_*\YRFd9Mdk8RWH7 j@E^*`jj6J̲*\YRFdc }J.!c&`M *(*:jLl],6jNMSNO1S\}WE:nM*c M78SeW*HYRFeSE:JXd9 dL *`f*L :j:eȥ*\YRFdc mDh!*j@9qL*eȥ. ()Lkqt^FE@g*]LNM@c:R($1M*`:R*N4%Xd 9Ww;5@g*]̲*yDɪe()Lkqt^FE@g*]̲NM( O1*M@g*]Lj*`5\)+6Nc ̲I^EȴB*eXd*k19  :je@)@@L(hRR*eH9 2e]N!$; @`*`$` *B*:j*!]XaNL)7Q9 *B*:j\]mWc*"!:@4eSENL]*!:y`\; )*@KE*` L*U/ 9*\&!NL)7Q9 *B*:j\]BK X*Ha 9*`5Wn%WqW0!)7 %f!HE*\]q/ )( )eQE5@B*:jw L4 :L*)dqi dM ]SO qLE*\]\ji*!:@9L*%ȥ*\]q/ ),69 +B*:j`IXaWf!%ז`*+ $R`c.)d9 *\]$Reȥ:"d *`*:] *L\H\ GH7%LeMd s,M q!!H=Y ;Wj^]eW`(%:c )*`B*:jL}W0 +%[*d *\@^\*!:i+ :`)*9L!*`i rAEȥj]j69%W)(]qN!*\:aQ`*( c z\BEE!+?d :L*qB.!*j^]d *F!*\]; :`a *`:y*c**:jHl(d*\2M $d9QEN!`$` \N`*%4+%L \S+EXBK%L'@4dn!Nd )*`4c L4M*LNEY9 E%XqWXd 9WNM@B*:jw%ȥXdj)(ENM@ :j4!EHa.)jS*H ]I*`RL*Q9 9 *)ٖE)R9\U *!:y`*EC %SqW0M ]SO $Reȥ)7!`5QM*`1Wa dk%Wjp*-)O*\ :@4]S@` h 9 f!9*`jI]Mc%L O))c '@)*`_.1S:eS@W7d :jS(f5EHd4a ]H@42k! a ]Nd \4:`*y%HC%!!mW}4I4H+*`:x]eLH)(f5@@mWc*" L%d$; mWa q%YW*\'SAQ5NX*Ha 9*`5eW.\VMNLe*\dL Lic *Hd!MMI@OWD 9@k*S$*eHA@aNd)*7i.)`:@&:y4%d*a LW a4 )(a }@jij_7M*dL *:N E;%ȥ)( j4 9@Y( 1*i(2Xc.JJ3%tdE@q$)a FaS@E@*y+W*tmWDaS9@bR.(46*:] &`4W'P%%\+eI@:yRn*$%E@;ga FaSEd8.() S*eWS;?d :`2*;*i+.!,{S$ :j)(rA@RML\!` _5NO%|S( )(L*`q%W 5S`."d hH 9 EH:)dHRf.!L*i( :j`JJO L\KLQ\ \c \G%W0e!R@X5NO )\h)e^$*y+J\V2JEHHa(,AQL)W.\H5S*L\HL :`\!1XD`E7%HmWc7+YR.!5Wj@a$ :`DR`q5S1()WL :jii dR`?S1S`_M9KWIQM*LMSc*MFeL :jk*@NLM*D!*d1SNdS9Lc*^jLL *L*i(M )(`J:MnEH6&eWMS 5S@7*`KNMW)(!d :jNJMtL]Li`%RQ*L&k a L!M%HKNMR!E :`%W(eMd +6(L.(]n!*e!%*tEW)`9@)t^FEW`qSLi SR*9L*%ȥNLJJO \b)D 0L :j\p$M *f"!`M*]@S%@%XR`j_5%S(M*]@=Pe@:`%W;:N Dh)L:iE:j_ g*Hb)D :jL9*]F*M*La D`rKWNM@^]%@q}*w*y(*]7%HnSeZ*pUDFeW:c 1+5\!L + 5S`qSLi 1S'(M*]SRy+*eȥ` h(;*d&c$))*`%W+Y( 9W&`b* ,\j^ke(b**\i9W*`p]*`Dc:.(dSeZ*dFeW89S(:iEa D˪i4%@%qW1@M7 Qe*`qSL!%47SeWe@n^nS:*H7*`*NMSik`*p7 KW]S$ieL:d :jL."K.!L GH7 ji)d  :j\E*\ k]Xj99W*i(BpD  %qW1@K1\)d`  =Y 'Y}S%@n&6.!LENMSqW1SRNd :!9@INc*LR`9*`qW-S+*L4 :!)*`R`9*`f-y.!!:)dHqXf.!L*i( +&1W`i`)* ;*d :j_G(R1tL ]I*`2^jLa D1S@, *i*LaNe@;NM@.M)*9*NQn1EL)*\R`9*`*y4G )*`B*:jL6TF*M*Ln*%H:`)*HA@;NLM*D!*l*`Ic.1S)5S]RM*@NM@2c K*MW;*`a$H*`mWc7+Y@NL +G.1WU1QWc7)d9 L RS*eH@%NMSaSd :`2c `c&6,;9*L jSd :`5$i`%Ra ]S)$dD`\DH!aQUd^EX)`9@)O1\N.!`c&6,;9*ȥ&`1eWd-j̲&`1eWd +64c ̲nSeZ*pUDFeW:c 1+5\!L + 5S`qSLi 1S'(M*]SRy+*eȥ` h(;*d&c$))*`%W+Y( 9W&`b* ,\j^ke(b**\i9W*`p]*`Dc:.(dSeZ*dFeW89S(:iEa pINMRc.1S)5S*Xd :`)*`JeW&M\!*INMRc.1S)5SM*ENL :jLIY*D1W7_\c&; )*@^e*`9 *``)*@S%@E3 :`%WXd+?dfA:N D*s:;*]7_:6!:q9 NM@hfF*̲:c :`)(2@1K1*`jic %E@Q *`:`%NMRUW!L%\O*WENgSa 9 EeO.}ٖc+:6EȲ4)`R`eS`&eSS$%1S@:Nxd9 +J^`:i*@'@-ME@Sk?d.( (`gM%Hj@%4h+1S`mWcH5@JFM4`9@-:j:edS%Lgc%dN$`8%Lfied_SeWedf:`:xkLB*g*]@K.(c&M +(E4)`R`)9LU_9QESC*L9@+< :j\!*eLL *Y(*eHC*Lc&M@.+ C*Zs*`$j4nWQ9Wd**eL :NM( *%S.2 ;8p_*\*zg`%4)`R*_; _:NLmW.3 nNMRC%L!)*`Hc L{`ISNd +]e*`=Pe*eL 1` +^x!LWFM HN`9 , =Pd!9XaStHmWF*:eH)9C*V.}]S!j\LHNb* $:{*ydJ;*H5@mSd%LI4 :ld.\ :j;(h (LR`%R`p:7c%H%C*S)*j-jC*lj@;9Q*\c& _6"*Ln*%Hn**RRiS4*`@_MLj@;9QNxd hed:*`xeQEStLemSd%LdP* xeQE@nY\7*&`#%d eHt^FEWqNa@Hc LEZeEL 9@qLjlbP*JS`OWNL;*]@Z*XV]S@*k*`%M@W.0*i *eL :`=PdhnWQ9W*eL*i *`+<=SaNg9*%WJ:j\%|,5ANeSS$R1eSYpeZ19i*`k^9W*eH*N$eL EST`*`a4 -M*LM $` j^&c L :j`\IXf!t]*L9 d O.*`$``%SeQ c*Lk%R*`Y]d圥N`'@%NLO*iWw}Ne*i*`qG`eU@$*i(@R*:`*y+J\hO*\) *eLP :X*.g gLsc%L:(g)5W(`jiRNL +)5WeXUD9I*KS)*`eU@1*%Hj@@aM*`qd h ` c%L:(djpeEdH 9@nE@N|D NM@_8 (h ^9 *eLkd h `9 *:@i**V9W*eL :] W4G8d h :jLeND *N(j,\ *L'@mWE_jpe@qSL h +%[*d:d*'W!$)S%S`qSL *eW( 9 !IM\S+%H+1di jpe@$(9Q({N`*Ud*\46*L h ]t_7 4d`:@+*1*`1d ` :jL ^aSRz` &`5)BISj@%MeRl*n+*`TC@jy*!9*L`jiXd)*)`j@@*ya )*eL h :n1@%WSg g9 *LeNE@'W!*F!c%HN`'@$)e]c%L :E@4g/S%Sc%L ( :k NM@:*Nd *@W.a *`.d*sn!`O*]X`eXc*`4d hQ n!E@1Kji*eHqSL g`O*]X`eXU9WdEL )c $`$` h :jLkPRRc j`)(1Q)M; 4dn**;*]@N(h`IQLHeND *J;*Hn*1)7 %WWc*SeZ]W\ :`D(S$pNLKQ9(JO+jL6`1GRLH$E 9WE4KY9ji 6a `)!*1*LMW`*y7X8e!\e]*'W!%Rk%pE@:@ O:"@c%H%+57**\46*d :`CW:*NBBJ*@;5W+57*@]@Se*"M;NM@*1S%EL*(5@WA7 :`%D*;X] *G%L NL<1W`6`i :eL :jL*ji+*L]SNM@2c _G(L *eQ*`2*`mWj]tE( *%S:llR5*(*NMMp.!lF _ IEI*aSS$HB)n$]*eSaf!t2S`qQ!\hM\,c ^`mW)+ sW%@j@FeWe^5cj;*@1\:s*eHL4 *@9Ln**L 9@)(`\ 9@Y(j( :j)(9\eL` :jj_7QMY(:i8*jN(L *eQ/S%S]*`K]H7 a}S$L :jHc*:x`jL(LR`&EH*eH:@6$]*R, +_6DL6^fI@L4 NMR]W.bFMS`nNMR:kI1SRR*eL*(5W*'W!*@@)*@.CRbF1SeS]*`%SWMJW:s*&`E$R`4LIEFLe)M Q`&pI"p|9@*i+*bNeRne'`\L *`%@ ^`sW%ELR1*@$@6LS7R*`c7*ljl*eL 9@Y(h :jHqQgM*\ ^d圥w*`MZO6y*`6ji*]SZ^a (46*L ^a@4jc*LfC.RjL*@H*FM Xi e@%Rk%L'Gt-(btpF RELEf* *z(-(1O 4I@*qkg`%W!)G1\H)(.*%WHc\aEL *1l;5@4H@**`,$*9`(E%@na (!l*eLgRI@:1*eL 9@^c*tL46*LRL{E*`KSeW(B:]S`)*`JeWe^k}&MjiYpWNMS+*\ Q `a*`XM**\+?eS;)L7S%WeFG*%M!:)*`jiIWt!IM\46*@ :j(R`%@EL +9 MYENLk%R)%Q fn`\JJ\Q (H49W}(TeWE`f]eS9\eL{S$&*\)*y*neU5SNLUDeRp`,\j(}NdGLRj@,\gG*j4aEL NMW-sjlb4aSJ%:na *`-*9E|j( 9@Y( :`2c `1X!Qy,\<_6y(j*`% 46*LLX!1SRR*`ji9O:K) e@*iF1KQ eS@.(*f!(AYeEL j4 i :x1+:`%WEd]1ELYkMY( 9@2c O46*($%(L *`%D ^`p*`%ʀ O:"46*N9L(LR1*@M@l;*M*9O%^J\*peS.(f]eSNd 8!LV;c*LH*1eS:+be@)R.( )e]eSSW*`%WqNGi*Lhd]S`Ny*`%eSn)*\:1+*j^iy]*LM 4M*`mWEZI*]!S$ 8!k 1X!E*\ieH$^M*L *Y(j(P )eQE4M 1M)MgJ]!L %0.(]L9Wjl*\h)2-eL *`SeND +DM*`h :jHL:5F!(M $ES.a *`)k*;`mW@*\2&k4K%S1M*E_i&n`$` 9@FJZdY(M %..O %46*LF*NMW+1S+9(*ji*`p*eL^9WeSO))*p6M 6L ):J:l1@X`K-9QE@SeWc%_?jl-jM%H'W!%%8*5'W!*i+*LF**:ijl*`nEd]1@a q](M I*1KG*js*8wk]]S%WqNa@:`Q*LkjG^AS@NMW7: ]P L9@)!EwQ79"s-*L *&M%Wj4i ($(`9@'W!%Se7 S%'*l*N1Qle@jiNM@a DI(T`( i+pNL*eHC*\qL.(HKY46*EHc%R:1*`aNMX9O%^J_sW%@**`aTH<]@%@K]NdNMW)`8.(46*E8c7*eL0RJ`E,2SS$@paW,F*QeEH*c&\)*L+t\ \)(.hM aNMSQijLRseEH:`%S%<*]*^e_a DI(T`(i`aNMW( )zM*L圥.(HKY46*d9X9L6tF*k )jldJJ\Q NM@!*\bCQ.R`a S1Sf]*Lq!L4HM  BE|6 %aXUD/ $"S mEdzF`(46*1Ssdj(c +)*yE4 :j:ZD:*\]L:&:9j c*V)*epEE|` R,dqD"s-*+57*`qX&@@$9 \ FG:{R;9WdL :`MEpRUk*\F*O9QfIS`AWAWS$&!LS$!pG*k1`C.lH46*Mt_5S+*1*`%Rk%pE@:` O:"@~.!p4L :j!9:M:{R;9WdS$ EcI4j]NMR,*!)*M@; L*;*jLXd$Hb}F*L*;e@9 J:j:i*HH4 Y*kR!L e@K`qND `!9W91\R*`p`8P O8!) 9 N!L *K%Y*F`jiNLV2J@@a ]NS`$NM@Bc7j:J:j`46*Mt_5S`L)*fO&a`ji!)UD .(A%W`jin*1)7 )9bC*tLAWAWS$&!L&`!1XUG 4eELH圥$INM@)@p`$` ` :`JeWb* aNLR1eEL M7 )a 7*^id 9 dJeWEZeELM $\ :j\ *%EL9XP!+bH7*`$` *9Q*$UD; NMSfd^.!\b (eZ*c&g IJ6c&M&].a_*LBH&@J:jLA%WL e@+mD.i*Edl;.*MX;8]FeLM ".R`q4"WY*%L$(UY*R`$,E]圥S5W`_\M9 +dP$\ep^\H 9(M,6,M`4g`\)t^FEX+NjLR`N*eH%W)\:E4 Se*" LrD `1LMWHNb* :`t^@%W!l(( 9@qB.!)6idteUU*" L]L:`4^e_KQ.R`)(@e@nYpm\+&1S9K(M ;1W)5Wd; 1TF;5S+&:8@NL k*`Nb* ;.(\1@SQ(E ( :zO*]e]dj@j@%Xl*`jG GXaX`R`r%WQD(t 9@qB.!E@XeMdk7j_.LNMR4MS:j\`$ji eR0c*:`nBK%H.(b ( +9Q`c l)e^1d; j_; Lj@Y*kR!L&*e'S$'9H5Rl*e'@NL'&-Q\HR)UDc )()e@Y(*]S)(l`09 dL!]jL'qQ*e'`qQ!j^]eSd*3Q*L9L*eH$*zgL +_*`\HySEH'^H|Hb* ,\F*_*LR`Y*`*!:yYp6&J0LR*S2.a `\ `c :@J]na *`Y*kR!L)j\)+ ji7 bqNdj](c*UL6Zse@%W(H4 +_*`'jE'SeZ*pUD RQ\)\ :eH&`b* LH)*`*ya 9I*jLa ]dj@S8*1*`8R`Q8`)gI*yd.$X(1(=)*mWXaWeE|M *)*(\*]N,7*.(|D *4gS$ e@%n!*Qa *`MSO1+n*\]( +7R1`L`ISNd *H *`t^j@K*H'*%HASnmFhF**\9Q*`;&eMSS$*)*ML +R1*LO*iW`*L c O.*1,r' N(I;.ReHx9Q(il):O MELRjU9We@Q*\*+*(p `RRd i``qFL `9MdpmWaMS*`b*8M K*H:y*+ :@j^ 6LM %Wc*)a*y9n}]Sd\\ 9@H:FD ^9 (WSC*|D` ue]Sn***:*`Ijpe_*` %W S$ :j`;  @Q8 Dd _ .d; %R*Yk*yE5StL+JLmWaMS*`b*8@.()eS%W*`WqNeW*4*`M7 aNLd*yE|rD 9QtL *WW*`KQ.R`*JJLc%LEN )eW)&n.c.a @Y*kR!\)*`jEL*s]@\f&JL DAWL`+4&gQ E4{*(}N!LM ;.*Li`%SESpM*LNM(j*`n*LI+W*`WADaS`)9tL6`)9tL *`Se*" ^`%W%(*HLE4  +qI*)*`;jLoQ@*y\ASgHCN4  +&d&!LM *(W0.+ k!CS1SM%LL :jH +c LaMEL )W n7.eMSq.()eS*\ \5SR1bjUEEL*pd'*y+J\mEX@H\R09S`'-(6S$ *; :] .(W1@jiJ8'tL'-(F$,5@Mx*^%W:l(`*k19 *c L \.a c*S$fTb;7(T`(@4F*`aQ`%WW.29 c*{-*ep!9I*`p}c*L<]M*_8`)+*f!%RR:)tLb%Ri;5S`-M!LM p;a *`1SE%<]S%WtL'*y+J\qNd *HHjQK8 *9dOY}W2VD ji%W*et `\^f6@%c O)*`jiQ *jM*LPJJ\ ` :pEH@\ ;NM@i*+57*@$fcM]S%@!n\xA%W5@j Q`M\ :jy.(aJE@)*MZ*`Fa :jL *9NMXSWL;*`KNM@F:k\(JeW*yqB*]j(79kd ` k%H圥.+;NM@U` ]eW*m_*\4$tLqD"s-*]:fDh&)R`,pjpeEp%:RfE PH`TVe_S0h$9 EH1Yg+*1*y*$mWaLx%D@%R*HEHQ*\;9EWqNE@Xe^keWi`4(!&49Q(*L2.!ji!xfMM*ji*`$; mW!`%aXUDO*k8!WaY}S@.+p]@MH`E4 +aSM@HMQb` y;5EL .(WaYS0R*;*e@Sg"jlcR1Gjl:kR.+ R9Wjld9RE4]:fD9@S8*%L1L*xdM*S$R(R`Q8]:fEW N(j_R`a$ td*j*H4 NM( :+]N!;9)jl*`5\M &d :i,3%LPj@;9Q.+;NM@" (%LM )9;.%pSeLIeNGS1StLP**`q&`yM*DIE|`  5\!4eXc LtL[JF9+*eL 9@a5Ww`=IQ tLqN-Q4eW*jkd:i@(!:jLWdj@c %X++@TaSE&`WSC*ceRd 9L(; %Wk(&cHn!%Rl*N(*9Wd &`JM*L +9Q`y&FL)(WSC*|D]3%L*sFL :`.H9Qj^%SdF!&`)*`SeWa 9Iji`$dK]eS`1G(!N( &`f1SNMW*`5ELP9@+)9w($!WVe_S1S&eS@.(\0}N!jl*`a$ :`a *`R*yE5WH7%H%NO1@qB.!)DM*_S0c %`$``ANM@H;5SeWOY}SN`\}D+!]*E.(]M aV*\L6L\)ML*i*_ ;8@9 NM(IeNGS1SO1KdR(+*I*H]Xd +9Q`O*\9W*`@DaS@.(p_5NN.!)*`a$9@:@9Lb*%H]:fDRse@H*LL*`)+jX.VLR4_-:`@1Ql*eHj@%SQ*_@4eS`4(!%a@N1Sa y1DaS`\; )9HIJ^eH*\e]d*'c sW%@,d\\DO&C *9*eLW4 NM(eTS$ \H;5@j6*\R9*jiNLeZ19:)e]*i( N;5@IWCS1S%Wd@.(q)jl]**9 d (M*_ kQk*x9 f.!L2^i*e|WM 2M8~.!bq( +6(LeM*eHNMe@*1( +&:8d **1"(R`&m+9`qQ!\i`%RO*^jd:j.*E.( ,]tEL :INMWa )E6 ; n%`XaW`E7%LL2SOSeW*qSL9@a4*'c \ji*lM %,69 *`B*:jLIXaWM @%H9Q1SEH7 *`mWNjL]mF*9 d)qW1@OWQ( c LE*\\{E *%Sj0`E%|c @a qWe^%\" EHS$ hsc W}S(j]1M*eL %R:)*\EGdj+E:NxdL *6&Mt\;6*9 *`:`%5NI@EhB&JELL, *; :*ipLM $*I5Sjp*3d9 d @a J^.!t+Mz\ :`E4p;BI!LL :j_G(h 1*eH.(l(:n!^`)1YH7%H4eS4e@n3W*`@NjL9 1SaNeqASE&`pc ^`%Wl*3j^c*d9@q%WEN`%E@1X!S*`q$] $;9*mWa FaSS$ 9@6%_* qL1\R*eLB:]SNjL)ji.(Bc&F'\" j_7M*dEHEHjiNLRUEYdk?F*.T:, 9@4( *1y;5Sk*1X!9G*`:@S'9QE*\+?e@Da(WSC @L +NjL**`:i*EH@\)`$R**̲X .H:*`*.1S%Xq)jle^$UES)c4]!`nrd(k-*y;4c %a@I;.Reԧ$+1d:kR.RjL\\ R,*i+tN*;:M,\ 9Q*`:`5f;5XRRqeO.a d 9X().eLsXc*c 'EL EH&`MXdR`2%S*`N*d*!ji*e!:`2c `MXd )e^1d; 2%S*`N*Wa )dk%R9 g!:_NL*n0 v;eW]*LaS` ȥc '@q%W.+ :c.1SS*` C 1XaSNL k*\mWcH4*%`c )eX`mWi eXF1!`rX )(Y(+F:`)9G*ep+*\4!*!:y*\p$S$ 9@*(**`jy*%R!g L\*eH'@1Mc 'H4 4!jinM*c %49I*:@j^LP :jQM*itL ]ZM19 *`Q-S*L9L]N!LO*j\ RfQ9 gS0bMSjy*lEX )(Y(+F:`)9G*ep+*\4!*!:y*\p$S$ 9@6&ML**`jy*%R!g L\*eH)GX`k1X!R?*j\D ]+d9 ]NL j4 4!LF*`L)*@0*d]S$!%4%X )(Y(+F:`ji:_Q*%%@%XR`*VgEX)`GP'@fRdjeLMa78*\d`5EL Xf5@`%W!9XcS3)d*N 4\ *`6:cȥS9`+a )d:c %4I!@4O*eQ0)`%&kiEjL*9 @$t!MnH7%HH!+:`$`!mWcH5EL 9 )*_Q(L圥:4Fg5*%^R*%L h X)*\ +&L 4)`9 d(l(!$NfF!Ls@EY eXd h&c9 WMZd*i (.!q%WG**Sgc '@+qB.!1Ye!!4()*`RML\!IM\ :WpeXd Q n!`$`!)(O%(]NN^feL (6jl*`i `Q*\圥]3jl@*X!*.!M7 NN\*sYpfDEHEHpP ph:dR`)*F l*`i +mWa GS1S@c*M ji i *i7;9c '@X*H\!jiJ^d&c'EHEȧ]3jl`OS`r44F`)*`RML\!51YeTHEH>Pe!pEXj_7M*dL :j\ 9 eSR0(\1SH5XE]3jl`qSL hP!@d&N`H4 `*'c%!!1M(%re@]FaS$+:h]Ry%H]RyG"&c'tܥ(( m@f`TJeW`N>E*]H]FE%Xf""sSBtr`9]k*LҨ"*]H]FE%Xf]RӺl" ĥV%VO%_f_nH٨y"4eͅ"!FI"dW&ܥ).**y**1S*ĥE̷%F@EFIJ%eR̥RLEVWa MWaIc&cUVWce d@EfO%m;*rAqr̥HѨ-R*MZWV:\LҨKyE˨L Х` Х( Хp ХME_aE_O_c_h Х$ Х:e_SY4&\ Хq4 &\ :{yV:)4ҪEd Qeܥ]F#%_K]F#%_y2JFܥR:neĥqL SqL F%qL ̥qL e%X"W.e%X"E9 d Х.M%_ee( yORWe( %$ʓ(4 a_%_LҨa_%_L( M*TaE_LҨ9:x9*}*a:V&%Pĥ//E/e///VRtxڻ%c&%c4EEj]]d̥]detex̥texe =HzF$aE&E7ҥJd̥aWRW>%E ӅSWde]%f3J$J$J$J4]NE4Rji 败SF4;(4̥;(4ee .bEF॒teEADS--p1.c*̥&*4 .ʥJSjܥ.7pn%^N%dElӅ  dХmD4ӧE%:eaiJE-^*%cܥͅG%UO%TaE_:u%@mDܥ SܥL:e_*i:^e_aViSE7xWNp׬f]E_.%KQe*%USf:yyV*_]RӺl]UD( 9*R>EFE Sjܥ5NWĥ.F:ll4R*L RJeͅ4|*e_bg*p( ԥj_el1l*Ӓ$jnttХƥXfizmo-0.7.10/libfizmo/src/test/advent.z5000644 000765 000024 00000425000 12606024314 021001 0ustar00chrenderstaff000000 000000 bbH 5@$961209Bk@#6.21 `odv@@ @ @ :@ V@ v@@@@@ @ 2K{J@@@8@i@@@ @!@@#@"$7@"%F"&s"'"("@<@^@.}@-@0@/@2@13#11D@u@@@769@8:@8; 8P>q=@@?A@?@D@CE8@@CFW@CtH@GIGUM@L2DX@|T @S/cBaXWZY\[7^c@]`H_o@!@9@@U@uj@il@@kn @@m$C`(Pr 1S}@@  8 X@  @ @ !!%!N@@!r!@!@!!@!@@"""9"W"}""""##$@#>#X#s####$,$N$p$$$%%&%K%v@%%%@%@& &5&I&d&@&&&@&@'@'+'?'Y@@'t'@''@'( @((4(l(((((()')>)S)k@))))**.*F*`**@**+ + +=@+a@+@@+@+@+@+@,,D@@,a@,v,@@,,@--@-2-A0-h---.+.f..//R//00>@0`@00001131C1T@ 1h  1@  1@@ 1@22+@2Q2B=HBk.EB]ӰBJc%)@ie`qB"TNepĥie`qUBV(Vyabepĥie`qUBZW]a(d1ie`qU BO)O;aqXd1ie`qU BahaaNe%ie`qU BVCVaNe+%ie`qU BVVabe%ie`qU BZ] abe+%ie`qUB^k]a!NEӰie`qUB``L,.4ie`qUBMNPSYaɨie`qUB:x*ie`qUBMX`#%n`c!^*+=Hpn!mdljidc!]FED:kR*C5:kR8C5%E\x+7(C56EQC56BSjSS@BM ccQ"P-OJI"H-G+BRAY^WqQD SX"ccaRKxK\ac7ҧ-/k"DQ́]aKYT]\`?]]JZEY^,cd4Y^WN$.-+,cd;Q!``VUPR8W]oJIZ`KTJJR\:1L^cdxPIH+GBRAY^W5ĥcdRKS=S-*a(, 1edcd[WlVa(NE.ͅfdcdRQdJDQBblcdЁ]fTx T\,$ R.JeW qWXcd܁XWW$QM[[&aY cd^dDRT'TTZVKdg.edcd^dERQY7Y@`-b^MZcDeW̥kR3bdaeERDRC5=TfReRnToT[KfbFF *^eDRсK0SPf*$*ܥeeceDS&K9aRJf*$%eeceDS+WK9URR%ce^S/P-J+I-H+G+BR%ceP-J-I-H+GB1ceP/O+J+I+H/GBA`c7(ҝIJ|^Y\YJ"NELc7(ҝIceQePeJ+I+H1G-BEq!b.cfDS4\|`lS4Ig%@*cfPS7J+I+H+G/BE .d *+cf4MN$`ZQJ"Hc** 2E41dSTcf9USNT%SSQRTQR&U^]R F-(2EcfCO3J6"*१684cfXLLLL]]PE@cf^J8I4qAWEcfp^fuESkK\a(;Ecf}OANc4p^ȥchXGCNchhVMLD1@2$i%chq^hxEQC5IBQVTxRnc]D^ȥPhDTLBJ p;chPhJhICDTLBJc %@Q`ncEchPhJPIhGPT\TLBJ%Jehch^hEQC5PBNN [RY"c&D]ɱEKLch^hUTaSTdMUK-cWKLchbP +M Q`F Q`N8chOpJQILHpGLDTg M Q`4M%ci!PSOPJRIPGS +M Q`4M%ci>IQHGS eh$(SSjܥciQJQI]HRGV"cWci]MCWM:*$*iEnidfikcifBU%F$S$nidfikcifRSHSBU F Q`eSSdLAӰficisOCNJ]ICH[GYDTkbfEci^iFT\LISPRRP@a2a;TxJTB4pLcEciPhHWG_`,:;eici^iEQC5WB[J4 SY4a(!HܥciGWV!k=\*7eici^iEQC5^BSSSXP +9*4ҝWciOSJSIW\(Qejci^iEQC5eBLY.ŨcjJbIaHYETDT$x ^cj YbH(,^cj(P_OC:iSR`fjcj2I_DTd!S@bBcqӦbcjBcb U7L(%bcjBcX MTxHC:`e:%bcjBcUbNa&x 9EbcjBcPv[8WSO[AV._>cjOYJmIi:p%cjQkPkJhbFF cjDTX \LL%cjPjOiexEcj\|\_kx^@^ȥckPIh'Xg^ckYKT]YKK]NN-F}D^ȥnk(ck)Rk3Bo.AEXŤnk(ck)Rk3OPJIqHsGpBo.AEXŨnk(ck)Rk3JpIsHrBo.AEXŬnk(ck)Rk3PxIqHuGBo.AEXŰnk(ck)Rk3POJpIvHwGqBo.AEXŴnk(ck)Rk3JyIuBo.AEXŸnk(ck)Rk3PyJtIrHzBo%F$S$%nidfikcifRsJsBU%F$S$EnidfikcifRsJsBU%F$S$enidfikcifRrOrBU.AEXżnk(ck)Rk3OuJtIzH{Bo.AEXnk(ck)Rk3PO{JuIyHzG}Bo.AEXĿnk(ck)Rk3JyH|GzBo%F$S$nidfikcifR{J{BU.AEX$nk(ck)Rk3P~JzIG}Bo%F$S$nidfikcifR}O}BU]@,ck7P=J}IHGHa(\1@"SckVDTLUkWQJSck]DTŁX _CQ_L%F$S$nidfikcifRIBURUE]jhe̥ckgOmJIG&ں9ckPOmJIHGDTq`!+ ҒckMKJIHDTI^@FckDT쁆JJTx +M Q`jecpJH-cWcpPL,"cqMIVqSj\^ȥcq8KJVDV *J\$5@a(,Sj\` eqdcqe^qmEQC5BOO_OV\=XM-($@^ȥcqwHc4M@dY^q^Uk]V&ej@WNcq^qEQC5BX;XX;Y!$4ĥcqP *1ҒcqPOHV1O "&ȥdVDV́QL}WJ2.c*M0(ĥcr^rEQC5BWQSFSFTx1$"]crPOD%EpcrROO*^ȥcrOJIḁ^rDV쁈[b.LM ]H*ycJ`,dUQjp*4$ޗ%ercr^rEVUGU>SS]B_;9%crJsDV:RO̥cs,HGcXUS%IN^ܥcsm^s~DWUUkORS^bO`u`l[:iSR`fscsJDW + _tcsRHDWRM^ft?ct2PO%@Q` ftgctFPNKW*DW]AYx]ɱEdWZctUWiSWlKY`b7ZWGf%ct^tFWo`6Kr"1@Q`^u)DWbdb[KMJa@%@Q` cu9NW*KDWR94ܥcuVJIR-cufPLKJ jheLq4pHpcuIHG ]FepMncuRPvHDW;jtE΅cva_YIAQJKY[OMU,b^شcv]]0IInP<1IecvYQ*TIS`~U\%JT R쨥cvځQLPYMJ_]*Q`-רcv큎YPMX PP[KB:R*x( +تcwQ]ST]S"JJ+^5^,^>^GK 4WSQ%WcwRJE*cwEKKKTY]\(UȫewNEQDWC5B]T]KY.O:Jc4M@cEcwQPOHGE+Rjt^FecwcQ*[S[eTT]V[\V ^d,]SҒcwoQOJI eLcw[J+YL*`EcwRJ'XcwNUbD1@ (kX$dWFWDWC5JaTx^P@L#2%S dX5cx{T%X]QDX>C5BL5T[/\QQ_L>.-dH(ҒnxB %-W*yH(%nxcxPRONMLKJIHGB %-W*yH(EnxcxPONMLKJIHGB %-W*yH(enxcxPONMLKJIHGB %-W*yH(nxcxPONMLKJIHGB %-W*yH(nxcxPONMLKJIHGB %-W*yH(nxcxPONMLKJIHGB %-W*yH(nxcxPONMLKJIHGB %-W*yH(nxcxPONMLKJIHGB %-W*yH(%nxcyPONMLKJIHGB %-W*yH(%nxcy PONMLKJIHGB %-W*yH(%nxcyPONMLKJIHGB%F$S$%ny"fikcy(RGBUIX`(L5@'Xcy5^yEUZbmZZPmS%0 jcySDX`U5\a)UkJFL.aeWXcy^yDXrJ=JFQNrLSYg*]cy^yDXvJ=JFb@WubIe(*nMEf*@BDEFHJKMNOPQSTVWXZ\^`bdefghNPS((((((((((((((ÈĈƈȈʈ̈ΈЈ҈ӈՈֈ׈؈ڈ܈ވ  !"#$&()*+,.02356789:;?ACLXYZabdehinxz|~‰ĉljʉ̉ΉH"KI5J7|K7L MJNRL L L L L OLL LLLLLLLPQLRSTY`p@  S8RR_@V _U_^_^RRRR^_SS^I 8I8\T T `(W$`l_pQ3P\+[OqVU ^ O `Q _: Q<Pd\4[ OzV^`Z`r`s`t`u`v`w`x`y`z`{`|`}AA"A,A0A4A8A9:;BW88Bb%ccBb%beBaBWfBWBWaef_^dg`Bb%5!DDDDDEEE$E'=\=^EEEGGGH#HIIIIJPJ]JJLXL\L`LMCMlMqMMNN8NRNNNNOOOO OOPBOOOO"OgO%O(O+O.O1O4O7O:O=O@P5OCOFOIOLOOOROUOwOOOOOP PSPMP[OXO[O^OOaOdP`IIHZZZIZsZmZZyZZ=PePjPtPPPxPPPPPPPPPPPQVQjQ|Q;v;EEJZZZZZZZZcZZZ.," E Eqӡk%mEAf%:C;j/kA;*y:e:x1ZaӰeh9S䥀iteܥxqWA. A%9 A9AAEAASA.ͅ(]S`eWXeWFLFO0F\Fc%Fk.QII^QFlW]ीW_Ŕ!$;&"&c%.c*Ӏ4"4Q%4Q%4pAx45WAf*f*fXE*ܥE*cA"%)eRG.ͅNE.ͅRTS!WGŔWLAX5XY^A ( gWA UY _ŔA !A e̥ (!NEӰ!:e!:x!MC!S!"A!*%!c%!TA"&H"*e"*唥A".H唥A".H*"4aEA"*"*ी"*4"\Ŕ"L"O"jS"H̥"T"c7"cQA"W "O%A"*唥A"""c"cW"%E"c&ĥ#WaXA#Wd̥#Wd#YA$$JC$LA$LA%F$%G]ؔ%JT%Q9E%Q9X%U]XԀ%Ue%X"EA%XfA%IY%J%J%C%A%d%gŔ% פA%V&A%^A%(A&,A&(&A&\&aEA&L&:l&0A&2&2&dA&qӳ&NA&TA&'Xd'XgŔ']e'_j̥'_jी'_j฀'_n᥀'NE((4(d(A)W9E)))`)7%)7*e**mS*G\ȨA*J\Ѥ*UgŔA*h_XI*t^T*y*唥A+j_Ŕ+j_ɛŀ+j_ٵӀ+IӨA+*+dA+eȔ+Fj+iػ*,j4,eSA-JA-J$A-JDA-WQX-A-] -_Ŕ-eJ̥-7%A-jꔥ-DA-(-+-(-cW-(-A.&b.." Ӏ.4R唥.4qW.A.&*A.A.הA.$.d..+.Hٺ.\._*e.(A.a.H.g唥A/H@A/QD/QG00(1YA1^aW1O%1(A2.c*Ӏ24qӰ2A2$2%S2(ה21E2PC2eE2eӰ2 2*e2F*2UEA2mE3QGŔ4P41Ӱ4'%5F&&ʥ5F&.5F\A5FoŔ5QTA5W545D551E51X55A6kA6$A6(6A6aE7LA7L(8:R*x:eI:h4:hEӨ:h]I:i;nF:x".:x*A:x9*I:yP:{:{*y:L;i;iE;iX;%;8<1I<=\*%=\*%S=\**=\*7=\*8?RTA?S@A^A^]ӰA^`A@AADAAEWA`ADD(DTDeW̥D1EEF,EFmEAEFmXEAE7%E7*E(E+jECEeSAEEf*E锥F@F0F@AFGG]ȚyGG]ț*AHH5ӨHEHXHEEH@HCHaۨH*8IEIFLIX`̨IX`̫CIY%I0I^IdJc*ܥJ`J^k%J(AKIKW%WAKWCŔKWKWlKK*+KeWLLALgŔMEMXdM(M+*eNNHєNeNeNeN"%CN(N9~CNOCOL1YOPPP)Q)GŔQ)G QeQkIQk*唥AQɐReIRjRyPR`RLARLXARMR:fŀR*y%S-*唥SYSYaɨASj\SeWTO.͘T4TAUF^%UJDAUWḁUWbU@AU(UFU(U(U+U*U*UV&!XCV&O%V&eEV4mWAV4mWV:1AV; AVDVeWV\AVxAV!VaSAVcAV/XVNCVMEAWQDAWS!AWW!EAWWF̥WX4AWYAWNWNрX[FE[Nd\&C\(\:\:ी]F$A]HRlC]I]Q(بA]Rी]RSjA]UDޔC]US旀]X*׀]Xd]Xf]5X]AY]*唥^$^@^C^CŔ^^,^H^(^*A^1^eӫC_GA_L_SA_X5Ӱ_XgŔ``Eӳ`(C`AaEEAaGŔaUEa]EKaa%a+Aa:ah唥AajUԀaEaF] AaQ,aXJAaYa[*ea[*ySa[*ĥa\*唥a\*a"a&a&a0aUEaUIaUXa]8a|ҔAa$Aa/%AaMEAaOŔadAa_%ak%AapAarasjCadAa(a)%aLamWa0Aa;aAaAaaeJ̥a)%bTAb&b&b**Ab**ͅb.!EAb.db.gb4dbFF%bFaAbJF%AbfAEbfAXbn-eAbtSͅbt]ӰbAb9%b(b_ŔAbebebeb^b^lb^bAbGSWb!Eb!Xb lb:lbi b Ab)_Ac&:唥c&: c&:c&Dـc&Dـc&Dـc&Fc&M%Ac&\c*Ec**%c4MEc4MXc7(Ҕc7(ҝIc7)Yc7Rlc:-ecQ-WXcQ.cQUޚcQUXcS&cU*CcXUSIccF4Ac*AcHAcMAce AdEYd(AdDd(deEAdgŔeQDAeSedee:唥eHeLeaEe"eLeNAe_*ee_>e_>e`eaEe(٪ne)EeSLeSAeJAeAe*CexffŔff!ीfgWAfgW%f!Af!ECfOCfO AfEf(f+f%S䥀fUEfF%gR.ͅgWLAgGjgO>gc%Agg*g;*g9ĥhjhSjܥAji*唥jiPjq;%jqQAjx"Ajx"%CjxdEj|\ՔAjk AlE^l;>lR唥l(mQmYmS%ӰmS*TmSRTmWmW9~CmWḁCn ХppdAp(Ap@ApDp!Ap*唥ɑp*1p(AqF\AqQDqQE qXdq^.ͅq^5ґqeEqAWq(q&q(AqWq4qdr>rLrLYrer"r"EreӰtwŔAxxyX{RKŔ|?[I'_aeiouAEIOAUC-AJN奌AJb奌A J(䥌xA JqX䥌lA LNe^A LNePA LbeBALbe4AHꥌ*AJ&̥AHeAHY = H}WХBKI5׏/-SXi؏ Bd AE`Wd/M7%Xd AGӤ-AHjeAH甌[AJeEOAJ.ܥCAJ-ۨ7AH݌-AJa[e!AJ)̷%A JMӨ A HSA J**SA JgjA Le_*eAL._*eAL-eJ̥ALaeJ̥ALa[*ySAL)7*eALM+*eBCc{W AJg>UAJe>IAJ.Ō=AJ-Ō1AJaŌ%ALa[*yAJ)̷> A GMӫ>X βX /X E  B EW X W CHҰTTHFbHp䥰bvJ+IӨSS|SJ:{*ya#F#ÏK] JHeE#ÏK]=J8#ÏK] JFW#ÏK]JƲҰe䥰a#Jz_ e#ÏK] JHeȥ#ÏK]=J8#ÏK] JFW#ÏK]JƲҰ%#ÏK]Ja#Ha#H襰#ÏK] JH- #ÏK]?J:#ÏK] JH #ÏK]JƲ-%a#JhE#ÏK]JJ-+#ÏK]CJ>#ÏK]JJ (॰#ÏK]JȲ-%H>x-AG`AOteMf&ХARS@4( 9IFAPS@4(`4A!`E`A$Hō`˳D8AG`ջAG`໰AG`뻰A Y; ;Ne &^:`5WA QLjT&A G`A G`A Yl][:`jS&(A[^`edec @"]HeIEAS-:pteMQ`;%ȥAGaAGa ALz_ eHAUQ%r4RM+jܲAGaAWh`4&>UFd4ٖEAYhec L:`q4JFEAGa#AYhec d@/=EAGa.AU:d̀/=TAGa8AHa?A[%LdM*_i- ORWEAYhec aJxi -:lEAGaGA Uh]SE.MeA!GaMA"GaVA##b@N]@qd/`&y ]K*4EA$Ga_A%GagA&[-%cNmW8)2naEȥA'GaoA(+hec aJ/`&y /=z eTISA)Ga{A*6JtE /=$-S AHA+OteMf&ХA,[-*(RjDlDEEХA-TP PS@IFL!A.T9 4h(Ӗ` A/GaA0+R@&z%aH#ʲ/=H40A1+ &z%aH#ʲ/=H40A2Aja]@4c 2CHꥌ 5&̥/=$yCEौbA3GaA47g(zH\ ^4`f]I;D+ddȥA5[[((]X`` E]-ATVm:l.1AXq/S A\"4aI$^9.ME7%nAXq/RW>TAZ*UgiSn%09俌8A q/S $M *UgAHa A\Vm:l.1$)0A RVm:l.A PNMr̥A Tq/A JR̥A PRLk *UŌAJ"4IAR"4aI$Q%sAN$ JcAXq/RW>IANO&:ǹ9AJ`-AP`R`fAJ`AK`:x9*A=-AR-(RJO%%AJIFAL;jx% AGa@/yEAA#>Ï>K]>J>N-S  @ - aJfQRl4/=EAC#>Ï>K]>J>N-S  @ - aJf@/=EA\//LdlDEEȥA X/=/LdUSEA 9#ÏK]JN-+bꀥ -%4&>_&*EA 9#ÏK]JN-+bꀥ -%-) :`V&!EȥA GaλA &k9:l/==4FA@^ȿA-A;#ÏK]JO/=ר /=؀7(x *EAWh jLd /yEAW:d̀/=AK7R)%ȥA-A9#ÏK]JL-+فسS.gS*G"4aIEA=#ÏK]JRd5^*e% ddbe%-*tAKJ)%ȥA-A?h)I4E.̀/=.(S@ /4T,RJeM*8AGaֻA'g.MeM/=j)5m@N5ӰAUh-( +*gȥAY:d̀/,A]-*tT]@^H/=EAI4MEȥA[h /=/=?EA-A=h)I4E.̀/=.(S@ /fb+-:lQaEȥAX/LdRy-:lAV/=/S A!hF MJ$P /, :AGa޻AY:d̀/,A]-*tT]@^H/=EAI4MEȥA [h /=/=?EA_-AX/=LdRy-:lAV/=/S A\/=/RW>]F'ȥAGa廰Aw-AYh]SE.̀/=EAUhi@/=a컰AEAIӀ/=@ԏԏ#ÏFN] -B+?EEA#-A7#ÏK]JP-+& - &be bYAZ/SFAI-(RJO%ȥAC#ÏK]JP-S 4L - &be aJHP ; e4"ȥAShN4/=EA$-A7#ÏK]JP-+& - &be b`AX/4" $d5@J*yEA_n_hF 4(PF/=EAC#ÏK]JP-S 4L - &be aJHP ; e4"ȥAShQ/=EA%Q-A^/tdRJeMzLq!ȥAR/]F'ReȥAUhq١/=EA&Q-A^/tdRJeMzLq!ȥAR/]F'QkEAUhq١/=A'-A\/tdRJeMzLUSEA9#ÏK]JN-+aJ  *Xf@FAIEAR/]F'R̲A]hUS/=`][(:l@ԏ#ÏFN] -B+?EIN5ӰEAShUS/=EA(O-A\/tdRJeMzLFAT/]F'"4aIEAShF/=EA)8-AYh]@Ǹ/yEAUh /=EA*n-AWhec qF/yAYh]@NE.̀/yA]h]@7(x(:l/yAShk `/=EA+9-AV/G:j%EEȥAYh /=@td%ȥ,-Y- p]f9DiXe̲A.GbfA/GbmA0GbuA1U- aJKjs) c_ȥA2W *z\:i-( JEA3Q  R(ȥA4YhIQDS-:lS+))%ȥA5Wh (teMjjv#*A6Yh(S-:lS+))%ȥA7Q-AW *z\ i`PSWaQAWh )QteMjjv#*AWh5@4D *5EA8Gb}A9!g.̀/yUj)5m@Ef*EA:Gb;GbA?S`&R41بA@GbAAI;*EABGbACGbADGbAE]hec k /QG4/yEAFWh!+jteMeAGYt`zLd /yEAH!t`zLd /y4{-:lEAIWhj`-JE0 R; EAJF-A]dS@Ld R):l/yEA_hR%j4kp:l/=EKLMu-A9#ÏK]JN-S ר ؀-) :`V&!EȥAQh]@jf*4EAUteMP:` *xEAGbAN=-AGb»AU-%cN%):EAUtd4xS@ EAO8-AW *z\ i`PSWaQAWh!+jteMeರAPZ-AIzeѨAGbȻAQ:-AYh04j*+qEEȥAW-;Vn+N]F#.ReȥRSQ-*tV>EATQteM;R``ѨAUWja10`:f*EAVGbһAWM.I@TaXEAXGbڻAYMb/=EQQQAI e f'_IeT'_f B XBB _]'9BB _]'98BB _]'9x'_'_/tbɏbHcɏbb ^ T'_AEcBB _]+9/!Aeĕ^BB _]+98eBB _]+9xfT'_4)_/"-9N B@,+_BB@_]?B+=e%_x%_Q[ wtbut+_*_u'_t&_ b=tBBy_]xB/<2t*_+"E'_ AR8 B,BB_]/8*_ RAP "E;x; "Q;x; GA_]@ ; "E;x;[A_]@ ; BC bVTBB _]@ B/;T/4,T/4: % b S+_ /` H1_+=PB_+=PBJ/`&UaDzU -H#/&v#I ~Ob-4 H V 0QI\GOI\I\aH#Qy_]x<LQu BxCBBy_]x/<BBy_]x B+;x1I\K BxCBBy_]x /;xBBy_]xB+<'8HBCI#HÏHN]H -HQ! d2JF\^*x+:^jBI-5AX&_;&_>&_?- -3 '_ˊIC- n g)B 'E %_%_&_ &aH#' cԈ3LE/[Ō V :UALQ  i }))B#I } 'E LQ# Ï K] J $# Ï K] J Q VaQH/5 Ta #]-4 I\QI\LQ -H /&v IBC!l#4\/=HӀ/=I'_ˊIWJAJOaH# V J>'_ˊ5_+_'_UOyOzBC3l:lt\5@mW/`&T.MX] V WT c B XBB _]'9BB _]'98BB _]'9x/"BCBCûn.@;O T _ Z [ M N@_]?8 m UTOd n  XBXBX _]X/9XA ~BXBX _]X/98XAĕBXBX _]X/98XABXBX _]X/9xXAE BXBX _]X/9xXpAkBCײ df:l4Rp(XBXBX _]X/98XA*BXBX _]X/98XAGXBXBX _]X/98XABXBX _]X/9xXcUXBB _]B/9x3a))BIH BCe d;h) f3SS f*e 'S]Er_ [Jc%]A SYZG.V*tji O*UB /=  'EB -d FX w A^IAbE w T _ Z [ M N@_]?8 UT XBXBX _]X #8X ~UXBB _]B/9 BXBX _]X/9XiBC/ q:j4ASX 濈/; A  }/! UX*'kef  8Rԏ 'k } VAeAeFAf Ė^ ZB H P 'IA S[H-\O-]O[ A E TZ*_ ZBXBX _]X+8X BCU[f*`]Xj9) ` 'S]Er_ [Jc%] [,GW(;-W^>@UA McH!X` 'E Eόcr3 _ _ _ LL UT B CB B _] /8 B B _] B+8 -YX UWBZ"'_X'_/. -U 2BZ"'_X'_/. -U  AwS'_aHH VBC۲l:j! c j1x)%] _ϲ/0_圥&_b&_Zc0AZ+'_'_&_&_A[K-\-\]-]CZY'_B'_/5TYaH#T R B,+_BB_]B+8%_%_&_TQTAH-氕XcUVE-VUAUcUWE-WUAwIAUE7-UVaH#QCH--3MMLH3M/4FN$_ %_%_-\M&_H-PuPTQ/[UŌ1-y{-z|AULQ AU_Q B CB B _] /8 B B _] B+8 -XY0EAUIQAULQ-AUIQAULQ -AUIQ!AUIQ"AU IQ#AU IQ$AU IQ%AU IQ&AU IQ'AUYzLQ# Q(AUIQ)AUJQ*lAUWAkdLQ+ Q,AUT H-VWIc3_ _ _ LcF /4,/4,bN%_ 3I\QI\MU/4,Տ;xcH w/4,Տ;xb"BBy_]x'< "E;x;  V#ÏFN] -Da#HAD#ÏFN] -#ÏK]JJ#ÏK]J2#ÏK]BJ=#ÏK]*J%#ÏFN] -[ n o p q t rOs u&cC 4   TA_]@=cBBA_]@/=a TBBA_]@B/= n tTBBA_]@B/=issRTBBA_]@B/=-AIHooAIHoo/5rrE rA FHooFHo oIWlWlL n HooIwO2OOKV n  pdAwE wHoov.*/=&AH n CV q n -pUuHooA[4 VVVVĖKCpGD#ÏK]J#ÏI]J@bSRQAbZBB _]/9xaDBB _]/9'_I EBB _]/9xaDBB _]/9A/BB _]/9'_I? g G-Ag-AU/4F3M(BC#[ b!D`5@ORWTBC͍b濈-M-OA8迈/4FF UBC۲[ ORW؀-OASbRSZAbQE }A -PTBB _]B/98A6TBB _]B/9A= 4 T+'7斈uPQQCbSRQ--P3OO^JCQF3O-&A'_Iñcl_7bZ^2-_X-`/4/'BXBX _]XB+8X_E/4/'BXBX _]XB+8X3/4/'BXBX _]XB+8XaC+'7ñAVBC͍bA*-~ ~BC͍bAH  AL4g  AH-g - AE   aBC߲[=Hd;wR@r濈3OyOz/5n-y-za TA_]@=c*BBA_]@/=aE-{y-|z U U}VZH-y-z# v- /&-U-AC@_]?8BCōb*)BIH'DUtˏ&- 0UwBCC^[d$+:^j/=c@_]?8 Tc `*yBB@_]?/8/=BB@_]?/8圥EdS4@ AӠ H @_]?8 @_]?8Tc T (BB@_]?/8/0%BB@_]?/8/0BC1[J]̀u jp#84-$MXaNtˏ&- AQ/'(H U  H- 6 /0/0BC![HMӰ/=eEd *)BHI'DUtˏ&- 0U#ÏFN] -aH8ARK- U&-TBC#[F:l=H/=t\S]- t3IIIKOKLBC![ "MHe(/`&]H UKOKF5 _@_]?8@_]?8 BC![FA0+Ed ^/=  a _ -m"AnIoBpdRCpN l-kp U vAqK v-  BClSS4HL1)  r濈岀naJA0M*-;*=HdIoDzS-IoŲIoDzeIoɲV:\рIoDzEـIo Dzjq rβS*/=rORWO*$ApdH1pJd: GL`,J`saJA0 )nM(#% - *1uBCݲl Hɨ濄Fe +]tEcXA@_]? 9c13III L_ _ _ KOKAi A]@_]? 9CR/,A*aī_E-_XBXBX _]X+8XcEALQ- Q.- cB B @_] ? /:x a-5B B @_] ? /:x aǕ B B @_] ? /9 B B @_] ? /:x CJ/=/<UbE`UaH`,`G Bx"BBy_]x'<2 "Q<2<  _]@<IwO2OOKA@_]?8 bWtB?NBB@_]? /9TtBB@_]?B+8t@_]?B8Q/1'_I!!T[VpKQraD4;x<2'/4,Տ;xy_]x<2Ty_]x ;x/;xU/;xtbu_&_ b]4BBy_]xB/<2tBBy_]x BB+;xtUBBy_]x B';x y_]x ;xty_]x B;xy_]x ;xUy_]x ;xb>y_]x ;xy_]x B;x'ALQ0 Q1 Bx"BBy_]x'<2 "Q<2<  _]@<'_I!4;x<2'_-_bXBB _]/8E{y_]x ;x4O;x +_*_BBy_]x B';x BC+cBB _]/8 _]@<BB _]/8BHBB _]/8'#BB _]/8/5 T _] =cTBB _] B/=BB _]/8aBB _] /= _]@B<BC;la0^SS _]@</`&] BB _]/8Տ'/4 _]@B<BC?la0]USeL _]@</`&] _]@</;xo _]@</`&?'_-tbPTBBy_]x B/;xBBy_]x B+;xtUy_]x B;xXy_]x ;x4O;x +_*_BBy_]x B';x y_]x<2bTBBy_]xB/<2BBy_]x B+;xO;x +_*_y_]x ;xAxERBx"BBy_]x ';x ݋' BCύc濄O* 岀n:i)nM(zIoDzS-IoŲIoDzeIoɲV:\рIoDzEـIo Dzjq rβS*/=rORWO*$ApdH1pJd: GL`,J`s%K:ne@P)U @_]? 9 cBB@_]? /9BB@_]? +:/&vA+#ÏFN] -aHG-AF/&vHa;aH6#ÏK]J#ÏK]JǕ-A+#ÏFN] -aHG-qd@o`e+ R)  bH   bBB@_]? /9#ÏFN] - IoaHFT-IoaIFT-Io#ÏK] J FT-Io #ÏK]J T-rarFT-b}BCYBB@_]? /9/=BB@_]? /9`/=cOBB@_]? #9M #ÏK]J 2aHItaIIt JAT '[t6/4BB _] B/=isĕBB@_]? /:tBB@_]? B+:BCBB@_]? /9/=BB@_]? /9`/=BB@_]? /::y৕ bBB@_]? /9UaG-bTBB@_]? B/9BB@_]? B+9TBB@_]? B/:BB@_]? B+:f," O bOBB@_]? /9B'BB@_]? /:cH--BCcBHcWYc 3JBB@_]? /9/=BB@_]? /9圥BEBB@_]? /9BB@_]? #9OO bNBB@_]? /:aGOc -BB@_]? /9 a#ÏFN] -A#ÏFN] -A#ÏN] -Q0&#ÏN] -Q0j#ÏN] -Q0#ÏN] -Q0a@OD-E-F-'80-#ÏN] -R-#ÏN] -RŤW#ÏN] -R-#ÏN] -RŤW b. b\+_+_aE   b. b\+_+_aE  Ѱ!-/jP/[G/`& -bXnBB _]/8EE` K`,`.AK`,`!'Տ'/4/`&/= -~-~3 ayK-{y-|z -H#ÏFN] -%#ÏFN] -#ÏK]JTU+3AE  cUDU@_]?8A?F L c)BB@_]?/8a֕BB@_]?+8@_]?8@_]?8  cBB@_]?/8a}-cPTBB@_]?B/8BB@_]?B+8@_]?B8Z  @_]?8 cYBB@_]?/8#ÏK]--BB0]j/0Cg>Bg19Ug#ÏK]!-BB0]j->gVUVU+_BB _]@ BB+;+_BB _]@ B+; }X`I/QZ[n ce']-U#ÏFN] -,#ÏFN] -']-/2~ ~AHK/[HAA\d/1dAI&2pd7#ÏK]J#ÏK] JI*2*2p7#ÏK]J#ÏK] JI*2&2pk*2HH#HÏHFHN]H -H#ÏK]J#ÏK]NJI#HÏHFHN]H -H#HÏHFHN]H -H*2#ÏK]J#ÏK]J#ÏK]JY#ÏK]J}/2-/3 -}-EBC?l/=e]Fb}$=E(=F-}A_#ÏN] -QCBC%lRx9*]0(dKRt/=EI'8EA_#ÏN] -QCBC%lRx9*]0(dy*./=EI'8ErAU#ÏN] -R,CBC#lRx9*]0  jt/='8,ALaEE F AHzE-E-}nRaIN}KA2p#ÏFN] -B0#ÏFN] -B*2-аAIadE}/2zcI-3ALa#H'2B/B*BB _] /=aH'2-/3C Cu\au-u/3CH-u&-#ÏFN] -Ba/1AI*2p#ÏN] -R-w'_+=PC4'8 F#ÏN] -RŤ- 6bU+_&2BU&2AO/9AE BCٲ(4;-.g/1FPBCˍc]gbcK- 96BA b)BB@_]? /9a迄BB@_]? B+9BCղ(4%*$P;BC%_̀/= r濈 xc"n xp'2BCѲ(5I#ÏN] -Q0pOD-'80CVtDFHxxIx!vH nK n o pHoopE pdBCղ(5I圥+2EOD3ALa#H B/B*BB _] /=aH c-/[BBC۲(SSgWMIBDCH-&U+3Qn ODB= '_Itx3U+3ݕ'_Ithxx3---4 -GGBī5-G+\+\WU c+_a+\+\WU c+_a b9+_4BBy_]xBB+<2y_]x<2"E<2< _]@<3U}VZC _] = Tc,BB _] /=aGT'_IA_]@ ;cEVUBB _]@ /;^VUBBA_]@ /;BBy_]x B/;xA,GOLA.GO_ A_]@ ;cG3VTBBA_]@ B/;/;xVBBA_]@ B/; --3-/=&BīVTBBA_]@ /;ԏ;xUBBA_]@ B/;+[īBOAE dAE  AE   U c+_ A 0H _A 1H UA 2H KA 3H AA 4H 7A 5H -A 6H #A 7H A 8H A 9H v tW ~CGO'#ÏI]JA#ÏK]J #ÏK] JE #ÏK] JE #ÏK] JE NH  AFTAFT#ÏK] JFT_TuW 6 _Tt'_ c+_*_y_]x ;xy_]x ;xc]y_]x ;xTcPUBBy_]x B/;xBBy_]x B+;xBBy_]x +;xy_]x ;xy_]x ;xbZO;x +_*_Q _] =WA#ĕJQ  T _] =c%BB _] /=/`& TBB _] B/=KQ Q/=UbE`UaH`,`RA#"%`&U} Q-# #/=-#E T _] =cQBB _] /=a+TBB _] B+== T _] =cTBB _] /=a.TBB _] B/=/5a 5hSa 5hRa 5hR---a#C5/4BB _] B/= T _] =c`TBB _] B/=i*TBB _] B+=}5S-5R-5R-_2_I8&`y_]x ;xxy_]x<2xy_]x<xA_]@ ;@A_]@<@ & #-H#_-Y-+_J##ÏFN] -%#ÏFN] --&##Ï#F#N]# -#B7'_w '_#ÏFK] f#] Aŏ=`Dj##Ï#F#N]# -#/9z%%H-& 8 Cd---$55S5R5RaA E9Z-_]7_]7_]7_]7 J[H7_]7;;[\_]7_]7_]B7_]7A;[H ; ;A;QK_]7a#(aH##_]7H-H# ;SA;Z_]7a#|aH#w_]7H_]7_]B7_]7# ;;SQRE-M\ K-SR R < =_]7B_]7\-> =ARH8'JŌ$I#[JA$ŏ[$E(E*A$IQA$IQC$K[(E*圧E9N7Bt H5؏I9 b{BB _]/7Wɏ/=ɏʲ$ʓ7e*qٴ#ÏN] -Q(:^x4 b$ðBB _]/7vɏɏ'8+^#ÏN] -Q(P/8'8*-#ÏN] -Q(U&_(a$ð } /2/&v#)1u# }$ð[$ð9a$ð8'-;->-?-;->-?I9/:JI8cK;E7-;->-? _G;Q O;xвeN/:>?в$) /:?EAW.H<c&eR*y/!-eA qEL f*`ORWA-fAJN̥AJ5QyAJKQŌmALKQeͪ)_ANKQeu %OANKQeOE?AL":E1ALb!ĥ#AJORWA Jf AGD̉iAP/`&fWAXNL^eӨf=AJ/:f1AZaUE=k.MEfAQk.MEf@BB _]/9A\BB _]/9'_IŲ@BB _]/9/;>/:bcɲmWE'_>IGcd'_>IW'_>5_+_'_jDzIY_ T'_b55V T+_aY6 tT/`&S4tRE+ȥCV/";O>E-> ']-+]->Ǖ-ÏŌAM/= =Hd/=> >#>Ï>F>N]> ->/Ӏ#>Ï>F>N]> ->/=%C4D ']-+]->/=ÏŌۻ 0  b9#>Ï>K]>!->-BB0]j>E ƠL b>#>Ï>K]>&->-BB0]j>J/:']->ð _2 c+\>͠L;- /[+\> 6b+\>+_AP/`&w)-(Hj-Ldh%WAHMAH%C/^J/=#AP%/`,%AMlEH\e__!UU -B ?_AJ/=La'J/=/='_I8CL\o`,`o`,`C?SCLoEo`,`+\_']1CVt#ÏN] -R1+_/`,ð/</4BBB FTBB _] />Vt6 />T+_+_a NJ_]>O>۠/=$/<?>/6t+_/`,ð/<I`,`/^ATrk.@AXs]0/`,%>A^qEL P)zHa#I`,`n0#ÏN] -R/%8/A#ÏN] -R.%8.A/`2-n n#ÏK]JMOn/<']%%8%/<-n'Y TcTBB)_](/>Ya.TBB)_](B/>Y'_I='_+_aCBGBðBBEɏɏcCE*EH`9`,`9`<`,`<EF@_ɏ* ORW BS_/`Mt^@<=>?8`,`n%=`CIieWVeW׏E؏__/`@1eWVeW_*:_/`._aW8zH`,`l(@._*e(EE*-AHcm*A$cu/[ Q`%/= A(c|/[ Ed,/= A^c i SQ$(M(ة%A*=Hd/= 4te(EKdR>AX-(# %/=cqAHcgA KcZA HcPA ,-(R/= 4t%X"W.Red^*!A HcA HcɌ M]V&:jE*#ÏFN] -BC,)#ÏN] -Qa,Ōɏ+\#ÏK]JŌɏ+3#ÏK]J#ÏK] JEPI+ AI+#ÏK]J#ÏK]J#ÏK]JY#ÏK]J#ÏFN] -B/>8@#ÏFN] -B/>8@I+#ÏK]J#ÏK]J#ÏK]J#ÏK]J#ÏK]J #ÏK]J #ÏK]J #ÏK]J +0#ÏFN] -B#ÏFN] -B#ÏK]Qa,#ÏFN] -B'_J)#ÏFN] -B'_JCBϒB+_JBϒB+_J-##ÏFN] -Bu#ÏN] -Q-N#ÏFN] -BK#ÏN] -Qa&#ÏFN] -B#ÏFN] -B##ÏFN] -B#ÏN] -Qal#ÏFN] -+>#ÏFN] -#ÏFK]BjKjC-B ?#ÏFN] -#ÏFK]BaH/>#ÏFN] -#ÏFK]B-+ /+?lC#ÏFN] -#ÏFK]BaH/>#ÏFN] -#ÏFK]Bɏ+B>#ÏK]J&#ÏFN] -Bɏ+U#ÏK]J#ÏK]+J&#ÏFN] -BX/:x/9-  +> :tB1)_#ÏN] -Qĕɏ+GA"#ÏK]J`,``,`I+ʲ` Տ++tTBEc -  +> b+_*_ )_ +>  T +>  b |+_ n#ÏN] -QJ# Ï N] - Q&+>S A[+_ T*_ *_ v < - c +_a5+_aΕ+> +_ H #ÏN] -Q,U#ÏN] -Q/8(#ÏN] -QaD#ÏN] -Q-& -  B+_a5+_aΕ+> #ÏN] -Q,#ÏN] -QaG+>  F#ÏN] -Q# Ï N] - QaŌ,#ÏN] -Q/8 -  .- - b #ÏN] -Q# Ï N] - Qas +_ a 5 +_ aΕ +>  #ÏN] -Q# Ï N] - QaD.GA.E1I+t/6/??A c b .Vt +_t /=$ #ÏN] -Q/`,I+ŲI+Dz- +A  0-Et/F'8AEc,-.#ÏN] -Q-,--/*?l/.-,A OI Ų 0-Et/F'8I I+C-+ #ÏN] -Q-5*BAE+_A,ɏ+/=ɏ+/=/</ɏ++_& c #ÏN] -Q,U#ÏN] -Q/8(#ÏN] -QaD#ÏN] -Q-U -  +> c#ÏN] -Q,#ÏN] -QaGK+> F#ÏN] -Q#ÏN] -QaŌ#ÏN] -Q/8kI+t/6/??A-  +>  G#ÏN] -Q# Ï N] - Qa/=$ #ÏN] -Q/`,I+ŲI+Dz- +A 0-Et/F'8AEc,-.#ÏN] -Q-,--/*?l/.-,AOI Ų 0-Et/F'8I I+C-+ #ÏN] -Q-Cu*BAEPɏ+/=ɏ+/=/<*B<I+UaH`,`UbE`XI+t/6/??I+Z#ÏN] -Q6 0%8A&I+H`,`E`I+ûI+. #ÏK]"J #ÏK]J T#ÏK]"J#ÏK]JT#ÏK]^JY#ÏK]J#ÏK]/J*#ÏFN] -BFTAJQAJQAJQAJQAJQAJQAJQI+#ÏN] -Q 0'8I+û#ÏK]+J &#ÏK]JOQ F#ÏK]J MQ  #ÏK]JMQ  #ÏK]!J#ÏK]JAK`,` Q #ÏK]AJ<#ÏFN] -BMQ  Q D#ÏK])J $#ÏK]J MQ Q U#ÏFN] -B0#ÏK]JYAMQ QAEɏ+W#ÏFN]  - I-#ÏFN] -B #ÏFN] -B_#ÏK]J#ÏK]JǕ-#ÏFK] f] I+ CTI+Q I+C#ÏK]RJMI+BI+@Q Q#ÏK]JK`,``,` #ÏK]J|#ÏK]J#ÏK]RJMI+BI+@Q Q#ÏK]JK`,``,` A4I+,C#ÏK]JK`,``,`I+ûAS#ÏFN] -B,-. , - .T*?l.-,I+@Ų3 4-6p/`,p']-'[E/`,Q4O;xÏ>K]>f>#/F>A8uA-RSARA@Q#>Ï>F>N]> ->#ÏK]'J"#ÏK]JQ>a?Q>#ÏK]JKQ/F>A ;8uA ;8uAA@Q>a>#JQ##Ï#F#N]# -##>Ï>K]>f>KQ>#>Ï>K]>f>#Q>#>Ï>K]>BJ>=Q>8)>#>Ï>K]>J>Y#>Ï>K]>f>###Ï#F#N]# -#+_J>8uAA@Q> BA?##Ï#K]# f#?I8>#>Ï>F>N]> ->a#Q>+F$>?a>KQ>/F?ða?O;'8? ; ;#?Ï?K]?J?Q?a#JQ#>Ï>K]>,J>'Q>8)>#>Ï>K]>J>C'8?-#?Ï?F?N] ? -? IbQ?+_J>?8uACa?O;'8? ; ;A@CAKJQQ> BA?##Ï#K]# f#?I8>#>Ï>F>N]> ->a#Q>+F$>?a>KQ>/F?ða?PO;'8? ; ;#?Ï?K]?'J?"#?Ï?K]?J?Q?#?Ï?K]?J?Q?#>Ï>K]>,J>'Q>8)>#>Ï>K]>J>C'8?-#?Ï?F?N] ? -? IbQ?+_J>?8uAa?O;'8? ; ;A@AKKQ>Q >#>Ï>K]>f>#/F>ð#?Ï?K]?J?J8>?A?I8>8>? ?Ia>?JQ/F>ð#>Ï>K]>J>Q>#>Ï>K]>J>Q>A?Z#?Ï?K]?J?B#?Ï?K]?J?Q?#?Ï?K]?J?Q?#>Ï>F>N]> ->B#>Ï>F>N] > -> I-KQ>#ÏFN] -B /F> #>Ï>K]>J> #>Ï>K]>J> A?N#?Ï?K]?J?6#?Ï?K]?J? #?Ï?K]?J? E Ō@J/=8]?- #>Ï>F>N]> ->a#Q>a?#KQ>'8?@Q?8?>#>Ï>F>N]> ->a#Q>a?#I8 >'8?@Q?8?>#>Ï>K]>J>#>Ï>K]> F>I8>##Ï#K]#f#>KQ>#>Ï>K]>J>Q>#>Ï>K]>'J>"#>Ï>K]>J>Q>#>Ï>F>N]> ->##Ï#F#N]# -#au+F$#>#KQ>##Ï#K]#f#z##Ï#F#N]# -#-@#ÏFN] -aFa>Q @8-@##Ï#K]#f#Cr##Ï#K]#f#>C#>Ï>K]>f>#>Ï>F>N]> ->#ÏFN] -a%#ÏFN] -Q-@ @8-@##Ï#K]#f#ð8>+_J#>8uAA@Q>/Kn>##Ï#F#N]# -#a>H8Q>##Ï#F#N]# -#aAba&]#ÏN] -Q*A,#&Ï&N]& -&Q8Q#ÏK]'J"#ÏK]JQ#ÏFN] -+_J#8uAA@QLQ8?##?Ï?K]?F?/F?ð- ##Ï#F#N]# -#AaLAUa&P-AE-&'8A-A(-#ÏFN] - IQ#>Ï>N]> ->Q-/8AI'8>+[/8AI/`,AM+8AƠ,#ÏN] -Q&'8&#ÏK]{Jv#ÏK]JJQ#ÏK]J%A>KQA>KQQ'8KQA-K+_J#+_J-Dj/9z- %AHZ$A-&  %8uAA@L##Ï#F#N]# -#a#ÏFN] -B\#ÏK]J#ÏK]J #ÏFK] f] Q##Ï#F#N]# -#Fa'Aa#ÏFN] -#ÏI]JA #ÏFN] -B1'_#ÏFK] f]  #ÏFN] -B#ÏK]J/KS/5#ÏK]J%'_w  #ÏK]J#ÏK]1J,#ÏK]JU']  #ÏK]J#ÏK]1J,#ÏK]J']  #ÏK]1J,#ÏK]J U']! ! A#ÏK].J)#ÏK]J ']" " #ÏK]2J -#ÏN] -Q$GA#ÏN] -Q$'8$ '_`+[U+8 '_#ÏK]0J+#ÏFN] -B/K&C#ÏK]0J+#ÏFN] -B/K&#ÏFK] f] 6CÏ>N]> ->Q#-H#>Ï>K]> J>I8">#>Ï>K]>J>JQ >Q >'8>##>Ï>K]> J>IQ >8uAAJQ!Q!AKQ">/F>ð#>Ï>F>N]> ->B\#ÏK]J#ÏK]J #ÏFK] f>] #>Ï>K]>J>WKQ">Q">#>Ï>K]>J>Q">#>Ï>K]>J>"#>Ï>K]>J>Q">8uA#>Ï>F>N] > -> I-KQ">Q">/F>ð#>Ï>K]>J> Q#>#>Ï>K]>J> Q#>#>Ï>N]> ->Qa?Q#?'_> 8uAA@Q#>/F>ð#>Ï>K]>J> Q$>#>Ï>K]>J> KQ$>#>Ï>K]>J>KQ$>#>Ï>N]> ->Qa?Q$?'_w> 8uAA@Q$>/F>ð#>Ï>K]>J>Q%>#>Ï>K]>J> KQ%>'_w> 8uAA@Q%>/F>ð#>Ï>K]>J>Q&>#>Ï>K]>J> Q&>'_> 8uAA@Q&>/F>ð#>Ï>K]>J>Q'>#>Ï>K]>J> KQ'>#>Ï>K]>J>KQ'>'_w>8uAA@#>Ï>K]>VJ>Q#>Ï>K]>J>9#>Ï>F>N]> ->B+F;>#KQ'>Q'>/F>ð#>Ï>K]>J>Q(>#>Ï>K]>J>Q(>'_>8uAA@Q(>/F>ð#>Ï>K]>J>Q)>'_>8uAA@Q)>/F>ð#>Ï>K]>J>Q*>#>Ï>F>N]> ->a#Q*>#>Ï>K]>J>KQ*>'_w>8uAA@Q*>/F>ð#>Ï>K]>J>Q+>#>Ï>K]>BJ>=Q>8)>#>Ï>K]>J>Y#>Ï>K]>f>#/_h>8uAA@Q+>Q,Q-Q.>Q/>Q0>/F>ð'8>1@Q1>Q3>Q4>Q5>Q6>Q8>Q9>Q:>Q;>Q<>Q=>Q>>Q?>Q@>QA>QC>QD>QE>QF>QG>QH>QI>QT>QU>QV>QX>QY>a>#KQ7>/F>ð#>Ï>K]>J>KQ7>Q7>#>Ï>F>N]> ->a#QJ>QJ>/F>ð#>Ï>K]>J>KQK>#>Ï>K]>J>KQK>#>Ï>K]>J>KQK>QK>/F>ð#>Ï>K]>J>KQL>#>Ï>K]>J>KQL>#>Ï>K]>J>KQK>QL>/F>ð#>Ï>K]>J>KQM>#>Ï>K]>J>KQM>#>Ï>K]>J>KQK>QM>8uAQW>QN>#?Ï?F?N]? -?AQN>?KQN>8u->+_J#8?AK+_J&+_J/F>ð#>Ï>K]>J>KQO>QO>/F>ðC?XO;'8? ;P ;P#>Ï>K]>BJ>=Q>8)>#>Ï>K]>J>Y#>Ï>K]>f>##?Ï?K]?J?QP'8?P@QP>/F>ð#>Ï>K]>J>L'8>B@QB>/F>ð'8>2@a>#KQ7>Q2>?'8?R@QR>a>#KQQ>'8>Q@QQ>'8>S@QS>a>#H8Q> Cl\(L-C>l*f!0+ fE[ CE] C7 H99l+.c.MReHI99l+.c.MQkE]H99l#.R`Ee0LI9 9l#.R`Ee0-eHH99l:J_Ee0LI9 9l:J_Ee0-eHH99l41X.c.MReHI99l41X.c.MQkE] lRRi"%0LAF? lRRi"%0-eH l*M"H'H?cӻCA#ÏK].F)lec J/=;%c{*@P)E]Sa+lec J/=; rE "dLg EeH#ÏFN] -+P>#ð+_J>#'_w> '_>ljQ)%H+P>?ð+_J>?l\eIE]#ÏFN] -J/=/<Ay#ÏFN] -U#ÏFN] -/=#ÏFN] -#ÏFN] -BA.#ÏFN] -B!?E#*#ÏFN] -B%?E'>F ']-*#ÏFN] -G/QÏŌČ'Q>']->8#>Ï>F>N]> ->UlS j E]/D>->#ÏFN] -%#ÏFN] -/D::/< : 8TQ>:SteM;:`aUEȥ--E +Q--;-7-8-;8-;-;+AA"M'[LuT#>Ï>K]>J> '_w> T&ASA&U"\'[Lt-Qx *a)%ȥA=GdA,O((L](/(#Ǎd8>(AU?(J8>(d Y>X_h _JUd(>(J8>(/_h>']->U/=>a`pee]FȲAP>#$GdA^$O88J]88@D8A_$O__J]__@D_A`Q&*`RbA^ಱA+K*E:റOL] /# OL]*/#_h_w _J$[M če #ÏK]J /98'\MN'_ '_ #ÏK]f##ÏK]Cf>^jDT _Sd,SܲOL] /#!#ÏK]J $e'[NAٲjDT` +9:l.ȲOL] Ge!OL],$OL] Ge.OL] BOL] /#$OL]/ǍeKA haOcDԥ#ÏK]J ׳@tdj*yGEٖE'[MBO`24q0 :Q`24q0]71A.I8%AFGeSA%S'[MCǍec>Gek>I'[NevA%N'_w /9A&H'_ #>Ï>K]> F>(GeV>I8>eA>(O((N](  (B׳-(S9E@;/QDF>E&&#"_J)(-(S9E@;NzF Q`p*ȥOL]'/ _J*(-(S9E@;NzF Q`QіEeAaf(O((N](  (BW-(S9E@;7(x J(O((N](  (B/_heA=N_h)8=A=J8=AID,AGfO33L]3 3 ;O33L]33޲:dUS:l-( \(_w334D4D14#ÏK]JUe*i`USE#ÏK]J ۳e*SFAId7YEA'>J]>/>@**Me.g1(:圥8b>A^HD"AJLK׳#Q8@teM4USONNL]N N8_hN_wN_L _K -(_d9,( l; )%Х _JN_N_L N_K NfǻteM4USಱA ##ÏK] F7GfgA+A?7I8c4Ldk eR$/=?$#ÏK]F7Lg8bcA#ÏK] F7Gg&7#Ǎg)&;#Gg2'_J7_7gDAb#ÏK]F7׳-(:td$Sȥ_w7+_JOXXL]X/XM_hXgKOL]/L/_hg[-(;9E@$ E` ]JEAGgoSRO )U :AB(#ÏK] F7Gg/_hgOIIL]I/I#J $gCAM>AGg#ÏK]JT'_wOIIL]I/I#U-( RJS".H*E?A )OIIL]I /I#GhChOAVHDA:8ONNL]NNǍh $h 93FA@;%ȥAMALIA>EhALD ALDKLAIA>EiAIOXXL]X2/X+> A>dC#׳hec 1Y-(LШSRIcХAPW>I8B8>AUA>>L_h>iiABGiA\ $&AXhO(@^ХA%dCݲ R1Sn!@``iE䧱A_HD"AdMOJ]Ʊ@OL]nj/#N_JUDưAIGjVHDAVHDAVHDAe>MdCP A>MdCP A>OdC2OA>MdC< A>OdCKOAGk/DAA>JdCPNA> OdC2Ǎk˻!LKAS]QxSEbAӰAM>Gk[OAGkl A I'8$AVW[OAJ8VAVY>[OGl7'[OAGlDAGlRAGldAVA'[OAWc ;9E@V&O%ХAKlpDALlyDAGlAe~&(#Ǎl(BAS-(S9E@;*UgȥA*L_h*l_h)'\OANl_%AHlAWl_w_h%[O8 AfI8eA I'[$!LKAS]QxSEbAӰA=Obk*GNEAR&(#Ǎm'8>(ARA?(I8>(m/!LKAS]QxSEbAӰAIA>E-AIA> E-dC(ěudC2ě{s:VI8!LW4d:R`z_ EeȥADOL] /Gn0ADOL] /Gn;A;,8OL]![_h _J_nFA;-5OL]X_aj)-:pt_AB__weqdSW]@4'ԥAU-( \R`;:UDAPY>Ǎnf _JnrAOK] &Gn|OK] &GnnABGn98OL]+/$OL] ǍnA:\ $h 1$]F@SWj"ХA`MD% EOL] J8'OL] "_w:d]S!Me4RRLA'OK] GoA(#OK] GooAf:&(#\*(X_h*_ _woh jteMfQeȥAe%&(#\)(X_h)_w _oo»A'GoȻAGp.!"Gp5AGpHA[&Fp_h _JpABS_h _JpGp##Ï#F#N] # -# I-$A"OL]nj /#Eƍq$##Ï#F#N] # -# I-$A!OL]nj /#DōqPAd,OL]nj/#I_JD_AMA>I8 OL]͌0/#)OL]͌ Gqﻰq#ÏK] JGrrA & Gr1O ;(,RJM%ȥA'Gr?A#=A?=rJ#ÏK] JGrQ'_w_JЍraABGrAGrݻAKDA![h(Gd` M%ȥAYA> dC_ǍsDѰBYhec ]F!; .H *EA:\ $hjU$]F@SWj"ХAIGs軰ACGt'A:8OL]ی /Gtl $h 93FA@;%ȥOL]܌  OL]܌^W_OL]6/_h/_h__h_w98 $txOL]܌ /Gt _JttOL]܌/۳-(^D`S*4 *eȥAD AEޛABGtPL']->/_h>_J_wUtA>&Gu -(^D )yG !/=>uQhF @GHCȥRSY7R1` R"mW`:E-(]H@(`R,FEA:&GuJ $h 93FA@;%ȥA:I84 Y-+bJF r%W/QG+eȖ'[PǍw'[QǍwAGw̻w׻AB8>'[QGw _J_wxA2A>&Z__h&%[Qx '[QGx"x,SRGx5A K-((]fIQx('[QWYUF_f@.*iGȥi *X;*j^:cP'[Qӳ]QxSEbAӰOL]  Gx<%[P9xCbD'[PI%ԥ%[P98&L_h܍xK-((M*_x ^貱A#ÏK]"f^AYe^_q4 *.1E+_Jxc#ÏK] J GxjxrA.#ÏK]J V[QǍxxA#R[QǍxA$2#ÏK]J ۳-() nb@r4":eȥA#Gx\A>^S _J_h^ycy|ABGyA!GyA"GyAGyA`ITܲA`ITܲAC#ÏN] -Q)H/98OO] O#ÏK]J#ÏK]J C#ÏN] -Q)dc4&&C&Z- )q*_y껰 _JyOO] OaAC#ÏK]J#ÏK]J CdC`TOO] OAՀ' _Je<0`/*\SEHE _hdCK[#ÏK]J _J'_w/_hyAGz z?C_ $igХYNc AM_hzAgGz#APJ>;A&/_h _J- )q*_z7 _JzE8>?APA>&GzPz]ABGzuOJ]@A W>:la(5@FܲAGzdC70#ÏK]J #ÏK]JC/Gz ']-3#ÏK]f##ÏK] fE ÏŌ('[Sð%[S'[R/98z'[Rð%[R'[S/98 ']-R#ÏK]f##ÏK](f##ÏK] f#FU'_JÏŌzֻBC/98 T_hN_w3 _3_h%9898_h_h_h8 zT ##Ï#F#N]# -#B+##Ï#F#N]# -#B/_h_J( (B˒(B/_h_J _J' _J; _J>_J{D ABN{[ TAG{㻰AQ%LF Q`eȵA1M|#[TABJ#[T $|AG|AJOteM4USಱ  $999*(RJ4'jO:]EP`(M0S@eN`\ճiHeW'jO:]WJӳFc*\n_E,ӳFc*\ "$DBϳM\HeWEBӳ MI'jO:]WEBdճ]UW9S!I'jO:]WEB#ͳmSgW*ȥB ɳtmȨ*jȥJ |ݻAJ $|껰4R 5O6|A$DA4J 5O6|A4J 5O6|A4J 5O6|A4J 5O6|A4 }}/}}}э}~jQ GHA4=~~nˍ9͍$X<Ѝ򍃁΍VA4Y}Ѝ@\.$S@Btp4EH圥Ǎݍ 2CA$CPZ$Z6 CjZ$Z6Zchec ١/=>Ehec ]Q(ب/=>E&(#I8a(eW p*ԥ&(#I8a(D4ĵ&'#ѳh jt&Jȥ8%'&'#ѳh jt&Jȥ8&'teM4USteM4USteM4USZZZZa dd9d:J^违AT OteM4US&#&H 4MEХ&#FU"M[̳Lu_JAGE#>Ï>K]>J>!S-*(ZG.gIaJ(x/=>E?׳:l[N]X>L;*E8B> ճwk\:l`;ٖq(6!EȥAOeidS%Х-AH}AH AGU Ab##Ï#F#N]# -#B:##Ï#F#N]# -#B+_J']-UQ##Ï#F#N]# -#B,##Ï#F#N]# -#B+_J&_J'_' _' _h $D"#>Ï>K]>F>-P4 _?AbR?얈uPQQEbSRQ--P3OO^JCQF3O--ɏgI/2/=ɏQɏ?׏;ɏ׏Q-OCSPtTOɏO2OCMbIoVrzH o/`,+\K ]I9*_+\[BB@Jq ]OBc\/^A)AE!- ---;쪫 -- ~AAFEAGQo?O\Y#  V P J D I9 AI9u99l/=%ȥ/[- AHANe}ATeegAZeeeKA eeee(A#eeeeet99C7B@2r- XU6 t rŤ-gB@BETFP*^ +\ K ]U 0ɏ@%IAH A@H  AFI?6bo o /^A- --- AH-A-;- ALo  pAMo y aAOo  PAPo  >ARo 쪿 *ASo 쪯 AQo 쪫 -- - ī AMo /`,o +\K ]I9OT*_- o+\K ]I9OU*_- oB@NCJrɏMI/2R+]-ɏ׏Q-CSPtTTɏ@oI/2ɏ?׏+]-AO6tUVT|tW/06tT#^T+^RFJB@BH@aHȏQ-O OGTPtTܱB@TCPrŤ+\ɏ@-UPIACA@DAOUPI?UPBc(FGE@/^AIAE AHFGB@MrA+\ABHFFBcW@U/^a-AKCAFAKC@FCF]R-RŤ- WbOoa B02--BB0]jK+_w+_ B@WKr-r-rŤ-,(rŤaW bPpRRCQ- tTOdO PQ-PtTO;Oɏɏ a#Pa[ TbPp[(@QR:lW^BEAN"&ӻA O/=仰A![f) fVO 4חA" (%7+c7:lE*A#Tc7:lE*A$Z P)E*B f) BN]F$ ^ re@E>-Bϲ>UBѲpU-H AO]Ӱ AJ&* \ހ/5/`,%L54 *y]U4E*BVCQCʲ]FrEg%@IRRX:l-Q>E*Qp(E]BJeXB CL-$@ BGk AU%9*^(E]%-AP:ed\ftӌAR4 R-䥌AJTתysAJ*)gAJ!%[ALzMܥMALaEӰ?A L!E7e1A LzM%#A J*)A NP)FԥA ZtS$,f=Hf4ҥA#1(fY(/=E*AY]RSj /=E*lJ(/=4/=AF`q!rE H(4R/=-Ӏ/=a?Ӏ/=E*E*AU/=E*AJE&AJEܥ AEE `/=E*B+c FG"&Ǫ N5Ӱ# ORWB[;N5/=<`P^*/[O2OBbٲit\ ~5W=H俲4/`,E*BcA#^`9Bě#^BěaCBGBðBBEɏɏcC/^ADADAMFCð09Iϕ0I?I@  I?aDtBGT-A@f IC@B']@;H'[@AI&[@AK&[@CH]B&[@AAi+]-O5 ]!B+]O']@^# :lE@re &^LM zLd)@5Ӱ4UFdJFM E(ewQLjU%Lkxd%LS +^`:eh)R4O fd@PRJRj`YLd)@qȲ4&Ffb*(7xgITMEL *1PI@cH%LdM*_i- aSeS!EȥRqxM*_Rh` pe0h)R4m@`$REf*hec k ZG.V*=Hgq44j\ȥh`Rqxa@KQeE@P)`M EӨh u W*$RJeMN":%I{h`Rqx P44IY50M*E-%cNIY50S@MJ$P)j\PL5@"_ -;0Ҩ%LdM*_i-(ed :na^`zLN>m@Rj*@5W(54 tf>a!@b+-:l7Fe` *j$jEd,RRi` JLk a_%ȿ"4aI`*UgiSn%09NVNOS4-( JE(S@cW(S@pdP+-( JnE@4j]9Id-( JnE@%td*/:y`iFx(RjEeRW fL:`fO]d )%ȥeRW f*i7x"W ,EIEh]@ _MfFOeM]F'ȥhec WYIY50LRQ`;8*+Ehec WYIY50O%@;8*+E- rE a] G*Ug~eMȥt\:*`Y4Ld!+jZ!ȥh`Rqx + :yPRJeM.+i:lEdS@LdLO50d5@J*yEhF 4(Pq!"T` :#.R`f2:eȥtpLgNH)ed]e0Q*`q!1+F0 +]eOQ`V&!XjmW.(;eI$6d +]eOS-*; EtpLg;*S  J(9 p` ;j`Rl*a::`,QeOmShm@JL5W()t]EtpLg8j\9K J(9 p` ;j`6d +]eOQ`F.Rx+jL,S@4*ec JL5W()t]E&^+`NL`*h(,9dP)@ȥaJHP(RJeMzLN4"ȥaJHP(RJeMzLQE-;$1WSXdSQ$!+j.g1teMV#. cQg.HSWܲ-( ]F%zD_Y4`-;;N&Eȥ.1MrE  9[(S-:l]EȥhjU-(V`.;1+GȥhSQ$!+jteMe-*teMcNdE@f&N5Wd5W(`P*\ *4^E ;*yj_&NX(i &MEnR*M Ld5@xqW4-;RjE-*td N1p*fcH̲-*teMaSaE@fcM5W- rE @EX`4j*- ec zL5@h-(*(5SIX4-(_H8TIS&-:pZ!;f@ 9[) eh]Sj*.M+)1x ^cȥh ;Sj\S-:leW+Ӏ[ b!DR] ORW[g%@Ta0SY:jgWMI[Rk.M@]Yj) KQeEEqq`[F.Mtjd&4 :$#4\ [d$VM*$P5@KQeE@P).c%lGNM:`:k*M eTeWLQ*l%%.MH!Ed,;ꀥM(+":l=Hd+:^j$S(P6a@Xd ^T@D*H c !9 `]@1wR@eI@2jȧm:lZG.V*=Hd;@4ASjD ORWeRMH!Ed%KT@=HeI&bec H!%X"W4_c 3Jc\d,6!X(4 :9*$k%tR L :97xzM86mW$5S-(JmWVV;.R`Ntjie`6E N#WR_>fGJtdSY:j]0SfR_>.c Nk.M@Rc7:l%4P~.IW`$J`]@;jKQd*b>@5@E; ;e._"c&O DdD(j*y G@k $`\# 9`; 4-(fzH\R>eRW fd(iR@*y_.HL Jx(^tdfE.]HeL^*xjG-(D*r=Hd`k89*-(# fꨥ79I4 dtL+c*O VNLa0aYRteR 4ASLN>tF4qIVV;.eliR@ORWMW4\SV%dEEHh]@c&M.M eS$, KRbFF "NE.MHjih`t]Xd1]FH F`k Q`e:):l$ S3QGȥbFF "NE.MH; aJKf@*1k Eh j&AS&N.H5@c7(@-(*\+c7RlGQ`I*GLk ;NSV*O%H; ;+]R*>E%ȥh jteM:`q!f _eeWEh jteM:`q!f _eeWE-(i)*`!M*J\j` *. *> 9*$5@lب-(P._%LS yQF9E-(]J`,5@.+(( r$iFV*`q4L!aLSjM@Rbi @-*;*S%W2s-`D1Qx:4M  V.MkN%X"W X5Xf]kbgHe`:Jm8Ex`i(+]eID5@EFmX`Y7jD`i( h +4jji-(V!@i^ah jF $TF%LeDL5@.+@-(PR`4r`e5W%@Q`eF%He]@;i%0L5@%d!Eȥc z F%ȥxS +F(dSWaQh]@:x9*NE.MLF 6a@.D1@b:lE-(f@.4sSY-^1tS %IY*a\*U+HeG+d`P5@qX-(f@.4sSY-^1tS %IY*a\*U+H; rE @;;*4X(5@+-(:`]@f1E-(f@.4sSY-^1tS %IY*a\*U+ȥ4PHD5@Rqx u4-(+Ec R%r4RMaY {ȥ-*(RJ {R`eSS$ *E]@FC{RKХb-*&c>tQ 5W-*aOcDT(ȥjDT` *`2*NM1Gȥb@d:l-(8_>V&!05@eW9XES@ ]V4]@em@q6d&JHbEYc Dd&SEbbSYg*]`SEa Xddd\U05UESEa Xddd\U05U`jq+h`-$RJw+ g*]` *@f]H1-*mS%0 :j-(@:lI@"Oq4SEȥSEa Xd Pt\6(9*+ȥMeQ)]&J;N_.#Qx+].MH~p`N50 ue0 *xES.gS*GL5@eW9X *@f@%F-S g*]`]@%F$`exRec &~Q  1E-(N>-:lh9di+/QGWY-(U.aT\,9*+ȥ-*RW>g1( *Eh]@6%04]F'L5@f*ȥ-(S9E@;RqxjS $P R).[N'ȥ-*teM5W(;-9 4nF eg1jf*tp JxM eSS$`SqYEb4R.A@R:f_p*fIEȥb4R.A@R:f_Q4JEh]@:`RL Rc%L;-%JT1+fRj%Eȥh]@:`RL Rc MF\S-lE^$%ȥh]@:`1+:`et]Xd+%@f@gR.M4MQx)%ȥj-JdF eeW-(f@b +:yPM ; :`e"H&O]FH5@c7(I]@^h Rec --^1rq!b.h Rec --^1rq!b.c (:h4E-(Q`eSL4545@c7(qSMȥh Rec --^1rq!b.h]@:`(R*VcR`.4R$;-]@%d+ :yP5@%d`^0eJD \(SSeIM+*@&]FH$(`O4-( *+:Eh]@c&M.M:`;%ȥc FCE(L].Lx \(SSeIM+*Eh]@:`HD4WMFe/,eJD \(P5@cW,(4p\DmW+EF':|4-(+E-+bc R:f_"*h]@"r.MSj\PEXFc1EHe]@; :@E7  eFc *i-(EbFF qAW1Eȥ-*bFF qAW1@% %Ijh]@:` (;^H :1) q4gK, ) :`.H5@cW,(4p9*c1@q4PEX"+V:1$;-Z$M %G]]ELk `p$~R`EF'j$+EN(L5@pD`$H9r$t|E"ȥ-(S*{$H9r$t|%ȥe)@.dD@Q q4c>R``*iEe)@.dD@Q q4c>R`RjS$9Xj"c&D]1@Nx-( ;jEh]@:``p$F:lFc%kc zEh]@:`V*M.$4W-:x )Y1HeF8( ^*`]*l(f(LrOLM  Rc1@+d ^Fc ic a+Q`e G*ȥ!*j Ef*] ;ae0 *MMȥ-(;9E@$R`MV-(E-(5J]zD;9E@$`;9:l]@a1Ӱe] ;]Q() .H5@ (圧hF>m@e.g1(:@h d,5@ (d:1.AQx Gx ^h` !e]%Lk zNtdx-(:`L\$5Sh O*]I`YhVP4d)IX.c:\$M zNtd(4h(45@$L5@qAW1Eȥ-(;9E@$g&"-( ]JLL($LLc4ji:lqjx ]+e ȥ-(;9E@$g&"-( ]JL \ReLM :``SS%0 GW_1Y`jdPM*\5@ +4ppޖEtd jl_Hxd`*GU:e` ReoR`@a+L8k)j))j\: )%ȥ`EFm@eRjmx:RjE-(;9E@$`S%F$gx ;VEj-Jd`1d]FeMf!X;*Nc%H+c1@*i` *]!Ud RHD\@(:lEiRj** &L5@UٖE-(\@` f1t\S@f.FEh]@ eg4H,5@Ue^*`MH-(\@` f1t\S@f.FE-(; ;-:l7 `,5(;E-(\@`*1,4PHD Rz4tF4Nc ;5(\XhGp*L)SwR@e(P:JmWOH; tji{*d` ]ViSf>aL,**U*.M&LP*ܲh]@ RjS$,fc 4Dfe :lt_] SY14-(+@-*(US:l`P ;-*a((L%@c4M@c&: *84r|@-( 1nF*$;-b;*Nc cy0PM .Jd`,E(E q$F`T5@c&: @-*T`(d5@f&()M zEiRj** je4IEȥ-(d]a@EF'&̲-(SL4f(eU`(U-( RJEb@N]@zD(*4dTd;- z(yӰ4R.A@zN1E@f".Hj;%ȥ-;;S^H;-"%@N(L5@pDhRec 1YU-(eU`E-(S*{LdS@rddT5@c*WD1@b^:lz1d, R)-*D1@b^:lz1d, R)]EХ]XUHezF>1c z^`5@%c* Q`?RUӰ-( ;j4P*9~:lh]@R`eFc @,nc]@b.!0EF\"ceF%HeNc ;[Ne@e"5W($5@-cW(`Rq(PjUE-( ;j4P9*Eh]@R`ec a(,5@-cW(L5@4D,;-( ;j4P9*Eh j) eSL4j_F%@T`(F*DPM NeQ`eF Q`Igȧb-+F@P(,5@55Xdh;>-*( 8Ri` *ꖅ"c&D]1@Nx-( ;jEx-( ;j`e]Gx^9.Mzp^-( ;j4Rf\Rq(PjUEh]@ ec *i-( 1Nc8@F%@"r "eiXc iS-*2`R4P5@be;;9E@T`(8 )Y,5@.4Rȥh j) eSL4j_F%@T`(F*DPM NeQ`eF Q`Igȧh]@ eFc *imWxRlF O1x;-SY%@!H_HfeFc Sq(\DDgjHfet_-^M gtS 6(Dg&̲h]@ ec *imWxRlj:]Q+F%HeF >Ojq4f^pR4beT`̨h]@ ^b*Q` 9D`$4p(RjEhNZ!& e`Q* Sh j )  (ShF 4(P P-(zIEȥh]@:`eF Q`eTjyML;-c1X,LF %):F%L*tdi(F %):rE3Jcq4d,8*7L( ]JL 9W!@bfA@`5@pޖ-(L( N*n]Ijפ-*teM5W(dy`P  u W UW4`SEdA05@bfA@4 QXLdR$`*&M^h]@:`Sehc1@  R*-( F\5@6( QX4r`f`Ehc1Eȥ-+bP>_-.gS-*(Gj\ *ꖅbh]@:`ek-%@!HܲDi( v;eEХ-*)SXqQ_5Wbh]@:`ec a(4W-( 1-(SSdL:l@T`(Ry:z+qXdM j5W-+bOR;.c%c&EХ-*(~:x]EХHh]@:`(R`q4c1@fek-`4-(+`ipD,^*`^@P5@(d5W(`&](^@L5@^H`*y*ȥ-*D1@$x TO*$L5@^h]@:`jGE@Q`^@e""[*q]Eȥh]@ Sq&*R:l7L(;%L54 w*M8Ud,9dqR%e#1x;** )YF@7 `,5(;mW-( F\,5@U`HRNMe" \P5@]7%HHC:`e:c ji-(:iSrE aJHPM. (4ITM@4*`5W() O1x:#1x"ced ^hM E4 )Ye]@;:NDM4pR:lf9eIREH4Sn3W(`@aJL5W()W:l" zE-(4Sn3W(j`-(N>c1@;@ 4Eȥ4R.A@)DM4**zLGH(k eqRF`i-(R;naE@ 1E[9*O1xSEbtdF( *E-(4Sn3W()R`P(_Mf9\dSWeSe̲h]@:` :x^*`T`(P5@(d`@4-(+D1@T`((S@; R*4S-*T`̨h]@R`e:pbFF "*`".H*d*8c%ȥ4R.A@zN1E@f".H&LO4ٖEh]@:`eg4H,1d;-Ef*]FH9 SeW`M +geSL4:~;8Eh Rec --^1e.Ob.gХ-(E` R"V*t9*-(QEh]@:`(RzF Q`'Xg^CHe]@;96(L5@.4RHe]@` mW{*`iT`((:lFc%ȥ-+bc ^CHxkxMX`ed`FEh]@:`<;x;9E@T`+LF .AEȥFa\-`&h]@R`e:pe_>tS Ue;jl(R:J`&LM@pDS@"E ".H&L *dS@"E NdU@-(O.OJ`d5*mQE4R.A@zj):G4r`;%ȥhF 4(PE S4nM SY{-:lT]EHEh]@ RUE]M:@FM8$MJ`wR@et_-:x55WwR@eFc fH(FMT`( Q0+@-*b(RSj@-(:;$T *Eh]@:`I[NG%L4M(dqXde6++j_5W(P vRM4H**# NeLSY4U`R&̲h j) jiI@Ef*EX$SS$T-(c1Eȥh]@:`RS F8aR*; )X(nSXc1Xc%L `MELM OHTd,5@^H`!U$x&]&"4"ȥh j) jiI@Ef*EX$SS$T-(c1Eȥc  iQEh]@ ec *i-(r; ^H5W(`&]E@:`eF m@edd5S$,5@^Ȳ4P j.hP(ȴ4P j.hP(ȴ-(RQ`$R1xd@`RMSY-(+-*7L((c&F2q0k Q`ec UU4-( R*E-( R*-(1Sj-(;  e` M Q`eREȥh]@ eg4H,5@qXeWL; :`e@h$+td_f1YE-( \R`FC\5Wfc>@h$+td_f1YEM:D:`S@4(kfN; )  \R`q4SW]@4'PxLElEELbec ;%ԿrE3Jcq4d,8*7L( ]JL 9W!@&2_eh$^x(+9*QkX:lj( i`4- eMХ-(u@M ` EXb>,5@&2-9*hF MJ$P + e7LPSjn_-( \R`;b) SY-(UWaLiХ-(UWaLi;b(dL5@.4R5W-(Q>7L( ]JL (7L`y0-`fRj%Eȥhm@7(x RjSSL4 F1EХ-(~R`_S`O4H`,SQ%W`p* *iE-;;e\(` (Shm@.M e\(`]FcW(5X-(:eEcf]@!c%L :1) q49 +Q`1M8-(:eEcf]@!c ;5Wh]@:`Rl`L^^&]Y!MSY14-(+@-( *S$`E@eSL454S@  (QzaL,(+ȥ-((+(4d5I4-((c&Fz:G) f1Y]Eȥbh]@ e4T,)U".M@m@(R@hSQ$E S]ELk zj)td(*4:GU@-*T`((:l"fet_-Eh]@:`eyREHe :.M5W(`R54T Rz\U4 S;%H *SXc1X* (dt_-`ik-@-(+F ;a) ea::`$-Jn( Q@. o ȥ{Ld)@-t( Ro ȹ-(+nF*$;-Y9zD R)*`)-*D1@MXd *`/QD, R)*`)-(]@;4" $x!Sdj̲h]@ RjS$,LJJO t_-XSY4Ec 9:L RE-(Ne;]IHa(c>`:L RE-(NeEF'eSL4FcmELkxR`&ܲ-( :l+;*-RiG_XeItpM r%Ee1-( -t_ ; f@P + e4RRLj)Ldi+SM; :eȥtP*@e]@pdF>ؖE-(: 4w)IU-( :l+bed5@&\:1tpSj`961; ]Vi+b( -t_%ȥ-( :l+;*-RiG_XeItpM r%Eh jteMfp*; qٴ-( Rj`USe6*Q`_Xh]@:`9n!Sdj^`q4aMc7(`q! +Sj\E0*]fF :yPMq^5R9 .`UF_eSL4E@:`eqR@c1X]; fek-$+Ej)Ldy44r`:`:`*%Х-(]*ymW) q4 F`+GХ-*=\*%qS"c*$]*y]EХh]@:`e/ ^H5@pGmW) q4 (xj`-( F\;-e"U(+%HJ`Sj_e :.Mȥ-(+ ;[Ne@V:aȥ-+aJHP\bM mWx*1Etp Rec 2]U0T5@V&!EХh Rec -$O50 ue0)M e_&:xEc FCE(SW>U%L mWy&xSEjGEX4teM:`z\ ic HD*;+ UFEbFF mQmYF4p9X-( Fܲ-;;e9SdREHh9Sd]O&Dj7MmW-(1`O1xF:lc1@EF'j4-(R4S-*T`((`($M8$MJ`\D(`+E-+aJHP *# UTV*$M8E%Q9eEL]H:`NMlبRNMf]Xd*E*GLL5@mQmYF4p-(:lfa@&Wq4*E* Eh j&AS-( $ j) ; %Q9eQxP5@2jiE-( 4P \:*4X(`O&:jܲ-( F\`;9*$;-_-EX`4'Q`VeW-+F@P(5@]R`,4`M Fk./QfaEH8 iX`RJ,km@&V$h]@.F:lq(-SS$5@SY*),(,&]mWLQSL6i5Foqe@Id\1@b :lt; ``@5F]%HeNc ]+jeSL4nc]@:`e :.MHee+gfek-$+Ehec ]FF>dF( N1f+I(h]@:``(Sj@bFF Ne+eaJKfq*`y*6d ;h(L w7*JGe7 gSMQ*8Fc%H; FCE(j_e7 b)_(L *(9d`@aJLd5@S-**iEIY50SEb^:lLd ; eSL45@gSMQez@h$+&A@:{*yR$ ^IY5Ӱh]@:`HD4W.dxL *( ]JL9dL w7*JGL^:NjD u`P5@qXd&^"]REF'NeEIY50SEb^:lLd ; eSL45@gSMQez@h$+&A@:{*yR$ ^IY5ӰeSj\` 1`ex(i(쨲-*R*E 5W(5@a(,Sj\` 1Хh]@:`e&^rREHR94\(:lk--(N>];%ȥHa(f(+ :G))) :`eF ]F'tdRl\j&eOR`MME7 :yP5@$@^H%-*V&ej@WN$ *`:h5Xaɨ-(D:zHzI!`L%EХh]@:``5IF%HRD!@"eiIU$ wR@5W(d`S4" $x (;He\IQGQ`aFeWEh]@:`(R_j$k Q`aI:JO&_^@5@.4RiF8(;9*$;-gQ`aF8I%I-(f( 1ST`(^)I` Sp$$I\4)U*Rj*8U@FM8$MJ`SeW` ^-(SYhec --;-(.d{*eSL44.g1(hec --;-(.dD-^1ed;9E@T`̨-*SRSXc*\ *e;8 *1.1G"4aIE-*SRSX@5W(;-`5QD9f>S eW+:l@-* *X4IY50]eS-(M*_%@Q`ec*\-*IY50fMSY-;V&!ELi - Rj-(R`8m@<Stp +)k)Eh]S^0 N1fRL5@"&H;-j( iLdfM*ti4*`eEȥ-({*"*eL+j.MN50k SeWa(d^W1xL`7YӖE2.c*M0(D 1`k Q`e@iF8H2&jcL5Zc ]FF>c*\M[*pj_2$d%Sey0;fGj`4+j\d``SbfV$7YӖE-(5QD`*^0M ;:U*:`Pg&"ȥ"%GD1EХ,PM@a(9X2.c*M0(Ĵh]@:`RlRM"]Rq4) a^pGȥh]@:`j%q*k )7 -Jd"cȥh]@:``y*R@EF%0P&]c1@feFc%HbFF T`+2qXdM jHeJfO8!Sd 9:l( m*yEaLL9&:5W(m@ji*"c7i:z$5:y@Q )  SbH[g O_HeL"Tx MMpSjj5F-*(jp) O ;iX*:N \fd}( *Eb@w-(}+;9*`:`<; E h]@ g%cS$`(,L*1( :#.RxEh j) jiI@Ef*EX$ SS$SWxFAI]H*ymEq@h]@N":`eF:`T`̨h j) jiI@Ef*EX$SS$T-(c1Eȥh]@:`R4be zSY-Jd"cHeqRmW) qe@Id)U:lwR@et_-@-(1` w*M jt\*1*% j+%HcXUS%IwR@b(O *`VO ,SjhSRSXj+ jȥ-(:R;P:b>Sn%It\5@k -( pmXPhN`]fIQxӖE-(:R;P:b>Sn%It\5@k -( pmX`qhN`]fIQxӖEh]@ Sq&*R:l7L(;%L54 w*M8Ud,9dqR%e#1x;** )YF@7 `,5(;mW-( F\,5@U`HRNMe" \P5@EKd`L5@'Xd^M eM4pSQ$)R4%*- b*( JL *!Sf>@.]Hf>^`5@UwR@z$(j+ x5W(`Iq&4RM:yP.1) ^H 4s-jL()S-**M@dSEȥ-(N>c1@;@+4-(jhe̲-(4Sn3W(j`h]@ eI1@Q`(M*]SS$+ _t:H`R[JSI;*Nc -GeR@iaXUGj@-( j$x]FH9 :H+SY6(L5@pDd$j+ Sj] iD5Xt;G:yP5@p*b+*eL5@Id5@Rqx+@S] ek-E-(*\`#"$$S@rE bL ]J}@f%Feȥh]@:`RlM.M"]Rb4U0k Q`a7 :`4 :#.RxE-(R94\F+c**xTM &̲h]@R`Rj%@Q`(**!bEH (x5(;a0T ^Fa]XD9\-( a(k-qXd-*8.H5@!b@:yPM.M"]Rȥ-(-M8k-qX]XUHezF>1c z^`5@%c* Q`?RUӰc z -(e\9*`e9,(iEXMFee9d,5@F\9 `eD R1SMzSS$S@aE@%XUW*G.V_%Lk e9,(R1+zjGE@@M ,DO4-(4Ȳ-(^D)zaX4*dS@"cȥ-(^DeU`k .H*j--(]1@iQ`SWc FCE(L].LxdO(9,]AYxR*`%]eS'S-(4HfM50O4-(;EaLS) R`e9,((`RPT7R17R1`]@"4a@]Q.mXe^Cim@bL`SL4`4]N*WGfF c&M8-(]1@iagz-^H7(j.(S@HSE-(^DL74i  z\;./QeRW f:ojȲ-(^D(5Xjf]@ij9XSY1Ek9R~tdM@Q`e7R1n!X@!EL SmW`;ȥ`+I+; )zF>`i4c `d`%HD:l`$2$RHaTdd`S lhE@*tiE-(]H@(,5@fF %i%F$(  *` eg4H,5@!bEȥh]@R`ef\9*-(4Ht_-(d-*8.H5@!b@R`e`9*E]XUHezF>1c z^`5@%c* Q`?RUӰh]@:`RlFc%kc "]RH djGE0Q(`@5F] :`e.c&M E-(-t^]EHe*/ .@(`R5Fc%H j1H:l *X4dSI*:`ed :#.ReHe1t^EF'be4r` *yE@b4UEHeF:`"]R*y*wR@ec%ȥ-(1`]@[Ne@pH *@wR@et_-L( ($(xP`bF$4-( O.]@ ()R`P(]R.MHte\*8k-`iF+(h]@R`eI1@Q`]Fes&A09\@f\*4pS@;`;jtENL ^9 (k8TG*LfI@cW10k%L.M@ Sfe*W-`5@24q0QnF8-( 5Xd(5X-(j^`q4R) 2&]EL ;nM+j_50L *(F ]@(h(5@nF*$;-q9*Mb^4M  (xIQD,]c4MEHeF8( S fe4i `i-(7S%W:l-(R(t7S`k 15Wji`H%*$L5@<1IQ`,*((z gc*$ R.RxJaI]@qe@&eW`q!ag*\5@KWCE7 :yP:nc*\V]:`V-(1`PM@a(`**21EL :1) q4|]@!SQ`fgW) ^@54)R`P j*`"/*$x5@%[: 5aQ,LJJO mWn]@"a`k .H5@%Ue-(R(t`WO;8x6i-( R($GRIY`O4fEX`; ,,PSW*/%Hfe1``:R*x( +*Q`.c*]0eFH _Ug"ejb>wR@*`;i-(*y*Q`j+jkD(9 +RNNb>@-( ]7 pD`.&I@q4LMM*a M `reL54*i`L%.eL-WLES&4-(F>F.aa MEH `.:lc1@+gfek-E4Ld(9.#QSX(k8TG*LfI@cW10k Q`etENia%04r`:yP5@%Ue@-( F:l"-Gef_-+ +Q`emWL;-4Q%r$ D(m0 mW{-:lJ]`H(VM E-(TCff\pt\S@f1Y2$R-*EȥRI%I-() ^, Sj] ^]$qeIt^FeO"V) Q`WW(5(D*L54 eW-(jx9dO4MeWT;.RxUR`eF8E-( R(` :1) q4|]@!SQ`fgW) ^@54)R`P j*`"/*$x5@%[: 5aQ-(;j\, : +SYwR@e*W-`,5@n P^x`eSL45@21ELM V:JJg:yPg4J*cUf\-`fz\)yE-( +*Q`.c*]0eFH _Ug"ejb>wR@*`;i-(*y*Q`j+jkD(9 +RNNb>Eh]@:`HD4WnF*$;-&]j)*@-(1`]@mWx` a05@-(R4JdeE0 ^-( (@-(N>]; ;\D (:lc%L6i9 I04pjGEӰ-+bc R:f_E*_Hex]@pȲ**#.R`eh]@pA0F0O1xF:lt_-XSY4.MIeQ)GaUI.IXf( R.RxE[*tpM eL_.#QxfM e +z\ yEȥh]@c&M.M eSfM 4D1EL*`^H2`VeISj-( O7h((`k.RePF\LR-(98`$ eL(REйh]@:x9*]SREHe O*\,5@^H`RUEY*>RW>]!Ud Rb( k@F^-( k* xS] ef\ M Q`eREHeG+d`5@phJӖEc FCE(].Lx kEh]@NM.F) *&]`d((זE-*-WQSXm@F\ yNMzwR@ef\ M Q`eREХ-*1Sf*m@F\;9:l&>(R*ȥ-*"eSeIR:lp%W:lSYj-((MzaIl (N>O84j.*iEeqdSW]@4'T:xd*5((M8ԥ-((MzaIl (N>O84j.*iE-(u@IaX$i`(-((*hec 1YٖE-((F1WGr/&LSWtQ%L/*\54 ()R`P24r`"a*>$ mS"+\5Ww9S&>E-((4+ *@mWxO*]XeIjQk*ȥM4pjQk*Rqx `5@F\M9W-;;F\,*.g1(\̲-((:1 ) feF%ȥ`ecNtF4q0S@jiE-((:H_f-(^DP+8dEI ]@M a^+x5@F\RmXU-(ji$i*"ȥeGRW`F0)M zE-((E @xEE !:eȥb9 2%S .+:`"GR`eSS-(4L e"ECQ`b9 24" $P5@-WQSXХ4" $P5@.*iGFܲ-*txP + Td5@F\PN4"e `q!;VG?Xd`*1EhN4"e `i d5@d((w)EȥFEh]@:`<;x;9E@T`+LF %-W*yEh]@:`;9E@H(,qe0`D 9k*O%ȥh]@:`<;:l.g1(`D 9k*O%ȥh]@:`;9E@H(,qgT`+LF %-W*yEh]@:`qe0.g1(`D 9k*O%ȥh]@:`qe0;9E@H(,`D 9k*O%ȥh]@:`qgEf*F}@Q`T`+LF %-W*yEh]@:`qgH(,;9E@T`+LF %-W*yEh]@:`;9E@gc>F}@Q`T`+LF %-W*yEh]@:`.g1(qe0`D 9k*O%ȥh]@:`.g1(qgT`+LF %-W*yE* S$jjM.MF!Eh j )  (S$5W(`Fcm@mS%0 :j]Eȥ-(+8`$e``S eF}@q]@e\((+57(j +EJEH@-*IX`( *\EI-( k.4qWx"W%ȥ-(O_HeOR`ejM.MH5((`$:x*:x4!Nm@.aeW9XER`y*zaWd5@"O:`e:`b4d-(*i:lF!MXFAX2M.MbM%LM + Q`.aeW9XfF8j-J-( :j *X4*aMI4&A@"Oȥ-( :j;*jxM cWm+z\g&"q6d +9:lZ!"e Eh Rec -$O50M*\5@H5Өhec 1Ya(5@H5Ө-(*i:lF!M@;,4P (xPSjE-+F@: %g*]`aUj(6DQ(`$c.F 2MP-*( ]X49*+5W-+F@: %g*]I@rLSYg*]` j*`% %IjP>tdQ 9*P + fS @-n!@; f`-(;9E@3^+9x1+;jEe(*nMEf*<%X-(4SE']`(`d;-( &c e7LjaXȴe(*nMEf*<IXd,5@a&-( p,6sx;9E@hNc `_ `$jxȥ-( p,&N]XK E`:`eN^ܲ-( p,6sx;9E@Bn-@ z`e:l-;L5@']`b.WhR-( p,"ceREH5@#WaX`eL +8U$_X5XK E`Qk@tp (`)*eL mWh:1) ;9E@']ePe'l; +:`F$, ]Fc&"bTAEȥNc $5@Ef*<4%`k Q`ex,5@Eh R`'_j`  RqxPtpSEcjF%@5W(G*F-( p,`S  1eW+) :`z\-j\-((R`NML*`ed, (:1`S@5@1Y` mW{-:lh j{xtd;-j( i`Pȥ-*Ef*( *Ec ;9E@Et h(d`y0+%@ej^:`(`[Ne@q5^EcpޖE(%I\(V` !`9d,5@']`iOe]@f:yc1:lt; ` ^-( MX`)M z@hj4p$5R`zS (%I\((`y0&] +E$amWJ.H_P9X`$8m@JLVeIa Xd 9@IX*+,P5@H(P 9*J +dq44`5@l; +:yP5@24REȥSYwR@e 4sM:ihSS!XF]*$:eEPdL L REX@$8F ?Xd D5S>$ 9*q4(5Xd )U-(d5@bfe +z\]FcW(M l; +:yP5@24REȥ*E \t9 mWW.MeSL45@ (`$ (F:lReH1mSgW*]; :R).*GeSL4-(%e WQ! n!@:yRj`-(jtpF)%H`5@) QXf%EL5W(`:i:lq .1ibFF WK,,\1@bTAE|`SW^+]KQ`hRSS$Eȧh]@ et_-(d M Q``:R*x(R`+jL*eL5@1O ^HdV4]USfx RemSgW(QEHHa(R5Xf\mW5F$-(5@^H;-RF4p9d eW) k zL()SU(,S9EX1-*@*Ug|OWaWx,SS0(c&FZ^Z]0if>`) Q`SeW`S&*'q4kxd`L5N\ M8`i"EHeL,\`y*`-`fRj%@ ]Fd~<+)U:l-( F\RMF&>@aL(]F'tdPS %gW5@'_j`%4R.A@`R:f_LD; *t^TkL:RȥISa@I^MM:xdM@pD$fe +fe5WS$,5@^H*f]kS-*cS&=Hg :UaI.J>-( ;hhfA@eN^\bM.M4p*jLd4eW`O4K8.O.2JO8Ehm@aJL mW{-:l]@7(xNdLRJqd 9k*O "e]gȥ.}04J:l-(R]@z :nMeI@.zgW(D*`z*j-(d'jO:]Ed*]Gq]@ex]EȥrE3e\5@'_j`,8*7S&'Q`lh^-((+<`qAXUjU:>`d+Rj4R z`#WaX`it\ ;E-(+G.M_HCX`p*j$5@'_j`5W(]@N4}S`,6*M0;9E@'_j`L5@^H;-hS-*@eSBnmXhF Q`eH + zh]@ ek-qXd M Q`eV;4_HfRj%@;; /QD, 9W!@2*`bfAX@-(e\9*^1" \`F!Q`q!"dO;9E@cQA0:@(R*;jiE@Q`&"^`;-c>F^-)S'H(jG*Q`mQmYF4s9*$dL5@.4RHN^\fe +Qk4-(R5Fc%H z\ )YD1@c** 2eEL+49 aL54(`$\`(lDD@ {:`HL-n!Eȹc FCE(L].LxeJD \٨-( \(`USE-( \(`F)%ȥhm@aJL mW{-:l]@7(xNdLRJqd 9k*O "e]gȥ.}04J:l-(R]@z :nMeI@.zgW(D*`z*j-(d'jO:]Ed*]Gq]@ex]Eȥe)@.dD@Q q4c>F^R``*iEe)@.dD@Q q4c>F^R`RjS$9Xjtp;(4 @h^)Ih:1.AQx 1f;%ȥh *1f; iR [*M@:`z\Q>SY'jO:Ec7i:c4eO.!.$S@BtpEȥBtp,D+L#.Rx`i-:l`S@ 9*JX:lJFM8- J+* O*M `PSj`fJFM8.A@*O*\ *edgc%LNeLbeLjL&L *O*\i%0 (ER*ed eHBtpdjpUH8=HgL: &"^%*LL5@ (5X(#8L(nWQ*$a0RJ-(#.R`r'ed8N@XhGzF MJ$P ;jmW R1S$xL# F0;-*a:;j=He+qL +]ILk b+.IXLMj\5@P)wR@ej\4MEHb(#8b:UGmW;_.#QLemSfxV.+9 mSfx`q! aXJ4m@zEd,4h]@ _MHe=Hg4(9*K-Hg;t\Oh(-(Q a]X-(:EFO"H'4(+n.Rx@t\ tV*`zLz8 :{*yRedgP) :xeF$,e]NM@P)ed eHXhGUTV*m0^*Tm0kj) ff-\T]@r'Hk1x*E@f:lScH!XazF>4FMj&e@`P)(g*J:lIY50+M e:\x E9X$6E f"V*eQx 9k*O d@圥te@edjc1X:^`S%LM ed(:l^HP5@Ne&`S 3F\eJSeW:l-(+wR@ek-Ehy4S$SWmSgW( x>U@6i%HfcXUS$SWmSgW(i - zLRy:z(*\>U@8jedM f]XjJ`) 0(>U@7+REdfaJp*1h]@&MLza]EdP + /QD]I; .f]ELS@KXd j*/ ; `*>-(i%0-SL4S@1Y_. "%c .4 :l@hS :y` R1Ye0:1)%L\ R[Ng.ML61et^J\S`S@J(5W(]@8PQg) R`6Z!,O|,5@ (SEcjFL) f+F(`:`Tej&\-*D1@k?Xd R1Ye0L{4.c.M; -()Nj_.H5@]Xd,5@T@`i-*(e\4*eWI(5Y5Whm@JL6iI@Q`eT]@4^:l #.RxEh5@SEcjtjiD5@f]X`?Xd)U]V4]0 R5(,S-:leW+:lVOLS@4*ec .M eHF yY@IY50O*]Xe0*&`@4US`; IFOz( +9:lkim@`RRjngf0MWFOJ(Qg:`eFc*\`):E]Wen_mSgW*pKQ9PD(J$c*UL6`Ld$E E7%L \)zD$*M8RJ;9`$:l`*y7X8e3N%@feRS-j-(ASgHC@c%HeR-( (`]kI^SIW9L ;R@` ;Sj_;9*Q`EL*i&e04-($%#;9 edO*\QSH5`WWcJ$ji) F\P&]d(-(2*`mWӤc:H) jL5@*y\!EHeSfM `5@;-gi-(p$`O*OmQx:j$ R3FNL ;R;) :yP;7*fgfH(9UY]@.Nq*\/*\5@p9 ` *1lk ej (NN%Es SqL*c ) %LjRx.M MF\`ae0V1c4M@"-`cW^M*$x.bFOH:`%@L,L6, (MBfIIeW(,5@!^X`p&AS:kL \:lS`"c* 4j\5WI;*yR`H*ecb0`-(EL*iM7+H+`@ ( M*$TL5@;-b8dx5@%@-( (NM EI(,5@r%W`,5@rE%L*>:(P *VeJ` -t_8E-( x:jeJO- O:_Z^(mX]@4jc 9\eOLk 4&>z(;eI-(HJ4 Ri*Q`e^)RN@t\; eL b!F>&]efI@pEKf*.H5@I*`q) Q`e:HJ49Q'Q`3FN|L$e@eU5S; RcS*1U-( (eU5S`)0j5@pl8G EI`pxd$'*F^*FL EeqIieI.LM )P`5@HJfJ``5@ 9KEWQ`5S%W2ji2@+F) ifIIZ!Q`e&zdL ;b]@e(4h:l-(NL:`(@-( ;:he( DSW-( (`J`p +RJbLJ]eL +Da c&_*$;-eU5Se;j\c>t-(btpF RELEf* *z(-(1O 4IEHc*UL SS$fM:inaLL+L:*O "" gL5@]R`,j``V&yzD]FgW+L ;jj+ F0M .\ 9`q!HJ]e#  eS$,5@Dd9 1E| O:]`R)M.`3cR^M$ mWT]@ (;%@@H`&/*$ O.]Qx ^JJx`eDLa@.gyF_D*Hf]dg7:i`a!@**ecS*pUDeRc%L].>`4]H RgG*j4a`SMf REX`). -*x-( ()I@a+.* +MF\mX]@6GaN}I$)D;1( M1+G!F*M$5@MN1SW:l `SSH5`lE^-(..O %`RMI-(2 {m@:`%DEHe%(`-(ASgHC@_qW(L j1:l@lMW` ;j_*$SW;`;-fA@V9 IS`*UF) c4Q`P )E@(4e\` i) f_Lj) &L9+ 7Y`dk E*1SX$ R) ;*; ISgH ( vReL)I@b$1WSX$)+.m@ed :fF>%0-(hH2*ISdeUUI`H(i -(]FfeL$ -j#.mQxs) :l@-( R)aQ`f]gp`:`~aELnMHOnM $4-(HJ4M q:y9,(j`*D:p) :` i `+F*79I "d O7h+.`+jO:1x:s:l-8"MHeSL6d5@%DDRs):` ^Ed]1@%-j9$*\-EI:NjG*i) .c7.MxL6+Q`E*_H`]J$eL{!d79"s-*L*-(]FC-^1:`%D@qL5@2-^1e9dbdM .M i)x; p5%SxO4-(HJ4 (圥S%W-(*`, ;S*cqDeU5S; Rpw)I4` q!e(5@ (PeIE8mSiX`< RJ``U`M p*1`( 9IyF\*\.( (SQ$k5-@iLL5@%D`S5WZ%>c1@ptji`H-(HJ4 (` i`;8zF +*y:1HeW)D:+:FeXf_.H,f NEXH961e` J`/*L)SF*$dR4cD (`; ;hG:ZD:-(I[NG m@]L:@]@;F S5WRpdJSY$8  JLOtGj$LtL"WY*^(V&y0 JF*$'S1TOi\Rx-(:J`ib4*`;jG+F:lmXRS-j*yixL9D@%*N>`2nmI%R($4*/ I@; WQEIf]kp`L9D`;:l^'H8P5@ :l$fUI`HX(4$)I@p$*!) rE .D^M i;*V2H4`]FeLL y^m0$Gj)0( Re'LM UW4`RJUHgQ`ejl*`M 7Oed8  JLD:lE$K9*eddSQ$(JeWI@edSQ$S @:y:N$:l4tL"WY*UTV*`i- p(,5@]Fb`7H(dP4-(D*%)`5@0(;-fgW D3F1@:uk%LO(T]@c&M&].}IJFM8@^'eiddS Q`/SEdlj) :`$1S+`8(:$]H]FeL;-RUk*_d*+*_Lx%@H S5W9L\Q@4nm@Rbf]X`Ytt^FD":l@-(4ES1@p1xP vR`ei-*`Va:wR@.c&M -(L(: -(()6id)ReL"s-*caj&eL R`k .\+jGQ`%Uei!:`1TF9D +&:%H R]UE@;el(R:J`q!%X!S'fe\1@mWQR@5W(5@$;j`e "jSl(\*:j`(ej I*D SS$L+ E+RjE-( J&M4*$;--W*h+f :l`f4IXi \G` DRE`t\Oh(mWxE (6(R`)LP]F@pfa^.&AX9 .g*\5@.4R:`\x (@-(^\X(,5@r$`^Ht\F HMWmX$D+aJKb.1Gb4V[*$ހS2.aLk ;q+]F$LJ]` :l$ QX",eU5S; RtP5@mSgW(0+k1@Q`e] RE`P( D(Fx mS[J-) .H :EH-( J4R;8*!;j*f(bm05SR`Q8`gI*yd.$*L1I$ vM*$d(]EI-(jG*Q`f]X$%*$5@N*Q MX+j_50 ^-(fF 9,(O]%LQe\;-Tc Q`eeH4W`L5@&:9*mQ@D,5@HxI.Rx$ w*ORx-(]:fD;*yj( c O.1x $Lr'ce4Qd %:@HxFeI`"_UeIS4!I*US'6h)@; mWaOQ`eI@O*^jd:j&eL$5@JdaKj p4*y9~-*@;eFuj@9("(~j_Rx];RMjfji-(0$4`i(TP$ R` :X*+O.OJ`P** jp*:`, ;0(`Jd,5@S-*+*i*mS`*O%H圥ei-( J`)W) x ^]@aj&eL2$ (HO]FEe@mW` Pj"qL5N\9*&Jq9*;-*(M*) KeW:`:l`M :neGR`em@pGLRJ*/ eNMW`I@aTI@%D]V4]W`,SWa@e]@;e(R(t O7  O:"`N(5W( \Rx$ pmX@d mS-+ RQE6JO8(aSaEL *mI.H\;.Ret: Tc Q`eF^>EErM0+L`mSgW(+KH4P<@HfAL``-(6LM ec1@eSL45@JO&:x$J8Q`5@4] Q`e:l`hG;8Tc &H9iJU]c1E|R09SK EeL5@Jdi+/Q^erFAW-(qSee!SgWx^ $ ^-( tV*!Qi9L-M4M G 0E%<&UX ;*yjqW()0:j&eI%Qx-(%;&DaWSUD LJ35W`&A0mW:M e+i* M8*mWO%H@Y-%cte\fx79)*c,!.M@`-(bD,+F!ME`>^fEd`+9\HMwJJeW*mQR*ySU` !`d*1E|-;;R-:tj4 i.HqD"s-*cR1 f4L$r'ce4Qd %:4RfE PHVdP$9 EH1Yd` u F*O $mWaLx%DLP5E-;Vd` G"4a@fe9L@-(kEX`;*Ki `,r'cR1 e4Qd*:( tf>-S ]EH4(%*$jp *5/QJc1X`cH4`d5%F$ M%H`5W(M e]EtM ]Xf) b(e;. V;.Red+` ^=HgLi -(ze\Je]@;dg.$ *E.HSW!@-+q! _&:qx xk Q`&+j VmSh(5^ *@faF q45@]Xd,5@e]d圥-(":lc*H`5@R1%L u W edS@NF1W4a@VO8t\ie0{M h Rec 1Y-("(,S@[NdL:kRIEL5FAXt.-j]S!E|M%LRy^*8GL8p$4Qg.^O1xy07(j`b( x$#Vg%@-(pfIX(9.) j;9EEHeGaM9O _Q(41@;edM@ NX( R`O.D5N\ +:feO4()Sna)%H-( pmX(:UEW-)TmR*y`dL5@S-*4$8 j%ImWx +IX`+fH(5ReWg*\;--(+-( J@-(^E9X(`L5@R1 0(圥-(]:fDM@"E g(5@L(,R@fm; ;%t ReA@Q`AJU05@"(HDm@RNg*$5j:]ELk q4RJ2gH-(+aQ,`FTc +j_5W(]X*) :y`Y(R)) b(UQE0M 2JFe Id+M 9*$j(,g*^>Nb*.MiRN *F^Hec7i:` j*`b.1G9*$yt\nSXO|k a1x`]eSE2$SW!@.*dG;&m+9j(Q*`q!;!#Q*$L5@eWMYE-( ;j<+4(% h(, R1SMz`+*fE7%L SgRqL&N]05RaQmXi-(x;9E@BnmX(D%#W*E7OWLT pmXUW4`)k <+(G"DE-((q.AX-(R(t;f~t\5@%EH$S@ "fe*jeW:lcW]HeIEh`b.T-(L(O4-()+ EhOL%-(:Jx*@$0:lSY-( tdF ed _Jb(^+Rqx%bQ`,E0 SUE-( 4+N.A@NM:R*)%H 4s-j``p(P  5WEeW:l-( :l+Q`e4R_XgeHT0L圥*`em@"4aX`e*4" $M e {-^Lp`":]XL-`i-(_d9,(na`EHEHi"V*eQxaQ+O ;rg*LL5@1O SeW *1-( M 0(圥-(4k:yL(R`H@Yt@- rE @eQEӰ-*.H:Sn%I-( R1SMtO_HeO.Mc4] V,(pk-*y9;e` %:-*.H:Sn%I-( R1SMtO_HeO.Mc4] V,(pk-*y9;e` %:9 zSHE-(+E*L 1`na$&]jc /QD, R)*`)`i)*qxVd,S*ꖅhF 4(P(dR]V.!-`e*`(:l-S zN~S9XӖQ f`Y- ;`R)^erd RE-*F$ vSReLM qSgqtS 6(V-( pD_Me<+:`e(S@H!eSL45@6(M -$SWaQ,L5@HL-n!EL5W( )W:lM Q`.*iG*;+ _eN*M;*yj\-`:yP5@cSaYE-*F$ vSReLM qSgqtS 6(V-( pD_Me `L5@_G*@]*Q`JeS&lV_:`eSL45@6(*c7SM+j_50LgT4":%0SEХ-*F$ vSReLM z(i)*qxV&a$"ceF8-(RE4R-SL4SEb*%HqQD )0` S;%cb"4a@f"4a0:J{x-:pDkF ;  ȥ*LS@aJHP jg*LSWaQ,:1)%H89d(*4Fzdd8m@M[*]FF>4M@e`)t]EH&zO I@ff4:h*h圥hGRcP`z( Rj&S64M  *e`TPS@pd(P_]NM^fe0S@:eTtpSEcj1x Rjb@SYl(J(S@&]UHd(P P*!Sd) L:ek ~l(J(4h圥D9dk &JJIY50 QXEHEHpPePpz( MEj$LSIl(J(SL50M 0U0h IW1@.H5@bTA@inM edSEbEHELSq]@%dx\1@bTAETEHT,p[*eM%(`L*O SIl(J(L,SEb`&; z_ EeP8H(:lre@]FaS$+:h]Ry%H]RyG-]FeE``4( P,IY*G(E]P)FT^*`HX(5@P)`Sj$5(5@FT) eSL4d*(`q!;Nl9 `84*"( RSYWYE*f) fVO %7+R`b+-:ltd@f) fVO fM|LRJeMNf) fVO #%|LRJeMNӀ1(*c -d\eby q4tL9]k*R`e=H]H]FE%Xf""YsSBtr`9]k*LҨ"*]H]FE%Xf]RӺl" ĥV%VO%[4^nH٨y"4eͅ"!FI"dW&ܥ).**y**1S*ĥE̷%F@EFIJ%eR̥RLEVWa MWaIc&cUVWce d@EfO%m;*rAqr̥HѨ-R*MZWV:\LҨKyE˨L`(pME4aE4O4c4h$:e4SYХ&\q4^&\:{yV:)PaEEdf+-]F#%X.]F#%XW2JFܥR:neĥqLR̥qL"4IqLeqLk%X"W.e%X"E9 d.M%e(EKORWe(Y$ʓ(4gW̥ a_%ZfEa_%ZfIEYӥKTaEZfE9:x9*+]e̥V&Rtxڻ%c&%c4EEj]]d̥]detex̥texe =HzF$aE&E7ҥJd̥aWRW>%E ӅSWde]%f3J$J$J$J4]NE4Rji 败SF4;(4̥;(4ee .bEF॒teEADS--p1.c*̥&*4 .ʥJSjܥ.7pn%^N%dElӅ  dХmD4ӧE%:eaiJE-^*%cܥͅG%UO%TaEYY@mDܥ SܥL:eXe̥*ij**h7xWNp׬f]EYtiKQe*%USf:yyV*ZHMӰ]UD(eWXR>EFE Sjܥ5NWĥ.F:lEl4f*e[IY5Ӱ4)SVIp(j_e7 7 *Q7 eOeeOkk.MXk.MX.IW`̥.IW`e l+e l+kJFM8JFM8JFM8%).#&*WWF̥f%fꨥMFܥҪ S Sl1l*Ӓ$jnttХƥX*dХ!NE-^LW-(JjDSS.c$I!QDNa F&RUtdM*_҉e:J:uk4KQeEEZ=HAUd]Xj9TeW̥TeW̪E(g>EE(e&E(feH!Z.%H!YH![RKWTEK-WETaEK-WeR`rC qW`,rX&MRtx&M*a:&MzH&MeX&ML`P_."*R1D. RfEd@aXd@&fizmo-0.7.10/libfizmo/src/test/etude.z5000755 000765 000024 00000041000 12606024314 020623 0ustar00chrenderstaff000000 000000 P970325B6.11 B=HBk.EB]ӰBH!&+05:?DINSX]bglqv{ E"%)-0369<?BEHKNQTWZ]`cfilorux{~  IS    e  .," ? H22FBj:y*]Y*&`S "&:@f.Fx9Dj_R`Q`eb 圥;j:y*]Y*"&:X4tF4p+naE-(|)HI,eWVeW`4F) e]d8(-eWVeW`4F) e]d8dlDEEȧI4eWVeW`4RUa) R)e]d8(5eWVeW`4RUa) R)e]d8dlDEEȧI8eWVeW`4. zS%WE)%|+f:&*E9eWVeW`4. zS%WE)%|+dP(I0eWVeW`4nuI994+f:&*E1eWVeW`4nuI994+dP(I .eWVeW`4jiK-Hg\(/eWVeW`4jiK-Hg\dlDEEȧI,eWVeW`4.IIWYf:&*E-eWVeW`4.IIWYdP(I*eWVeW`4jiPf:&*E+eWVeW`4jiPdP(I/eWVeW`4F) e]d8( 0eWVeW`4F) e]d8dlDEEȧ  :`eh(*4ph6E J%9`; p`:`eh(*4phSQ$Ej_. ]+Q`ASS$R4\zFe :l-(R:J`5F%W`$ R~dsQ`.)SS$R4\{- ;LF HC:`SeI@"RH([$2DI B , B O{//[I4eWVeW`4RUa) R)e]d8(5eWVeW`4RUa) R)e]d8dlDEEȧI8eWVeW`4. zS%WE)%|+f:&*E9eWVeW`4. zS%WE)%|+dP(I0eWVeW`4nuI994+f:&*E1eWVeW`4nuI994+dP(*c Q`*U4;$xE%|+EHSR .dEȧ*c Q`;&ERji*:j$*w%ȥHSR .dEȧ*c Q`][*(m*e]HSR .dEȧ([*c Q`-)%s'-*w a0etO Qk%L54+85F%WdE/[HSR .dEȧ*c Q`-)%s'-*w a0d+%[*w%[z*%NF fHM0g+Heb QXtd*:eWVeW`P ;DHMIz*`-(:j`*4pNm@1-(g+exex P圥*c Q`$. +E*c Q`$mWa@e]*c Q`;&E`][*(+E*c Q`$. mWa@e]etF4q0]@1:y) q4etO Qk 4`e*\; ]R`+%L mS-SL4gz*H c&eR*y`!\圥([*c Q`-)%LR)*w%ȥ*c Q`-)%Ld9e]*c Q`-)%L+j_ *w%ȥ*c Q`-)%LR)`;&E*w%ȥ*c Q`-)%LR)`][*(+E*c Q`-)%Ld9L+j_ *w%ȥ*c Q`-)%LR)`;&E`][*(+E/[*iz*`+EaLR D\\ SQ$ -;eXgaMIZG.V. :`%;ReLM Jj4*eOH1-+ *eOVaI42j$-(|)HW^*b>{ex]@jx9)%;-;;"]HeIEDE|@jNMeOjO.R`ed ;naLG{^M84p'}WPztdS]8j0;j-;>LM %<`5@`(9@-+ OjO.Rx *@f@"JRl];:lD e+JEW`5@.R@:y*]Y*b.F-+ OjO.Rx@Y-+td hy)I-( M +,d$'Hea@Rqx*:- |D+%|=tt\F iDR*E|   v  A  Ov O v OOv  A  w    Ow O wOOw   x   Ox O x OOx K Ό ڰ-;%V&{1-(! O*$4**hQ.MliX4P(e|S@qD j4b# z\O*^+*\` ;D4FA@cW(5^UF\R)GHt\5@]HR``jQY

ip`@-(|)``4-(4*>x%@%8`ip``$eH6+j\Mt^@H R1SMeb  E|RU:*``>x,$`<p(5@"!ScX- eb  @iMt^@H Rl`ib  %DM D*^#%H ^BtI([II c/XFI/[I>U@ 9dxEHf]U(-;EdL.-j]Sd+z*`R%H4S$5*c%ȧeOt t^FD`%tR)l(. `etR). `t ;$qe;-) $`t ;$d9;-) $d9ȧ*y`A.CB0C7U0O A/"fD4*f4|H5(a*EY( A /"fD4*fH|H5(bjr.ME A1"fD4*f[ :j+ B '"fD4*fT@OA_"fD4* **eEOnAYji)nMI #*ܥOSB\`84*5B -AL#WbUAN#Wb4e|AN#Wb*%lAN#Wb\W/S#.R`A^U+ARA^T UBUUT/xBYji)nMI #*ܥO]BD -ANIShE+ATJa@&*EAQJa@a2*EOji)nMI #*ܥAF-Vaj)d!ܿ&A!aj)d!\L j1:jWY A\-Saj)d!ܿ-;eXg:uk Q`*y) #:1xD #*_H*y*:j*w%;F @AS4reLM zF aJEd,4 #*_z\O*^+*\61hz$*JH\4-(O*^+*\`jS $P):!@+j_50PS\ (圥d*y*;8*+4gWLP5@HL*zEj*y)$:uk%>PO C b%4/"('ڌ-;eXg:uk Q`*y) #:1xD #*_Hg(4*lS@qD)@qd4*j:y*]Y*eidS@g)%H5EdP+:^`feF:`ISh圥D!SeIWY A.T+nM5IEQ*'IE j:y*]Y*"&:X;8*\;%|4(V_ e) :uk%HF j:y*]Y*"&:X;8*\;%|4(djR.IIWYE*`z1-;eXdeW;`6E (-(*(*aHRi@-+(-(*( mWx*`aHRi`j:y*]Y*;kMe"]Hd:NM\(X) `R)0L|H9``*y:.M@Q`eSeW;`VDdM [**L)M8`z\O*^+*\`S VUWG.:aM;8-j\圥Xdd f]Yj4-(JOEL\OS-*A^41-(+@dOA^4Re*c qE@; ;_SM0圥.II x A.C OS -(:NM:y*jzM:`S EID;-*z\O*^+*\ QXtdjR.IIWY`Rz*^NL) e*c KR()M *&W $j:y*]Y*4-(gSdiih*:feI-(+.(*`aHRi` DaIE|-j:y*]Y*"&:X4tdjR.IIWY@ Ό(j:y*]Y*"&:X4V_ e) :uk% ڌj:y*]Y* Ge.I0O*^W /S#.R`q4P]ISgG-;;"]Hd]!Ud4j:y*]Y*"&:XtdPjR.IIWYD ڌ Ό8j:y*]Y* Ge.I0O*^W /S#.R`q4L]ISd ڻ-A F IE j:y*]Y*"&:X;8*\;%|4(V_ e) :uk%HF j:y*]Y*"&:X;8*\;%|4(djR.IIWYE*`z1-;eXdh6E @(P O*\.M@Q`:uk :`eXhfaReH+j_e)@aHRi`E(,+F (@9`e.MXUF\d5@\(,M@+j_e_> "'LSWeWVeWX:l-(M^# e:le@ aI$i:`8E|eW_UghG#W:l!@UW "$`+j_e] :y*j:y`.M@Q`e]d$5@S-*gm@Nm8( -j#%Hy*(4:j`z\Nd6E @]I\LP4h`"ei@g:l$ %:lEdd f]Yj4-(JOEL\OS-*A^41-(+@>U@%HE(xg E`fc4T5@eXd圥.II]0 A.C1M0+EH圥O .II]0PO  W6hk>UI&NE(>U@%H4Re`+E|5hk>UI bT4/%HAOA.EC*c eWI*$-(:NM:y*jzM:`S EID;-*z\O*^+*\ QXtdjR.IIWY`Rz*^NL) e*c KR()M *&W $j:y*]Y*4-(gSdiih*:feI-(+.(*`aHRi` DaIE|-j:y*]Y*"&:X4tdjR.IIWY@ Ό(j:y*]Y*"&:X4V_ e) :uk% ڌj:y*]Y* Ge.I0O*^W /S#.R`q4P]ISgG-;;"]Hd]!Ud4j:y*]Y*"&:XtdPjR.IIWYD ڌ Ό8j:y*]Y* Ge.I0O*^W /S#.R`q4L]ISd ڰ-A. [[*-]J "'HEH :J$fM>-;eXgqe\SWeWVeWV_8:lM*$Ndx5@0( :*@.]UEEL/*\zM: x` ; :`z$~@-(RRiRUdVee]dF> qe[*e]dS@4>UI.(S@:y*j) ; q45@/S#.R`A^E|-(RRiRUd*4p6E (ee] $1*edF>naE@y*;%Hz SQ$(*4>U@J(4*`R2@M ).d5@1*`!\eWh  g) eHSWaQ,圥h)@e] $1*edq(j:y*]Y*;VO.MemS #*_L54d6E3ed`5@]XVa:.gQ`eI@-(圧*4%>;j̥PGivenO \hk>UI&NE(3hk>UI bT4/%ȧ-;eXgeeWVeW:.gf&a2*$j9:(gS&dRRi`圥I  >j:y*]Y*"&:X;8*\;%|4(V_ jiP圥?j:y*]Y*"&:X;8*\;%|4(djRS&H  KQ.M-c J(Eȧ -@m@,EI:y*]Y*"&:X- ; &`S cUVdgS&d OAXm@,EIE  rATm@cH!J%IE\A(S&cH!J%Iji9 -c J(E  1m@0(NScQdQ*D\\  :aj&e0)M J(Eȧ -@m@,EI:y*]Y*"&:X- ; &`S cUVdgS&d OAXm@,EIE  ATm@cH!J%IEAsS&cH!J%Iji9 aHRiTmE|5EdPd5*c%L\OS-*A^47x "$gS&dFO:y*]Y*`+#Y:l-()M :M4 qD+:^`f+#1x5@`(Qd`5@-c Rj@-;Qj`ih)@e`+aHRi.I@\RLSWeWVeWGcUVga2*SjS&HZG.V*S&> A.K  aHRiS&HE -ARS&,EIE+S&0(NScQdQ*D\\  1m@0(NScQdQ*D\\  5EdPd5*c%L\OS-*A^47xgS&dM(M4 A.M Oa-c jiPEȧ -AXS&,EIE  1S&0(NScQdQ*D\\  -T*c !QEIEʠoj:y*]Y*"&:X4V_ :M4%Lk ejM4"(+:^j$p`:i9e04-(O*^+*\ QXtdjRjiP@ ڌVj:y*]Y*"&:X4tdjRjiP`i-(@`(jiPU%@]Yj) $^.Me` ΌA7j:y*]Y*"&:X4V_ :M4%Lk ; %LdR@ ڌvj:y*]Y*"&:X4tdjRjiP`if# :M4 ,EI@q[*Ld 9 NgWLpwR@ejM4"(9  SQ$ ڌ%At3j:y*]Y*"&:X4V_ :M4%LM ; &` Ό<j:y*]Y*"&:X4tdjRjiP`Yf# ; &`O ڌAOj:y*]Y*"&:X4V_ :M4%LM ; &`L `; cUVgKQeE@:M4% ΌXj:y*]Y*"&:X4tdjRjiP`Yf# ; &`OH:`,dV_8ZG.V*jiP@ ڰ-;eXg9`zL(*w q!;%V&yIII8*>.(5@V2Hi`tdEF\5Y5W-;;"*$x5@pUH@q[*LRJIX:hGI:lI@R1 .R@0+p ;DVddF:l*w i-*`:R).*G[Nd圧dd f]Yj4-(JOEL\OS-*A^4:yE(,+$5S;%H9`e.M@Q`e]d QXtdVL\V$na`R[N"xP(`z\O*^+*\:1m@fh(;--S IXESMe]d A.ReXdeIE5- E(,+@Q'yEȧ Ż MQ'yEȧ`W ĠveOtyd*y*;8*+4.be`*z圥Hz]$]; *^+:%E b'TVT/` >MO  bU4/A GbS4/A.Ea4/B04/C9H  b:4/B0+4/C94/U0V tBcV(( O*\fGJwR@ `R%H4];%L\ ; SeWaQ,P ;D-(*zeOȧmV/` - R:td+ :UER*y)%ȧA<*^+:%Et|H5(:y*]Y*]*; ܧM7+S0:`^\4+(REIHEF@ɏ:9e.<=>?*c8J8!@q4|F!M@i`&jJO H%ȧdPEte`^\4+N*c +j_50L5@pUH@cM1-(+`L5Q@&`L 3F\eJ- z\O*^+*\`|)qJ8d圥t\4Fg*\-;V2H4(; `Ld4Ld5@d QX`Yh6E NcR(d`5@tjyF p :jMX`,S@-$RJeMc7l( )-(|)L5H@ ue0O*^+*_L5H@:kQH`O*^+*_LM eL*iJF: 9`z(eDRkk $-()NnMLeWTgI(rg*L4`** %pEEFa@Et!SeIk eXd%*$;>4.b!\eW`LR)`ji*:j`inuI994g+ȧ!SeIk eXdS*$4>$<p]ELL `eXeI^#1xmS+*c%t;%ceI@-(`PfVO emS*w KRF8(@nuI*c f&e`.IIfMeXd41I*c f&4em8($gnaEEdO*^W8RqxM@:y*j-]JgFF>:y`+EjRNM*c j:]X.c Q`eWI.M!\eW`tO8c7(jc.M"%`.f*L-W^)$\EL``$`i-(+-(^-;)j:y*]Y*(`P)m@R:l4)ȧ-;)j:y*]Y*(`P)m@\d0唥ꤥSF4EF1Se*%,*%,*$@$@%,h%,h$$%,%%,%$$jQYPjQYhjQYsRDdsRDdEsRDdŀcr.0jxrS*`ňprS*`Ō(jQY8jQYxjQYEsRDdŜsRDdŠeEt%(eEtE8eEtePeEtheEtxeEtpk*Epk*pk*pk*Epk*pk*2mEt(2mEt82mEtP2mEth2mEt%qjEqjqjqjEqj!#R.*t(!#R.*tƀ8!#R.*tƄP!#R.*tƈh!#R.*tƌq]Iq+tEq]Iq+tq]Iq+tq]Iq+tEq]Iq+t]0ƤrMtEPb&ates e%EtLe%EtPe%Ets.E*es.E*s.E*Er.0j(E:]Et !I:1ԥq %Dte^et+--RY4VM%sHDQEr.0j(E:]Et:{*(t:{*(tj_e!Sd41X4*Y**\ D`L{z*$F) e]ZG.V. :`%;ReL*F:i!SeI #*\k5%M(A^YzF%r.M@:u%.IIM(A^Y.IIzF%r.M@:u%(F%0,NdjS& E:y:l.(ieӰsSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*LҨ"*]H]FE%Xf]RӺl" ĥV%VO%[4^fizmo-0.7.10/libfizmo/src/test/gntests-h2.z5000644 000765 000024 00000016000 12606024314 021512 0ustar00chrenderstaff000000 000000 @970311B6.11 B=HBk.EB]ӰBH $).38=BGLQV[`ejoty~.," ?5e``F*#.R`Q`et+QX9 I@9 ) feb  %D :*b e]E|N!M` j*`H(]!Ud Re:JO@ceRiI4-( ^d%t.g;!Sg;WY%X`t"SW`*\.IIWY`t+-A1H9A2H/A3H%A4HA5HRA6HYA0Cc? 646"4t KSf:&*  B76W Tt6"X TtHEȾUt Sf:&*E?!SeI #*_eXdL Ry圥*! "(4*fI@ *;fESd%4J&k ʔ%4N&k %4J&k J%4jQYE%4PjQYQE%8hjQYiE%8|E:]@%8j.R`H@xR%%8j.R`H@pR%%8 J&k E%8J&k Ŝ%8J&k Ŝ%8(jQY%88jQY%8#Y(%< #Y(%<#Y(%<#Y(Ч%<#Y(觲%<#Y(%<e@%<(e@%<8e@%<Pe@%<he@%@xe@%@\(%@ \(%@\(%@\(Ч%@\(觲%@2m@%@(2m@%@82m@%@P2m@%Dh2m@%D:jKE]%D :jKE] %D:jKE]%D:jKE]%D:jKE]%D!#R.*tŜ%D(!#R.*tE%D8!#R.*tŜ%DP!#R.*tE h!#R.*tEE :lE ]0ŜE D4ЧE Pb&aE :)(E :)(̧E :)(ЧE e%@E Le%@E$Pe%@E$(E:]@ʔE$9gW(ĨE$).F&E$ !I:1E$9 D%-RE$9 D%Y4eE$9 D%6L-E$9 D%eE$SS$zGR E((E:]@QEE(P9gW(PE(W%Eq4r`E(W%Eq4r`V* +Eȧ xWY%@eXeӰVcA^`P)@6-+]XV$$]X`` 4nM4圧-A CAJ%Q*/A J]Y#AJ+B C~Բ!\eWAL#WbUAN#Wb4eAN#Wb*%AN#WbBCײ/S#.R`A^eUBCӲA^TɀUBCڲ*y) !\eWiANIShEYATJa@&*ECA\Ja@".":lE@R&*%*RtQ* SQ$S 4()SgWIF\ ;D*c.MI'nMEt5@:y*]Y*``R4j(L񨲲-(O*^+*\F_(EY (EH B . B !a{/9/9ޕѻ B ] B M{x)fj9F_H]X`` 4(E-AJ&SAHIIAJ2e=AJyQƜ1AJ:%ALH*yAJ#̥ A GqETeWVeW*"&\:`圥:`qEH圥F_f:&*I/<E+ I/<. lDEEԥI/<nuI;(4 RyI/<.II xWYI/<xL.&3EH-( R1SM.\iXeO4((:l/Qc_Rqx,;8`L4M Q`q]@aYl!EtP P5`9*eI@-(x+9:le@%8P$i-*`_SE#:]XI/<DLf:&*I/<Tk I /<jiK-Hgf:&*I/<:y*]Y* :jORWj_`a)S9d AN:k:neE .MX]JL994!nuI;(4 Ry #*_]JL )7 :`jng$]JL994LM`"tO 5N1S;8&tO qe,`S;8'圥IF*,G ASS$R4j,/@*,G .)SS$R4j-/@圥 B't /<2c&M&] b!9eLDII-(O*^+*\׏E؏+@f"*HGХ-AJ&SAHIIAJ2e=AJyQƜ1AJ:%ALH*yAJ#̥ A GqE[*c.Me) :uk%h]X`P+`-(+`6E (`Rj "$Td9`z4+A^`e*c aj)nM4dM E S eXdRUEY(圥tp5@`(+t\$%#-aHRieiP>tdF :y*]Y*F @,d N1fH(5@:y* [Ne@ed],E SeXdRUEY(圥V* +Eȧ+zHBsSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*LҨ"*]H]FE%Xf]RӺl" ĥV%VO%[4^fizmo-0.7.10/libfizmo/src/test/gntests.z5000644 000765 000024 00000016000 12606024314 021203 0ustar00chrenderstaff000000 000000 @970311B6.11 B=HBk.EB]ӰBH $).38=BGLQV[`ejoty~.," ?5e``F*#.R`Q`et+QX9 I@9 ) feb  %D :*b e]E|N!M` j*`H(]!Ud Re:JO@ceRiI4-( ^d%t.g;!Sg;WY%X`t"SW`*\.IIWY`t+-A1H9A2H/A3H%A4HA5HRA6HYA0Cc? 646"4t KSf:&*  B76W Tt6"X TtHEȾUt Sf:&*E?!SeI #*_eXdL Ry圥*! "(4*fI@ *;fESd%4J&k ʔ%4N&k %4J&k J%4jQYE%4PjQYQE%8hjQYiE%8|E:]@%8j.R`H@xR%%8j.R`H@pR%%8 J&k E%8J&k Ŝ%8J&k Ŝ%8(jQY%88jQY%8#Y(%< #Y(%<#Y(%<#Y(Ч%<#Y(觲%<#Y(%<e@%<(e@%<8e@%<Pe@%<he@%@xe@%@\(%@ \(%@\(%@\(Ч%@\(觲%@2m@%@(2m@%@82m@%@P2m@%Dh2m@%D:jKE]%D :jKE] %D:jKE]%D:jKE]%D:jKE]%D!#R.*tŜ%D(!#R.*tE%D8!#R.*tŜ%DP!#R.*tE h!#R.*tEE :lE ]0ŜE D4ЧE Pb&aE :)(E :)(̧E :)(ЧE e%@E Le%@E$Pe%@E$(E:]@ʔE$9gW(ĨE$).F&E$ !I:1E$9 D%-RE$9 D%Y4eE$9 D%6L-E$9 D%eE$SS$zGR E((E:]@QEE(P9gW(PE(W%Eq4r`E(W%Eq4r`V* +Eȧ xWY%@eXeӰVcA^`P)@6-+]XV$$]X`` 4nM4圧-A CAJ%Q*/A J]Y#AJ+B C~Բ!\eWAL#WbUAN#Wb4eAN#Wb*%AN#WbBCײ/S#.R`A^eUBCӲA^TɀUBCڲ*y) !\eWiANIShEYATJa@&*ECA\Ja@".":lE@R&*%*RtQ* SQ$S 4()SgWIF\ ;D*c.MI'nMEt5@:y*]Y*``R4j(L񨲲-(O*^+*\F_(EY (EH B . B !a{/9/9ޕѻ B ] B M{x)fj9F_H]X`` 4(E-AJ&SAHIIAJ2e=AJyQƜ1AJ:%ALH*yAJ#̥ A GqETeWVeW*"&\:`圥:`qEH圥F_f:&*I/<E+ I/<. lDEEԥI/<nuI;(4 RyI/<.II xWYI/<xL.&3EH-( R1SM.\iXeO4((:l/Qc_Rqx,;8`L4M Q`q]@aYl!EtP P5`9*eI@-(x+9:le@%8P$i-*`_SE#:]XI/<DLf:&*I/<Tk I /<jiK-Hgf:&*I/<:y*]Y* :jORWj_`a)S9d AN:k:neE .MX]JL994!nuI;(4 Ry #*_]JL )7 :`jng$]JL994LM`"tO 5N1S;8&tO qe,`S;8'圥IF*,G ASS$R4j,/@*,G .)SS$R4j-/@圥 B't /<2c&M&] b!9eLDII-(O*^+*\׏E؏+@f"*HGХ-AJ&SAHIIAJ2e=AJyQƜ1AJ:%ALH*yAJ#̥ A GqE[*c.Me) :uk%h]X`P+`-(+`6E (`Rj "$Td9`z4+A^`e*c aj)nM4dM E S eXdRUEY(圥tp5@`(+t\$%#-aHRieiP>tdF :y*]Y*F @,d N1fH(5@:y* [Ne@ed],E SeXdRUEY(圥V* +Eȧ+zHBsSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*sSBtr`9]k*LҨ"*]H]FE%Xf]RӺl" ĥV%VO%[4^fizmo-0.7.10/libfizmo/src/test/random.z5000644 000765 000024 00000013000 12606024314 020771 0ustar00chrenderstaff000000 000000  @021026Beh6.21 B=HBk.EB]ӰBHUVWY[]^_`PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPc.," ?- (CbA("_D\\1jF Qk*/ aɨA)AP"_D\\1jF Q`]7 aɨ CP_Vl_&W_2OQg_+T(fTaEȥ_+X4;%ȥBBQ_P/-IwBNUbñ c+uA(J|J=oԕ?[΍܍B1C9U0 ]X`OA^41@ BP"BBQ_P'$ c(BBQ_P/TBBQ_PB+9 BP"BBQ_P'- SA Y_k OAqAQG?; N B2MEBBF_E/TBBF_EB+T2$USA IAqAQG?x  BFDBBF_E/c]BBF_E/_*e BFeUBBF_E/v-IwX4{ cu#_ BF"BBF_E'$Ώ1Um%|QE_jEE|b(EXiEV*  EHd*c%-A1HA2H AqC[(@QR:lW^BEAN"&A O /A![f) fVO 4חA" *(%7+c7:lE*A#T2c7:lE*A$Z:P)E*B f) BN]F$ ^ re@E>-Bϲ>UBѲpU-H AO]Ӱ AJ&* \ހ// %L54 *y]U4E*BVCQCʲ]FrEg%@IRRX:l-Q>E*Qp(E]BJeXB CL-$@ BGk AU%9*^(E]%-AP:ed\ftӌAR4 R-䥌AJTתysAJ*)gAJ!%[ALzMܥMALaEӰ?A L!E7e1A LzM%#A J*)A NP)FԥA ZtS$,f=Hf4ҥA#1(fY(/E*AY]RSj /E*lJ(/4/AF`q!rE H(4R/-Ӏ/a?Ӏ/E*E*AUB/E*AJE&AJEܥ AEE `/E*B+c FG"&Ǫ N5Ӱ# ORWB[;N5/<`P^*/&OOBbٲit\ ~5W=H俲4/ E*BcA#[Bě#BěaCBGBðBBEɏɏcC6t#Bo A E B C~ BC J!/A#/PALN5ӰDAG;AL"&-AVSY:jـAQfM ɏgI//ɏQɏ?׏;ɏ׏Q-OCSPtTOɏOOCMbIoVrzH o/ /ADADAMFCð5Q@&W'1`wR@ej_f9)E@Q`*9Drq.ISaLn*)nF*$;-3H-(1`SS!@Qk-()Ne\)y1Se-+&TO4(,+j\S8-(S9R@q]@exd@Te]@(+-`4,`~*mQ`,)-*(F`e`(`4DG{M `)y`; qD 1-()yJdF@: q(DG{MM]7 qD 1fe1JdF@"%0P5@D`,^Ex-(SS!X(S&F>M4HbTS-F(j(6E (*`eF8(SSeI$k :yP\ \4e`^\.b!2Uȧ19  g1+:`e O*\,5@-E ;]U]X*y) |ȧD54+9EX4-()y1-(*y*;]U]X*y) ȧ6FO&W$6iUWF &re:kRiRN|:+j_R`%H`&m]-4Lk 圥]FeE``4( P,IY*G(E]P)FT^*`HX(5@P)`Sj$5(5@FT) eSL4d*(`q!;Nl9 `84*"( RSYWYE*f) fVO %7+R`b+-:ltd@f) fVO fM|LRJeMNf) fVO #%|LRJeMNӀ1(*c -d\eby q4tL9]k*R`e=HsSBtr`9]k*LҨ"*]H]FE%Xf]RӺl" ĥV%VO%[4^"%fizmo-0.7.10/libfizmo/src/test/unicode.z5000644 000765 000024 00000011000 12606024314 021135 0ustar00chrenderstaff000000 000000 |}tr020606B[ q6.21  HSR!" QasB=HBk.EB]ӰBHMNOQSUVWXHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH.," ?atp*c.MVO%[S9%ExEHÏnˍܐ7AC([`8$//[-AJ%Q*A J]YAL#WbUAN#Wb4eAN#Wb*%AN#WbW/S#.R`A^UoAUA^T UCANIShE3ATJa@&*EATJa@a2*E/Hɰ `([/U bTV t//[/ B Pt/ Iɾ H ɏ׏BFTIW//W//X-BC ;A H1A H'A HA HAH AE[(@QR:lW^BEAN"&A O/[ A![f) fVO 4חA" "(%7+c7:lE*A#T*c7:lE*A$Z2P)E*B f) BN]F$ ^ re@E>-Bϲ>UBѲpU-H AO]Ӱ AJ&* \ހ//U%L54 *y]U4E*BVCQCʲ]FrEg%@IRRX:l-Q>E*Qp(E]BJeXB CL-$@ BGk AU%9*^(E]%-AP:ed\ftӌAR4 R-䥌AJTתysAJ*)gAJ!%[ALzMܥMALaEӰ?A L!E7e1A LzM%#A J*)A NP)FԥA ZtS$,f=Hf4ҥA#1(fY(/[E*AY]RSj /[E*lJ(/[4/[AF`q!rE H(4R/[-Ӏ/[a?Ӏ/[E*E*AU:/[E*AJE&AJEܥ AEE `/[E*B+c FG"&Ǫ N5Ӱ# ORWB[;N5/[<`P^*/rOOBbٲit\ ~5W=H俲4/UE*BcA#<Bě#<_BěaCBGBðBBEɏɏcC A E B C~ BC J!/0A#/ALN5ӰDAG;AL"&-AVSY:jـAQfM ɏgI//[ɏQɏ?׏;ɏ׏Q-OCSPtTOɏOOCMbIoVrzH o/U/0ADADAMFCðjn"(eXd%H`&m:i*圥*c.MeMQ*&*@-;aSeS!@aj)S$;-j`"z1$\*F^c`DŽtp*c.M:uk (f[NdEH7xNe0 #*\:h(5@Z^c*"&]I-;-(`} #*\(; WY[*`eitdPD:epEa.̥&e$cUV*IS&ew*M*$)P$"]]FeE``4( P,IY*G(E]P)FT^*`HX(5@P)`Sj$5(5@FT) eSL4d*(`q!;Nl9 `84*"( RSYWYE*f) fVO %7+R`b+-:ltd@f) fVO fM|LRJeMNf) fVO #%|LRJeMNӀ1(*c -d\eby q4tL9]k*R`e=HsSBtr`9]k*LҨ"*]H]FE%Xf]RӺl" ĥV%VO%[4^fizmo-0.7.10/libfizmo/src/sound_interface/sound_interface.h000644 000765 000024 00000004615 12606024314 024757 0ustar00chrenderstaff000000 000000 /* sound_interface.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef sound_interface_h_INCLUDED #define sound_interface_h_INCLUDED #include "../tools/types.h" // volume: 1-8, 8 being loudest // repeats: 1-254, 255 means forever // routine: set "start_interrupt_routine" to (routine) when sound // finishes (00 for don't call anything). struct z_sound_interface { void (*init_sound)(); void (*close_sound)(); void (*prepare_sound)(int sound_nr, int volume, int repeats); void (*play_sound)(int sound_nr, int volume, int repeats, uint16_t routine); void (*stop_sound)(int sound_nr); void (*finish_sound)(int sound_nr); void (*keyboard_input_has_occurred)(); uint16_t (*get_next_sound_end_routine)(); char* (*get_interface_name)(); char* (*get_interface_version)(); int (*parse_config_parameter)(char *key, char *value); char* (*get_config_value)(char *key); char **(*get_config_option_names)(); }; #endif /* sound_interface_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/screen_interface/screen_interface.h000644 000765 000024 00000013263 12606024314 025234 0ustar00chrenderstaff000000 000000 /* screen_interface.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef screen_interface_h_INCLUDED #define screen_interface_h_INCLUDED #include #include #include "../tools/types.h" struct z_screen_interface { char* (*get_interface_name)(); bool (*is_status_line_available)(); bool (*is_split_screen_available)(); bool (*is_variable_pitch_font_default)(); bool (*is_colour_available)(); bool (*is_picture_displaying_available)(); bool (*is_bold_face_available)(); bool (*is_italic_available)(); bool (*is_fixed_space_font_available)(); bool (*is_timed_keyboard_input_available)(); bool (*is_preloaded_input_available)(); bool (*is_character_graphics_font_availiable)(); bool (*is_picture_font_availiable)(); uint8_t (*get_screen_height_in_lines)(); uint8_t (*get_screen_width_in_characters)(); uint8_t (*get_screen_width_in_units)(); uint8_t (*get_screen_height_in_units)(); uint8_t (*get_font_width_in_units)(); uint8_t (*get_font_height_in_units)(); z_colour (*get_default_foreground_colour)(); z_colour (*get_default_background_colour)(); uint8_t (*get_total_width_in_pixels_of_text_sent_to_output_stream_3)(); int (*parse_config_parameter)(char *key, char *value); char* (*get_config_value)(char *key); char** (*get_config_option_names)(); // This function is called from the interpreter once the story has been // read into memory and variables like version etc habe been initialized. // This allows the interface to check if the version is supported at all, // allocate the right number of windows, and do other version- and story- // dependent stuff. void (*link_interface_to_story)(struct z_story *story); // "reset_interface" Called in case of a restart. void (*reset_interface)(); // close_interface is called if either the game is quit by the "QUIT" // opcode or in case an error has occured. In case of a regular quit, // the "error_message" is null. int (*close_interface)(/*@null@*/ z_ucs *error_message); void (*set_buffer_mode)(uint8_t new_buffer_mode); void (*z_ucs_output)(z_ucs *z_ucs_output); // For version <= 4 games, only the first to parameters are used. For version // 5+ games, both "tenth_seconds" and "verification_routine" are set in // case input-timeout is active. This "read_line" routine must return the // final number of chars in the input or -1 in case timeout-input was // active and the verification_routine returned true. int16_t (*read_line)(zscii *dest, uint16_t maximum_length, uint16_t tenth_seconds, uint32_t verification_routine, uint8_t preloaded_input, int *tenth_seconds_elapsed, bool disable_command_history, bool return_on_escape); // Returns the input char in the uint8_t range and -1 for timed out input. int (*read_char)(uint16_t tenth_seconds, uint32_t verification_routine, int *tenth_seconds_elapsed); void (*show_status)(z_ucs *room_description, int status_line_mode, int16_t parameter1, int16_t parameter2); void (*set_text_style)(z_style text_style); void (*set_colour)(z_colour foreground, z_colour background, int16_t window); void (*set_font)(z_font font_type); void (*split_window)(int16_t nof_lines); void (*set_window)(int16_t window_number); void (*erase_window)(int16_t window_number); // Must allow moving of cursor in lower window to make print_table work. void (*set_cursor)(int16_t line, int16_t column, int16_t window); uint16_t (*get_cursor_row)(); uint16_t (*get_cursor_column)(); void (*erase_line_value)(uint16_t start_position); void (*erase_line_pixels)(uint16_t start_position); void (*output_interface_info)(); bool (*input_must_be_repeated_by_story)(); void (*game_was_restored_and_history_modified)(); // interface might want // to redraw the screen int (*prompt_for_filename)(char *filename_suggestion, z_file **result_file, char *directory, int filetype_or_mode, int fileaccess); // optional // UI-specific filename dialog. If not implemented, return -3. Return >=0 on // k, -1 on error or -2 in case user cancelled (ESC or similar). // interface custom procedures for autosave (at @read time) and restore int (*do_autosave)(); // optional int (*restore_autosave)(z_file *savefile); // optional }; #endif /* screen_interface_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/screen_interface/ScreenInterface.cpp000644 000765 000024 00000013400 12606024314 025321 0ustar00chrenderstaff000000 000000 /* ScreenInterface.cpp * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include "ScreenInterface.h" #include "Interpreter.h" ScreenInterface::~ScreenInterface() { } char *ScreenInterface::get_interface_name() { return NULL; } bool ScreenInterface::is_status_line_available() { return false; } bool ScreenInterface::is_split_screen_available() { return false; } bool ScreenInterface::is_variable_pitch_font_default() { return false; } bool ScreenInterface::is_color_available() { return false; } bool ScreenInterface::is_picture_displaying_available() { return false; } bool ScreenInterface::is_bold_face_available() { return false; } bool ScreenInterface::is_italic_available() { return false; } bool ScreenInterface::is_fixed_space_font_available() { return false; } bool ScreenInterface::is_timed_keyboard_available() { return false; } bool ScreenInterface::is_preloaded_input_available() { return false; } bool ScreenInterface::is_character_graphics_font_availiable() { return false; } bool ScreenInterface::is_picture_font_availiable() { return false; } uint8_t ScreenInterface::get_screen_height() { return 0; } uint8_t ScreenInterface::get_screen_width() { return 0; } uint8_t ScreenInterface::get_screen_width_in_units() { return 0; } uint8_t ScreenInterface::get_screen_height_in_units() { return 0; } uint8_t ScreenInterface::get_font_width_in_units() { return 0; } uint8_t ScreenInterface::get_font_height_in_units() { return 0; } z_colour ScreenInterface::get_default_foreground_colour() { return Z_COLOUR_BLACK; } z_colour ScreenInterface::get_default_background_colour() { return Z_COLOUR_WHITE; } uint8_t ScreenInterface::get_total_width_in_pixels_of_text_sent_to_output_stream_3() { return 0; } int ScreenInterface::parse_config_parameter(char *key, char *value) { return 1; } char *ScreenInterface::get_config_value(char *key) { return NULL; } char **ScreenInterface::get_config_option_names() { return NULL; } void ScreenInterface::link_interface_to_story(struct z_story *story) { } void ScreenInterface::reset_interface() { } int ScreenInterface::close_interface(z_ucs *error_message) { return 0; } void ScreenInterface::set_buffer_mode(uint8_t new_buffer_mode) { } void ScreenInterface::z_ucs_output(z_ucs *z_ucs_output) { while (*z_ucs_output != 0) { if ((*z_ucs_output & 0xffffff80) != 0) fputc('?', stdout); else fputc(*z_ucs_output & 0x7f, stdout); z_ucs_output++; } } int16_t ScreenInterface::read_line(zscii *dest, uint16_t maximum_length, uint16_t tenth_seconds, uint32_t verification_routine, uint8_t preloaded_input, int *tenth_seconds_elapsed, bool disable_command_history, bool return_on_escape) { int input; int current_length = 0; uint8_t input_size = 0; zscii input_zscii; if ((input = fgetc(stdin)) == EOF) { exit(-1); } while ((input != 10) && (input != 13)) { if (current_length < maximum_length) { input_zscii = Interpreter::unicode_char_to_zscii_input_char(input & 0xff); if ((input_zscii == 0xff) || (input_zscii == 27)) input_zscii = '?'; *(dest++) = input_zscii; input_size++; } if ((input = fgetc(stdin)) == EOF) exit(-1); } return input_size; } int ScreenInterface::read_char(uint16_t tenth_seconds, uint32_t verification_routine, int *tenth_seconds_elapsed) { return 0; } void ScreenInterface::show_status(z_ucs *room_description, int status_line_mode, int16_t parameter1, int16_t parameter2) { } void ScreenInterface::set_text_style(z_style text_style) { } void ScreenInterface::set_colour(z_colour foreground, z_colour background, int16_t window) { } void ScreenInterface::set_font(z_font font_type) { } void ScreenInterface::split_window(int16_t nof_lines) { } void ScreenInterface::set_window(int16_t window_number) { } void ScreenInterface::erase_window(int16_t window_number) { } void ScreenInterface::set_cursor(int16_t line, int16_t column, int16_t window) { } uint16_t ScreenInterface::get_cursor_row() { return 0; } uint16_t ScreenInterface::get_cursor_column() { return 0; } void ScreenInterface::erase_line_value(uint16_t start_position) { } void ScreenInterface::erase_line_pixels(uint16_t start_position) { } void ScreenInterface::output_interface_info() { } bool ScreenInterface::input_must_be_repeated_by_story() { return false; } fizmo-0.7.10/libfizmo/src/screen_interface/ScreenInterface.h000644 000765 000024 00000010545 12606024314 024775 0ustar00chrenderstaff000000 000000 /* ScreenInterface.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef ScreenInterface_h_INCLUDED #define ScreenInterface_h_INCLUDED #include "types.h" class ScreenInterface { public: virtual ~ScreenInterface(); virtual char *get_interface_name(); virtual bool is_status_line_available(); virtual bool is_split_screen_available(); virtual bool is_variable_pitch_font_default(); virtual bool is_color_available(); virtual bool is_picture_displaying_available(); virtual bool is_bold_face_available(); virtual bool is_italic_available(); virtual bool is_fixed_space_font_available(); virtual bool is_timed_keyboard_available(); virtual bool is_preloaded_input_available(); virtual bool is_character_graphics_font_availiable(); virtual bool is_picture_font_availiable(); virtual uint8_t get_screen_height(); virtual uint8_t get_screen_width(); virtual uint8_t get_screen_width_in_units(); virtual uint8_t get_screen_height_in_units(); virtual uint8_t get_font_width_in_units(); virtual uint8_t get_font_height_in_units(); virtual z_colour get_default_foreground_colour(); virtual z_colour get_default_background_colour(); virtual uint8_t get_total_width_in_pixels_of_text_sent_to_output_stream_3(); virtual int parse_config_parameter(char *key, char *value); virtual char *get_config_value(char *key); virtual char **get_config_option_names(); virtual void link_interface_to_story(struct z_story *story); virtual void reset_interface(); virtual int close_interface(z_ucs *error_message); virtual void set_buffer_mode(uint8_t new_buffer_mode); virtual void z_ucs_output(z_ucs *z_ucs_output); virtual int16_t read_line(zscii *dest, uint16_t maximum_length, uint16_t tenth_seconds, uint32_t verification_routine, uint8_t preloaded_input, int *tenth_seconds_elapsed, bool disable_command_history, bool return_on_escape); virtual int read_char(uint16_t tenth_seconds, uint32_t verification_routine, int *tenth_seconds_elapsed); virtual void show_status(z_ucs *room_description, int status_line_mode, int16_t parameter1, int16_t parameter2); virtual void set_text_style(z_style text_style); virtual void set_colour(z_colour foreground, z_colour background, int16_t window); virtual void set_font(z_font font_type); virtual void split_window(int16_t nof_lines); virtual void set_window(int16_t window_number); virtual void erase_window(int16_t window_number); virtual void set_cursor(int16_t line, int16_t column, int16_t window); virtual uint16_t get_cursor_row(); virtual uint16_t get_cursor_column(); virtual void erase_line_value(uint16_t start_position); virtual void erase_line_pixels(uint16_t start_position); virtual void output_interface_info(); virtual bool input_must_be_repeated_by_story(); }; #endif /* ScreenInterface_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/locales/de_DE/000755 000765 000024 00000000000 12606024314 020642 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/src/locales/en_US/000755 000765 000024 00000000000 12606024314 020713 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/src/locales/fr_FR/000755 000765 000024 00000000000 12606024314 020700 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libfizmo/src/locales/libfizmo_locales.c000644 000765 000024 00000003440 12606024314 023364 0ustar00chrenderstaff000000 000000 /* libfizmo_locales.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef libfizmo_locales_c_INCLUDED #define libfizmo_locales_c_INCLUDED #include "../tools/types.h" z_ucs libfizmo_module_name[] = { 'l', 'i', 'b', 'f', 'i', 'z', 'm', 'o', 0 }; z_ucs default_locale_name[] = { 'e', 'n', '_', 'U', 'S', 0 }; #endif /* libfizmo_locales_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/locales/libfizmo_locales.h000644 000765 000024 00000014621 12606024314 023374 0ustar00chrenderstaff000000 000000 /* libfizmo_locales.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef libfizmo_locales_h_INCLUDED #define libfizmo_locales_h_INCLUDED #define i18n_libfizmo_COULD_NOT_OPEN_TRACE_FILE_P0S 0 #define i18n_libfizmo_INVALID_PARAMETER_TYPE_P0S 1 #define i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR 2 #define i18n_libfizmo_INVALID_BACKSLASH_SEQUENCE_IN_LOCALIZATION_DATA 3 #define i18n_libfizmo_WARNING_FOR_P0S_AT_P0X 4 #define i18n_libfizmo_FUNCTION_CALL_P0S_RETURNED_ERROR_CODE_P1D 5 #define i18n_libfizmo_ERROR_WHILE_READING_FILE_P0S 6 #define i18n_libfizmo_COULD_NOT_OPEN_FILE_NAMED_P0S 7 #define i18n_libfizmo_ERROR_READING_FIRST_STORY_BYTE_FROM_P0S 8 #define i18n_libfizmo_UNKNOWN_STORY_VERSION_P0D 9 #define i18n_libfizmo_ERROR_WHILE_CLOSING_FILE_P0S 10 #define i18n_libfizmo_FUNCTION_CALL_MALLOC_P0D_RETURNED_NULL_PROBABLY_OUT_OF_MEMORY 11 #define i18n_libfizmo_FUNCTION_CALL_REALLOC_P0D_RETURNED_NULL_PROBABLY_OUT_OF_MEMORY 12 #define i18n_libfizmo_FATAL_ERROR_READING_STORY_FILE 13 #define i18n_libfizmo_NOT_YET_IMPLEMENTED 14 #define i18n_libfizmo_INSTRUCTION_FORM_NOT_INITIALIZED 15 #define i18n_libfizmo_UNKNOWN_OPERAND_TYPE_P0D 16 #define i18n_libfizmo_OPCODE_P0D_IN_FORM_P1D_NOT_IMPLEMENTED 17 #define i18n_libfizmo_CANNOT_PULL_FROM_EMPTY_STACK 18 #define i18n_libfizmo_CANNOT_DROP_P0D_WORDS_FROM_STACK_NOT_ENOUGH_WORDS_STORED 19 #define i18n_libfizmo_PLEASE_ENTER_NAME_FOR_COMMANDFILE 20 #define i18n_libfizmo_FILENAME_MUST_NOT_BE_EMPTY 21 #define i18n_libfizmo_PLEASE_ENTER_SCRIPT_FILENAME 22 #define i18n_libfizmo_INVALID_OUTPUT_STREAM_NUMBER_P0D 23 #define i18n_libfizmo_MAXIMUM_STREAM_3_DEPTH_P0D_EXCEEDED 24 #define i18n_libfizmo_THIS_FUNCTION_HAS_BEEN_DISABLED 25 #define i18n_libfizmo_MORE_THAN_15_LOCALS_ARE_NOT_ALLOWED 26 #define i18n_libfizmo_INVALID_THROW_DESTINATION_STACK_INDEX_P0D 27 #define i18n_libfizmo_MAXIMUM_NUMBER_OF_STACK_ENTRIES_PER_ROUTINE_P0D_EXCEEDED 28 #define i18n_libfizmo_TRYING_TO_STORE_VARIABLE_L_P0D_BUT_ONLY_P1D_VARIABLES_ACTIVE 29 #define i18n_libfizmo_NOT_ENOUGH_STACK_WORDS_FROM_LOCAL_ROUTINE_ON_STACK 30 #define i18n_libfizmo_NULL_POINTER_RECEIVED 31 #define i18n_libfizmo_PROPERTY_NUMBER_0_IS_NOT_VALID 32 #define i18n_libfizmo_PROPERTY_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D 33 #define i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID 34 #define i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D 35 #define i18n_libfizmo_NO_PROPERTY_P0D_FOR_OBJECT_P1D 36 #define i18n_libfizmo_CANNOT_READ_PROPERTIES_WITH_A_LENGTH_GREATER_THAN_2 37 #define i18n_libfizmo_ATTRIBUTE_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D 38 #define i18n_libfizmo_INVALID_NODE_TYPE_P0D 39 #define i18n_libfizmo_UNKNOWN_CHAR_CODE_P0D 40 #define i18n_libfizmo_MAXIMUM_ABBREVIATION_DEPTH_IS_P0D 41 #define i18n_libfizmo_UNKNOWN_ERROR_CASE 42 #define i18n_libfizmo_INVALID_ZSCII_INPUT_CODE_P0D 43 #define i18n_libfizmo_INVALID_ZSCII_OUTPUT_CODE_P0D 44 #define i18n_libfizmo_VALID_COMMANDS_ARE 45 #define i18n_libfizmo_RANDOM_GENERATOR_IS_NOW_IN_PREDICTABLE_MODE 46 #define i18n_libfizmo_RANDOM_GENERATOR_IS_NOW_IN_RANDOM_MODE 47 #define i18n_libfizmo_LIBFIZMO_VERSION_P0S 48 #define i18n_libfizmo_STORY_RELEASE_NUMBER 49 #define i18n_libfizmo_STORY_SERIAL_NUMBER 50 #define i18n_libfizmo_CURRENT_Z_STACK_SIZE_P0D_ENTRIES 51 #define i18n_libfizmo_CURRENT_Z_STACK_ENTRIES_IN_USE_P0D 52 #define i18n_libfizmo_HACK_01__ROUTINE_STACK_UNDERFLOW_CHECK_DISABLED 53 #define i18n_libfizmo_P0D_BYTES_USED_FOR_UNDO 54 #define i18n_libfizmo_P0D_BYTES_USED_BY_TEXT_HISTORY 55 #define i18n_libfizmo_P0D_BYTES_USED_BY_BLOCK_BUFFER 56 #define i18n_libfizmo_PRELOADED_INPUT_NOT_AVAILIABLE_IN_INTERFACE_P0S 57 #define i18n_libfizmo_TIMED_INPUT_NOT_IMPLEMENTED_IN_INTERFACE_P0S 58 #define i18n_libfizmo_PLEASE_ENTER_SAVEGAME_FILENAME 59 #define i18n_libfizmo_ERROR_WRITING_SAVE_FILE 60 #define i18n_libfizmo_CANT_FIND_CHUNK_IFHD 61 #define i18n_libfizmo_ERROR_READING_SAVE_FILE 62 #define i18n_libfizmo_COULD_NOT_READ_RELEASE_NUMBER 63 #define i18n_libfizmo_COULD_NOT_READ_SERIAL_NUMBER 64 #define i18n_libfizmo_COULD_NOT_READ_CHECKSUM 65 #define i18n_libfizmo_RELEASE_NR_SERIAL_NR_OR_CHECKSUM_DOESNT_MATCH 66 #define i18n_libfizmo_COULD_NOT_READ_RESTORE_PC 67 #define i18n_libfizmo_CANT_READ_CHUNK_LENGTH 68 #define i18n_libfizmo_COULD_NOT_FIND_ORIGINAL_STORY_FILE_P0S 69 #define i18n_libfizmo_CANT_FIND_CMEM_OR_UMEM_CHUNK 70 #define i18n_libfizmo_CANT_FIND_CHUNK_STKS 71 #define i18n_libfizmo_INVALID_IFF_ACCESS_MODE_P0D 72 #define i18n_libfizmo_CAUGHT_SIGNAL_P0D_ABORTING_INTERPRETER 73 #define i18n_libfizmo_CANNOT_DIVIDE_BY_ZERO 74 #define i18n_libfizmo_OPCODE_JE_WITH_ONLY_1_OPERAND_IS_ILLEGAL 75 #define i18n_libfizmo_FUNCTION_CALL_TIME_RETURNED_NEG_1 76 #define i18n_libfizmo_UNKNOWN_CONFIGURATION_OPTION_P0S 77 #define i18n_libfizmo_INVALID_VALUE_P0S_FOR_PARAMETER_P1S 78 #define i18n_libfizmo_STORY_HAS_Z_VERSION_NUMBER_P0D 79 #define i18n_libfizmo_HISTORYOUTPUT_NO_LONGER_VALID 80 #define i18n_libfizmo_FIZMO_VERSION_P0S 81 extern z_ucs libfizmo_module_name[]; extern z_ucs default_locale_name[]; #endif /* libfizmo_locales_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/locales/fr_FR/libfizmo_i18n.txt000644 000765 000024 00000006265 12606024314 024124 0ustar00chrenderstaff000000 000000 Could not open trace file "\{0s}". Invalid parameter type "\{0s}". Function call "\{0s}" aborted due to error. Invalid backslash-sequence in localization data. Warning for "\{0s}" at address \{1x}: Call of function "\{0s}" returned error code \{1d}. An error occured while reading from file "\{0s}". Impossible d'ouvrir le fichier nommé "\{0s}". Error reading first story byte from "\{0s}". Unknown story version \{0d}. An error occured trying to close file "\{0s}". Function call malloc(\{0d}) returned NULL, probably out of memory. Function call realloc(\{0d}) returned NULL, probably out of memory. Erreur fatale lors de la lecture du fichier de jeu. Not yet implemented. Instruction form not initialized. Unknown operand type \{0d}. Opcode \{0d} of instruction form \{1d} not implemented. Cannot pull from empty stack. Cannot drop \{0d} words from stack: Not enough words stored. Please enter name for command file. Le nom de fichier ne doit pas être vide. Please enter a filename for the transcript file. Invalid output stream number \{0d}. Maximum stream 3 depth \{0d} exceeded. This function has been disabled. More than 15 locals are not allowed. Invalid throw destination stack index \{0d}. Maximum number of stack entries per routine (\{0d}) exceeded. Trying to strore variable L\{0d}, but only \{1d} variables are active. Not enough stack words from local routine on stack. Null pointer received. Property number 0 is not valid. Property number \{0d} is not allowed in story version \{1d}. Object number 0 is not valid. Object number \{0d} not allowed in story version \{1d}. No property \{0d} for object \{1d}. Cannot read properties with a length greater than 2. Attribute number \{0d} not allowed in story version \{1d}. Invalid node type \{0d}. Unknown char code \{0d}. Maximum abbreviation depth is \{0d}. Unknown error case. Invalid ZSCII input-code \{0d}. Invalid ZSCII output-code \{0d}. Valid commands are: Random generator is now in predictable mode. Random generator is now in random mode. libfizmo version \{0s}. Story release number \{0d}. Story serial number \{0s}. Current Z-Stack size: \{0d} entries. Z-Stack entries in use: \{0d}. Routine stack underflow check disabled. \{0d} Bytes used for undo. \{0d} bytes allocated by text history. \{0d} bytes allocated by block buffer. Preloaded input not availiable in interface "\{0s}". Timed input not implemented in interface "\{0s}". Veuillez entrer le nom du fichier de sauvegarde. Erreur lors de l'écriture du fichier de sauvegarde. Can't find chunk "IFhd". Erreur lors de la lecture du fichier de sauvegarde. Could not read release number. Could not read serial number. Could not read checksum. Release number, serial number or checksum doesn't match. Could not read Restore-PC. Can't read chunk length. Le fichier de jeu original "\{0s}" n'a pu être trouvé. Can't find "CMem" or "UMem" chunk. Can't find chunk "Stks". Invalid IFF access mode \{0d}. Caught signal \{0d}, aborting interpreter. Cannot divide by zero. Opcode JE with only 1 operand is illegal. Function call time() returned -1. Unknown configuration option \{0s}. Invalid value "\{0s}" for parameters "\{1s}". Story has Z-Version number \{0d}. History-Output object is no longer valid. fizmo version \{0s}. fizmo-0.7.10/libfizmo/src/locales/fr_FR/patterns.txt000644 000765 000024 00000053367 12606024314 023317 0ustar00chrenderstaff000000 000000 % % This file has been renamed from hyph-fr.tex to patterns.tex in July 2011 % for usage in the fizmo z-machine interpreter. Empty lines were removed % and lines containing comments divided into separate data and comments % lines for technical reasons. No other changes made. % % This file is part of hyph-utf8 package and resulted from % semi-manual conversions of hyphenation patterns into UTF-8 in June 2008. % % Source: frhyph.tex <2006-10-20> % Author: R. Bastian, D. Flipo, B. Gaulle % % The above mentioned file should become obsolete, % and the author of the original file should preferaby modify this file % instead. % % Modificatios were needed in order to support native UTF-8 engines, % but functionality (hopefully) didn't change in any way, at least not % intentionally. % This file is no longer stand-alone; at least for 8-bit engines % you probably want to use loadhyph-foo.tex (which will load this file) % instead. % % Modifications were done by Jonathan Kew, Mojca Miklavec & Arthur Reutenauer % with help & support from: % - Karl Berry, who gave us free hands and all resources % - Taco Hoekwater, with useful macros % - Hans Hagen, who did the unicodifisation of patterns already long before % and helped with testing, suggestions and bug reports % - Norbert Preining, who tested & integrated patterns into TeX Live % % However, the "copyright/copyleft" owner of patterns remains the original % author. % % The copyright statement of this file is thus: % % Do with this file whatever needs to be done in future for the sake of % "a better world" as long as you respect the copyright of original file. % If you're the original author of patterns or taking over a new revolution, % plese remove all of the TUG comments & credits that we added here - % you are the Queen / the King, we are only the servants. % % If you want to change this file, rather than uploading directly to CTAN, % we would be grateful if you could send it to us (http://tug.org/tex-hyphen) % or ask for credentials for SVN repository and commit it yourself; % we will then upload the whole "package" to CTAN. % % Before a new "pattern-revolution" starts, % please try to follow some guidelines if possible: % % - \lccode is *forbidden*, and I really mean it % - all the patterns should be in UTF-8 % - the only "allowed" TeX commands in this file are: \patterns, \hyphenation, % and if you really cannot do without, also \input and \message % - in particular, please no \catcode or \lccode changes, % they belong to loadhyph-foo.tex, % and no \lefthyphenmin and \righthyphenmin, % they have no influence here and belong elsewhere % - \begingroup and/or \endinput is not needed % - feel free to do whatever you want inside comments % % We know that TeX is extremely powerful, but give a stupid parser % at least a chance to read your patterns. % % For more unformation see % % http://tug.org/tex-hyphen % %------------------------------------------------------------------------------ % % French hyphenation patterns %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This file is available for free and can used and redistributed % asis for free. Modified versions should have another name. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \message{frhyph.tex - French hyphenation patterns (V2.12) <2002/12/11>} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % *BEFORE* using this file *PLEASE* run checksum on it: % % checksum -v frhyph.tex % % to make sure that it hasn't been damaged. % % Then if you notice anything wrong in french hyphenation please report to % % R. Bastian, D. Flipo, B. Gaulle at the email address: % % cesure-l@gutenberg.eu.org % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% checksum = "37208 1458 3078 34821" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%% The most famous good guys who worked hard to obtain something usable. % Jacques Desarmenien, Universite de Strasbourg : % - << how to run TeX in a French environment: hyphenation, fonts, % typography. >> in Tugboat, 5 (1984) 91-102. and TeX85 conference % - << La division par ordinateur des mots francais : % application a TeX >> in TSI vol. 5 No 4, 1986 (C) AFCET- % Gauthier-Villars % Norman Buckle, UQAH (nb; many additions) % Michael Ferguson, INRS-Telecommunications (mjf) June 1988 % Justin Bur, Universite de Montreal (jbb; checked against original list) % all patterns including apostrophe missing from nb list % after that, GUTenberg and specially Daniel Flipo and Bernard Gaulle % did their best effort to improve the list of patterns. % % ----------------------------------------------------------------- % % Adaption of these patterns for % - TeX Version 3.x and MLTeX 3.x (2.x) % and % - all fonts in T1/`Cork' and/or CM/OT1 encoding % by Bernd Raichle 1996/08/28 (using ideas from `ghyph31.tex' % as of 1994-02-13 maintained by Bernd Raichle). % (An adaption for the old MLTeX 2.x exists but can not be % tested in lack of an executable.) % % ----------------------------------------------------------------- % %\patterns{ %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%* 2'2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%a .a4 'a4 .â4 'â4 ab2h % df-bg 1998/02/07 for abhorrer .ab3réa 'ab3réa ad2h % df-bg 1998/02/07 for adhèsion & co a1è2dre .ae3s4ch 'ae3s4ch 1alcool a2l1algi .amino1a2c 'amino1a2c .ana3s4tr 'ana3s4tr 1a2nesthési .anti1a2 'anti1a2 .anti1e2 'anti1e2 .anti1é2 .anti2enne 'anti2enne 'anti1é2 .anti1s2 'anti1s2 .apo2s3ta 'apo2s3ta apo2s3tr archi1é2pis .as2ta 'as2ta a2s3tro %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%b 1ba 1bâ .bai2se3main % hyphen disappeared from french 5/2/94 1be 1bé 1bè 1bê 4be. 4bes. 2bent. % mute syllable: tombent (df) 22/02/94 1bi 1bî .bi1a2c .bi1a2t % like .tri1a2t for tri-athlon bg 12/27/93 .bi1au .bio1a2 .bi2s1a2 .bi1u2 1b2l 4ble. 4bles. 2blent. % mute syllable: troublent (df) 28/02/94 1bo 1bô 1b2r 4bre. 4bres. 2brent. % mute syllable: palabrent (df) 28/02/94 1bu 1bû 1by %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%c 1ç 1ca 1câ ca3ou3t2 % for caoutchou... added 3/1/94 df-bg 1ce 1cé 1cè 1cê 4ce. 4ces. % words ending with -cent (df) 22/02/94 2cent. ja3cent. ac3cent. é3cent. munifi3cent. réti3cent. privatdo3cent. inno3cent. es3cent. acquies4cent. is3cent. immis4cent. % .ch4 1c2h 4ch. 2chb 4che. 4ches. 2chent. % mute syllable: touchent (df) 22/02/94 .chè2vre3feuille % hyphen disappeared from french 5/2/94 2chg ch2l 4chle. 4chles. chlo2r3a2c chlo2r3é2t 2chm 2chn 2chp ch2r 4chre. 4chres. 2chs 2cht 2chw 1ci 1cî .ci2s1alp 1c2k 4ck. 2ckb 4cke. 4ckes. 2ckent. % mute syllable: stockent (df) 22/02/94 2ckf 2ckg 2ck3h 2ckp 2cks 2ckt 1c2l 4cle. 4cles. 2clent. % mute syllable: encerclent (df) 28/02/94 1co 1cô co1acc co1acq co1a2d co1ap co1ar co1assoc co1assur co1au co1ax 1cœ co1é2 co1ef co1en co1ex .con4 % missing from nb list .cons4 % missing from nb list .contre1s2c .contre3maître % hyphen disappeared from french 5/2/94 co2nurb .co1o2 .co2o3lie 1c2r 4cre. 4cres. 2crent. % mute syllable: massacrent (df) 28/02/94 1cu 1cû 1cy .cul4 % -- as .con4 .cons4 (march 92) %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%d 1d' 1da 1dâ .dacryo1a2 d1d2h 1de 1dé 1dè 1dê 4de. 4des. % words ending with -dent (df) 22/02/94 2dent. déca3dent. é3dent. cci3dent. inci3dent. confi3dent. tri3dent. dissi3dent. chien3dent. .ar3dent. impu3dent. pru3dent. % .dé1a2 .dé1io .dé1o2 .dé2s % originaly in JD file % .dé2s1a2 removed 09/17/92 because wrong for the % original JD 500 words test .dé3s2a3cr .dés2a3m % .dés2a2mi introduced 09/17/92 bec. i % can't see why désamidonner ran in JD. % Moved to .dés2a3m df 12/27/93. .dé3s2a3tell .dé3s2astr .dé3s2c % 1 moved 3 due to .dé2s 09/17/92 % .dé2s1e2 removed 09/17/92 because wrong for the % original JD 500 words test .dé2s1é2 .dé3s2é3gr .dé3s2ensib .dé3s2ert .dé3s2exu % .dé2s3h removed 09/17/92 because wrong for the % original JD 500 words test .dé2s1i2 .dé3s2i3d .dé3s2i3gn .dé3s2i3li .dé3s2i3nen .dé3s2invo .dé3s2i3r .dé3s2ist % .dé2s1o2 removed 09/17/92 because wrong for the % original JD 500 words test .dé3s2o3dé .dé2s1œ .dé3s2o3l .dé3s2o3pil .dé3s2orm .dé3s2orp .dé3s2oufr .dé3s2p % 1 moved 3 due to .dé2s 09/17/92 .dé3s2t % 1 moved 3 due to .dé2s 09/17/92 .dé2s1u2n 3d2hal 3d2houd 1di 1dî di2s3cop .di1a2cé .di1a2cid .di1ald .di1a2mi .di1a2tom .di1e2n .di2s3h 2dlent. % mute syllable: jodlent (df) 28/02/94 1do 1dô 1d2r 4dre. 4dres. 2drent. % mute syllable: engendrent (df) 28/02/94 d1s2 1du 1dû 1dy .dy2s3 .dy2s1a2 .dy2s1i2 .dy2s1o2 % missing from nb list .dy2s1u2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%e .e4 'e4 .ê4 'ê4 .é4 'é4 .è4 'è4 éd2hi % df-bg 1998/02/07 for rédhibitoire 1é2drie 1é2drique 1é2lectr 1é2lément .en1a2 'en1a2 1é2nerg e2n1i2vr .en1o2 'en1o2 épi2s3cop épi3s4cope e2s3cop .eu2r1a2 'eu2r1a2 eu1s2tat extra1 extra2c extra2i %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%f 1fa 1fâ 1fe 1fé 1fè 1fê 4fe. 4fes. 2fent. % mute syllable: agrafent chauffent (df) 22/02/94 % 1fi 1fî 1f2l 4fle. 4fles. 2flent. % mute syllable: gonflent (df) 28/02/94 1fo 1fô 1f2r 4fre. 4fres. 2frent. % mute syllable: balafrent (df) 28/02/94 f1s2 1fu 1fû 1fy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%g 1ga 1gâ 1ge 1gé 1gè 1gê 4ge. 4ges. % words ending with -gent (df) 22/02/94 2gent. ré3gent. entre3gent. indi3gent. dili3gent. intelli3gent. indul3gent. tan3gent. rin3gent. contin3gent. .ar3gent. 'ar3gent. ser3gent. ter3gent. résur3gent. % 1g2ha 1g2he 1g2hi 1g2ho 1g2hy 1gi 1gî 1g2l 4gle. 4gles. 2glent. % mute syllable: meuglent (df) 28/02/94 1g2n 'a2g3nat % (df) 16/01/02 .a2g3nat % (df) 16/01/02 a2g3nos % (df) 16/01/02 (pattern dia2g3n deleted) co2g3niti % (df) 16/01/02 'i2g3né % (df) 16/01/02 .i2g3né % (df) 16/01/02 'i2g3ni % (df) 16/01/02 .i2g3ni % (df) 16/01/02 .ma2g3nicide % (df) 16/01/02 .ma2g3nificat % (df) 16/01/02 .ma2g3num % (df) 16/01/02 o2g3nomoni % (df) 16/01/02 o2g3nosi % (df) 16/01/02 .pro2g3nath % (df) 16/01/02 pu2g3nable % (df) 16/01/02 pu2g3nac % (df) 16/01/02 .sta2g3n .syn2g3nath % (df) 16/01/02 wa2g3n 4gne. 4gnes. 2gnent. % mute syllable: accompagnent (df) 28/02/94 1go 1gô 1g2r 4gre. 4gres. 2grent. % mute syllable: immigrent (df) 28/02/94 1gu 1gû g1s2 4gue. 4gues. % words ending with -guent (df) 22/02/94 2guent. .on3guent. 'on3guent. % 1gy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%h 1ha 1hâ 1he 1hé 1hè 1hê hémi1é hémo1p2t 4he. 4hes. 1hi 1hî 1ho 1hô 1hu 1hû 1hy hypera2 hypere2 hyperé2 hyperi2 hypero2 hypers2 hype4r1 hyperu2 hypo1a2 hypo1e2 % missing from nb list hypo1é2 hypo1i2 hypo1o2 hypo1s2 hypo1u2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%i .i4 'i4 .î4 'î4 i1algi i1arthr i1è2dre % ill patterns missing from nb list il2l cil3l rcil4l ucil4l vacil4l gil3l hil3l lil3l l3lion mil3l mil4let émil4l semil4l rmil4l armil5l capil3l papil3la papil3le papil3li papil3lom pupil3l piril3l thril3l cyril3l ibril3l pusil3l .stil3l distil3l instil3l fritil3l boutil3l vanil3lin vanil3lis vil3l avil4l chevil4l uevil4l uvil4l xil3l % end of ill patterns 1informat % missing from nb list .in1a2 'in1a2 .in2a3nit 'in2a3nit .in2augur 'in2augur .in1e2 'in1e2 .in1é2 'in1é2 .in2effab % missing from nb list 'in2effab .in2é3lucta 'in2é3lucta .in2é3narra 'in2é3narra .in2ept 'in2ept .in2er 'in2er .in2exora % missing from nb list 'in2exora .in1i2 'in1i2 .in2i3miti 'in2i3miti .in2i3q 'in2i3q .in2i3t 'in2i3t .in1o2 'in1o2 .in2o3cul 'in2o3cul .in2ond 'in2ond .in1s2tab 'in1s2tab 'inte4r3 .intera2 'intera2 .intere2 'intere2 .interé2 'interé2 .interi2 'interi2 .intero2 'intero2 .inte4r3 .interu2 'interu2 .inters2 'inters2 .in1u2 'in1u2 .in2uit 'in2uit .in2u3l 'in2u3l io1a2ct i1oxy i1s2tat %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%j 1j 2jk 4je. 4jes. 2jent. % mute syllable: galèjent (df) 22/02/94 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%k 1ka 1kâ 1ke 1ké 1kè 1kê 4ke. 4kes. 2kent. % mute syllable: jerkent (df) 22/02/94 1k2h 4kh. .kh4 1ki 1kî 1ko 1kô 1k2r 1ku 1kû 1ky %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%l 1la 1lâ 1là la2w3re 1le 1lé 1lè 1lê 4le. 4les. % words ending with -lent (df) 22/02/94 2lent. .ta3lent. iva3lent. équiva4lent. monova3lent. polyva3lent. re3lent. .do3lent. indo3lent. inso3lent. turbu3lent. succu3lent. fécu3lent. trucu3lent. opu3lent. corpu3lent. ru3lent. sporu4lent. % 1li 1lî 1lo 1lô l1s2t 1lu 1lû 1ly %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%m 1ma 1mâ .ma2c3k .macro1s2c .ma2l1a2dres .ma2l1a2dro .ma2l1aisé .ma2l1ap .ma2l1a2v .ma2l1en .ma2l1int .ma2l1oc .ma2l1o2d .ma2r1x % nb (jbb: ?) 1me 1mé 1mè 1mê .mé2g1oh .mé2sa % missing from nb list .mé3san % missing from nb list .mé2s1es .mé2s1i .mé2s1u2s .méta1s2ta 4me. 4mes. % words ending with -ment (df) 22/02/94 â2ment. da2ment. fa2ment. amalga2ment. cla2ment. ra2ment. tempéra3ment. ta2ment. testa3ment. qua2ment. è2ment. carê2ment. diaphrag2ment. ryth2ment. ai2ment. rai3ment. abî2ment. éci2ment. vidi2ment. subli2ment. éli2ment. reli2ment. mi2ment. ani2ment. veni2ment. ri2ment. détri3ment. nutri3ment. inti2ment. esti2ment. l2ment. flam2ment. gram2ment. .gem2ment. om2ment. .com3ment. ô2ment. slalo2ment. chro2ment. to2ment. ar2ment. .sar3ment. er2ment. antifer3ment. .ser3ment. fir2ment. or2ment. as2ment. au2ment. écu2ment. fu2ment. hu2ment. fichu3ment. llu2ment. plu2ment. bou2ment. bru2ment. su2ment. tu2ment. % 1mi 1mî .milli1am 1m2némo 1m2nès 1m2nési 1mo 1mô 1mœ .mono1a2 .mono1e2 .mono1é2 .mono1i2 .mono1ï2dé .mono1o2 .mono1u2 .mono1s2 mon2t3réal % missing from nb list m1s2 1mu 1mû 1my moye2n1â2g %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%n 1na 1nâ 1ne 1né 1nè 1nê 4ne. 4nes. % words ending with -nent (df) 22/02/94 2nent. % fric-tionnent - syllable muette - bg 27/12/93 réma3nent. imma3nent. perma3nent. .émi3nent. préémi3nent. proémi3nent. surémi3nent. immi3nent. conti3nent. perti3nent. absti3nent. % 1ni 1nî 1no 1nô 1nœ .no2n1obs 1nu 1nû n3s2at. n3s2ats. n1x 1ny %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%o .o4 'o4 'ô4 .ô4 %'\"o2 % mjf % deleted 3/1/94 df-bg o2b3long 1octet % missing from nb list o1d2l o1è2dre o1ioni ombud2s3 omni1s2 o1s2tas o1s2tat o1s2téro o1s2tim o1s2tom o1s2trad o1s2tratu o1s2triction .oua1ou 'oua1ou .ovi1s2c 'ovi1s2c oxy1a2 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%p 1pa 1pâ paléo1é2 .pa2n1a2f .pa2n1a2mé .pa2n1a2ra .pa2n1is .pa2n1o2ph .pa2n1opt .pa2r1a2che .pa2r1a2chè .para1s2 .pa2r3hé 1pe 1pé 1pè 1pê 4pe. 4pes. % words ending with -pent (df) 22/02/94 2pent. re3pent. .ar3pent. 'ar3pent. ser3pent. % .pen2ta % pent- or penta- but never pen-ta bg 12/27/93 per3h pé2nul % pé2n1ul moved back 09/17/92 to JD def. .pe4r .per1a2 .per1e2 .per1é2 .per1i2 .per1o2 .per1u2 pé1r2é2q % 2r1 moved 09/17/92 to 1r2(it was a typo) .péri1os .péri1s2 .péri2s3s .péri2s3ta .péri1u2 1p2h .ph4 4ph. .phalan3s2t 4phe. 4phes. 2phent. % mute syllable: triomphent (df) 22/02/94 ph2l 4phle. 4phles. 2phn photo1s2 ph2r 4phre. 4phres. 2phs 2pht 3ph2talé 3ph2tis %%%% Here is an example of a pb involving phonetic and etymologic patterns 5/94 %%%% .phyto3ph2 % originaly, but wrong for phy-toph-thora 9/92 %%%% .phy2topha % for -pharmacie but wrong for phyto-biol.. 5/94 1pi 1pî 1p2l 4ple. 4ples. 2plent. % mute syllable: accouplent (df) 28/02/94 .pluri1a 1p2né 1p2neu 1po 1pô po1astre poly1a2 poly1e2 poly1é2 poly1è2 poly1i2 poly1o2 poly1s2 poly1u2 .pon2tet % JD hypenated it asis 09/17/92, exception .pos2t3h .pos2t1in .pos2t1o2 .pos2t3r .post1s2 1p2r 4pre. 4pres. 2prent. % mute syllable: empourprent (df) 28/02/94 .pré1a2 .pré2a3la % missing from nb list .pré2au .pré1é2 .pré1e2 .pré1i2 .pré1o2 .pré1u2 .pré1s2 .pro1é2 .pro1s2cé pro2s3tat .prou3d2h 1p2sych .psycho1a2n 1p2tèr 1p2tér 1pu .pud1d2l 1pû 1py %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%q 1q 4que. 4ques. % words ending with -quent (df) 22/02/94 2quent. é3quent. élo3quent. grandilo3quent. %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%r 1ra 1râ radio1a2 % missing from nb list 1re 1ré 1rè 1rê .ré1a2 .ré2a3le .ré2a3lis .ré2a3lit .ré2aux .ré1é2 .ré1e2 .ré2el .ré2er .ré2èr .ré1i2 .ré2i3fi .ré1o2 .re1s2 .re2s3cap .re2s3cisi % for res-cision 09/17/92 (missing from nb) .re2s3ciso % for res-cisoire 09/17/92(missing from nb) .re2s3cou .re2s3cri .re2s3pect .re2s3pir .re2s3plend .re2s3pons .re2s3quil .re2s3s .re2s3t .re3s4tab .re3s4tag .re3s4tand .re3s4tat .re3s4tén .re3s4tér .re3s4tim .re3s4tip .re3s4toc .re3s4top .re3s4tr .re4s5trein .re4s5trict .re4s5trin .re3s4tu .re3s4ty .réu2 % .ré1u2 % pattern rejected 12/2/92 % (don't hyphenate as ré-union nor réu-nion) .ré2uss .rétro1a2 4re. 4res. % words ending with -rent (df) 22/02/94 2rent. % es-pèrent - syllable muette - bg 27/12/93 .pa3rent. appa3rent. transpa3rent. é3rent. tor3rent. cur3rent. % 1r2h 4rhe. 4rhes. 2r3heur 2r3hydr 1ri 1rî 1ro 1rô 1ru 1rû 1ry %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%s 1sa 1sâ .sch4 1s2caph 1s2clér 1s2cop 1s2ch e2s3ch i2s3ché i2s3chia i2s3chio 4sch. 4sche. 4sches. 2schs 1se 1sé 1sè 1sê sesqui1a2 4se. 4ses. % words ending with -sent (df) 22/02/94 2sent. % massent - syllable muette - bg 27/12/93 ab3sent. pré3sent. .res3sent. % .seu2le % jbb .sh4 1s2h 4sh. 4she. 4shes. 2shent. % mute syllable: smashent (df) 22/02/94 2shm 2s3hom 2shr 2shs 1si 1sî 1s2lav 1s2lov 1so 1sô 1sœ 1s2patia 1s2perm 1s2por 1s2phèr 1s2phér 1s2piel 1s2piros 1s2tandard 1s2tein stéréo1s2 1s2tigm 1s2tock 1s2tomos 1s2troph 1s2tructu 1s2tyle 1su 1sû .su2b1a2 .su3b2alt .su2b1é2 .su3b2é3r .su2b1in .su2b3limin .su2b3lin .su2b3lu sub1s2 .su2b1ur supero2 supe4r1 supers2 .su2r1a2 su3r2ah .su3r2a3t .su2r1e2 .su3r2eau .su3r2ell .su3r2et .su2r1é2 .su2r3h .su2r1i2m .su2r1inf .su2r1int .su2r1of .su2r1ox 1sy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%t 1ta 1tâ 1tà tachy1a2 tchin3t2 1te 1té 1tè 1tê télé1e2 télé1i2 télé1o2b télé1o2p télé1s2 4te. 4tes. % words ending with -tent (df) 22/02/94 2tent. % mentent - syllable muette - bg 27/12/93 .la3tent. .pa3tent. compé3tent. éni3tent. mécon3tent. omnipo3tent. ventripo3tent. équipo3tent. impo3tent. mit3tent. % .th4 1t2h 4th. 4the. 4thes. thermo1s2 2t3heur 2thl % th2l was wrong for ...ath-lon (jd said 2thl) df 12/27/93 2thm 2thn th2r 4thre. 4thres. 2ths 1ti 1tî 1to 1tô 1t2r tran2s1a2 tran3s2act tran3s2ats tran2s3h tran2s1o2 tran2s3p tran2s1u2 4tre. 4tres. 2trent. % mute syllable: infiltrent (df) 28/02/94 .tri1a2c .tri1a2n .tri1a2t .tri1o2n t1t2l 1tu 1tû tung2s3 1ty %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%u .u4 'u4 .û4 'û4 uni1o2v uni1a2x u2s3tr %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%v 1va 1vâ 1ve 1vé 1vè 1vê vélo1s2ki 4ve. 4ves. % words ending with -vent (df) 22/02/94 2vent. conni3vent. .sou3vent. % 1vi 1vî 1vo 1vô vol2t1amp 1v2r 4vre. 4vres. 2vrent. % mute syllable: recouvrent (df) 28/02/94 1vu 1vû 1vy %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%w 1wa 1we 4we. 4wes. 2went. % mute syllable: interviewent (df) 22/02/94 1wi 1wo 1wu 1w2r %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%x 2xent. % mute syllable: malaxent (df) 22/02/94 %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%y .y4 'y4 y1asth y1s2tom y1algi %-------------------%-----------------------% % phonetic patterns % etymological patterns % %-------------------%-----------------------% %%z 1za 1ze 1zé 1zè 4ze. 4zes. % words ending with -zent (df) 22/02/94 2zent. privatdo3zent. % 1zi 1zo 1zu 1zy %} fizmo-0.7.10/libfizmo/src/locales/en_US/libfizmo_i18n.txt000644 000765 000024 00000006071 12606024314 024132 0ustar00chrenderstaff000000 000000 Could not open trace file "\{0s}". Invalid parameter type "\{0s}". Function call "\{0s}" aborted due to error. Invalid backslash-sequence in localization data. Warning for "\{0s}" at address \{1x}: Call of function "\{0s}" returned error code \{1d}. An error occured while reading from file "\{0s}". Could not open file named "\{0s}". Error reading first story byte from "\{0s}". Unknown story version \{0d}. An error occured trying to close file "\{0s}". Function call malloc(\{0d}) returned NULL, probably out of memory. Function call realloc(\{0d}) returned NULL, probably out of memory. Fatal error reading story file. Not yet implemented. Instruction form not initialized. Unknown operand type \{0d}. Opcode \{0d} of instruction form \{1d} not implemented. Cannot pull from empty stack. Cannot drop \{0d} words from stack: Not enough words stored. Please enter name for command file. Filename must not be empty. Please enter a filename for the transcript file. Invalid output stream number \{0d}. Maximum stream 3 depth \{0d} exceeded. This function has been disabled. More than 15 locals are not allowed. Invalid throw destination stack index \{0d}. Maximum number of stack entries per routine (\{0d}) exceeded. Trying to strore variable L\{0d}, but only \{1d} variables are active. Not enough stack words from local routine on stack. Null pointer received. Property number 0 is not valid. Property number \{0d} is not allowed in story version \{1d}. Object number 0 is not valid. Object number \{0d} not allowed in story version \{1d}. No property \{0d} for object \{1d}. Cannot read properties with a length greater than 2. Attribute number \{0d} not allowed in story version \{1d}. Invalid node type \{0d}. Unknown char code \{0d}. Maximum abbreviation depth is \{0d}. Unknown error case. Invalid ZSCII input-code \{0d}. Invalid ZSCII output-code \{0d}. Valid commands are: Random generator is now in predictable mode. Random generator is now in random mode. libfizmo version \{0s}. Story release number \{0d}. Story serial number \{0s}. Current Z-Stack size: \{0d} entries. Z-Stack entries in use: \{0d}. Routine stack underflow check disabled. \{0d} Bytes used for undo. \{0d} bytes allocated by text history. \{0d} bytes allocated by block buffer. Preloaded input not availiable in interface "\{0s}". Timed input not implemented in interface "\{0s}". Please enter savegame filename. Error writing save file. Can't find chunk "IFhd". Error reading save file. Could not read release number. Could not read serial number. Could not read checksum. Release number, serial number or checksum doesn't match. Could not read Restore-PC. Can't read chunk length. The original storyfile "\{0s}" could not be found. Can't find "CMem" or "UMem" chunk. Can't find chunk "Stks". Invalid IFF access mode \{0d}. Caught signal \{0d}, aborting interpreter. Cannot divide by zero. Opcode JE with only 1 operand is illegal. Function call time() returned -1. Unknown configuration option \{0s}. Invalid value "\{0s}" for parameters "\{1s}". Story has Z-Version number \{0d}. History-Output object is not longer valid. fizmo version \{0s}. fizmo-0.7.10/libfizmo/src/locales/en_US/patterns.txt000644 000765 000024 00000102124 12606024314 023314 0ustar00chrenderstaff000000 000000 % % This file has been renamed from hyph-en-us.tex to patterns.tex in July 2011 % for usage in the fizmo z-machine interpreter. Empty lines were removed % and lines containing comments divided into separate data and comments % lines for technical reasons. No other changes made. % % This file has been renamed from ushyphmax.tex to hyph-en-us.tex in June 2008 % for consistency with other files with hyphenation patterns in hyph-utf8 % package. % No other changes made. See http://www.tug.org/tex-hyphen for more details. % % ushyphmax.tex -- patterns for more hyphenation pattern memory (12000+). % Also known as ushyphen.max. % % version of 2005-05-30. % Patterns of March 1, 1990. % % Copyright (C) 1990, 2004, 2005 Gerard D.C. Kuiken. % Copying and distribution of this file, with or without modification, % are permitted in any medium without royalty provided the copyright % notice and this notice are preserved. % % Needs extended pattern memory. % Hyphenation trie becomes 7283 with 377 ops. % % These patterns are based on the Hyphenation Exception Log % published in TUGboat, Volume 10 (1989), No. 3, pp. 337-341, % and a large number of incorrectly hyphenated words not yet published. % If added to Liang's before the closing bracket } of \patterns, % the patterns run errorfree as far as known at this moment. % % These patterns find all admissible hyphens of the words in % the Exception Log. ushyph2.tex is a smaller set. % % Please send bugs or suggestions to tex-live (at) tug.org. % % 2005-05-30 (karl): in the past, ushyphmax.tex was a file containing % only the additional patterns, without the \patterns command, etc. % This turned out not to be very useful, since in practice the TeX % distributions need one self-contained file for a language. Therefore, % ushyphmax.tex now contains both the additional patterns from % Dr. Kuiken, and the original patterns and hyphenations from Knuth's % hyphen.tex. % % The Plain TeX hyphenation tables. %\patterns{ % just type if you're not using INITEX .ach4 .ad4der .af1t .al3t .am5at .an5c .ang4 .ani5m .ant4 .an3te .anti5s .ar5s .ar4tie .ar4ty .as3c .as1p .as1s .aster5 .atom5 .au1d .av4i .awn4 .ba4g .ba5na .bas4e .ber4 .be5ra .be3sm .be5sto .bri2 .but4ti .cam4pe .can5c .capa5b .car5ol .ca4t .ce4la .ch4 .chill5i .ci2 .cit5r .co3e .co4r .cor5ner .de4moi .de3o .de3ra .de3ri .des4c .dictio5 .do4t .du4c .dumb5 .earth5 .eas3i .eb4 .eer4 .eg2 .el5d .el3em .enam3 .en3g .en3s .eq5ui5t .er4ri .es3 .eu3 .eye5 .fes3 .for5mer .ga2 .ge2 .gen3t4 .ge5og .gi5a .gi4b .go4r .hand5i .han5k .he2 .hero5i .hes3 .het3 .hi3b .hi3er .hon5ey .hon3o .hov5 .id4l .idol3 .im3m .im5pin .in1 .in3ci .ine2 .in2k .in3s .ir5r .is4i .ju3r .la4cy .la4m .lat5er .lath5 .le2 .leg5e .len4 .lep5 .lev1 .li4g .lig5a .li2n .li3o .li4t .mag5a5 .mal5o .man5a .mar5ti .me2 .mer3c .me5ter .mis1 .mist5i .mon3e .mo3ro .mu5ta .muta5b .ni4c .od2 .odd5 .of5te .or5ato .or3c .or1d .or3t .os3 .os4tl .oth3 .out3 .ped5al .pe5te .pe5tit .pi4e .pio5n .pi2t .pre3m .ra4c .ran4t .ratio5na .ree2 .re5mit .res2 .re5stat .ri4g .rit5u .ro4q .ros5t .row5d .ru4d .sci3e .self5 .sell5 .se2n .se5rie .sh2 .si2 .sing4 .st4 .sta5bl .sy2 .ta4 .te4 .ten5an .th2 .ti2 .til4 .tim5o5 .ting4 .tin5k .ton4a .to4p .top5i .tou5s .trib5ut .un1a .un3ce .under5 .un1e .un5k .un5o .un3u .up3 .ure3 .us5a .ven4de .ve5ra .wil5i .ye4 4ab. a5bal a5ban abe2 ab5erd abi5a ab5it5ab ab5lat ab5o5liz 4abr ab5rog ab3ul a4car ac5ard ac5aro a5ceou ac1er a5chet 4a2ci a3cie ac1in a3cio ac5rob act5if ac3ul ac4um a2d ad4din ad5er. 2adi a3dia ad3ica adi4er a3dio a3dit a5diu ad4le ad3ow ad5ran ad4su 4adu a3duc ad5um ae4r aeri4e a2f aff4 a4gab aga4n ag5ell age4o 4ageu ag1i 4ag4l ag1n a2go 3agog ag3oni a5guer ag5ul a4gy a3ha a3he ah4l a3ho ai2 a5ia a3ic. ai5ly a4i4n ain5in ain5o ait5en a1j ak1en al5ab al3ad a4lar 4aldi 2ale al3end a4lenti a5le5o al1i al4ia. ali4e al5lev 4allic 4alm a5log. a4ly. 4alys 5a5lyst 5alyt 3alyz 4ama am5ab am3ag ama5ra am5asc a4matis a4m5ato am5era am3ic am5if am5ily am1in ami4no a2mo a5mon amor5i amp5en a2n an3age 3analy a3nar an3arc anar4i a3nati 4and ande4s an3dis an1dl an4dow a5nee a3nen an5est. a3neu 2ang ang5ie an1gl a4n1ic a3nies an3i3f an4ime a5nimi a5nine an3io a3nip an3ish an3it a3niu an4kli 5anniz ano4 an5ot anoth5 an2sa an4sco an4sn an2sp ans3po an4st an4sur antal4 an4tie 4anto an2tr an4tw an3ua an3ul a5nur 4ao apar4 ap5at ap5ero a3pher 4aphi a4pilla ap5illar ap3in ap3ita a3pitu a2pl apoc5 ap5ola apor5i apos3t aps5es a3pu aque5 2a2r ar3act a5rade ar5adis ar3al a5ramete aran4g ara3p ar4at a5ratio ar5ativ a5rau ar5av4 araw4 arbal4 ar4chan ar5dine ar4dr ar5eas a3ree ar3ent a5ress ar4fi ar4fl ar1i ar5ial ar3ian a3riet ar4im ar5inat ar3io ar2iz ar2mi ar5o5d a5roni a3roo ar2p ar3q arre4 ar4sa ar2sh 4as. as4ab as3ant ashi4 a5sia. a3sib a3sic 5a5si4t ask3i as4l a4soc as5ph as4sh as3ten as1tr asur5a a2ta at3abl at5ac at3alo at5ap ate5c at5ech at3ego at3en. at3era ater5n a5terna at3est at5ev 4ath ath5em a5then at4ho ath5om 4ati. a5tia at5i5b at1ic at3if ation5ar at3itu a4tog a2tom at5omiz a4top a4tos a1tr at5rop at4sk at4tag at5te at4th a2tu at5ua at5ue at3ul at3ura a2ty au4b augh3 au3gu au4l2 aun5d au3r au5sib aut5en au1th a2va av3ag a5van ave4no av3era av5ern av5ery av1i avi4er av3ig av5oc a1vor 3away aw3i aw4ly aws4 ax4ic ax4id ay5al aye4 ays4 azi4er azz5i 5ba. bad5ger ba4ge bal1a ban5dag ban4e ban3i barbi5 bari4a bas4si 1bat ba4z 2b1b b2be b3ber bbi4na 4b1d 4be. beak4 beat3 4be2d be3da be3de be3di be3gi be5gu 1bel be1li be3lo 4be5m be5nig be5nu 4bes4 be3sp be5str 3bet bet5iz be5tr be3tw be3w be5yo 2bf 4b3h bi2b bi4d 3bie bi5en bi4er 2b3if 1bil bi3liz bina5r4 bin4d bi5net bi3ogr bi5ou bi2t 3bi3tio bi3tr 3bit5ua b5itz b1j bk4 b2l2 blath5 b4le. blen4 5blesp b3lis b4lo blun4t 4b1m 4b3n bne5g 3bod bod3i bo4e bol3ic bom4bi bon4a bon5at 3boo 5bor. 4b1ora bor5d 5bore 5bori 5bos4 b5ota both5 bo4to bound3 4bp 4brit broth3 2b5s2 bsor4 2bt bt4l b4to b3tr buf4fer bu4ga bu3li bumi4 bu4n bunt4i bu3re bus5ie buss4e 5bust 4buta 3butio b5uto b1v 4b5w 5by. bys4 1ca cab3in ca1bl cach4 ca5den 4cag4 2c5ah ca3lat cal4la call5in 4calo can5d can4e can4ic can5is can3iz can4ty cany4 ca5per car5om cast5er cas5tig 4casy ca4th 4cativ cav5al c3c ccha5 cci4a ccompa5 ccon4 ccou3t 2ce. 4ced. 4ceden 3cei 5cel. 3cell 1cen 3cenc 2cen4e 4ceni 3cent 3cep ce5ram 4cesa 3cessi ces5si5b ces5t cet4 c5e4ta cew4 2ch 4ch. 4ch3ab 5chanic ch5a5nis che2 cheap3 4ched che5lo 3chemi ch5ene ch3er. ch3ers 4ch1in 5chine. ch5iness 5chini 5chio 3chit chi2z 3cho2 ch4ti 1ci 3cia ci2a5b cia5r ci5c 4cier 5cific. 4cii ci4la 3cili 2cim 2cin c4ina 3cinat cin3em c1ing c5ing. 5cino cion4 4cipe ci3ph 4cipic 4cista 4cisti 2c1it cit3iz 5ciz ck1 ck3i 1c4l4 4clar c5laratio 5clare cle4m 4clic clim4 cly4 c5n 1co co5ag coe2 2cog co4gr coi4 co3inc col5i 5colo col3or com5er con4a c4one con3g con5t co3pa cop3ic co4pl 4corb coro3n cos4e cov1 cove4 cow5a coz5e co5zi c1q cras5t 5crat. 5cratic cre3at 5cred 4c3reta cre4v cri2 cri5f c4rin cris4 5criti cro4pl crop5o cros4e cru4d 4c3s2 2c1t cta4b ct5ang c5tant c2te c3ter c4ticu ctim3i ctu4r c4tw cud5 c4uf c4ui cu5ity 5culi cul4tis 3cultu cu2ma c3ume cu4mi 3cun cu3pi cu5py cur5a4b cu5ria 1cus cuss4i 3c4ut cu4tie 4c5utiv 4cutr 1cy cze4 1d2a 5da. 2d3a4b dach4 4daf 2dag da2m2 dan3g dard5 dark5 4dary 3dat 4dativ 4dato 5dav4 dav5e 5day d1b d5c d1d4 2de. deaf5 deb5it de4bon decan4 de4cil de5com 2d1ed 4dee. de5if deli4e del5i5q de5lo d4em 5dem. 3demic dem5ic. de5mil de4mons demor5 1den de4nar de3no denti5f de3nu de1p de3pa depi4 de2pu d3eq d4erh 5derm dern5iz der5s des2 d2es. de1sc de2s5o des3ti de3str de4su de1t de2to de1v dev3il 4dey 4d1f d4ga d3ge4t dg1i d2gy d1h2 5di. 1d4i3a dia5b di4cam d4ice 3dict 3did 5di3en d1if di3ge di4lato d1in 1dina 3dine. 5dini di5niz 1dio dio5g di4pl dir2 di1re dirt5i dis1 5disi d4is3t d2iti 1di1v d1j d5k2 4d5la 3dle. 3dled 3dles. 4dless 2d3lo 4d5lu 2dly d1m 4d1n4 1do 3do. do5de 5doe 2d5of d4og do4la doli4 do5lor dom5iz do3nat doni4 doo3d dop4p d4or 3dos 4d5out do4v 3dox d1p 1dr drag5on 4drai dre4 drea5r 5dren dri4b dril4 dro4p 4drow 5drupli 4dry 2d1s2 ds4p d4sw d4sy d2th 1du d1u1a du2c d1uca duc5er 4duct. 4ducts du5el du4g d3ule dum4be du4n 4dup du4pe d1v d1w d2y 5dyn dy4se dys5p e1a4b e3act ead1 ead5ie ea4ge ea5ger ea4l eal5er eal3ou eam3er e5and ear3a ear4c ear5es ear4ic ear4il ear5k ear2t eart3e ea5sp e3ass east3 ea2t eat5en eath3i e5atif e4a3tu ea2v eav3en eav5i eav5o 2e1b e4bel. e4bels e4ben e4bit e3br e4cad ecan5c ecca5 e1ce ec5essa ec2i e4cib ec5ificat ec5ifie ec5ify ec3im eci4t e5cite e4clam e4clus e2col e4comm e4compe e4conc e2cor ec3ora eco5ro e1cr e4crem ec4tan ec4te e1cu e4cul ec3ula 2e2da 4ed3d e4d1er ede4s 4edi e3dia ed3ib ed3ica ed3im ed1it edi5z 4edo e4dol edon2 e4dri e4dul ed5ulo ee2c eed3i ee2f eel3i ee4ly ee2m ee4na ee4p1 ee2s4 eest4 ee4ty e5ex e1f e4f3ere 1eff e4fic 5efici efil4 e3fine ef5i5nite 3efit efor5es e4fuse. 4egal eger4 eg5ib eg4ic eg5ing e5git5 eg5n e4go. e4gos eg1ul e5gur 5egy e1h4 eher4 ei2 e5ic ei5d eig2 ei5gl e3imb e3inf e1ing e5inst eir4d eit3e ei3th e5ity e1j e4jud ej5udi eki4n ek4la e1la e4la. e4lac elan4d el5ativ e4law elaxa4 e3lea el5ebra 5elec e4led el3ega e5len e4l1er e1les el2f el2i e3libe e4l5ic. el3ica e3lier el5igib e5lim e4l3ing e3lio e2lis el5ish e3liv3 4ella el4lab ello4 e5loc el5og el3op. el2sh el4ta e5lud el5ug e4mac e4mag e5man em5ana em5b e1me e2mel e4met em3ica emi4e em5igra em1in2 em5ine em3i3ni e4mis em5ish e5miss em3iz 5emniz emo4g emoni5o em3pi e4mul em5ula emu3n e3my en5amo e4nant ench4er en3dic e5nea e5nee en3em en5ero en5esi en5est en3etr e3new en5ics e5nie e5nil e3nio en3ish en3it e5niu 5eniz 4enn 4eno eno4g e4nos en3ov en4sw ent5age 4enthes en3ua en5uf e3ny. 4en3z e5of eo2g e4oi4 e3ol eop3ar e1or eo3re eo5rol eos4 e4ot eo4to e5out e5ow e2pa e3pai ep5anc e5pel e3pent ep5etitio ephe4 e4pli e1po e4prec ep5reca e4pred ep3reh e3pro e4prob ep4sh ep5ti5b e4put ep5uta e1q equi3l e4q3ui3s er1a era4b 4erand er3ar 4erati. 2erb er4bl er3ch er4che 2ere. e3real ere5co ere3in er5el. er3emo er5ena er5ence 4erene er3ent ere4q er5ess er3est eret4 er1h er1i e1ria4 5erick e3rien eri4er er3ine e1rio 4erit er4iu eri4v e4riva er3m4 er4nis 4ernit 5erniz er3no 2ero er5ob e5roc ero4r er1ou er1s er3set ert3er 4ertl er3tw 4eru eru4t 5erwau e1s4a e4sage. e4sages es2c e2sca es5can e3scr es5cu e1s2e e2sec es5ecr es5enc e4sert. e4serts e4serva 4esh e3sha esh5en e1si e2sic e2sid es5iden es5igna e2s5im es4i4n esis4te esi4u e5skin es4mi e2sol es3olu e2son es5ona e1sp es3per es5pira es4pre 2ess es4si4b estan4 es3tig es5tim 4es2to e3ston 2estr e5stro estruc5 e2sur es5urr es4w eta4b eten4d e3teo ethod3 et1ic e5tide etin4 eti4no e5tir e5titio et5itiv 4etn et5ona e3tra e3tre et3ric et5rif et3rog et5ros et3ua et5ym et5z 4eu e5un e3up eu3ro eus4 eute4 euti5l eu5tr eva2p5 e2vas ev5ast e5vea ev3ell evel3o e5veng even4i ev1er e5verb e1vi ev3id evi4l e4vin evi4v e5voc e5vu e1wa e4wag e5wee e3wh ewil5 ew3ing e3wit 1exp 5eyc 5eye. eys4 1fa fa3bl fab3r fa4ce 4fag fain4 fall5e 4fa4ma fam5is 5far far5th fa3ta fa3the 4fato fault5 4f5b 4fd 4fe. feas4 feath3 fe4b 4feca 5fect 2fed fe3li fe4mo fen2d fend5e fer1 5ferr fev4 4f1f f4fes f4fie f5fin. f2f5is f4fly f2fy 4fh 1fi fi3a 2f3ic. 4f3ical f3ican 4ficate f3icen fi3cer fic4i 5ficia 5ficie 4fics fi3cu fi5del fight5 fil5i fill5in 4fily 2fin 5fina fin2d5 fi2ne f1in3g fin4n fis4ti f4l2 f5less flin4 flo3re f2ly5 4fm 4fn 1fo 5fon fon4de fon4t fo2r fo5rat for5ay fore5t for4i fort5a fos5 4f5p fra4t f5rea fres5c fri2 fril4 frol5 2f3s 2ft f4to f2ty 3fu fu5el 4fug fu4min fu5ne fu3ri fusi4 fus4s 4futa 1fy 1ga gaf4 5gal. 3gali ga3lo 2gam ga5met g5amo gan5is ga3niz gani5za 4gano gar5n4 gass4 gath3 4gativ 4gaz g3b gd4 2ge. 2ged geez4 gel4in ge5lis ge5liz 4gely 1gen ge4nat ge5niz 4geno 4geny 1geo ge3om g4ery 5gesi geth5 4geto ge4ty ge4v 4g1g2 g2ge g3ger gglu5 ggo4 gh3in gh5out gh4to 5gi. 1gi4a gia5r g1ic 5gicia g4ico gien5 5gies. gil4 g3imen 3g4in. gin5ge 5g4ins 5gio 3gir gir4l g3isl gi4u 5giv 3giz gl2 gla4 glad5i 5glas 1gle gli4b g3lig 3glo glo3r g1m g4my gn4a g4na. gnet4t g1ni g2nin g4nio g1no g4non 1go 3go. gob5 5goe 3g4o4g go3is gon2 4g3o3na gondo5 go3ni 5goo go5riz gor5ou 5gos. gov1 g3p 1gr 4grada g4rai gran2 5graph. g5rapher 5graphic 4graphy 4gray gre4n 4gress. 4grit g4ro gruf4 gs2 g5ste gth3 gu4a 3guard 2gue 5gui5t 3gun 3gus 4gu4t g3w 1gy 2g5y3n gy5ra h3ab4l hach4 hae4m hae4t h5agu ha3la hala3m ha4m han4ci han4cy 5hand. han4g hang5er hang5o h5a5niz han4k han4te hap3l hap5t ha3ran ha5ras har2d hard3e har4le harp5en har5ter has5s haun4 5haz haz3a h1b 1head 3hear he4can h5ecat h4ed he5do5 he3l4i hel4lis hel4ly h5elo hem4p he2n hena4 hen5at heo5r hep5 h4era hera3p her4ba here5a h3ern h5erou h3ery h1es he2s5p he4t het4ed heu4 h1f h1h hi5an hi4co high5 h4il2 himer4 h4ina hion4e hi4p hir4l hi3ro hir4p hir4r his3el his4s hith5er hi2v 4hk 4h1l4 hlan4 h2lo hlo3ri 4h1m hmet4 2h1n h5odiz h5ods ho4g hoge4 hol5ar 3hol4e ho4ma home3 hon4a ho5ny 3hood hoon4 hor5at ho5ris hort3e ho5ru hos4e ho5sen hos1p 1hous house3 hov5el 4h5p 4hr4 hree5 hro5niz hro3po 4h1s2 h4sh h4tar ht1en ht5es h4ty hu4g hu4min hun5ke hun4t hus3t4 hu4t h1w h4wart hy3pe hy3ph hy2s 2i1a i2al iam4 iam5ete i2an 4ianc ian3i 4ian4t ia5pe iass4 i4ativ ia4tric i4atu ibe4 ib3era ib5ert ib5ia ib3in ib5it. ib5ite i1bl ib3li i5bo i1br i2b5ri i5bun 4icam 5icap 4icar i4car. i4cara icas5 i4cay iccu4 4iceo 4ich 2ici i5cid ic5ina i2cip ic3ipa i4cly i2c5oc 4i1cr 5icra i4cry ic4te ictu2 ic4t3ua ic3ula ic4um ic5uo i3cur 2id i4dai id5anc id5d ide3al ide4s i2di id5ian idi4ar i5die id3io idi5ou id1it id5iu i3dle i4dom id3ow i4dr i2du id5uo 2ie4 ied4e 5ie5ga ield3 ien5a4 ien4e i5enn i3enti i1er. i3esc i1est i3et 4if. if5ero iff5en if4fr 4ific. i3fie i3fl 4ift 2ig iga5b ig3era ight3i 4igi i3gib ig3il ig3in ig3it i4g4l i2go ig3or ig5ot i5gre igu5i ig1ur i3h 4i5i4 i3j 4ik i1la il3a4b i4lade i2l5am ila5ra i3leg il1er ilev4 il5f il1i il3ia il2ib il3io il4ist 2ilit il2iz ill5ab 4iln il3oq il4ty il5ur il3v i4mag im3age ima5ry imenta5r 4imet im1i im5ida imi5le i5mini 4imit im4ni i3mon i2mu im3ula 2in. i4n3au 4inav incel4 in3cer 4ind in5dling 2ine i3nee iner4ar i5ness 4inga 4inge in5gen 4ingi in5gling 4ingo 4ingu 2ini i5ni. i4nia in3io in1is i5nite. 5initio in3ity 4ink 4inl 2inn 2i1no i4no4c ino4s i4not 2ins in3se insur5a 2int. 2in4th in1u i5nus 4iny 2io 4io. ioge4 io2gr i1ol io4m ion3at ion4ery ion3i io5ph ior3i i4os io5th i5oti io4to i4our 2ip ipe4 iphras4 ip3i ip4ic ip4re4 ip3ul i3qua iq5uef iq3uid iq3ui3t 4ir i1ra ira4b i4rac ird5e ire4de i4ref i4rel4 i4res ir5gi ir1i iri5de ir4is iri3tu 5i5r2iz ir4min iro4g 5iron. ir5ul 2is. is5ag is3ar isas5 2is1c is3ch 4ise is3er 3isf is5han is3hon ish5op is3ib isi4d i5sis is5itiv 4is4k islan4 4isms i2so iso5mer is1p is2pi is4py 4is1s is4sal issen4 is4ses is4ta. is1te is1ti ist4ly 4istral i2su is5us 4ita. ita4bi i4tag 4ita5m i3tan i3tat 2ite it3era i5teri it4es 2ith i1ti 4itia 4i2tic it3ica 5i5tick it3ig it5ill i2tim 2itio 4itis i4tism i2t5o5m 4iton i4tram it5ry 4itt it3uat i5tud it3ul 4itz. i1u 2iv iv3ell iv3en. i4v3er. i4vers. iv5il. iv5io iv1it i5vore iv3o3ro i4v3ot 4i5w ix4o 4iy 4izar izi4 5izont 5ja jac4q ja4p 1je jer5s 4jestie 4jesty jew3 jo4p 5judg 3ka. k3ab k5ag kais4 kal4 k1b k2ed 1kee ke4g ke5li k3en4d k1er kes4 k3est. ke4ty k3f kh4 k1i 5ki. 5k2ic k4ill kilo5 k4im k4in. kin4de k5iness kin4g ki4p kis4 k5ish kk4 k1l 4kley 4kly k1m k5nes 1k2no ko5r kosh4 k3ou kro5n 4k1s2 k4sc ks4l k4sy k5t k1w lab3ic l4abo laci4 l4ade la3dy lag4n lam3o 3land lan4dl lan5et lan4te lar4g lar3i las4e la5tan 4lateli 4lativ 4lav la4v4a 2l1b lbin4 4l1c2 lce4 l3ci 2ld l2de ld4ere ld4eri ldi4 ld5is l3dr l4dri le2a le4bi left5 5leg. 5legg le4mat lem5atic 4len. 3lenc 5lene. 1lent le3ph le4pr lera5b ler4e 3lerg 3l4eri l4ero les2 le5sco 5lesq 3less 5less. l3eva lev4er. lev4era lev4ers 3ley 4leye 2lf l5fr 4l1g4 l5ga lgar3 l4ges lgo3 2l3h li4ag li2am liar5iz li4as li4ato li5bi 5licio li4cor 4lics 4lict. l4icu l3icy l3ida lid5er 3lidi lif3er l4iff li4fl 5ligate 3ligh li4gra 3lik 4l4i4l lim4bl lim3i li4mo l4im4p l4ina 1l4ine lin3ea lin3i link5er li5og 4l4iq lis4p l1it l2it. 5litica l5i5tics liv3er l1iz 4lj lka3 l3kal lka4t l1l l4law l2le l5lea l3lec l3leg l3lel l3le4n l3le4t ll2i l2lin4 l5lina ll4o lloqui5 ll5out l5low 2lm l5met lm3ing l4mod lmon4 2l1n2 3lo. lob5al lo4ci 4lof 3logic l5ogo 3logu lom3er 5long lon4i l3o3niz lood5 5lope. lop3i l3opm lora4 lo4rato lo5rie lor5ou 5los. los5et 5losophiz 5losophy los4t lo4ta loun5d 2lout 4lov 2lp lpa5b l3pha l5phi lp5ing l3pit l4pl l5pr 4l1r 2l1s2 l4sc l2se l4sie 4lt lt5ag ltane5 l1te lten4 ltera4 lth3i l5ties. ltis4 l1tr ltu2 ltur3a lu5a lu3br luch4 lu3ci lu3en luf4 lu5id lu4ma 5lumi l5umn. 5lumnia lu3o luo3r 4lup luss4 lus3te 1lut l5ven l5vet4 2l1w 1ly 4lya 4lyb ly5me ly3no 2lys4 l5yse 1ma 2mab ma2ca ma5chine ma4cl mag5in 5magn 2mah maid5 4mald ma3lig ma5lin mal4li mal4ty 5mania man5is man3iz 4map ma5rine. ma5riz mar4ly mar3v ma5sce mas4e mas1t 5mate math3 ma3tis 4matiza 4m1b mba4t5 m5bil m4b3ing mbi4v 4m5c 4me. 2med 4med. 5media me3die m5e5dy me2g mel5on mel4t me2m mem1o3 1men men4a men5ac men4de 4mene men4i mens4 mensu5 3ment men4te me5on m5ersa 2mes 3mesti me4ta met3al me1te me5thi m4etr 5metric me5trie me3try me4v 4m1f 2mh 5mi. mi3a mid4a mid4g mig4 3milia m5i5lie m4ill min4a 3mind m5inee m4ingl min5gli m5ingly min4t m4inu miot4 m2is mis4er. mis5l mis4ti m5istry 4mith m2iz 4mk 4m1l m1m mma5ry 4m1n mn4a m4nin mn4o 1mo 4mocr 5mocratiz mo2d1 mo4go mois2 moi5se 4mok mo5lest mo3me mon5et mon5ge moni3a mon4ism mon4ist mo3niz monol4 mo3ny. mo2r 4mora. mos2 mo5sey mo3sp moth3 m5ouf 3mous mo2v 4m1p mpara5 mpa5rab mpar5i m3pet mphas4 m2pi mpi4a mp5ies m4p1in m5pir mp5is mpo3ri mpos5ite m4pous mpov5 mp4tr m2py 4m3r 4m1s2 m4sh m5si 4mt 1mu mula5r4 5mult multi3 3mum mun2 4mup mu4u 4mw 1na 2n1a2b n4abu 4nac. na4ca n5act nag5er. nak4 na4li na5lia 4nalt na5mit n2an nanci4 nan4it nank4 nar3c 4nare nar3i nar4l n5arm n4as nas4c nas5ti n2at na3tal nato5miz n2au nau3se 3naut nav4e 4n1b4 ncar5 n4ces. n3cha n5cheo n5chil n3chis nc1in nc4it ncour5a n1cr n1cu n4dai n5dan n1de nd5est. ndi4b n5d2if n1dit n3diz n5duc ndu4r nd2we 2ne. n3ear ne2b neb3u ne2c 5neck 2ned ne4gat neg5ativ 5nege ne4la nel5iz ne5mi ne4mo 1nen 4nene 3neo ne4po ne2q n1er nera5b n4erar n2ere n4er5i ner4r 1nes 2nes. 4nesp 2nest 4nesw 3netic ne4v n5eve ne4w n3f n4gab n3gel nge4n4e n5gere n3geri ng5ha n3gib ng1in n5git n4gla ngov4 ng5sh n1gu n4gum n2gy 4n1h4 nha4 nhab3 nhe4 3n4ia ni3an ni4ap ni3ba ni4bl ni4d ni5di ni4er ni2fi ni5ficat n5igr nik4 n1im ni3miz n1in 5nine. nin4g ni4o 5nis. nis4ta n2it n4ith 3nitio n3itor ni3tr n1j 4nk2 n5kero n3ket nk3in n1kl 4n1l n5m nme4 nmet4 4n1n2 nne4 nni3al nni4v nob4l no3ble n5ocl 4n3o2d 3noe 4nog noge4 nois5i no5l4i 5nologis 3nomic n5o5miz no4mo no3my no4n non4ag non5i n5oniz 4nop 5nop5o5li nor5ab no4rary 4nosc nos4e nos5t no5ta 1nou 3noun nov3el3 nowl3 n1p4 npi4 npre4c n1q n1r nru4 2n1s2 ns5ab nsati4 ns4c n2se n4s3es nsid1 nsig4 n2sl ns3m n4soc ns4pe n5spi nsta5bl n1t nta4b nter3s nt2i n5tib nti4er nti2f n3tine n4t3ing nti4p ntrol5li nt4s ntu3me nu1a nu4d nu5en nuf4fe n3uin 3nu3it n4um nu1me n5umi 3nu4n n3uo nu3tr n1v2 n1w4 nym4 nyp4 4nz n3za 4oa oad3 o5a5les oard3 oas4e oast5e oat5i ob3a3b o5bar obe4l o1bi o2bin ob5ing o3br ob3ul o1ce och4 o3chet ocif3 o4cil o4clam o4cod oc3rac oc5ratiz ocre3 5ocrit octor5a oc3ula o5cure od5ded od3ic odi3o o2do4 odor3 od5uct. od5ucts o4el o5eng o3er oe4ta o3ev o2fi of5ite ofit4t o2g5a5r og5ativ o4gato o1ge o5gene o5geo o4ger o3gie 1o1gis og3it o4gl o5g2ly 3ogniz o4gro ogu5i 1ogy 2ogyn o1h2 ohab5 oi2 oic3es oi3der oiff4 oig4 oi5let o3ing oint5er o5ism oi5son oist5en oi3ter o5j 2ok o3ken ok5ie o1la o4lan olass4 ol2d old1e ol3er o3lesc o3let ol4fi ol2i o3lia o3lice ol5id. o3li4f o5lil ol3ing o5lio o5lis. ol3ish o5lite o5litio o5liv olli4e ol5ogiz olo4r ol5pl ol2t ol3ub ol3ume ol3un o5lus ol2v o2ly om5ah oma5l om5atiz om2be om4bl o2me om3ena om5erse o4met om5etry o3mia om3ic. om3ica o5mid om1in o5mini 5ommend omo4ge o4mon om3pi ompro5 o2n on1a on4ac o3nan on1c 3oncil 2ond on5do o3nen on5est on4gu on1ic o3nio on1is o5niu on3key on4odi on3omy on3s onspi4 onspir5a onsu4 onten4 on3t4i ontif5 on5um onva5 oo2 ood5e ood5i oo4k oop3i o3ord oost5 o2pa ope5d op1er 3opera 4operag 2oph o5phan o5pher op3ing o3pit o5pon o4posi o1pr op1u opy5 o1q o1ra o5ra. o4r3ag or5aliz or5ange ore5a o5real or3ei ore5sh or5est. orew4 or4gu 4o5ria or3ica o5ril or1in o1rio or3ity o3riu or2mi orn2e o5rof or3oug or5pe 3orrh or4se ors5en orst4 or3thi or3thy or4ty o5rum o1ry os3al os2c os4ce o3scop 4oscopi o5scr os4i4e os5itiv os3ito os3ity osi4u os4l o2so os4pa os4po os2ta o5stati os5til os5tit o4tan otele4g ot3er. ot5ers o4tes 4oth oth5esi oth3i4 ot3ic. ot5ica o3tice o3tif o3tis oto5s ou2 ou3bl ouch5i ou5et ou4l ounc5er oun2d ou5v ov4en over4ne over3s ov4ert o3vis oviti4 o5v4ol ow3der ow3el ow5est ow1i own5i o4wo oy1a 1pa pa4ca pa4ce pac4t p4ad 5pagan p3agat p4ai pain4 p4al pan4a pan3el pan4ty pa3ny pa1p pa4pu para5bl par5age par5di 3pare par5el p4a4ri par4is pa2te pa5ter 5pathic pa5thy pa4tric pav4 3pay 4p1b pd4 4pe. 3pe4a pear4l pe2c 2p2ed 3pede 3pedi pedia4 ped4ic p4ee pee4d pek4 pe4la peli4e pe4nan p4enc pen4th pe5on p4era. pera5bl p4erag p4eri peri5st per4mal perme5 p4ern per3o per3ti pe5ru per1v pe2t pe5ten pe5tiz 4pf 4pg 4ph. phar5i phe3no ph4er ph4es. ph1ic 5phie ph5ing 5phisti 3phiz ph2l 3phob 3phone 5phoni pho4r 4phs ph3t 5phu 1phy pi3a pian4 pi4cie pi4cy p4id p5ida pi3de 5pidi 3piec pi3en pi4grap pi3lo pi2n p4in. pind4 p4ino 3pi1o pion4 p3ith pi5tha pi2tu 2p3k2 1p2l2 3plan plas5t pli3a pli5er 4plig pli4n ploi4 plu4m plum4b 4p1m 2p3n po4c 5pod. po5em po3et5 5po4g poin2 5point poly5t po4ni po4p 1p4or po4ry 1pos pos1s p4ot po4ta 5poun 4p1p ppa5ra p2pe p4ped p5pel p3pen p3per p3pet ppo5site pr2 pray4e 5preci pre5co pre3em pref5ac pre4la pre3r p3rese 3press pre5ten pre3v 5pri4e prin4t3 pri4s pris3o p3roca prof5it pro3l pros3e pro1t 2p1s2 p2se ps4h p4sib 2p1t pt5a4b p2te p2th pti3m ptu4r p4tw pub3 pue4 puf4 pul3c pu4m pu2n pur4r 5pus pu2t 5pute put3er pu3tr put4ted put4tin p3w qu2 qua5v 2que. 3quer 3quet 2rab ra3bi rach4e r5acl raf5fi raf4t r2ai ra4lo ram3et r2ami rane5o ran4ge r4ani ra5no rap3er 3raphy rar5c rare4 rar5ef 4raril r2as ration4 rau4t ra5vai rav3el ra5zie r1b r4bab r4bag rbi2 rbi4f r2bin r5bine rb5ing. rb4o r1c r2ce rcen4 r3cha rch4er r4ci4b rc4it rcum3 r4dal rd2i rdi4a rdi4er rdin4 rd3ing 2re. re1al re3an re5arr 5reav re4aw r5ebrat rec5oll rec5ompe re4cre 2r2ed re1de re3dis red5it re4fac re2fe re5fer. re3fi re4fy reg3is re5it re1li re5lu r4en4ta ren4te re1o re5pin re4posi re1pu r1er4 r4eri rero4 re5ru r4es. re4spi ress5ib res2t re5stal re3str re4ter re4ti4z re3tri reu2 re5uti rev2 re4val rev3el r5ev5er. re5vers re5vert re5vil rev5olu re4wh r1f rfu4 r4fy rg2 rg3er r3get r3gic rgi4n rg3ing r5gis r5git r1gl rgo4n r3gu rh4 4rh. 4rhal ri3a ria4b ri4ag r4ib rib3a ric5as r4ice 4rici 5ricid ri4cie r4ico rid5er ri3enc ri3ent ri1er ri5et rig5an 5rigi ril3iz 5riman rim5i 3rimo rim4pe r2ina 5rina. rin4d rin4e rin4g ri1o 5riph riph5e ri2pl rip5lic r4iq r2is r4is. ris4c r3ish ris4p ri3ta3b r5ited. rit5er. rit5ers rit3ic ri2tu rit5ur riv5el riv3et riv3i r3j r3ket rk4le rk4lin r1l rle4 r2led r4lig r4lis rl5ish r3lo4 r1m rma5c r2me r3men rm5ers rm3ing r4ming. r4mio r3mit r4my r4nar r3nel r4ner r5net r3ney r5nic r1nis4 r3nit r3niv rno4 r4nou r3nu rob3l r2oc ro3cr ro4e ro1fe ro5fil rok2 ro5ker 5role. rom5ete rom4i rom4p ron4al ron4e ro5n4is ron4ta 1room 5root ro3pel rop3ic ror3i ro5ro ros5per ros4s ro4the ro4ty ro4va rov5el rox5 r1p r4pea r5pent rp5er. r3pet rp4h4 rp3ing r3po r1r4 rre4c rre4f r4reo rre4st rri4o rri4v rron4 rros4 rrys4 4rs2 r1sa rsa5ti rs4c r2se r3sec rse4cr rs5er. rs3es rse5v2 r1sh r5sha r1si r4si4b rson3 r1sp r5sw rtach4 r4tag r3teb rten4d rte5o r1ti rt5ib rti4d r4tier r3tig rtil3i rtil4l r4tily r4tist r4tiv r3tri rtroph4 rt4sh ru3a ru3e4l ru3en ru4gl ru3in rum3pl ru2n runk5 run4ty r5usc ruti5n rv4e rvel4i r3ven rv5er. r5vest r3vey r3vic rvi4v r3vo r1w ry4c 5rynge ry3t sa2 2s1ab 5sack sac3ri s3act 5sai salar4 sal4m sa5lo sal4t 3sanc san4de s1ap sa5ta 5sa3tio sat3u sau4 sa5vor 5saw 4s5b scan4t5 sca4p scav5 s4ced 4scei s4ces sch2 s4cho 3s4cie 5scin4d scle5 s4cli scof4 4scopy scour5a s1cu 4s5d 4se. se4a seas4 sea5w se2c3o 3sect 4s4ed se4d4e s5edl se2g seg3r 5sei se1le 5self 5selv 4seme se4mol sen5at 4senc sen4d s5ened sen5g s5enin 4sentd 4sentl sep3a3 4s1er. s4erl ser4o 4servo s1e4s se5sh ses5t 5se5um 5sev sev3en sew4i 5sex 4s3f 2s3g s2h 2sh. sh1er 5shev sh1in sh3io 3ship shiv5 sho4 sh5old shon3 shor4 short5 4shw si1b s5icc 3side. 5sides 5sidi si5diz 4signa sil4e 4sily 2s1in s2ina 5sine. s3ing 1sio 5sion sion5a si2r sir5a 1sis 3sitio 5siu 1siv 5siz sk2 4ske s3ket sk5ine sk5ing s1l2 s3lat s2le slith5 2s1m s3ma small3 sman3 smel4 s5men 5smith smol5d4 s1n4 1so so4ce soft3 so4lab sol3d2 so3lic 5solv 3som 3s4on. sona4 son4g s4op 5sophic s5ophiz s5ophy sor5c sor5d 4sov so5vi 2spa 5spai spa4n spen4d 2s5peo 2sper s2phe 3spher spho5 spil4 sp5ing 4spio s4ply s4pon spor4 4spot squal4l s1r 2ss s1sa ssas3 s2s5c s3sel s5seng s4ses. s5set s1si s4sie ssi4er ss5ily s4sl ss4li s4sn sspend4 ss2t ssur5a ss5w 2st. s2tag s2tal stam4i 5stand s4ta4p 5stat. s4ted stern5i s5tero ste2w stew5a s3the st2i s4ti. s5tia s1tic 5stick s4tie s3tif st3ing 5stir s1tle 5stock stom3a 5stone s4top 3store st4r s4trad 5stratu s4tray s4trid 4stry 4st3w s2ty 1su su1al su4b3 su2g3 su5is suit3 s4ul su2m sum3i su2n su2r 4sv sw2 4swo s4y 4syc 3syl syn5o sy5rin 1ta 3ta. 2tab ta5bles 5taboliz 4taci ta5do 4taf4 tai5lo ta2l ta5la tal5en tal3i 4talk tal4lis ta5log ta5mo tan4de tanta3 ta5per ta5pl tar4a 4tarc 4tare ta3riz tas4e ta5sy 4tatic ta4tur taun4 tav4 2taw tax4is 2t1b 4tc t4ch tch5et 4t1d 4te. tead4i 4teat tece4 5tect 2t1ed te5di 1tee teg4 te5ger te5gi 3tel. teli4 5tels te2ma2 tem3at 3tenan 3tenc 3tend 4tenes 1tent ten4tag 1teo te4p te5pe ter3c 5ter3d 1teri ter5ies ter3is teri5za 5ternit ter5v 4tes. 4tess t3ess. teth5e 3teu 3tex 4tey 2t1f 4t1g 2th. than4 th2e 4thea th3eas the5at the3is 3thet th5ic. th5ica 4thil 5think 4thl th5ode 5thodic 4thoo thor5it tho5riz 2ths 1tia ti4ab ti4ato 2ti2b 4tick t4ico t4ic1u 5tidi 3tien tif2 ti5fy 2tig 5tigu till5in 1tim 4timp tim5ul 2t1in t2ina 3tine. 3tini 1tio ti5oc tion5ee 5tiq ti3sa 3tise tis4m ti5so tis4p 5tistica ti3tl ti4u 1tiv tiv4a 1tiz ti3za ti3zen 2tl t5la tlan4 3tle. 3tled 3tles. t5let. t5lo 4t1m tme4 2t1n2 1to to3b to5crat 4todo 2tof to2gr to5ic to2ma tom4b to3my ton4ali to3nat 4tono 4tony to2ra to3rie tor5iz tos2 5tour 4tout to3war 4t1p 1tra tra3b tra5ch traci4 trac4it trac4te tras4 tra5ven trav5es5 tre5f tre4m trem5i 5tria tri5ces 5tricia 4trics 2trim tri4v tro5mi tron5i 4trony tro5phe tro3sp tro3v tru5i trus4 4t1s2 t4sc tsh4 t4sw 4t3t2 t4tes t5to ttu4 1tu tu1a tu3ar tu4bi tud2 4tue 4tuf4 5tu3i 3tum tu4nis 2t3up. 3ture 5turi tur3is tur5o tu5ry 3tus 4tv tw4 4t1wa twis4 4two 1ty 4tya 2tyl type3 ty5ph 4tz tz4e 4uab uac4 ua5na uan4i uar5ant uar2d uar3i uar3t u1at uav4 ub4e u4bel u3ber u4bero u1b4i u4b5ing u3ble. u3ca uci4b uc4it ucle3 u3cr u3cu u4cy ud5d ud3er ud5est udev4 u1dic ud3ied ud3ies ud5is u5dit u4don ud4si u4du u4ene uens4 uen4te uer4il 3ufa u3fl ugh3en ug5in 2ui2 uil5iz ui4n u1ing uir4m uita4 uiv3 uiv4er. u5j 4uk u1la ula5b u5lati ulch4 5ulche ul3der ul4e u1len ul4gi ul2i u5lia ul3ing ul5ish ul4lar ul4li4b ul4lis 4ul3m u1l4o 4uls uls5es ul1ti ultra3 4ultu u3lu ul5ul ul5v um5ab um4bi um4bly u1mi u4m3ing umor5o um2p unat4 u2ne un4er u1ni un4im u2nin un5ish uni3v un3s4 un4sw unt3ab un4ter. un4tes unu4 un5y un5z u4ors u5os u1ou u1pe uper5s u5pia up3ing u3pl up3p upport5 upt5ib uptu4 u1ra 4ura. u4rag u4ras ur4be urc4 ur1d ure5at ur4fer ur4fr u3rif uri4fic ur1in u3rio u1rit ur3iz ur2l url5ing. ur4no uros4 ur4pe ur4pi urs5er ur5tes ur3the urti4 ur4tie u3ru 2us u5sad u5san us4ap usc2 us3ci use5a u5sia u3sic us4lin us1p us5sl us5tere us1tr u2su usur4 uta4b u3tat 4ute. 4utel 4uten uten4i 4u1t2i uti5liz u3tine ut3ing ution5a u4tis 5u5tiz u4t1l ut5of uto5g uto5matic u5ton u4tou uts4 u3u uu4m u1v2 uxu3 uz4e 1va 5va. 2v1a4b vac5il vac3u vag4 va4ge va5lie val5o val1u va5mo va5niz va5pi var5ied 3vat 4ve. 4ved veg3 v3el. vel3li ve4lo v4ely ven3om v5enue v4erd 5vere. v4erel v3eren ver5enc v4eres ver3ie vermi4n 3verse ver3th v4e2s 4ves. ves4te ve4te vet3er ve4ty vi5ali 5vian 5vide. 5vided 4v3iden 5vides 5vidi v3if vi5gn vik4 2vil 5vilit v3i3liz v1in 4vi4na v2inc vin5d 4ving vio3l v3io4r vi1ou vi4p vi5ro vis3it vi3so vi3su 4viti vit3r 4vity 3viv 5vo. voi4 3vok vo4la v5ole 5volt 3volv vom5i vor5ab vori4 vo4ry vo4ta 4votee 4vv4 v4y w5abl 2wac wa5ger wag5o wait5 w5al. wam4 war4t was4t wa1te wa5ver w1b wea5rie weath3 wed4n weet3 wee5v wel4l w1er west3 w3ev whi4 wi2 wil2 will5in win4de win4g wir4 3wise with3 wiz5 w4k wl4es wl3in w4no 1wo2 wom1 wo5ven w5p wra4 wri4 writa4 w3sh ws4l ws4pe w5s4t 4wt wy4 x1a xac5e x4ago xam3 x4ap xas5 x3c2 x1e xe4cuto x2ed xer4i xe5ro x1h xhi2 xhil5 xhu4 x3i xi5a xi5c xi5di x4ime xi5miz x3o x4ob x3p xpan4d xpecto5 xpe3d x1t2 x3ti x1u xu3a xx4 y5ac 3yar4 y5at y1b y1c y2ce yc5er y3ch ych4e ycom4 ycot4 y1d y5ee y1er y4erf yes4 ye4t y5gi 4y3h y1i y3la ylla5bl y3lo y5lu ymbol5 yme4 ympa3 yn3chr yn5d yn5g yn5ic 5ynx y1o4 yo5d y4o5g yom4 yo5net y4ons y4os y4ped yper5 yp3i y3po y4poc yp2ta y5pu yra5m yr5ia y3ro yr4r ys4c y3s2e ys3ica ys3io 3ysis y4so yss4 ys1t ys3ta ysur4 y3thin yt3ic y1w za1 z5a2b zar2 4zb 2ze ze4n ze4p z1er ze3ro zet4 2z1i z4il z4is 5zl 4zm 1zo zo4m zo5ol zte4 4z1z2 z4zy % hyphen.tex patterns end here, and additional patterns begin: .con5gr .de5riva .dri5v4 .eth1y6l1 .eu4ler .ev2 .ever5si5b .ga4s1om1 .ge4ome .ge5ot1 .he3mo1 .he3p6a .he3roe .in5u2t .kil2n3i .ko6r1te1 .le6ices .me4ga1l .met4ala .mim5i2c1 .mi1s4ers .ne6o3f .noe1th .non1e2m .poly1s .post1am .pre1am .rav5en1o .semi5 .sem4ic .semid6 .semip4 .semir4 .sem6is4 .semiv4 .sph6in1 .spin1o .ta5pes1tr .te3legr .to6pog .to2q .un3at5t .un5err5 .vi2c3ar .we2b1l .re1e4c a5bolic a2cabl af6fish am1en3ta5b anal6ys ano5a2c ans5gr ans3v anti1d an3ti1n2 anti1re a4pe5able ar3che5t ar2range as5ymptot ath3er1o1s at6tes. augh4tl au5li5f av3iou back2er. ba6r1onie ba1thy bbi4t be2vie bi5d2if bil2lab bio5m bi1orb bio1rh b1i3tive blan2d1 blin2d1 blon2d2 bor1no5 bo2t1u1l brus4q bus6i2er bus6i2es buss4ing but2ed. but4ted cad5e1m cat1a1s2 4chs. chs3hu chie5vo cig3a3r cin2q cle4ar co6ph1o3n cous2ti cri3tie croc1o1d cro5e2co c2tro3me6c 1cu2r1ance 2d3alone data1b dd5a5b d2d5ib de4als. de5clar1 de2c5lina de3fin3iti de2mos des3ic de2tic dic1aid dif5fra 3di1methy di2ren di2rer 2d1lead 2d1li2e 3do5word dren1a5l drif2t1a d1ri3pleg5 drom3e5d d3tab du2al. du1op1o1l ea4n3ies e3chas edg1l ed1uling eli2t1is e1loa en1dix eo3grap 1e6p3i3neph1 e2r3i4an. e3spac6i eth1y6l1ene 5eu2clid1 feb1rua fermi1o 3fich fit5ted. fla1g6el flow2er. 3fluor gen2cy. ge3o1d ght1we g1lead get2ic. 4g1lish 5glo5bin 1g2nac gnet1ism gno5mo g2n1or. g2noresp 2g1o4n3i1za graph5er. griev1 g1utan hair1s ha2p3ar5r hatch1 hex2a3 hite3sid h3i5pel1a4 hnau3z ho6r1ic. h2t1eou hypo1tha id4ios ifac1et ign4it ignit1er i4jk im3ped3a infra1s2 i5nitely. irre6v3oc i1tesima ith5i2l itin5er5ar janu3a japan1e2s je1re1m 1ke6ling 1ki5netic 1kovian k3sha la4c3i5e lai6n3ess lar5ce1n l3chai l3chil6d1 lead6er. lea4s1a 1lec3ta6b le3g6en2dre 1le1noid lith1o5g ll1fl l2l3ish l5mo3nell lo1bot1o1 lo2ges. load4ed. load6er. l3tea lth5i2ly lue1p 1lunk3er 1lum5bia. 3lyg1a1mi ly5styr ma1la1p m2an. man3u1sc mar1gin1 medi2c med3i3cin medio6c1 me3gran3 m2en. 3mi3da5b 3milita mil2l1ag mil5li5li mi6n3is. mi1n2ut1er mi1n2ut1est m3ma1b 5maph1ro1 5moc1ra1t mo5e2las mol1e5c mon4ey1l mono3ch mo4no1en moro6n5is mono1s6 moth4et2 m1ou3sin m5shack2 mu2dro mul2ti5u n3ar4chs. n3ch2es1t ne3back 2ne1ski n1dieck nd3thr nfi6n3ites 4n5i4an. nge5nes ng1ho ng1spr nk3rup n5less 5noc3er1os nom1a6l nom5e1no n1o1mist non1eq non1i4so 5nop1oly. no1vemb ns5ceiv ns4moo ntre1p obli2g1 o3chas odel3li odit1ic oerst2 oke1st o3les3ter oli3gop1o1 o1lo3n4om o3mecha6 onom1ic o3norma o3no2t1o3n o3nou op1ism. or4tho3ni4t orth1ri or5tively o4s3pher o5test1er o5tes3tor oth3e1o1s ou3ba3do o6v3i4an. oxi6d1ic pal6mat parag6ra4 par4a1le param4 para3me pee2v1 phi2l3ant phi5lat1e3l pi2c1a3d pli2c1ab pli5nar poin3ca 1pole. poly1e po3lyph1ono 1prema3c pre1neu pres2pli pro2cess proc3i3ty. pro2g1e 3pseu2d pseu3d6o3d2 pseu3d6o3f2 pto3mat4 p5trol3 pu5bes5c quain2t1e qu6a3si3 quasir6 quasis6 quin5tes5s qui3v4ar r1abolic 3rab1o1loi ra3chu r3a3dig radi1o6g r2amen 3ra4m5e1triz ra3mou ra5n2has ra1or r3bin1ge re2c3i1pr rec5t6ang re4t1ribu r3ial. riv1o1l 6rk. rk1ho r1krau 6rks. r5le5qu ro1bot1 ro5e2las ro5epide1 ro3mesh ro1tron r3pau5li rse1rad1i r1thou r1treu r1veil rz1sc sales3c sales5w 5sa3par5il sca6p1er sca2t1ol s4chitz schro1ding1 1sci2utt scrap4er. scy4th1 sem1a1ph se3mes1t se1mi6t5ic sep3temb shoe1st sid2ed. side5st side5sw si5resid sky1sc 3slova1kia 3s2og1a1my so2lute 3s2pace 1s2pacin spe3cio spher1o spi2c1il spokes5w sports3c sports3w s3qui3to s2s1a3chu1 ss3hat s2s3i4an. s5sign5a3b 1s2tamp s2t1ant5shi star3tli sta1ti st5b 1stor1ab strat1a1g strib5ut st5scr stu1pi4d1 styl1is su2per1e6 1sync 1syth3i2 swimm6 5tab1o1lism ta3gon. talk1a5 t1a1min t6ap6ath 5tar2rh tch1c tch3i1er t1cr teach4er. tele2g tele1r6o 3ter1gei ter2ic. t3ess2es tha4l1am tho3don th1o5gen1i tho1k2er thy4l1an thy3sc 2t3i4an. ti2n3o1m t1li2er tolo2gy tot3ic trai3tor1 tra1vers travers3a3b treach1e tr4ial. 3tro1le1um trof4ic. tro3fit tro1p2is 3trop1o5les 3trop1o5lis t1ro1pol3it tsch3ie ttrib1ut1 turn3ar t1wh ty2p5al ua3drati uad1ratu u5do3ny uea1m u2r1al. uri4al. us2er. v1ativ v1oir5du1 va6guer vaude3v 1verely. v1er1eig ves1tite vi1vip3a3r voice1p waste3w6a2 wave1g4 w3c week1n wide5sp wo4k1en wrap3aro writ6er. x1q xquis3 y5che3d ym5e5try y1stro yes5ter1y z3ian. z3o1phr z2z3w % end of additional patterns. %} % DEK's hyphenation exception list, from hyphen.tex; not changed. %\hyphenation{ %as-so-ciate %as-so-ciates %dec-li-na-tion %oblig-a-tory %phil-an-thropic %present %presents %project %projects %reci-procity %re-cog-ni-zance %ref-or-ma-tion %ret-ri-bu-tion %ta-ble %} fizmo-0.7.10/libfizmo/src/locales/de_DE/libfizmo_i18n.txt000644 000765 000024 00000007377 12606024314 024073 0ustar00chrenderstaff000000 000000 Tracefile „\{0s}“ konnte nicht geöffnet werden. Ungültiger Parametertyp „\{0s}“. Aufruf der Funktion „\{0s}“ lieferte einen Fehler. Unültige Backslash-Sequenz in Lokalisierungsdaten. Warnung für „\{0s}“ an Adresse \{1x}: Funktionsaufruf „\{0s}“ resultierte in Fehlercode \{1d}. Ein Fehler trat beim Lesen von Datei „\{0s}“ auf. Konnte Datei „\{0s}“ nicht öffnen. Fehler beim Lesen des ersten Story-Bytes von „\{0s}“. Unbekannte Story-Version \{0d}. Ein Fehler trat beim Schließen der Datei „\{0s}“ auf. Funktionsaufruf von malloc(\{0d}) lieferte NULL, wahrscheinlich verursacht durch Speichermangel. Funktionsaufruf von emalloc(\{0d}) lieferte NULL, wahrscheinlich verursacht durch Speichermangel. Nichtbehebbarer Fehler beim Lesen der Story-Datei. Nicht nicht implementiert. Anweisungs-Form nicht initalisiert. Unbekannter Operand-Typ \{0d}. Opcode \{0d} mit Instruktionsform \{1d} nicht implementiert. Kann keine Werte von leerem Stack ziehen. Nicht genügend Wörter auf dem Stack um \{0d} Wörter entfernen zu können. Bitte geben Sie einen Namen für die Command-Datei ein. Dateiname darf nicht leer sein. Bitte geben Sie einen Namen für die Transcript-Datei ein. Ungültige Output-Stream Nummer \{0d}. Größtmögliche Stream 3-Tiefe \{0d} überschritten. Diese Funktion wurde deaktiviert. Mehr als 15 lokale Variablen sind nicht erlaubt. Ungültiger Stackindex \{0d} für Ziel von „throw“. Größtmögliche Anzahl an Stackeinträgen pro Routine (\{0d}) überschritten. Nur \{1d} Variablen sind aktiv, L\{0d} kann nicht gespeichert werden. Nicht genügend Wörter von lokaler Routine auf dem Stack. Null-Pointer erhalten. Propertynummer 0 ist nicht gültig. Propertynummer \{0d} ist in Story version \{1d} nicht erlaubt. Objektnummer 0 ist nicht gültig. Pbjektnummer \{0d} ist in Story version \{1d} nicht erlaubt. Objekt \{1d} besitzt keine Property \{0d}. Properties mit einer Länger größer 2 können nicht gelesen werden. Attributnummer \{0d} ist in Story version \{1d} nicht erlaubt. Ungültiger Nodetyp \{0d}. Ungültiger Charcode \{0d}. Größtmögliche Abbreviationtiefe ist \{0d}. Unbekannter Fehlerfall. Ungültiger ZSCII Inputcode \{0d}. Ungültiger ZSCII Outputcode \{0d}. Gültige Kommandos sind: Zufallszahlengenerator ist jetzt im berechenbaren Zustand. Zufallszahlengenerator ist jetzt im zufälligen Zustand. libfizmo version \{0s}. Story release nummer \{0d}. Story serial nummer \{0s}. Aktuelle Z-Stack-Größe: \{0d} Enträge. Z-Stack Einträge in Benutzung: \{0d}. Unterlauf-Überprüfung für Routinenstack deaktiviert. \{0d} Bytes werden von Undo benutzt. \{0d} Bytes von Texthistorie belegt. \{0d} Bytes für Blockbuffer verwendet. Interface „\{0s}“ unterstützt keinen Preloaded Input. Interface „\{0s}“ unterstützt keinen Timed Input. Bitte geben Sie den Dateinamen für das gespeicherte Spiel ein. Fehler beim Speichern in Datei. Chunk „IFhd“ konnte nicht gefunden werden. Fehler beim Lesen der Savegame-Datei. Konnte Releasenummer nicht lesen. Konnte serielle Nummer nicht lesen. Konnte Prüfsumme nicht lesen. Release nummer, serielle Nummer oder Prüfsummer sind nicht kombinierbar. Konnte Restore-Programmzähler nicht lesen. Konnte Chunklänge nicht lesen. Die ursprüngliche Storydatei „\{0d}“ konnte nicht gefunden werden. Konnte weder „CMem“ noch „UMem“ Chunk finden. Chunk „Stks“ konnte nicht gefunden werden. Ungülter IFF Zugriffsmodus \{0d}. Signal \{0d} abgefangen, Interpreter wird abgebrochen. Division durch Null nicht möglich. Opcode JE mit nur einem Operand ist nicht gültig. Funktionsaufruf time() lieferte -1. Unbekannte Konfigurationsoption „\{0s}“. Ungültiger Wert „\{0s}“ for Parameters „\{1s}“. Story hat Z-Versionsnummer \{0d}. HistoryOutput ist nicht mehr gültig. fizmo version \{0s}. fizmo-0.7.10/libfizmo/src/locales/de_DE/patterns.txt000644 000765 000024 00000273051 12606024314 023253 0ustar00chrenderstaff000000 000000 % % This file has been renamed from hyph-de-1996.tex to patterns.tex in July 2011 % for usage in the fizmo z-machine interpreter. Empty lines were removed % and lines containing comments divided into separate data and comments % lines for technical reasons. No other changes made. % % dehyphn-x-2011-06-01.pat % % \message{German Hyphenation Patterns (Reformed Orthography, 2006) `dehyphn-x' 2011-06-01 (WL)} % % TeX-Trennmuster für die reformierte (2006) deutsche Rechtschreibung % % % Copyright (C) 2007, 2008, 2009, 2011 Werner Lemberg % % This program can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % % % The word list is available from % % http://repo.or.cz/w/wortliste.git?a=commit;h=2d246449f5c4f570f4d735d3ad091f6ad70f6972 % % The used patgen parameters are % % 1 1 | 2 5 | 1 1 1 % 2 2 | 2 5 | 1 2 1 % 3 3 | 2 6 | 1 1 1 % 4 4 | 2 6 | 1 4 1 % 5 5 | 2 7 | 1 1 1 % 6 6 | 2 7 | 1 6 1 % 7 7 | 2 13 | 1 4 1 % 8 8 | 2 13 | 1 8 1 % %\patterns{% .ab1a .abi4 .ab3l .abo2 .ab3ol .ab1or .ack2 .ag4n .ag4r .ag2u .ai2s .akt2a .al3br .al2e .al5l4en .al4tei .alt3s .ampe4 .amt4s3 .an3d2 .anden6k .and4ri .ang2 .an3gli .angs4 .angst3 .an3s .an4si. .ans2p .ans2t .an4tag .an3th .apo1 .aps2 .ari1e .ark2a .ar4m3ac .ar2sc .ar4t3ei .as3t .as4ta .at4h .au3d .au2f3 .au4s3 .ausch3 .ax4 .äm3 .ät2s .be3erb .be3ra .be3r2e .berg3a .ber6gab .ber4g3r .boge2 .bo4s3k .bu4ser .by4t .ch2 .dab4 .da2r1 .da4rin .darm1 .da4te. .da4tes .de2al .de1i .de4in. .de1o2 .de3r4en .de1s .des2e .de3sk .des2t .dien4e .do2mo .do1pe .dorf1 .dü1b .dys1 .ebe2r1 .ehe1i .ei3e2 .ei4na .einen6g .ei2sp .ei4st .ei4tr .eke2 .el2bi .elb3s .em3m2 .en1 .en4d3er .en5der. .en2d3r .end3s .enn2 .enns3 .en2t3 .en4tei .en4tr .er8brecht .er2da .er4dan .er4dar .er4dei .er4der .er1e .ere3c .erf4 .er1i .er8stein .er8stritt. .er8stritten. .er4zen4 .es1p .es3ta .es5t4e .est2h .es3to .es5tr .et2s .eu1 .eu3g4 .eu3t .eve4r .ext4 .fe2i .fer4no .fi3est .fi4le. .fi4len .fi2s .flug1 .for2t .fs4 .fu2sc .ga4t .gd2 .ge5nar .ge3ne .ge3r2a .ge3r2e .ge3u .gs4 .guss1 .hau2t1 .he2 .he3fe .her3an .he3ri .he6r5inn .hi2s .ho4met .ia4 .im2a .ima4ge .im5m .in1 .in3e .ink4 .inn2e .inu1 .ire3 .is2a .jor3 .ka2b5l .ka2i .kamp2 .ka4t3io .ki4e .kle2i .kni4e .kopf1 .ks2 .kus2 .le4ar .li2f .li4tu .li4ve. .lo4g3in .lo3ver .lus4tr .ma3d .ma2i .ma3la .ma2st .md2 .me2e .mel2a .men8schl .men8schw .men3t4 .mi4t1 .mm2 .näs1c .ne4s .ni4e .nob4 .no4th .nus2 .oa3 .ob1a .obe2 .oper4 .or2a .ort2 .orts3e .os5t6alg .oste2 .ost5end .os8ten8de .oste6re .ost3r .ozo4 .öd2 .pa4r1e .par3t4h .pf4 .ph4 .poka2 .pro1 .ps2 .ram3s .reb3s2 .re3cha .rein4t .reli1 .reli3e .res6tr .ri2as .richt6e .ro4a .ro3m2a .rö2s1 .rü1b .rü6cker6 .sali3e .sch4 .se3ck .sen3s .ser2u .se2t1 .sha2 .sim3p4 .si4te .ski1e .spiege8lei .st4 .sto4re .sucher6 .tage4s .tal2e .tan4k3l .ta2to .te2e .te2f .te3no .te2s .te4st .th4 .ti2a .tid1 .ti4me. .ti4mes .ti2s .ti5ta .tite4 .to4nin .to4pl .to2w .tri3es .tro2s .ts2 .tu3ri .uf2e2 .ufer1 .ul4mei .um3 .umo2 .un3a2 .un3d .un3e .un3g .uni4t .un3s .uns4t .ur1 .ur2i .urin4s .ur3o2m .uro2p .ur3s2 .ut2a .ut3r .übe4 .ve5n2e .vo4r .wah4l .wa2s .wei4ta .wi4e .wor2 .wort5en6 .wor8tend .wor4tu .xe3 .ya4l .za2s .zi2e .zin4st .zwe2 2aa a1ab aa2be aa1c aa2gr 4a1a2n 4a2ar aa2r1a aar3f4 aart2 aas5t aat4s3 a3au a1ä a1b 2aba ab1auf ab1ä ab2äu 1abd ab1eb abe1e abei1 ab1eil 2abel abe2la a3ber ab1erk ab1err ab1erz ab3esse 2abet 2abew 1abf 3abfi 1abg 1abh 2abi ab1ins ab1ir ab1it 1abk ab1l 1a2bla ab5lag 1a2blä 2able ab4le. ab3li ab4lo 3a2blö a2blu 1abn a2bo. ab2of 1a2bon 2abor ab3r a3bra a4brä 2abrü 1abs 2abs. abs2a 2absar ab3s2i ab3sp abst4 2abst. ab3ste ab3sz 1abtei 2abu ab1ur 2abü 1abw 2aby aby4t 1abz 2aca 2ac1c a1cem 2ach. ach1a a1chal ach3au 2achb a1che a2ch1e2c ach1ei a4cherf a4cherk a4cherö a4ch3erw 4achf a1chi ach3l ach3m ach3n a1cho a3cho. ach1o2b ach1or ach3ö ach3r ach3su a4cht acht5erg ach2t1o ach8traum ach8träume. ach8träumen. ach6trit a1chu ach1u2f ach3ü 2achv 4ach1w a1ci ac1in a1ckar ack2en a2ckin ack2se ack3sl ack3sta4 a1cl acon4n 2acu a1ç a1d 2ada. a3d2ab ad2ag ada2m ad3ama a2d1an 3a4dap a3d2ar3 4adav 1a2dä ad1c 1add 2ade. ade2al adefi4 a2dein 2aden ade1r2a a2deri 4ade1s ade3s2p ades4s ade5str 2adf 2adh 4a3di adi3en 5adj 2ado ad2ob 2adp 2adq 2ad3rec ad4res ad3ru 2ads2 ad3st ad3sz ad2t1 ad4te ad4tr 2adu 2a1e ae2b ae2c ae2d a2ek a2ela a2ele ae2o3 ae2p 3a2er2o1 aes5t a2et a2ew ae2x af1a a2fak a2fan a3far af4at a2fau 2afe a2f1ec a2fent af1erl a2fex af2fl af4flu 2afi 2af3l afo1s a2fö af3ra af3rä af3re af3rö af3s2a af2sp af2t1a af2tei af4t3erl af2t3r af4t5re af2tur a2f3ur a1g 2aga ag1ab ag1a2d ag1ar ag1au ag2di ag2dr ag2du age1i age4na age4neb a2gent a4gentu ag2er age4ral 2ages age2sa age4sel age4si age2s3p ag3esse age4s3ti ag3gl 1aggr 3a2git 2a2gl ag4la a4glö ag2n ag4ne. ag4nu a2g3re a2g3ri ag4ro agsa2 ag4sam ag4set ags3p ag4spo ag3sta ag3ste ags4toc 2agt ag2th a2gund 2ah. 2a1ha ah4at 2a1he a2h1erh ahe1s a1h2i ahin3 ahl3a2 ah4l1ei ah4l3erh ah2lö ahl3sz ah4n1a ahner4e ahnt2 1ahor ah1os a2h3ö ahr1a ah3r2e ahre4s3 ah3ri ahrta4 ahr6tri 2ahs aht3s a1hu ah1w a1hy aian3 aid2s ai1e2 aien3 aif2 ai3g4 a3ik. ai3ke ai3ku a2il ai2lo a1ind ain4e a1ing ain3sp 2ais ai2sa a3isch. ai3s2e aiso2 a3iv. aive3 a3ivl a3ivs a1j aje2 ajekt4o 2ak. 1a2k4ad 2akal 2a3kam 2akar ak4at 1a2kaz 2akb 2akc 2akd 4a1ke a2kef aken2n a2keu 2a1ki 2ak3l ak4li 4ako 2a1kr 4akra ak3rau 3akro 2aks ak3sh 2akta ak5tan 2aktb 2aktik ak2t3r ak5t4ri 2aktst 2a1ku a2kun 4a3kü 1akz a1la 2ala. al1ab ala5ch2 al1af ala2g al1age a3lal al1am al3ame alami5 al3amp al1ana a2l1ang al1ans al1anz a2lar a3lar. a3lare al2arm al3arr ala4s al1asi al1ass 2alat al1au al3aug a1lä al1äm alb3ein alb3eis al4berh al4b3erw al2b1l alb3li al2boh al2br alb3ru alb3s al2dä al2dr alds2t al3du 2ale 3a2l1e2b 3a2l1ef a4l1eh a2l1ei a4l3ein a2l1el alen1 al3ends a2leng ale2p al1epo a2l1erf a2l1erh al1erl 3alerm a2l1ert 3a2lerz a2l1esk ale4t al1eta al1eth a2l1eu a4leur 3a2lex alf4r 3algi al2gli 2ali ali4ene ali4nal al1ins a2linv alk1ar 1alkoh alk3s2 alks4t al2lab al2l3a4r al2lau al3lend all5erfa al3les 1allgä alli5er. alli7ers. al2lob 3almb 2alo a2l1o2b alo2ga al1ope al1orc a2l1ö al2ös 3alpe. 1alph al3skl al5s6terb al3sun al2tak al3tam alt3eig al4t3erf al2tre al2tri alt3ric al2tro alt2se alt4stü a1lu al2uf a2lum al1umb al1ur 4aly alzer4z al2zw 2am. 2am2a amab4 amad2 ama3g 2amä 2am4e 4ame. a2meb ame2n1 amer2a a2meri ame3ru a4mesh a3met a2mew 2amf a3mi. a3mie 2a3mir a3mis ami3ta ami3ti 2amk 2aml 2ammal am2mei am2min 2amml ammu2 a2mö amp2fa2 am3pr 2am2s am3sa am4schl am3str 1amt. am2t1a am2t1ä am4tel 2amtem am4t3ern am4tö am2t3r am4tre am2tu 2amu 2ana. 2anab ana3c anadi3 a3nak an1alg ana4lin 2anam 2anan 2ana1s4 an1äs 1anb 2anbu an3ch 2and. an3dac and4art andel4s ande2s an2dex an2d3rü and4sas and6spas and3ste and2su 2andu and1ur 2ane an3e2c a3nee an2ei. an3eif an1e4k 3a4n1erb an1eth 1anf 2anfi anft5s an3f2u 4ang. 3angeb an2g1ei an4g3erf an4g3erl an4gerw an4g3erz 2angf 2angh 2angie ang1l an2gla 2ango ang1r an2g3ra 4angs. ang4s3po 1anh 2a3ni an2i3d ani5ers. 3a4nim a4nins 2anj 2ank. an2k1an an2kei an3kl an4klö an2k3no ank1r an2k3ra an2k3rä ankt4 1anl 2anmu 2ann 3an3na ann2ab 3annä an3n2e an1od a3nol a2n1or a3nos a1nö 2anpr 1anr 1ansä 1ansc ans2en an2seu 2ansk an3skr ans1pa 1anspr an3s2z 2ant. an2t3a4r 1antá 1antei 3antenn an3t4he 1anthr 2anto 1antr ant3rin an2tro 1antw 2a1nu anu3s a1nü 1anw 2anwet 2anzb 1anzei 2anzg an2z1i4n 2anzs 1anzü 2anzw an2zwi 2ao ao1i a1op a1or a1os3 ao3t2 a3ot. a1ö a1p 2ap. 2apa 2ape a2pef a2pé a2pf ap2fa a3pfl a3phä a2pht 2ap3l ap2n a2pot 3appl ap3pu 2apr 2a3pu 2aq 2ar. a1ra a3ra. ar2ab ar3abt ara3d2 a2r3al a3ra3li a2r1ang a2r1ans a2r1anz a2r3app 2a2rar a2r1au a1rä 1arb 2arb. 4arba ar2bau ar2bec 2arben 2arbi ar2bl 2arbr ar2bre 2arbs2 2arbt 2arbu ar2b3un 1ar1c ar2dro 2are a2rea ar1eff a4reg a2reh ar1ehr a2rein a4rek a3ren aren4se are3r2a ar2erf a2r1erh a2reri a2rerl are3u ar2ew 2arf arf1r ar2f3ra ar2gl ar2gn 2arh 2ari ar2ia ari3e4n ari3erd ari3erg ar1im arin3it ar1int a3riu ar2kal ark3amt ar2k1ar ark3aue ark3lag ar2kor ar4kri ark1s4 ark3sa ark3sh ark4tre ar2les arm2ä ar4merk ar3m2or ar2nan arn2e 2a1ro ar1ob a2r1o2d a2r1op a2ror 2arr ar2r3ad arre4n3 ar2rh arr3he 2arsa ar4schl arse3 ar3s2h 2arsi ar2st ar3sta ar3t2e ar2the ar3t2i artin2 2arto ar4t3ram art3re 2arts 2aru ar1uh ar1um a2rü 2arv arwa2 2ary ar2zä 2arze 1arzt ar2z1w as1ala as3au a2s1ä a2sca a3sche a4schec a3schi asch3la a2schm a3schu 4as2e a2seb a2s3e2m a3ses 4ash a3s2hi asin2g 2asis aska3s a3skop a2s1o2f as1or a2sö a2s1p as2ph as2pi as2po a3spu as3s2a as3s2e as4s3ei as3s2i as2s1p as2st ass3ti as3str as3stu 2as3ta a1s4tas as4tau as3te as2th as3ti as3to as4tof 2astr ast3rä as6t3re a2sü aswa2s 3a2syl a1ß aße2 aßen3 2a1t ata1 at1ab at2af at4ag a2t1akt ata3l a3tam at1apf at1au a2taus a2t1ä at2c at2e 4ate. a2teb at3eig a2teli 4aten a2tep ater3s2 ate2ru 4ates at2h at3ha 4athe1 3athl 4a3ti atil4s ati2st 3atm 4atmus ato4man 4ator a2t1ort at1ö 4atr atra4t at3rä at3re at3rom at2sa at4schn at2se at4set at2si at2so at2s1p at3ta at4tak att3ang at4tau at2tei at3t4hä at2t3rä att3s a3tub atu2n a3tü atz1er at4zerk at4zerw at2z1in at2zo atz3t2 at2z1w a2u 2au. 2au1a2 2aub au2bli au2blo 4auc auch3ta au2dr 2aue aue2b au5erein aue2s au2fa auf1an 2aufe. 2aufeh auf1er au4ferk auff4 3aufn 2aufs. 2auft. 2aug 4augeh 4au1i au2is 2auj aule2s au3lü 4aum au2mal au2m1o aum3p2 aum3s6 4aun au3n4a aun2e au2nio au1nu a4unz au1o 2aup2 aup4ter 2au3r2 au2s1ah ausan8ne. au2sau 2ausc au4schm au4scho 1ausd aus3erp au4s3erw 3ausf 1ausg 1ausl au2so au2spr 1ausr aus3s2 3aussag aus4se. auster6m aus5tri 1ausü 1ausz 2aut. au2t1äu 2aute au4ten4g au4t3erh 1auto 2auts4 2auu 2auw 2aux 2auz auz2w 2a1ü 2a1v a3v4a ava3t4 4avi a2vr 2a1w awi3e a1x ax4am ax2e 2a1ya a1yeu ays4 aysi1 ay3t 2a1z az2a az2o az2u ä1a ä1b ä2b3l äb2s ä1che äche1e ä1chi äch3l ä2chr äch2sp äch4st ä1chu ä1ck äck2e ä1d ä2da ä2d1ia ä2dr äd2s 2ä1e äf2fl äf3l äf3r äf2s äft4s3 ä1g äge1i äge3s ä2g3l äg2n ä2g3r äg4ra äg3str 1ä2gy äh1a 2ä3he ä3hi ähl1a ähl2e äh4l3e4be 2ähm äh3ne äh3ri 2ähs 2äh3t4 ä1hu äh1w ä1im ä1is. ä3isch. ä1isk ä1j ä1k ä2k3l ä2k3r ä1la älbe2 äl2bl 2äle äl2l1a äl2p3 äl4schl ä1lu ämi3en 2äml äm2s ämt2e 2än. än5de än2dr 2äne äne2n1 äne1s än2f5 2änge än2gl än2gr äng3se 2ä3ni änk2e än2k3l än2kr änk2s än3n4e2 2äns än2s1c änse3h ä1on ä1pa äp2pl äp2pr äp2s1c äp4st 1äq ä2r3a2 är4af är1ä är1c 4äre ä2r1ei äre2n ä2r1ene är2gr är1int är2k3l ärk2s är4ment ärm2s är1o2 ä1rö ärse2 är4si är2st ärt4e är2th ärt2s3 ä2rü 1ärz är2zw ä5s4e äse3g2 äser4ei äse4ren äser2i äse3t äskop2 äskopf3 ä3s2kr ä2s1p äs6s1c äss2e äs4s3erk äs2st ä4s3t2 äs4tr ä3su ä1ß äß1erk ä4t1a2 ä3te ät2e1i ätein2 äte2n ät2h ät1ob ä2t3r ät2sa ät2sä ät4schl ät4schr ät2s1i äts3l ät2s1p ät2s3t ät4tr ät2zw äu2br äu1c äude3 äu3el ä2uf äuf2e 1äug äug3l 4äul 2äum äu2ma äum4s5 ä2un äun2e äu1nu 2äur 2ä3us. äu4schm äu3se ä3usg ä3usk ä3usn äu2sp äus2s1c 1äuß äu2tr 4ä1v 1äx ä1z â1t á1n ba2bl 2babs bach7t4e backs4 b1a2dr 2b1af 3bah bah2nu bais2 ba2ka ba2k1er ba2k1i bak1l bak1r ba2kra 3bal bal2a bal4l3eh bal6lerg bal3th 2b1am ban2a 3b2and ban2dr ba3n2e b1ang ban2k1a ban4kl ban2kr 2banl 2b1ans ban3t b1anz bar3b bar3de ba2rei bar2en bar3n bar3zw 3bas ba3s2a ba2sc ba2st bau3g bau1s bau3s2k bau3sp ba1yo 3b2ä1c b2är b2äs 4b1b b3be bben3 bbens2 bbe4p bb3ler bb2lö bbru2c bb2s bbu1 2b1c 2b3d4 bde1s 3be. 3bea be3an be3ar be3as 3beb b2ebe 1be1c be2del bedi4 be1eh be2erk be1erl be1eta 3bef4 be3g2 2b1eier bei1f4 bei4ge. beik4 beil2 bei3la 2b1eime b2ein be1ind be1in2h bei3sc beis2e bei1st beit2s 3bek 3bel be3las be3lec be3lei be2l1en be2let be3li bel3la bel3sz bel3t4 1bem 1ben. ben3ar ben3dor be3nei 3ben3g be3n2i ben3n ben2se ben4spa ben4spr benst4 ben2su 2bentb b2enti ben5t4r b1ents 2bentw ben3un ben3z2 be1o be1ra ber3am be2ran ber4ei. be4r3eiw be4rerk bere4s ber6gan. ber4in. ber3iss ber3na b1ernt be2rob be3rop ber3st4a be3rum 3be1s bes2a be2s1er be3slo bes2po bess4e b3esst. bes3sz be6stein be4s3tol be3s4ze 3bet be2tap be3tha be1ur 3b2ew 2b1ex 1bez 2b5f4 bfal2 2b1g2 bge3 bges4 2b5h2 bhut2 1bi bi3ak bib2 bibe2 bien3s bie2s bik2a bi2ke. bi2kes 3bil bil2a bi2lau 4b1illu bi2lu 2b1inb bin2e 2b1inf bin3gl 2b1int bi2o1 bio3d bi3on biri1 bi3se b1iso bi2sol bi2sp bis2s1c bi2s5t b2it. b2it2a b2ite bi2tu b2i3tus biz2 4b1j bjek4to 2b1k4 bl2 2bl. bla3b4 b3lad b2lanc 3blat b2latt 2b3law b2le 3ble2a b3leb 2b3leg 2b3leid b3lein 3blem 3ble4n b3lese ble3sz b4let b3leu 2blich 3blick b2lie 2blig bling4 b4lis b2lit 3blitz b2lo b4loc b3los 2blun 3blut 3blü 2b1m 4b3n2 bni2 bnis1 bo4a bo5as b1ob3 bo2bl bo2br bo2c bo3ch2 bo3d2 boe1 bo2e3i 2b1of bo3fe bo1is bo2l1an 3bon. bond1 bon2de bo2ne 3bons b1op bo1r2a bo4rä bor2d1i bor2d3r bo2rei bo4rig bor2s b1ort bor2t3r bo2sc bo4s3p bote3n4e bo3th bot2st bo2xi bö2b3 2böf b1öl 2b1p2 bpa2g 2b1q b2r4 2br. b4ra. 2b3rad b4rah b4ra3k bra1st4 3brä brä4u 2bre. 3brea 6b5rechte 2b3ref 2breg b3reif 3brem 2b3rep b4rer 2b3riem bri2er 2brig b4rio b3roh 2b3rol b4ron b4ruc bru4s brust3 bru2th 3brü 4b1s b2s1ad b3sand bs3ar bsat2 b3sä b4sär bs2äu b5sc bs2ca b6schan b6schef bs4cu b3se. bse2b b3sel. bse2n1 b4s1erf bs3e4r3in b4s1ers b3s2es bsi4t bs2ku b4sl b2s1of bso2r b2sö bs2pl b3s2pu bss2 bs2t bst1a2b bst3ac bst1ak bs3tät bst3er b2stip b3sto b4stod b3stö b2s3trä bs3treu bs4tri b3stü b4stüb b2s1un 4b3t btal3 btast3r b5te b4th btil4 bt4r b4ts2 btü1 bu2chi bu2e3 bu2f bu3li bul2la 2b3umk bung4 b2urg bu3r4i bu2sa bu4s3cha bu4schl bu4schm bu4schw bus1er bu2sin bu2s1p bu2s1u bü1c bügel3e 2b1v 2b1w 3by1 by3p bys2 2b3z2 bzeit1 1ca 2c1ab ca2ch ca2e3 ca3g4 ca1h cal3t 3cam c4an ca2pe 3car car3n carri1 ca3s2a3 cas3t ca3t4h ca1y2 cä3 cäs2 2cc c1ce c1ch2 c2d2 c3do 2cec ceco4 ce2dr 2cef ce1i 2cek 1cen cen3g 1cer cere3 ce3sh 1cet 2ceta ce1u 1cé 2c1f c4h 4ch. 2chab ch3a2bi cha2ck 2chaf 2ch1ak ch2anb 3chanc ch1ang ch3anst 4chanz 1chao 4char. 1chara 3charta cha2sc 3chato 4chatu ch1ärm ch1äs 1châ 2chb 2chc 2chd ch3e4ben 1chef 3chef. che4fer 3chefi 3chefs 4chei ch1eim 4chelem che4ler 4chents 4chentw cher3a che3rei 6chergeb cher6zie ch1ess 2cheta 2ch1e4x 1ché 2chf 2chg 2chh 1ch1ia 2chic chi3na 4chind 3chines 2chinf 2chinh ch1ins ch1int 2ch1inv 1chiru 2chj 2chk 2chl2 ch2le ch3lein ch2lu 4ch2m 2chn4 chner8ei. 2chob cho2f ch1off ch1oh ch1orc 2chp ch2r4 4chre chre3s ch3rh 1chron 4chs ch4sper 2cht 2chuf 2chuh 2chum 2ch1unf 2chunt 4chü 2chv 4chw 1chy 2chz ci1c ci2s c1j c4k 4ck. ck1a 1cka. 2ckac 1ckag 2ckal 2ck3an cka4r1 2ckau ck1ä 2ckb 2ckc 2ckd 1cke 4ckeff 2ckeh ck1ehe 4ck1ei 4ckense ck1ent 4ckentw cke2ra ck2ere 6ckergeb ck1erh 4ckerhö 4ckerke ck2ern 2ckero 2ck1err 4ckerze 2ck1ese 2ckex 2ckf 2ckg 2ckh 1cki 2ck1id ck1im ck1in 3ckis 2ckk 2ck3l 2ckm 2ck3n ck1o2 2ckp 2ck3r 4cks ck4stro 2ckt ckt2e 1cku 2ck1um3 2ckunt 2ck1up 2ckv 2ckw 1cky 2ckz c4l2 clet4 clo1 1clu c2m2 3co co2c co3ch co2d2 co3di coff4 coi2 co1it co2ke co2le col2o com4te. comtes4 con2ne co2pe co1ra cor3d co3re cos3t co4te cô4 2cp 2c1q 1c4r2 cre2 cre4mes cry2 2cs cs2a c2si c1s4tr 4c1t cte3e cti2 cti4o ctur6 3cu cu2p3 cussi4 1cy 2c1z 3da. da1a 2d1ab 3d2abä da2ben 3d2abl da2bre dab4rü 2d1ac d2ac. dach3a da2cho dach1s 4d3achse d1af d1ag dagi2 dah3l da1ho 3d4ai da1in da1is dal2a 2d1alar dal3b2 da3lö d1alt d1amma 2d1ammä damo3 d4amp dampf8erf 2d1amt d2an. 2d1ana dan4ce. 2d1an3d2 d1ang 2dange dan4kl dan5kla dan2k1o dan2kr 2d1ans 2dantw 2danw d2anz. 4danzi 2d1ap d2aph 4dapp da2r3a 2darb2 3d2arl dar2ma dar2m1i da2ro d3arr d2ar3s d1art da2ru d2arw da1s da3s2h das4t dat2a dat4e2 da3tei date4n 4d3atl 4datm dau3e 2d1au2f 2dauk 2d1aus3 4daush 2d1äh 2d1ämt 2d1änd 2d1äng 2d1äp 2därz dä2u dä3us 2d1b4 dbu2c 2dc d1ch dco4r 2d1d2 ddar2 d3dh d5do 1de de2ad de3as de3a2t de3b4 2d1e4ben 3de1c de4ca. de2cka de1e4 2d1eff deg2 de3gl dehe2 de3ho 2d1ehr d1ei d2eic 3d2e1im dein2d dein2s de2l1a4g de4l3aug del1än del1ec delei4g de3lein 2delek 2delem 2delfm delle2 del4leb del4lei de2l1ob de2lop de3lor de2lö del4san del5sc del2s5e del2so del2s1p del5ster del3t4 dem2ar 2d1emp d2en. dend2 de4n3end 4denerg den3g d2enh de2ni den4k3li 4den4sem den4sen den6s5tau den3th 2dentw de1nu de1on depi2 d4er. dera2b de1rad de2rap der2bl 2derdb de2re2b de4reck der3edi de4r3eis derer3 de3r4erb de3r4erf de4r3ero derer4t 4d3erhöh 3derie derin4f 4derklä der3m2 4derneu 4d3ersat der3tau der6t5en6d dert4ra de3ru de4ruh de4rum des1 de2sa de3sac desa4g de4sam des2äc de2seb de4seh de2sei des3elt de2sen1 de4set de2sin de2sor de2sp des3s2 dest5alt de2sto dest5rat de4stre des4tum de2su det2 deten4t 2d1etw de1un de1url de3us de2xis 2dexp 2d1f4 2d1g2 dga2 d2ge. dge4t1e d3gl 2d1h2 dha1s4 d2his 1di di4ab di2ad di4am 3dic di1ce di2e di3e2d die4neb di3eni di3ens. die2s3c diet3 die2th dige4s dik2a dil2s5 2d1imb din2a 2d1ind 2d1inf 2d1inh 2d1in1it 4d3inner 2d1ins 2d1int di2ob dion3s di1p di4re. di2ren di2ris 2d1irl di2sp 2d1isr dist2 di2s5te di2ta di4teng di4t3erl di4t3erm di4t3ers di2th di4t3r dit3s di2tu di5v di3z2 2d1j 2d1k4 4d1l2 d3la d3le dle2ra dli2f dl3m dl3s 2d3m2 4d5n2 dni2 dnis1 d1ob d2oba 2dobe dob4l d2obr 2d1o2f dole4 doll2 do2mar do5n4a doni1e do2o 2dope 2d1opf d2opp d2o3r4a 2dorc 2dord dor2f1a dor2fä dor2fl dor2fr 2d1org do2rie d2orp 2dort dor2ta d2os. dos3s dost1 dot6h do3un d1ö dö2l1 3d2ör dö2s1c 2d3p2 2d1q d2r4 3d4ra. 2d3rad drag4 2drahm d3rai 3d4ram d3rand 2d3rast 2d3rauc 2dräd d4räh 2d3rät 2d3räu 4dre. d4rea. d4reas 3d4reck 2dreg 3d4reh 2d3reic d4reiv 4drem 4d3ren 2d3rep 4d3rer 4dres. d4resc 2d3rh d3ri d4ri. 3d4ria 2d5ric d4rid d4rie d5rieg d4rif d4rik d4ril d4rin. 3d4risc 3d4rit 4dritu d3rob d3roc 2d3rod d4roi 2d3rot d3rou 2d3rov d3rö drö2s1 d5rub 3d4ruc 2d3ruh drunge3 2d5rut drü1b drü5cke 2d1s d4s1amt d2san ds3assi d2sau2 ds1än 4dsb d4schin d2s1e2b d2s1ef d3sei ds2eig d4seins d2s1eng d2s1ent d2s1erf d2serh d2s1erk ds1err d2s1erz dse4t d4s1eta d3s2ha d3sho d2s1im ds2inf d3s2kan d3skul 4dsl d2s1op dso2r ds1ori d2sö d2s1par ds1pas d2spä ds2po d2spro ds2pu dss4 dst4 ds3tab d4stag d4s3täti d2ste d4stea d3stei d3stell d4stem d3s4tern ds2ti ds4til ds4tip ds2tu ds1ums d2sun ds2zen 2d1t dta2d d5tea d2th d4thei dt3ho dto2 d3tö dt3r dtran2 dt5s2 d3tü 1du du1alv du1ar dub3l du2bli du2f 2d1ufe 2d1uh du1i 2d1umb 2dumd 2d1u2m1e 2dumf 2dumg 2d3umk 2duml d2ump 2dumr d1ums d2ums. 2d1umv 2d1un3d dund2a 2d1unf dung4 dun3ke dun2kl 2dunr dun2s 2dunt du1o dur2 2d1url 2dursa du4schn du4schr du4schw dus3t 2düb 3düf 3dün 2d1v2 2d1w dwa2 dwest3 dy2s 2d1z 2e1a e3a2b eab3l ea2c ea3der eadli4 ea2dr ea2g4 ea3ga ea4ge ea3gl eak1 eakt2 ea2la e3alei e4aler. ealti2 eam3 eam1o ea2na e2ano e3ar. ea2ra e3a4rene e3arr e3arv e2as eas3s eat4e2 eater1 e3ath ea5tr eat3s2 e3at5t4 e3au2f e3aug eau1st e1ä2 e1b 2eba e3b2ak 2ebed ebe2i 2ebel eb2en ebens3e ebert4 2ebet 2ebl eb3ler eb4leu e3blie eb3lo eb2lö 2eb2o ebot2 ebö2s 2ebr eb3rei eb4ru eb2s1 eb6sche ebse2 ebs3pa eb3sta eb4stät ebs3tem ebs3t2h eb3str e3bu ebu2t1 2e3ca e1ce ech1ä 2e3che ech1ei e6ch5erzi e1chi ech3l ech3m ech3n e2cho. ech1o2b e2ch3r ech3ta ech3t4ei e1chu ech1uh ech1w e1ci eci6a eck3se 2eckt 2e1cl 2eco eco3d e3cr ec1s4 2ect e1d e3d2a ed2dr ed2e ede2al e3dei ede3n2e edens1 eden4se eden4sp ede2r eder3t2 edi4al e3d2o ed2ö eds2ä ed2s1es ed2s1o ed2s1p ed2s3tr ed2su edu2s e3dy3 4ee ee3a2 eeb2l ee2ce ee1ch ee2cho ee2ck eede3 eed3s2 ee1e e1eff eef4l eef3s eeg2 e1ei ee1im eein4se eel2e ee2lek ee3len e1emp e1en eena2 ee4nag e2enä e2enc ee3ni e2eno een3s e1e2pi ee1ra e1erbt e1erd ee3r2e ee4r3en4g eere2s ee4ret e1erk ee1rö eer2ös eert2 e1ertr ee3r2u e1erz ee3s2 ees3k ee3ta ee4tat ee2th ee1u2 eewa4r e1e2x e1f 2ef. 2efa e2f1ad ef1ana ef1ar e2fat e2fäu 2efe e3fe. e2f1e2b ef1em e2fent ef2er 2eff. 1effi ef2fl 2efi e2f1i2d e2f1ins efi2s 1efku 2efl e3f4lu 2e3f2o e3fra ef3rea ef3rol ef3rom ef4rü efs2 ef3so ef3sp ef2tan 2efu e2fum 2efü e1g egas3 egd4 e3ge ege4n3a4 ege2ra ege4str ege1u e2glo e2gn eg3ni eg4sal eg4se4r1 eg4sto eg2th 2egu egung4 egus3 2e1ha eh1ach e3h2al eh2aus 2e1hä e1he eh2ec eh1eff eh2el ehen6t3 1e2hep e3her ehe1ra ehe3str e1hi eh1int eh1lam eh1lä ehle2 ehl3ein eh4lent eh5l2er eh2lin eh3lo ehl2se 2ehm eh3mu e1ho e3hol ehr1a2 ehr1ä ehr1e2c eh2rei ehr3erl ehr6erle ehre3s eh3ri eh1ro2 ehr1ob ehr1of ehs2 eh3sh eh1ste 2eht e1hu e2hunt e1hü eh3üb eh1w e1hy 2ei3a2 4eib ei2bar ei2bl eibu4t ei4b3ute ei2cho e2id ei2d1a ei3dan ei3de ei4d3err 2eidn ei3dra ei1e 4eien3 eienge4 1eifr ei3g2a 4eigeno eig2er 2eigew ei3gl 1ei2g3n 2eigru 2eigt 2eigu eik2ar ei3kau eik4la e4il 2eil. ei2lar ei2lau 2eilb eil3d ei4lein eilen1 eil3f4 eil3ins 2eiln 1eilzu ei2m1a4g eim3all ei2mor e1imp eim2pl ei2n1a ei4nas ei4nä ein3dr 2eindu ei4neng ei2neu 2einfo ein4fo. ein4fos ein3g2 ein4hab e1init ein3k ein6karn 3einkom ei2n1o2 3einsat ein6stal ein4sz e4inver ei3o2 ei1p eip2f 2eir ei3re e1irr e2is. ei2sa4 ei6schwu ei4s3erw eis2pe eis4th ei1sto ei2sum e2it ei2tab ei2tan ei2tar 2eitä ei3te ei2th ei2tro eitt4 eit3um 2eiu 2e1j e1k ek2a 1ekd e3ke. e3ken e3kes e3key e3k2l ek4n ek2o ek4r ek1s4t 2ekt ekt4ant ekt3erf ekt3erg ek4t3erz ekt2o ek5tri ek2u e3k2w e1la ela4ben el3abi el2abt ela2c el1af ela2h e2l1ak e2l3a2m el4ami el4amp el1ans el1anz 2elao e2l1ap e2l1a2r el3ari ela4s el1asi el1asp el2ast 2e1lä 3elbis el2da eld5erst el4d3erw eld3s2 2ele. elea2 ele2c 2eleh 2elei e6l5eier. e2l1ein e3leine e4leing 1elek e2l1el 1e2lem e3lem. el1emp 2e3len. e4lense e2l1ent e3lep el1erd el1erf e4ler4fa e2l1erg el1erk el1erl e4ler4la e4l3ernä e2l1err 2eles2 el1ess e4l1e4ta e3leu 2elev ele2x 1elf. el3fe elf4l 1elfm 1elft elgi5er. elgi5ers 2eli e2l1id e3lie eli2ne el1ita el3kl el3lan el3le el5le. ell3ebe el4l3ein ell3eis el3lin ell3sp elm2a 2eln el5na 2elo e2lof e2lol elon2 el1ope e2l1or elo2ri el2öf elö2s el2sum elte2k elt3eng 3eltern elto2 el2t3r elt3s2k elt3s2p 2e1lu e2l1um el1ur el3use e1lü e2lya 2elz elz2e el2zwa e1m 2ema e2m1ad ema2k e2m3anf e2m1ans 3emanz em2d3a2 e3m2en emen4t3h e6mentsp e2m1erw eme2s 1e2meti e2m1im emi5na em1int emi3ti 2emm emma3u em2mei e2mop 3empf em3pfl em2p3le em2sa em2spr em2st em3t2 1emul 2emü e2n1a 4ena. 2enac e3nad e4naf 4enah e4nak ena3l2i 4enam en4ame e4nand en3ang en3are en2asc 4enat en3att e3naue e2n1är en1äu en4ce. en3d2ac en2dal en4d3ess end4ort end3rom end3si end3s2p end3sz end2um 2ene. ene4ben en1e2c e2neff e4nein e2n1el ene4le 2enem 2enen e4n1ent en4entr 4e3ner. e2n1erd e2nerf 1e2nerg e4nerh e4nerk e2n1erl e4n3ermo 4enern e2n1err e2n1ers e2n1ert e2n3eru e2n1erw e4nerz 2enes e4n3ess en3f enf2a enf2u 1engad 3engag enge3ra en3g2i en2gl en3glo 1engp eng3se e3ni. e3nic e2nid e3nie eni3er. eni5ers. e2n1i4m e2n1in e3nio 2enis e3nit 2eniv en3k2ü e2n1o2b enob4le e2nof en1oh e3nol eno2ma en1on e2n1op e2n1o2r enost3 e3not eno2w 2e1nö en1ö2d e4nr en3sac en2sau en5sch4e en2seb ens2el 1ensem ensen1 en3ska en3sp ens2po enst5alt en4s3tät 2ensto e4nt ent4ag 1entd en2teb en4terb 1entfa 3entga en2thi 3entla 1entn en4t3rol 3entspr 2entü 1entw 4entwet 1entz en1u 2enut e1nü enü1st 4enwü e1ny en4z3erf en4z3erg en4z3erk enz3ert e1ñ 2eo e1o2b1 e1of eo2fe e1oh e4ol e1on. e1ond e1onf e1onh e1onl e1onr e1ons e1ope e1opf eop4t e1or e3or. e3orb e3ors e3orw eo1s2 e3os. eo3ul e1ov e1ö2 e1p e3pa epa2g e3p2f4 1episo ep3le 1e2poc ep2pa ep4pl ep2pr ept2a ep2tal e3pu epu2s e1q er1a e3ra. e3rad. er3adm eraf4a era1fr era2g e1rai er3aic e2rak e1ral er3all eran3d e3rane er3anf e2ranh er3anm e1rap er3apf e2rar e3rari e1ras e2r3a4si era2ß e2rath e3rati e2ratm e1raub er3aue erau2f er3aug e1raw e1raz e1rä er1äh er1äm erb2e er3br erb4sp er1c er3chl er3da 1erdb er3de 2erdec erd3erw 4ere. er1eb e3rech er3echs er1e2ck ere4dit er1eff e2r1e2h 4e3rei. er1eig e2rein e4r3eis. ere2l er1ele 2e3rem 2eren 4e3ren. e3rena e4rense e4r3entf e4rentn e3renz eren8z7end 2erer 4erer. e2r3erf e2r1erh e4rerl 4erern e3rero er1err er1ers e2rert er1erw 2eres er1ess er3e4ti er1eul ere4vid erf2e erf4r 4erfür 3ergebn 4ergehä erg3el4s3 1ergol erg3s ergs4t er3h 1erhab 2erhü 2eri e2riat e3rib 4e3ric 4e3rie eri3e4n3 e3ri3k4 4e3rin. er1inb e2r1ini er1ink er1int e3rio er1ita 2erk. 1erklä 2erkre erk3t 3erlebn ermen4s erm3ers ern1os e1ro e3ro. er3oa er1o2b er1of er1oh e3ron er3ony e2r1o2p e4ro2r e3ros e3row er1ö erö2d 2erök er3p4 er3rä 2errü ers2a er3se ers2i er3sk er3smo er3sn er3sp er3sz ert2ak er6terei er4t3erf er4ters er2tho 4erti ert3ins erts2e 2eru eruf4s er1u4m er1und erung4 er1uns er3uz erü4b 3erweck 6erweis es3ab es2ach es3ak es3anz e3s2as e4s3ato 2esb es2c es3cap e3sce esch2 e3scha e2s3ein es2el ese4ler es3eva 2esf 4esh es2har es2hu es2id esi1er e2sil es3int es2ir es2kat e4ske es3kl es3ku e4sky es3l es4log 2esm es2ort e3sot es2ö 2esp e3s2pek e3spi e3s2por e3s4pra 2esr es2sau es3sc es3se 4essem ess4e3re ess3erg 2esso es2sof es2s1pa es2spu es3str es3stu estab4b est1ak e1star e4starb 1e2stas e1stat e1s2tec e3stel es4t3eng es4t3erh es4t3ess e1stil e2stip estmo6de est3ori e1str es4tri es3trop e1stu es4tü e2s1um es3ums es3w e3sy es3z e1ß eße3r2e e1t etab4 et1am 3etap et4at et1äh e3te e4tein et2en eten3d2 ete2o eter4hö eter4tr et2h et3hal et3hü e3ti eti2m eti2ta 2e3to eto2b e4t1of etons4 e3tö 2etr e4traum e6t3rec e2tres et4rig etsch3w ets2p et3su ett1a et2tab et2t3au et2tei ette4n1 et2th et2t3r et4tro ett3sz et4t1um e3tü etwa4r 2etz et2zä et4z3ent etze4s et2zw eu1a2 eu3erei eue6reif eu2esc eu2ga eu4gent eu3g2er eu4gla eugs4 euil4 eu1in 1euk eu2kä e1um e3um. e3umb e3uml e3um2s eum4sc eums1p eum3st 2eun eun2e eu4nei e3un2g eu2nio eun3ka eu1o2 eu1p eur2e 3eu3ro eu3sp eust4 eu1sta eu1sto eu1str 2eut eut2h eut6schn 2eux eu2zw e3ü 2e1v e2vela e2vent 4ever eve5r2i e3vo e1w 2ewa e3wä ewä2s 2ewe e2we. ewinde3 e3wir ewi2s e3wit ew2s 2ex. ex3at 1e2xem ex1er e1xi e2x1in 1exis ex3l 3exp 2ext. ex2tin ex2tu 2exu 2e3xy ey1 ey4n eys4 e1z e3z2a e2z1enn e3zi ezi2s ez2w é1b é1c é1g égi2 é1h é1l élu2 é1o é1p é1r é1s é1t2 é1u2 é1v é1z2 è1c è1m è1n è1r ê1p ê4t 1fa fab4 f1abe fa2ben fab5s 3fac fa4cheb facher5f fa2ch1i fa2cho f1ader fa2dr f4ah faib4 fa2ke f2al fa3l2a fal2kl fal6l5erk fal6scha fal6schm fal3te falt2s 2fanb 2fanf fan2gr 2f1ank 2fanl f1anp 2fanr fan3s 2fanw f1an3z 2f1ap f2ar far2br 2f3arc 3fari farr3s 3f4art 2f3arz fa3s4a fa3sh f3at fa2to3 2f1auf f3aug f1ausb 3f4av fa2xa 1fä fä1c fäh2r1u 2f1ärm fä2ßer f1äu 2f1b2 2f1c 2f3d4 fdie2 1fe featu4 fe2c f2ech 2f1eck fe2dr fe2ei fe1em fef4l feh4lei f4eie 2f1eing 4f1einh fe1ini 2f1einw f1eis fek2ta fe2l1a fel2dr 2fe2lek fe2l1er fe2les fe2l1o fel4soh fel3t f2em. fem4m 2femp fe2nä fen3g fe2no fen3sa f1ent f2er. fe1ra fer2an fe4rang fe4r3anz fe2rau ferde3 f2ere fer2er fer3erz f1erfa f2erl. 4ferneu f4erpa f2ers. f2ert f1erw fe2st fest1a fest3ei 2f1eta fe4tag 3fete fet2t3a feuer3e feu4ru 3few f1ex 2fexp 3fez 1fé 2f1f ff3ar ff1au ff2e ffe2e f2f3ef ff3ei ffe1in ffe2m f2f3emi ff4en f2fex fff4 ff3l ff4la ff4lä ff4lo f3flu f3flü f3f4rä ff3ro ff3rö ff2s ff3sho ffs3t ffs4tr 4f3g2 fge3s 2f1h2 1fi 3fi. fi3at fid2 fien3 fi1er2f fi2kin fi3kl fik1o2 fi2kob fi2kr fi2l1an fil4auf fil3d fi2les filg4 fi3li fi4lin fil2ip f2ina fi3ni fin2s fin3sp 2f1int fi2o fi3ol fi2r fi3ra 3fis fis2a fisch3o fis2p fi2s5t fit1o2 fi2tor fi3tu 3fiz 2f1j 4f1k4 f2l2 2fl. f3lad f3lap 1flä 3f4läc 2f5läd f3län 2f3läu 2f3leb f4lee 2f3lein f3ler f4lé f3li. 3f6lim fli4ne 2f5lon 1f4lop 1f4lot flo2w f3lö f4luc 1f4lug flu4ger f4lü 2f3m2 fma2d 2f3n2 fni2s 1fo fob2l 2f1of foli3 fo2na fon2e fo2nu 2f1op fo1ra 4f3org fo3rin 3form for4m3a4g forni7er. for4st for4tei for2th for2t3r for3tu 2f1o2x 1fö 2föf 2f1ök 2f1öl för2s 4f1p2 2f1q f2r2 f4rac frach6tr f5rad fra4m f3rand f5rap 1f4rän 2fre. f3rec f3red 2freg freik2 frein4 f3rep f4reu 2f3ric fri3d fri2e 2frig 1fris f4risc f3roc 1f4ron fro2na fro2s f3rot f3ru f3rü 4f1s fs1all fs4amm f2san fs3ar f2s1as f2sauf f2saus f2saut f3sc f4sce f4schan f4schef fs4co fs1e2b f4s1ehr f2s1em f2s1ent f2s1er fse4t f4s1eta f3si f2si2d f3s2kie f2s1o2 f3span f2s1pas fs1pen f2sph f3s2pl f3s2por fs1pr f2spre fs2pri f2spro fs2pru fs3s4 fs2t f2stas f4s3täti f4stech f3stei f3s4tel f3stern fs3th f2stip f3st4r f4s3tres f4s3tüte f2s1un f2sü f3sy 4f1t f4ta. f2tab ft1a2be ft1af f2t1al ft1an ft1ar f3tat ft1e2h ft1eig ft1eis f4t1ent f4t1e4ti f2th f4thei ft3ho ft1op f3tö f2t3ro f2t3rö f3t4ru ft2s1 ftsa4 ft4sam ft3s2c ft4sche ftse4 ft4seh fts3el ft3st ft4s3tan ft4s3tä fts2ti ft4stri f2tum ft1url f3tü ftwa4 ft3z2 1fu 3fug 3f2uh f1um 2f1unf fung4 2f1u2ni fun2kl fun2ko fun2k3r 2f1unm 2funt f2ur fu4re. fus2sa fus2s1p fus2st fu2ß1er 3fut 1fü 2füb fü2r 2f1v 2f1w 1fy 2f1z fz2a fzeiten6 fzei8tend fz2ö fzu3 fzu4ga 3ga. 2gabf ga2b5l gab4r 2gabz ga1c 2gadl 2ga2dr ga1fl ga3ge 5gai ga1k ga2ka gal2a g4amo 2g1amt 2ganb gan3d gan2g1a 4gangeb gan2gr 2ganh 2g3anku 2ganl g3anla 3g2ano 2ganw ga1ny 2garb 2garc 3gard 2g1arm ga3r2o g1arti ga3ru 2g1arz ga2sa gas3ei ga2si ga2sor ga3sp ga4spe ga4spr gas3s gas4ta gas5tan ga4ste gas4t3el gat2a 2gatm gat4r gau1c 2g1auf g2auk g1aus 2g1aut 2g1äp 2gärz gäs5 gä4u 2g1b2 gber2 gbi2 gby4t 2g1c 2gd g1da g2d1au g2d1er gd1in g1do g1dö g1d3r gd3s2 gdt4 gd1u 1ge ge3a2 geb2a gebe4am geb4r ge1c ged4 ge1e2 ge3ec ge2es gef4 ge3g2l ge1im ge2in. gein2s ge2int gein2v ge1ir ge2is 2g1eise2 gei3sh g2el ge4lanz gelb1r gel4b3ra gel6ders ge3le ge5leh ge4l3ers ge4less gell2a ge3lor gels2t gel3ste gel3sz gel3t2a ge3lum ge3lü gelz2 ge3mi gem2u 3gen ge3na ge4nam ge4nar gen4aug gen2d1r gen1eb ge3nec gen3eid gen3ern gen3g gen3n gen4sam gen3sz 2g1entf gen3th 4gentw geo2r ge1ou ge3p4 ge1ra ge2rab 4g3ereig ge4reng ge4ren4s ge4r3ent ger2er gerin4f ger4inn gerin4t germ4 ger3no ge1r2ö ger4sto ge3r2u g1erwa g2e1s2 ges3auf ge3sc ges3elt ge2s3er ge3si ges4pi ges3s2t gest2 ge3ste ge4s3ter ges3th ge3t2a 2getap ge5tr ge3t4u ge1ul ge1ur 2g1ex 2g1f4 4g1g gga4t g3ge gge2ne g2g3l gg4lo g2g3n gg4r 2g1h 4gh. gh2e 3g2het 3g2hie gh1l 3gh2r g2hu gh1w gi3alo gie3g gi2e1i gi2el gien2e1 gie1st gi2gu gi2me. gi4mes gi2met 2g1ind gi3ne gin2ga 2g1ins 2g3isel gi3t2a gi3tu gi4us 2g1j 4g3k2 4gl. g1lab g1lac 3glad g2lade 2g1lag 3glanz 3g2laub 2g1lauf 3glät 2gläuf g2l4e 2gle. 3glea 2g3leb g3lec g3leg 2gleh 4g3lein glei4t5r g3len 4g5ler 2gles g3lese g4lia 2glib 3g2lid 3g2lie 2glif g2lik 4glin g2lio 2glis 4g3lisc 3g2lit g2liz 3g2loa 3g2lob g3loch glo3g 3g4lok g2lom 3g2lop 3g2lot 2gls 2g1lu glu2t 3glü g2ly 2g1m2 g1n 2gn. g2n2a g4na. 2gnac g4nat 3g2nä gn2e g3neh gne2tr 2gneu 2gng g2nie g2nif g4nin 2gni2s1 3g2no gno1r 4g3not 2gnp 2gns 2gnt 2gnu 3g2num. g2nü g2ny 2gnz go4a goa3li 2g1of 2gog 2g1oh go1i gol2a 2gonis 2g1ope 2g1opf g2o1ra 2gord 2gorg go2s1 go3st go3th got6t5erg go1y 2g1p2 2g1q g2r4 gra2bi gra2bl 2gradl 2g3rah 2g3rak grammen6 gram8m7end 2g3räu 2g5re. g4reb 2g3rec 2g3rede g4re2e 2g3reic 2g3rein g3reit g4rem 2g3renn gren6z5ei g4rer g3ret g3rev 2g3ric gri2e g3riese 3grif 2grig 2g3ring 2groc 2groh gron4 g4ros gros6sel gro4u 2g3röh g4ruf 2g3rui 2g3rum 3g4rup 2grut 2g3rüc 3g4rün 4g2s1 gsa4g g3s2ah g4s3a2k g3sal g4salt gs3ama gs3an gs3ar gs3aug g3s2c g4sca g4s3ce gsch4 g4schef gs4chi g4sco g4s3cr gse2 gs2eh g3s2eil g3sel. gs3eli g3seln gsen1 gs3er gs5erk gse4t g4seta gsi2d g3sil g4sl gso2 gsp4 g3s2pek g3spi gs4pie g4spin gs3pl g3s2por gsrat4 gsrü2 gs5s4 gs3ta g3stan g3star g3s4tati g4s3tä g5stäm g3stel gst3ent gst3err g1steu gst2he g3stir g3sto gs3toc g4stol gs3top g4s3tor g3stö gs3tr gst4ra gs4trat gst4ri gs4t3ros g3stu g4stur gs3tü gs4tüc g4sw g3sy 2g1t g3te gti2m gt4r gt2s g3tü 1gu gu3am gu1an. gu1ant gu1as gu1c gu4d3r gu2e 2gued guet4 2g1u2f 2g1uh gu1ins gu1is 3gumm 2g1unf g2ung. gunge2 4gungew 2g1ungl g2un4s 2gunt2 2g1url gurt3s gu2s3a guschi5 gus4ser gus2sp gus2st gu4st gu2t gut1a gu4t3erh gut3h 2güb gür1 güs3 2g1v 2g1w 2g3z2 3haa hab2a hab2e h2abs ha2cho ha2del ha4din h1adle haf3f4l haft4s3p h1ah ha1kl 2h2al. halan4c ha2lau hal2ba hal4bei halb3r 2hale hal2la hal6lerf h1alp hal2st hal4t3r h1amt h2an. h2and hand3s h4ann 2hanr 2hant h1ap ha2pl ha2pr h4a3ra 2harb h2ard h1arm. har4me. har4mes har2th h1arti h2as 2ha3sa hasi1 hat5t2 hau3f4li 2h1aufm h1aukt hau2sa hau2sc hau4spa hau5stei hau6terk 2hauto hau2tr h1äff hä6s5chen häu2s1c hä3usp 2h3b2 hba2r3a 2h1c 2h3d4 hdan2 2hea he2ad he3be he4b1ei he2bl he3br he5ch2e he1cho h1echt he3cke hed2g he3di he2e3l hee4s he2fan he2fä he2f1ei hef3erm 2heff he4f3ing he2f3l he2fr he3fri he2fu he3gu h1eie h1eif h1eig he2im heim3p hei4mu heine2 h1eink 4heio he1ism he1ist heit4s3 h1eiw he2l3au hel1ec h3e2lek he3len hel3ers he3li hel4l3au hel4mei he3lo he4lof he2lö 3hemd he3mi 3hemm 4h1emp h2en. he4n3a4 he2nä hend2s he2n1e2b hen3end hen3erg he2net heng2 2heni he2no henst2 hen5tr h1ents 2h3entw hen3z 4he2o he3on he3op he3ph her3a2b he2ral 2herap he3ras herb4s he4reck 4hereig he4r3eis he2rel he4rerw h1er2fo h1erfü herg2 herin4f he6rin6nu herin4s herin8ter h1erke h3erlau 2herm he3ro he4r3o4b h1erö hert2 her3th her2zw he1sta he2s5tr he2tap heter2 he3th het2i he3t4s h2e2u heu3g he3x he1x4a he1y2 1hè 2h3f4 hfell1 hfel6ler hfi2s 2h3g2 hget4 2h1h2 2hi. 2hia hi2ac hi2ang hi1ce hich6ter 2hi3d h2ide h1i4di hi2e hi3ens hier1i hie4rin hiers2 hif3f4r hi2kr hi2l3a4 hil2fr hi2n h1indu hi3nel hin2en h1inf h1inh hi3n2i hin3n2 hi3no hin3s2 hin4t1a 2hio hi4on hi3or 2hip1 hi2ph hi2pi h2i2r hi3ra 2hi3re hi3ri hirn1 hir4ner hi3ro hir2s his2a hi2se hi2st hi1th hi3ti 2hiu h1j 2h1k4 2hl h4lac hla2n hl1anz h1las h1lat h1laut h3läd h1läs h1läu hlb4 hld4 h3leb hle3e h5len. hlen3g hl2enn h3ler hle2ra hl1erg h6l3ernä hle3run hl1erw h4lerz h3les h4lesi h3lex hlg4 h2lie h2lif hl1ind h2lip h2lis h3list h2lit hll2 hlm2 h2lo h3loc hl1of hl1op h4lor hlo2re h3losi hl2ö h3löc h2lös hl2san hl2ser hl3sku hl3slo hl3t2 h3luf h3luk h1lüf 2h1m h2mab h3mag h3man h3mar h4mäc h4mäh h4mäl h4mäu h3me. hme1e hme1in h3men hmen2s hme2ra h2mo h4mon h3mö hm3p4 hm2s hm3sa hms1p h2mu 2hn h2na hn1ad h3nam hn1an h2nä hn3d4 hn2e hn3eig hn3ein h2nel hne4n1 hne4pf hner3ei h3nerl h3nerz hn3ex h2nic h2nid h2nie hn1im hn1in h2nip hn3k4 h2nor hn3s2k hnts2 h1nu h2nuc h2nul hn1unf h3nunge ho2bl ho2ch3 ho2cka ho6ckerl hock3t 2hod hoe4 ho2ef ho4fa ho2f3r 2hoi hol1au 4holdy 3hole ho2l1ei hol3g4 4holo ho4lor 3hol3s h1o2ly 3holz hol6zene hom2e ho2mec ho2med h2on hono3 2hoo 2hop ho1ra hor3d h1org ho4sei ho3sl ho2sp ho4st 2hot. ho3th hotli4 2hot3s2 3hov 2ho2w1 h1o2x ho1y2 1h2ö hö2c hö3ck h4ör hö2s1 h3öst 2h3p2 h1q 2hr hr1ac hr3ad h1rai h1rane h3räu hr1c hr3d h2rec h3rech h3red h3ref h4rei. hrei4ba h3reic h4r3eig h3rel h3r2en h3rep hr2erg hr2erk h6rerleb hr2erm hr2erz h3re2s1 hre2t h2r1eta h3rev hrf2 hrg2 h2ri h3ric h4rick hri4e h3riesl h3rin h4rine h4rinh h4rist h2rob h3roh h3rol h4rome h4romi h4ron h2ror h3rou hrr4 hr2s1ac hr2s3an hr2sau hr3schl hr2s1en hr2ser hr4set hr4s1in hrs3k hr4s1of hr2su hr4sw hr2tab hr2tan hr2th hr2tor hrt3ri hr2tro hrt2sa hrt2se h3ruh hr1ums h3rü h4rüb h2ry hrz2 4hs h2s1ach h2san h2sau h4schan h2s1ec hse4ler h2s1erl h3s2ex h2s1ing h2s1of h2s1par h2sph hs2por h2sprä h2spro hss2 h1sta hst3alt hst2an h2s3tau h1stec h3stein h5stell h3s4terb hst2he h1s2ti h1sto h2stor h1s4tr hst3ran hst3ri h1stun h2s1u hs2ung 4h1t h2t1a h3t4akt. h3takts h3t2al h4t3alt h4t3a2m hta4n ht3ane h3tank ht2as h4t3ass h4tasy ht3a2t h2tär ht1e2c h2t1ef ht1eh hte2he h2teif h4teilz h2t1eim h2t1eis h4t3elit h2temp h4tentf h4t3ents ht3erfo ht3erfü h2t1erh ht5erken h4terkl h6terneu h4t3erre ht3ersc h6t5erspa ht3erst h6tersta ht6erste h2t1erz hte2s h4t1ese h4t1ess hte3sta h2t1eu h2t1ex h2th h4thei hthe3u h4tho h2t1in hto2 h2toly h2torg h3töp h4t3rak ht3rand h2t3rat ht6raume h4tref ht4ri h4t5rin h2t3rol h2t3ros ht3rö h4t1rös h2t3ru h2t3rü h4ts ht2so ht2sp ht3spri ht4stab hts2ti hts4tie ht4s3tur ht4s3tür htt4 htti2 h2t1urs h3tü ht3z2 hu2b1a hu2b3ei hu2b1en hu2b3l hu4b3r hu2bu hu1c hu2h1a hu2h1i huko3 huk3t4 hu2l3a hu2lä hu2l3ei hu4l3eng hu4lent hu2ler hu2let hu2l1in hu2lo hu3m2a h1ums hu2n h1una hung4s hu3ni1 h1up. h1ups 2hur hurg2 hu3sa hu2so hus4sa hus2sp hu2tab hu3t2h hu2ti hut2t hut4zen hut4z3er h2ü h4übs h3übu hühne4 hüs3 2h1v hvi2 hvil4 2hw h2wall hwe1c h1weib 3hyg 3hyp hy2pe. 2hy2t h1z hz2o hzug4 i1a 2ia. i4aa i2ab iab4l 2iac i2af iaf4l i4a3g2 i2ah i3ai i2aj i2ak i3ak. i3akt 2ial i5al. ia2l1a4 ia2lä ial3b ial3d i3alei i3alent i3alerf i3alerh ia4l3erm i3a2let i3a4lia ialk2 i3all ial3la ia2lor ial3t4 ia2lu ial3z2 i2am i3am. i4amo 2ian ia2nal i3and2 ian2e i3ann i2ano i3ant i3anz i2ap ia3p2f ia1q i3ar. ia2ra 2ias i2asc ia3sh i2asi i2a3sp ias3s iast4 i3at. i3a4ta i4ate i3at4h 1iatr i3ats i3au ia3un 2iav 2iä i1äm iär2 i1är. i1ärs i1ät. i1äta i1ät3s4 2i1b i2b1auf ib2bli ib1ei i2beig i2beis ibela2 ibe4n iben3a ibi2k i3bla i3ble ib2o i2bö i4brä ib3ren ib4ste i2bunk i2bunt ibu2s1 2ic ic1c ice1 ich1a ich1ä i1che ich1ei i1chi i2chin ich3l i3chlo ich3m i1cho i2ch3r ich4spe ich2t3r i1chu ich1w i1ci i3ck2e i1cl i1d id2ab4 i3dam id2an i2d1au 1i2dee i2dei idel2ä ide3so ide3sp 1i2dio idni3 i2dol 1idol. 2i2dr i3d2sc id2s1p idt4 i2dy ie3a4 ie2bä ie2bl ie2bre ieb4sto ieb4str ie1c ie2cho ie2ck ie2dr ie1e2 ie2f1ak ie2f1an ie2fau ief3f4 ie2f3l ie2fro ie4g5l ie3g4n ie2g3r ie3g4ra iegs3c i1ei i2e2l1a ie3las iel3au iel3d iel1ec ieler8geb i1ell ielo4b iel3sz iel3ta 2i1en i3en. i3ena iena2b ie4n3a4g i3e2nä i3end i2ene ien1eb ie3ner ien4erf ie4n3erg i3enf i3en3g ienge4f i3enh i3enj i3enk i3enm i3enn i3e2no i3enö i3enp i3enr ien2s ien3sc ien3s2e ien3si iens2k ienst5rä ien3sz ie1nu i3env i3enw i3enz ie1o2 ier3a2 ie2rap i2ere ie3r2er ie4rerf ie4r3erz ie3res i3ereu i4eri ierin3 ier3k2 i1ern i3ern. i2er5ni ie2rö ier4seh iers2t ier3sta ier3ste ier3te iesen3s4 ies2sp ies2s3t ie1sta ie3su ie2t1a ie4t3erh ie4t3ert ie2t3ho ie4t1o ie4t1ö4 ie2tri iet2se i1ett ieu2e ie1un i1ex 2if if1ar i2f3arm if4at if1au i2fec ife2i if2en ifens2 if1erg if1erh if2fl if3l i1f4la if4lä i1flü if3r if4ra i1frau i1fre if4rei if4rü if2s if3se if3sp if2ta ift3erk if2top if4t3ri ift3s2p ift3sz 2i1g iga3i i2g1ang ig1art iga1s4 i4gefar ige4na ig1erz i2g1im i2gl ig1lä ig4na i4gnä i3g4neu ig4no i3go ig4ra ig3rei ig4sal ig3sä ig4se ig3so ig3spr ig3stei ig4sto ig4stö ig3str ig4stre ig3stü igung4 2i1h i2h1am i2har i3he ihe1e ihe4n ih3m ih3n ih3r ihs2 i2h1um ih1w ii2 ii3a4 i1ie i3i4g i1im i1in i1i4s i2is. ii3t i1j 2i1k i2k1a4k ik1amt i2k1ano ik1anz i4kanze ik1art ik3att i2k1au i2kär 4ike i2k1ei ike2l1 i2k1e2r2e ik1erf iker6fah i2k1erh i2ker2l i2k1eta i3ki. ik1in i2kind i2k3l i3kla i3k4lä i2kn ik3no ik2o3p4 iko3s i2köl i2k3ra ik3rä ik3re ik1s2 ik3so ik3sz ikt2e ikt3erk ikt3r ik2tre i2kun i3kus i1la i2l3ab il1a2d i2l1ak i2l3a2m il1ans il1asp il1au il4aufb il3aus i2laut i1lä1 6ilb il2c il2da il4d3en4t ild2er ild1o il2dor il2dr il1e2c ile2h il1ehe il1ein il1el i4lents i2l1erf i2l1erg i2l1err ilf2 il2f3l il2f3re ilf4s3 ilie4n ilig1a2 ili4gab i2l1ind i2l1ip i3lip. i3lips 2ill. il3l2a il3l2er il3l2i 2ills il2mak il4mang il2m3at il2mau il2min 2ilo i2l1or il3t2h i1lu2 i2lum ilung4 i3lus ilv4 il2z1ar ilz3erk 2im. i2manw i2m1arm im4at ima2tr imat5sc ima4tur i2meg i2mej i2mek i2mele i2melf i2m1erf i2m1erz i4mesh i2meti i2mew i2m1inf i2m1ins im2mei im4m3ent 1immo 2imo im1org 1impo imp4s im3pse 1impu im2st im3sta 2imt imt3s2 2imu in3a2c i4nack i2n1ad in2af in3am i3nap in2ara in2ars in4art ina4s i2n3au in1äs in2dal in2dan 1index in3do 2indr ind4ri in3drü 1indus 2ine i2n1e2be in1ehe in3ei i2n1eng in3erbe i4nerbi in2erh iner4lö i4ner4tr i4nesk in1eu ine3un ine2x in3f 1info. 1infos 2inga ing1af in2g1a4g in2gl ing4sam 1inhab 2inhar 2inhau 4inhe in2i3d i3nie 2inig ini3kr in2ir 2inis ini3se i3nitz 3inkarn inma4le 2inn. in4n3erm 2innl in2nor inn4sta 1innta 2ino in1od in3ols in1or ino1s4 ino3t i1nö in1ö2d 2inp 2inr ins2am insch2 in2seb 2insen ins3ert in3skan in3skr 1insta in4s3tät in3stel in3su 1insuf in4s3um in3s2z 1integ int2h in3t4r in5tri in1u i3n2um in3unz invil4 i1ny in3zw i1ñ 2i1o io1c io2d i2oda io3e4 iof4l i2o3h io2i3d io3k4 i3ol. i3om. i3oms ion2 i3on. ional3a io2nau ion3d i3ons3 ion4spi ion4st i2ony i2o1p io4pf i3ops i3opt i2or i3or. i3orc iore4n i3orp i3ors i3ort io3s2 i2ost i3ot. i3ots i2ou i2ov io2x i3oz. i1ö2k i3ön i1ös. 2ip. i1pa i1pe ipen3 i3per ip3fa iph2 2i1pi ipi3el ipi3en ipi2s ip4l ip2pl ip3pu i1pr 2ips 2ipu 2i1q i1r2a i3rad 1i2rak irat2 i1rä ir2bl ir1c ir2e i3ree 2irek 2i3ré ir2gl irg4s ir2he ir2i 2irig 2irk ir2k3l irli4n ir2mak ir2mau ir4mä ir2m1ei ir2mum ir4m3unt ir2nar ir2no i1ro 1iron iro2s i1rö irpla4 irr2h ir4sch3w ir3se ir3sh ir2st irt2st iru2s1 i3sac i4s1amt is2ap is3are i2sau i2s1än 2isb i2sca isch3ar i3s2che i4schef i4sch3e4h i4sch3ei i4schin i5sching i2sch1l isch3le i2schm isch3ob isch3re isch3ru i4schwa i6schwir i4schwo isch3wu i2s3cr 2ise ise3e ise3ha ise3hi ise3inf i4seint ise2n1 is2end isen3s i2serh i2s1erm iser2u i2s1ess i4s3etat is2has isi2a i2s1id i2s1of iso6nend is1op 3i2sot is1pa i2spar is1pe is1pic is2pit is2por i2spro is3sa is4s1ac is4sau is4s3che is2st is3sta is3sto iss3tr is3stu is2sum is3t is4tab is4tam ist2an i1s4tat is4tel iste4n istes3 i1s4teu i1s4til is4toc is4tö is5tör ist4ra ist3re is4tü isum3p i2sü i1ß iß1ers it1ab. ital1a it1alt it1am it1an it2an. it3a4re it1art i3tat it1au i3tauc i4t1ax 4itä it2är i2t1äs ität2 i2t1ei i4teig it2eil i4tein 2itel ite2la ite4n iten3s2 i4tepo i2tex i5thr i2t1id 1itii iti4kan iti3k2e i2t1in1 it2inn i6tl itmen2 i5toc i2t1of i3tö it3raf i2t3ran it3ras it3rau it3räu it3re it3ric it3rom it4ron i3tru it3run it2sa its1a4g it2s1e4 its3er1 it2so it2s1pe it4staf it2sto it2teb it4tri itt2sp it1uh i2t1um i2tuns it1urg itut4 i3tü 2itz it2zä it4z3erg it2z1w 2i3u2 ium1 i1ü 2i1v i2v1ak iv1ang i2veb i2v1ei iv1elt ive4n i2v1ene i2v1ent i2v1ur 2i1w iwur2 2i1x i2xa ix2em i3xi 2i1z iz1ap iz1au izei3c ize2n i2z1ene iz4er i2z1ir izo2b i2zö i2z1w í1l ja1c jah4r3ei jahr4s ja3l2a ja3ne jani1 ja1st 2jat je2a jean2s je1c je2g jek4ter jektor4 jek2tr je3na je2p je4s3t je2t1a je2t3h je2t3r jet3s2 jet3t je2t1u2 je3w ji2a jit3 ji2v joa3 jo2b1 job3r jo2i joni1 jo1ra jord2 jo2sc jou4l j2u ju2bl jugen2 jugend3 ju2k jung3s4 ju3ni jur2o jus3 jut2e1 2j1v 1ka 3ka. k3a2a ka3ar kab2bl ka2ben 2kabh 2kabla 2kablä 2k1a2bo ka3b4r 2kabs 2k1abt ka1c k2ad 2k3ada 2k3a2dr ka1f4l ka1fr kaf3t2 k2ag ka1in ka3ka kaken4 2kala. ka2lan ka3lei ka3len. ka4lens kal3eri kal2ka kal2kr k1all kalo5 kal4tr k3ama kamp8ferf kan2al ka4n1a4s ka2nau kand4 2kanda kan2e 2k1ang kan3k4 2kanl 2k1anna k1ans k2ans. 6kantenn ka3nu 2kanw k2anz. ka2o 2k1apf 3kara 2karb k2ard k2arg ka3r2i kari3es k2ark 2k1arm k2arp3 kar2pf k2ars kar3t k2arta 2k1arti karu2 k2arw 3kas ka3se kasi1 kas3s ka2s3t ka3tan ka3t4h ka4t3r 2katt kau2f1o 4kaufr kauf4sp k1aus kau3t2 2kauto 1kä k1äh k1ä2mi k1än kär2 kä2s1c käse3 2k3b4 kbo4n kbu2s kby4 2k3c 2k3d2 kdamp2 2k1e1c k1eff kefi4 kege2 ke2gl ke2he. kehr2s kehr4s3o 2k1eic 2k1eig k1ein ke1in2d 2keinh kei1s 2k1eise keit2 ke2la kel1ac ke3lag kel1au ke2lä kel3b4 2ke2lek ke2len ke2l1er 2ke3let kell4e kel3s2k k4elt 2k1emp k2en. ken3au 4ken4gag 2kenlä ke2no kens2k ken5stei ken3sz k2ente k3enten ken3th k2entr 2k1ents k2entu 2kentw 2keo2 ke2pl k2er. ke1rad k2erc 4kerfah k4erfam k3ergeb ker6gebn k3er4hö ke6rin6nu kerin6st kerin4t ker4ken k2erko k2erl k3er4lau k3er4leb k6erlebe ker4neu k1e2ro k2ers. kerz2 ker4zeu 2k1er2zi k6es. ke2sel ke4t1a ke2t3h ket3s ke1up keu6schl 2k1e2x 2k3f4 2k1g2 2k1h4 kho3m ki3a4 ki1c 2k1i2de ki3dr ki2el kie2l3o ki1f4l ki1f4r ki3k4 2kil2a ki3li ki3lo k2imi k2in. k2ing 2kinh k2ini k2inn ki3n4o3 kin3s 2k1inse 2k1int ki3or kio4s 3kir kis2p kist2 kis4to 2kiz ki3zi 2k3j 2k1k4 kl2 4kl. 4kla. k4lar 4k1last k2le 4kle. kle3ari 4kleh k4leid 4k3leit k3lem. 2k3ler kle2ra 2k3leu kle3us 2klic 2klig k2lin k3lip k2lir k2lisc 2klist klit2s 4kliz 2k3loc klo2i3 k4lop klost4 klö2s k2löt k1lu kluf2 klung4 2k1lüc 2kly 2k1m k2n2 3knab k3ne k4nei 2k5ner kno4bl 2k5nor k3nu 3knü 1ko ko2al 2kobj 2k1o2fe koff4 koh3lu ko1i2 kol4a ko3le kol2k5 3kom ko4mu k2on ko3n2e kon3s4 ko3nu 2kop. ko1pe kop4fen 2kops 2kopz ko1r2a 2k1orc kor6derg ko3ri k2os ko2sp ko2st ko3ta kot3s2 kot4tak 2k1ou 3kow ko2we k1o2x 1kö kö2f k1öl 2k1p2 k1q k2r4 2k3rad k3rats 2kraum k4raz 2k3rät 2k3räum 2kre. 2k3rec 2kred. 2k3rede 2k3ref 2kreg k3reic kre1i2e4 kreier4 k3reih 2k3rh 2krib 2k3ric k3ries 2krip 3kris 3k4ron 2kruf krü1b 2ks k4s1amt k2san ks3ar k2sau ks2än ksch4 ks1e2b k2s1em k2sent ks1erl k2s1ers k2s1erw ks3ha k2s1id k2s1in k2s1o2 k3sof ks1pa k3spe ks2por ks2pu ks3s2 kst4 k1sta k4s3tanz k3stat4 k1ste k1s2ti k1sto k2stor k1str k2strä k1stu k2stum k2s1u ks2zen 4k1t k2t1ad kt1akt k3tal kt1am kt1an k2t3a2r kta4re k2t1au ktä3s kte3e kt1ei k2temp k2tent k4t3erfo k2t1erh kte3ru k2tex k2th kt3ho k2t1id kt1im k2t1ing kt1ins kti4ter k2t1of k3top kt1ope k4torga kt3orie kt4ran kt3ras k4tref kt4ro ktro1s kt3run kt3s4 ktt2 k2tuns k3tü kt3z ku1c kuh1 2k1uhr kul2a ku3l2e ku3l2i 4kulp 2k3uml kum2s1 k2u3n2a kung4 kun4s4 kunst3 2kunt 2k1up. kur2bl ku2rei kuri2e kuri4er ku2ro kur2sp kur2st ku4schl ku2sp kus3t ku2su 1kü 2küb kü1c kür4s 2k1v 2k1w 2k3z2 kze3l 3la. la3ba 2labb 4l3aben 2labf 2labg 2labh 4l1a2bl lab2o l2abr lab4ra lab4ri 2l3abs l1abt 3labu 2labw la1ce la2ce. 1lad lad2i l1adl 2ladm 2l1a2dr 3ladu l1adv 2laf la2fa laf3s laf3t la2ga la2gio la2gn lago2 la2g1ob 2la1ho 1lai la2kes la2k1i l2akk la1k4l 2l1al 4lall 4lalp l2ami la3min 1lammf l2amp 2l1amt lamt4s la4mun l1anal la2nau 2lanb 3l2and lan2d3a2 lan6d5erw lan6d5erz lan2d3r 2lanf lan2gl lang3s4 2lanhä l2anhe 2lanl 4lanli 2l3ann l1anp 2lans 4lansä 2lantr lan2zw 3lao l1a2po2 lap4pl la2r1an la2r1ei la4rene 3l2ar3g lar3ini lar3s 2l1ar3t l3arti la2ru la2sau 4lasd la3se 2lash 2lasi la2so 2lasp 3lasser la2st last1o lat2a la3te la4tel 2l3ath la2t3ra lat2s 2lat2t1a lat4tan lat4t3in lat2t3r laub4se l2auf. lau2fo l2aufz 1laug 2lausl 2lausr 2l1auss 2lauto 1law lawa4 lay1 lä1c 1läd 2läf 2l1ähn 1länd lär2m1a lä2s1c 4lät 2läub 2läuc 2läue 1läuf 1là 2l1b l3bac l2b1ede l4beta l2b1id l2b1ins lb2lat l3blä lb3le l2bli l3blo l4bre. lb3rit lb2s lb3sa lb3se lb4sk lb3sp lbs6t lbst3e lb4sto lb2u l2b3uf lbzei2 2l1c l3che l3chi lch3l lch3r lch3ü lch1w l3cl 4l1d ld3a2b1 l3d2ac ld3a2ck l2d1a2d lda4g l2d1ak ld1al l3dam ld1amm l2d3a2n l2d1a2r ld3ari l3das l3dat ld1au ld1är l2dei l2dele l3der. ld1erp l2d1e2se l2dex l2d1id l2d1im ldo2r ld2os ld2ö2 ld3r l2dran l2dre l3d4ru ld4rü ld3sa ld3st ldt4 ld3th l2d1um 1le 3le. le2ad leben4s3 le2bl 2lec le2chi lecht4e 3led 4ledd le3de le2e le3ei lef2a le2g1as le2gau le2gä le2gl leg4r 3leh leh3r2e 4lehs 4leht 3lei. lei2br l2eic l2eid 4l1eig l2ein. l2eind lein4du l2eine lei6nerb 2leink l2eint leis6s5er l4eist lei4ßer l2eit lei2ta lei8t7er8sc leit3s2 lekt2a 2lektr 3l2ela 2le2lek lel3s 3lemes le2m1o2 4lemp lem3s l2en. le4nad le2nä 4lendet 2lendu le4n3end 4lenerg l2enf le3ni l2enk 2l1enni l2e2no len4sem len3sz l1ents 2l3entw lent4wä 5lentwet 4lentz len2zi le1os 2lep 3lepa 3lepf lepositi8 3lepr l2er. l2e1ra le2ra4g le2rau lerb4 4l3ereig le4r3eim le4rers l1erfo l2erfr l2erfü 3lergeh l3ergen 3l4ergew 2l1ergi lerin4s lerk2 l2erka l2erko l2erle 2l1er2ö 3l2erra l4ers. lers2k lers2t ler3t 6lerwerb l1erz l2erza les2am les2e 2l1esel le3ser le3sh lesi1 le3sk les2t leste3 le1sto 4lesw 2lesy le2tat 2le3th 2leto let4tu le2u 4leud 2leuro 3leut 3lev 2lexe le2xis 2lexz 2l1f l3fah lfang3 l2f1ec lfe1e l4feis l3f4lä lf3lo l3f4lu lf3ram lf2tr lf4u lfur1 l3fü 2l1g lga3t lgd4 lgen2a lge3ra lgeräu3 l2geti l3go lg3re l3gro 2l1h2 3lhi. 1li 3lia li3ac li3ak li3am li3ar lia1s li3b4 libi3 li1c 3lichem 3licher li3chi 4lick li2cka li3d2a li2deo 2l1ido li4ds lid3sc l2ie 3lie. liebe4s li3ene lien3s lie2s3c lie2st 3lig lig4n li2gre li3ke li2kr lik2sp lik4ter li3l lil2a 2lim li3m2a 3limo li3n2a lin3al 2l1indu li2nef li2neh li2nep li2nes 2l1inf lings5 2l1inh 2l1in1it 2l1inj lin2k1a link2s li2nol l2ins. l2insa l2insc 2linsp 2linst 2l1int l1inv 2linz li2o li4om li3os. li2p3a 3lis. li3s2a li4schu 2l1isl 2l1i4so li2sp liss2 lit2a li2tal li3te lit2h lit1s2 lit3sz li3tu 3liu 2lixi li2za lizei3 4l1j 2l1k lk1alp l3k2an l3kar. lken3t lk2l lk3lo l3k4lu lk4ne lkor2b1 lk4ra l2k3ro l2k3ru lk2s1 lk3sä lks3t lk4stä l3k2ü 4l1l ll1abb ll1a2be l2labt ll1aff ll1akt l3l2al l2l1a2m ll3ama lla2n ll2anw ll1anz l3lap ll1arm ll1au ll3aug l2laus l2l1äm llb4 llch4 ll3d4 ll1ech lle3en l2l1ef ll1eim ll2em l3len. lle4n3a ll3endu llen3g l4lents l3ler. lle2ra l4lerfo l6lergen l4lergo ll3ernt ll3ertr l2lerz ll2es l2lex llg4 ll1imb ll1imp l2l1ind ll1ins llk4 ll3l2 ll5m lln2 ll1ob l2lobe l2l1of ll1opf l2l1o2r l3lor. l3lore l2l1ou l3low l2löf ll1ö4se ll3sh ll3s2k ll2spr ll5t4 llti2m llt5s2 llu2f ll1ur llus5t6 ll3z2 2l1m l2m3a2b l2marc lm1aus lm1c lme2e lm3eins l2m1e2p l2m1erz lm1ind lm1ins l2möl lm3p lmpf4 lms2t lm3ste lm3s2z lm3t 4ln lna4r ln3are lnd2 l3n4e l3ni l1nu l1nü 1lo 3l2ob. lo2ber 2lobj 2l1o2bl l2obr lob4ri l1o2fe lo1fl lof4r lo2gau lo3h2e 2l1ohr loi4r 3lok lo2k3r lol2a l1o2ly lo2min lo2n1o lo2o 2lopf 2lopt lo1ra lo4rä 2lorc l1ord lo3ren 2l1or3g2 lo3ro 3lorq 3los. lo4sa 3lose lo4ske lo2spe loss2e lo4ste los3t4r lo2ta lot4h lo3tha lo3thi loti4o 2l1ov lo2ve 2lox 1lö lö2b3 2löd lö2f 2l3öfe 4lög l1öhr 2l1ö4l3 4löß 2l1p l3pa lpe2n3 lp2f l2p1ho lpi4p lp3t4 l3pu 2l1q 2l3r2 lrat4s lre1s lrut4 lrü1b 4l1s l3sac l2s1a2d l3s2al l4s1amb l2sann l3sare l2sau l4schin l4schmü l2s1e2b l2s1ec l2s1em ls1ere ls1erg l2serh ls1erl l2s1ers l2s1erw l3sex l4sha lsho2 l2s1imp ls2log ls3ohne l4s3ort. l3s2pi ls2po l2spro l3s2pu ls3s2 lst2a lstab6 ls4taf l4s3täti l2ste l3stec l3stei l3stel l4stem ls6terne ls6terns ls2tie l2stit ls4tr ls2tu ls1um l2sun lsu3s ls2zen 4l1t l2tab ltag4 lt1ak lt1a2m l4t3ame lt3and lt1ang l3tarb lt1art l2t3ato l2t1au lt1eh l2t1eis l4te4lem lt3eli lt2en l5ten. lter3a lt2erg lt4erö l4t1e4sk lte2th l2t1eu l2th l4thei lt3ho l3thu ltimo4 l2tob l2t1of lt1op l2t1o2ri lto2w lt1öl l3tör lt1ös l4t3öt ltra3l l3trä lt3räu lt3re lt4rie lt3roc lt3ros l2t3rö l6ts lt3sc lt2so lt4stab lt4stoc ltt2 lt1uh l2t1um ltu4ran ltu2ri l3tü lu1an 4lu4b3 luba2 lubs2 lu2dr lu2es 1luf 2l1ufe 2luff luf2t1a luf2t1e luf2t5r lu2g1a lu2g1e2b lu4g3l lu2go lu2g3r lug3sa lug3sp lu2gu 2l1uh lu1id. lume2 2lumf 2luml l2ump l1ums l1umw 1lu2n 2l1una 2l1unf lung4sc 2l1uni 2lunt 2lunw 4luo 2lur l1urn l1urt 2luse lu2sp lus4s3a lus2s1c luss3er lus6serf lus6serk lus6sers lus2s1o lus2s1p lus2s3t lus4stä lu4st lus4t1a lust3re lu2s1u lu2t1a lu2tä lu4teg lu4t3erg lut1o2f lu2top lu4t3r 3lux 2lüb 5lüd lüh1l 2l1v 2l3w 2lx 1ly ly1ar ly3c 2lymp 3lyn ly3no ly1o ly3u 2l1z l2z3ac l3z2an lz2erk lz1ind lzo2f l2zö lz3t2 l2z1u4fe lz1w lz2wec 1ma m1ab m2abe 2mabk m2ab4r 2mabs 2mabt mach4tr ma2ci ma3da ma2d4r ma4d2s mae2 ma1f ma2ge. ma2geb ma2gef ma2geg ma2gek ma2gep ma4ges. ma2get ma2gev ma2gew 2m1agg magi5er. magi5ers ma3g4n 2m1ago mai4se 2m1akt mal1ak ma4lakt ma2lan ma4l3at ma2lau mal3d ma3ler mali1e mal3lo 2mallt malu4 ma2l3ut mam3m 2m1anal ma2nau 2manb man4ce. man3d2 man3ers ma2net m2anf 2m1angr m2anh 2manl m4ann 2mansa 2mansä 2mansc 2mantw 2manz ma2or m2app 2marb mar3g2 4ma3r2o maro3d 4marr mar6schm mar6schr ma3r2u m1arz 3mas ma3s2pa 4m1aspe massen3 mas4tel ma1s4tr 3maß ma2ta2b ma2tan mat4c ma2tel ma4t3erd ma5tri mat3se mat3sp 2m1au2f ma3un 2mausg m4ay ma1yo 3mä m1ähn mä1i2 4m1änd m1ärg mä3t4r mäu2s1c 2m1b2 mbe2e mb4l m3b4r mby4 2mc m3ch 2m1d md1a m2d1ä m2dei mds2e m2d1um 1me meb4 m2e1c medi3 medie4 medien3 2medy me1ef mee2n1 mega1 3meh 2m1eif 2m1eig m2eil mein4da me1i4so 3meist me3lam me2lau 3meld me2lek me2ler melet4 2melf. mell2 mel2se mel5t4 6mel6tern 2m1e2mi m2en. mena2b me3nal men3ar men3au men3ge men3gl me3nor m2ens men4sk men2so men3ta men6tanz 2mentn 4m3entwi me1o 2meou 2meö 3mer. me1ra me2r3ap me4rens mer2er 4m3ergän 3merin merin4d merin4t me2ro 3mers merz4en 3mes mes1a me2sal me4sä 4meser 2me3sh 4m1essa mes6serg mes2s1o mes2s1p mes2st meste2 me1sto 4mesu me3t2a me3th meu1 2m1ex 1mé 2m1f4 mfi4l 4m1g2 2m1h4 1mi mi2ad mi3ak mibi1 mi1c mi3da mie3dr mi2e1i mie3l mien3s mi2er mierer4 mie2ro mi4et mie4ti 3mig mi2kar mi2ki mi2ku 3mil mi3l2a milch1 mil4che mild4s 4milz 2m1imp minde4s min2en min2eu min2ga ming3s4 mi3ni 3min2o mi1nu 3mir. mi3ra 3miri 3mirs 3mirw mi2sa mi4scha mi4schn mi4schw mise1 mis2s1c mi2s5te 3mit mi2ta mi2th mi2t1r mit3s2 mit5sa mi5tsu mi2t1u 4mitz 2m1j 4m1k4 m3ka mk5re. 4m1l2 ml3c ml3l ml3s 2m1m m2mab m2m1ak m2m1al mm1ang m2m1ans mm1anz m2m1au mmd2 mm1ei mme4lin mme4na m4mentw mme2ra2 mme4rec mme2sa mm1inb mm1inf mm1inh mm1ins mm1int mmi3sc mmi1s4t mmm2 mm3p mm2s mm3si mm3sp mm3sta mm3str m2mum mm2un mmül2 mmüll1 2m3n2 m4nesi 1mo moa3 2mobj 3m2od mode3s mo2dr 4mog. mo2gal 3moh mo2i3 mo2k1l 2mol. 3mom mom2e 3m2on mo3ne mo4n1er mon2s3 mon3su 3mo2o 2m1ope 2mopt mo1ra mo2rar 2m1orc mor2d3a mor2dr mo2rer morgen5s6 mork4 3mos mos4ta moster4 3mot m1o2x mo1y 1mö mö2c 4mök m1öl 2m1p m2pf mp4f3erg mpf3erp mpf3err mp4f3erz mp2fl mpf3li mpf1or m3pi m3pon mp3ta m3pu 2m1q 2m3r2 2m1s m2san ms3and m4sap ms1as m2sau m3sä m3sc msch2 m4sco m3se m4s1ef ms1erw m4sex ms1ini mso2r ms1ori m2spä m2sped ms2po m2spot m2spro ms2pu ms3s2 m4stag m3stel m3s2ti m3sto ms4tr ms5trä ms5tren m3s2tu ms4tü ms1um m2sü m3sy 4m1t mt1ab mt1ak m3tam mt1ar mt3are mt1elt m2t1erf m4t1erg m2t1erl m2t1ers m2t1ert m4t1eta m2t1eu m2th mt3ho m2t1im m2t1ins mti2s mtmen2 m3tö mt1ös m4ts1 mt2sa mt2se mt3s2ka mt2spr mtt2 mt1um mt1urt m3tü mt3z 1mu mu1a mu3cke 2m3uh mu3la 2muls 3mun mun2d1a 4m3unf 4m3ungeb mu3ni m4unk munt2 4munz mu3ra mu4r1u2f m4us mu4s1a 3musi mu2s1o mu2sp mus3t mu2su mut1au muts3 mut2st 1mü 2müb mül4len 3mün 3müt mütter3 2m1v mvoll1 2m1w2 mwa2 mwa4r mwel4 1my my4s 2m1z 1na 3na. 2n1ab na2bä 4nabg 4nabh na2bl n2abo na2br 4n3abs 4nabt 3n2ac na2ch1 na3chen nach3s nacht6ra 4nadd n2ade 4na2dr n1af na1f4r 3n2ag na2gem 3n2ah na2h1a n3ahn 3nai nai2e n1aig 2n1ak na2ka 3nako n2al. na2l1a2 na2lä 3n2ald n4ale na4lent na2let nal3la nalmo2 na2lop nal2ph n2als. nal3t4 na2lu 2naly n4am. 3name n4amen 4n3a2mer na3m4n 3namo 2n1amt namt4s n1an. 4n1a2na 4nanb n1and2 4n1ang 2nanh 2nani 4nank 2nanl 3nann na3no n1anp 2nanr 2n1ans 2nantr 2nanw nap2si n1ar 5nar. na2r1a 2narc n2ard 4narg 3nari n2ark n2arle 2narm n2arp 4n3art na3r2u 3nas n2as. na4schw 4nasp 4n1a2sy nasyl2 3nat n4ata na3t4h 4natm nats1 nat4sa nat4sc 4natt n1au 4nauf nauf4fr n3aug 5naui 3n2aul 4nausb 4nausg n2auso 4nauss n4auste 4nausw navi5er. navi5ers 1nä 3n2äc 3näe n1ähn 2n1ä2m 2n1än när4s5 3näs nä2sc n2äss 2näu 3nä1um 2n3b4 nbe2in nbe3n nbe3r2e nbes4 nbu2s nby4 2n1c n3ce2n3 nch3m n2ck 2n1d nd2ag n2d1ak n2danl nd1ann n2d1anz ndat2 nd1au nd1c nde4al. n2dei nde4län n4d3ents nde4rob nder5ste nde2se ndi2a3 n2dob ndo2be ndo1c nd1op nd1or n2dö n2d3rat n2d3re n2drob nd3rol nd3ros n2drö n2drui n4d3run nd2sor nd2spr nd4stab nds3tau nd3th ndt4r n2dü4 ndy3 1ne 3ne. ne2ap ne3as ne3at ne2bl 2n1ebn 2nec 3neca ne1ck 3ned ne2de 2nee3 ne2e2i4 ne3ein n1ef neg4 2ne2he. 2nehen2 3nehm 4n1ehr 2n1ei n2eid 4neif 3neigt 4n3eing 4n3eink ne2ke nek3t4 ne2l 3nela nel3b 2n1ele 4nelek 4nelem ne3len ne3li nel4la 3ne3l2o 3ne3lu n2em. 2n1emb n1e2mi 2n3emp 2n1ems 3nen n4en. nen3a2 n2enb n2enc 4n1endb 4n1endd 4n1endf n1endg 4n1endh 4n1endk 4n1endp 4n1endt 4n1endw ne2n1e2b nen3ei nenen1 ne4nene 4nengb nen4ge. nen4gen 4nengs 4nengt n2enh ne2ni n2enj nen3k ne2no n2ens nens4e nen3sk 5n2en3t2a n1entb 4n1entl 4nentn 5nentr n1ents 4n3entw 4nentz ne2n3u n2env n2enw ne2ob ne1os 2nepf 2n1epo ne2pos n2er. ne1ra ne2ra2b ne3r4al ne2r3am ne2ran ne2rap ne2rau 4nerbe. 4nerben n1erbi nere2 ne2reb n1erf 4n5erfo nerfor4 2nerfü 3nergr n1erh 2n3erhö 3neri n1erk n2erli 2n1erlö n1ermä ner4mit n2ern. 4n1ernt ne2ro ne1rös n2erp 3n2ers. 2n3ersa ner8schle n2ert. n1ertr ne2rup n2erv 2n1erz 3n2es n4es. ne3san nes4c ne3ska nes1o ne2s1p 4n3essi ne1sta nes3ti ne2tad ne2t1ak ne2t1an ne2tap n1etat ne2tau ne2th net3ha nett4sc n1e2tu net2zi ne2u neu1c neu3g 2n1eup neur2 n2ew 2n1ex 3nez 1né 2n1f nf1ak nfalt4 nf2ä nff4 n3fi nfi4le. nf4l nf5lin nf2o nfo1s nf4r nf3s nft2o nft4s3 n2f1u 4n1g ng2abs n2g1ac ng1ad n2g1ak n2g3a2m n2g1and ng2anf ng1anz n2g1äl ng3d4 n3gef n2g1ein ng2en ngen2a n3ger nge4ram n4g3erse nge4zän ng3g4 ng3hu n2g1i2d n3gläs n2glic n2glo n3g2loc n2glö ng3m n2gn ng3ne ng1or ng3rat ng3roc ngs3c ng4s3e4h ngs3pa ngs5tri ng3ts n2gum 2n1h4 n3han n3har n3hau n3hä n3he nhe2r n3hu 1ni 3nia nib4l nich1s nich8ters n1id 3n2id. ni2de ni3dr n4ie nie3b ni1el nie3l2a nie4n3 ni3ene ni1ero nifes3 nig2a 2n3i2gel nig3r ni2gre nig4sp 3nik ni2kal ni2kar ni3ker ni4k3ing ni3kl ni2kr 3n2il nim2o 4n1imp nin1 3n2in. n2in4a 4n3ind 2ninf 3n2ing4 4n1inh ni2nor 2n1ins n2ins. 4ninse 4n1int 2n1inv ni2ob ni3ok ni3ol n2ip ni3ra 3n2is ni4schw ni2s1e ni3se. ni2s1p ni3spi nis3s4 ni2s1u 2nit ni2ti ni3t4r nit4s ni3tsc nitts1 nitt4sa ni3tu ni3v 3nix n1j 2n1k n2k3ad n2k1ak n3k2al n4k3alg nk2am n2kans n2kaus n2käh n2k1är nke2c n4k3erfa nk4erg nk1inh n2k1ins nk3len nk3les n2klie nk2lo nk2lu nk3lun nk4na n2kne n2k1ort nk2öf n2köl n2k3ro nk2s1al nks2ei nk3s2z nk2tak nk2tan nkt1it nk4top nk2tru 2n3l2 2n1m4 nmen2s 4n1n nna2be n2nada n4n1all n2n1an n2nau nnen3g n4nents nn2erh nn2erk nne2rö n4n3er4wa nner2z nne2s nnes1e nne4st nn2ex nn3f nng4 n3ni n2nof nn1o2r nn3sc nn3se nn3s2p nn2th n2n1uf n2n1unf nn1ur 1no 3no. 3nobl no2bla n2o3ble 2n1ob2s no1c 2no2d no3dr n1of 2n3o2fe n3ole no2leu n2on. 3n2opa 3nor. nor2a no2rad no1rak no3ral 2norc nor2d5r 3norh 3norm 3nors n1ort 3n2os. no3sh no2s3p n2oste nost1r 2nostv no3tab no2tä no4t3ei no2tel no3t3h no4tha no4thi no2t3in no2t1op no2tr 3nov 3now 2n1o2x 3noz 2nöd 2nö2f 4n1ö4l 2n3p4 npa2g npro1 npsy3 2n1q 2n3r2 nräu3s nre3sz nrö2s1 6n1s n2s1a2d n2s1all n2sang n2sant n2saus n3sav n2s1än n2s1äus ns2ca n6schef n4schro nsch7werd ns1eb ns1e2d nseh5ere nsen4sp ns1ent n2s1ep ns1erf ns1erg n2serh n2s1erk n2s1erö ns1ers n2s1erw n2s1erz nse2t n4s1eta n3sex nsfi4l nsho2f n3sil n2simp n2s1ini nsi4te nsi2tr ns2kal n2s1op n4s3ort. nsp4 n4spat n4speri n4sph n3s2pi ns4pie n2spo ns3pon n4sprä n4s3prie n4spro nsrü2 ns3s2 nst1ak n3star n3stat n4stat. n4s3tate nst3eif n3stemm ns4tent ns6terbe n5s6terne n5s6terns nst4erö ns2ti nst5opfe ns4tor n4strac n4strie ns2tu nst2ü nstü1b n2sty ns2um n2s1un ns2ung ns4unr ns4uns n3sy n4s3zi 2n1t nt3abs n3t2a3c n3t2al nta3m nt1ang n4tanza nt2arb nt1ark nt2arm nt4at nt1äm n2t1äu nte3au nte2b nt1ebe nte1e nte3g6 nt1eh n2teig nt2en nt4ene nten6te. n3ter nt4ern nt4ers nt4ert n4t1ess nteu3 nte3v nt2her n2t3ho n3thr n3t4hu nti3c nti3k4l n2tinf n2t1inh ntini1 nt2ins n3ti1t nt4lem ntmen2 ntmo2 n3to nto3me nton2s1 n3tö nt3rec nt3reif n5trep nt4rig n5trop n2t3rü n4ts nt3sa nt4sau nts2o nts2p nt4s3par nts2t nt2sto n3tu 3n4tu. ntum4 ntu2ra ntu4re. ntu4res n3tü nt3z2 1nu. 1nu1a nu3ar nubi1 1nu1c 1nud 3nue nu2es nuf2 nu2fe 1nug 2n1uh 1nui nu3k4 n2um. 2n3umb 2numf 2numg 3numm 2numr 2n1ums 2n3umz nu2n 2nuna 1n2ung4 3nung. n3ungl 2n1uni 2nunt 1nuo 2nup 2nur 3nu2s nu3sc nu3se nu3sl 1nut nu2ta nu4t3r 1nuu 1nux 1nuz 3nü. 2nü4b nür1c 3nüs 1nüt 2n1v2 n3ver 4n1w 1ny. 1nyh 2nymu n1yo 1nyr 1nys 1nyw 2n1z n2zad n2z1a4g n2zan n2z1au n2z1än n2zär nzdi1s nz1ec n4zense n4zentw n4zentz nz3erwe nzi2ga nzig4s nz1ini n2zor nz2öl nz3s n2zurk n2z1wa n2z1wä n2zwö n2z1wu ño1 2o3a2 o4abi o4ac oa3che oa3chi o4ad oa3de oa4g o4ah o4a3i oa3ke oa4k1l o4a3la o4a3mi o2ar o2as 3oa3se o4at o5au o1b ob2al 2oban o3bar 2o3b2ä 2obb ob2e 2obe. 2obea ob3ein 2o3b4en oben3d4 oben3se ober3in4 obe4ris 2obew 2o3b2i obi4t ob3ite 1obj ob1l o2b3li 2o3blo 2o3bo o2b3re o3bri ob3s2h ob3sk obs2p ob2sta ob3sz 2o3bu obu2s 2o3bü 2oby4 2oc o3ca oc1c o1ce och1a ocha2b o1che oche4b o2ch1ec och1ei ocher4k och3l och3m och1o och3ö2 och3r och1s ocht2 och3te o1chu ochu2f och1w o1ci o1ck o2ckar o3cke ock2er o3cki o2cko ock3sz o1cl o1ç o1d o3d2a od2dr o3deb o3d2e1i odein3 ode2n1 odene4 ode3sp o3dex 2o3dia o3dir o3div o2don odo4s 2odr o2dre odt4 2o3du 2o1e2 o2ec oen1 o4e3s o2e3t o3et. o3ets o1ë 2ofa of1a2c of1am of1au o2f1ei of2en o3fer of2f1a of2f1in 1offiz of2f5l of2f3r offs2 of2fu 2ofi of3l of1la of4lä of4lö 2ofo 2o1f1r of3ra of3rä of4rü ofs1a of4sam of2spe of2spr of2s1u 2oft of2tei of3th 2o1g o2g1ab oga3d og1ala og1ang o2g1ei oge2l1i o3gh ogi2er og2lo o3g4n ogs2 og3sp og1ste o1ha o1hä o1he o2h1eis ohen3s o2h1ert o2h1erz o1hi ohl1a ohl3au oh3lec ohl1ei oh3lem oh3len oh3lep oh4lerg oh4l3erh oh4lerw oh3lo ohls2e oh2lu 3ohng oh2ni 1ohnm oh2n1o o1ho oho2la oh1o2p o2h3ö ohr1a oh4rin oh1ro oh1s oh3t o1hu oh1w 2o1hy 2oi o1i2d o3ie o1im oimmu4 o1in oi2r o2isc o3isch. o1ism oiss2 oi1th 2o1j 2o1k oka2la okale4 3o2kel oki2o ok1lä ok4n 4okr ok2s1p okt4 2ol o1la o2lab o2l1ak ol2ar olars2 ol1auf o1lä ol4dam ol4dr ole3e ol1eie ol1eis oler2 ole3s ol1ex o1lé ol2fa ol2fl olf1r ol2fra ol2gl ol2gr ol2i oli3k4 ol2kl olk3r ol2kre ol2lak ol2l3au oll1e2c ol2l1ei ol2lel oll5ends ol4lerk oll5erwe o3lo ol2of olo3p2 ol1ort ol2str o1lu 3oly 1olym ol2z1a ol4z3ern ol2zin ol2zw 2om o2mab oma4ner om2anw om1art o2m1au o2meb ome3c o2m1ei o3m2eis o2mel o3men. o2mep o2meru om1erz om2es omiet1 o2m1ind om1ing o2m1int om3ma om1org om3pf oms2 omtu3 o4munt omy1 2ona ona2b o2nae o3nal on1ap o2narb on2au on3aus 2onä onbe3 2onc onderer5 2one one2i one2n3 onens2 on1erb o2n1erd on1erg on1erö o3nett on3f2 on3g2l ong4r ong3s 4o3ni on2i3d o4nikr o4n1im on3ing on3k2 onli4 onlo2c on3n2an on3n2e ono1 o3nod o2noke on1orc ono3s ons1a onsa4g on4sam on2seb onse2l onsi2 ons3l ons1p onst2h on3t2a ont3ant on4t3end ont3erw ont2h on4t3ri ont3s o1nu 2onuk on3v 1ony on3z o1ñ oof2 oo2k3l o1op o1or oor3f oo4sk oo2tr 2o1ö2 o1pa opab4 o2p3ad op3akt o3pan opa5s o1pec o1pei o1pe4n 2opf. op2f3a op3fah o2pfe op4ferd opf5erde opf1l opf3la op1flü 4oph2 o3phe o1pi opi5a4 opi3er. opi5ers. opin2 op5lag o2p3le op3li 2o3po op4pl op2pr 2o1pr 1opsi op3sz 1op3t4 o1q 2or. or1a or3a2b o1rad 2orak 2oral o2r3alm or4alt 3oram or2and o2ranh or3arb o1ras or3att o3rä or1änd or1ät or2bar orb2l or1c 2orca or2ce 4orda or2d3am or2dau or4d3eng or2deu or2d1ir or2dit 1ordn or2do 2ordr 2ords ord3s2t or2dum 2ordw 4ore ore4as o2r1e2ck o2r1ef ore2h or1eig o2rein or1er o2rerf or1eth 2orf or2fle orf3s4 or3ga 2orget or3g2h 2orgia orgi1e or2gl or3gle or2gn 2orh 2o3ric 4orie. o4rient o3rier 4oril 4orin1 2orit ork2a or2k3ar ork2s 2orm or4mans or4ment or5ne. or3n2o1 2o1ro oro3n2a 2o1rö 2orq 2orr orr4a or3rh 2ors2 or3s4a orsch5li or3sh or3sz or2t1ak or4t1an or2t1au or2tär or2tef ort3eig or4t3ent or4t3ere ort3erf or2t3ev or2the ort3ins or4t3off or2tor or4tö or4trau or4t3räu ort3re ort3ric or2t1um o3ru or2uf o4r3un o2r3ü o2rya 2o3s2a os3ad os4an osa1s o3sche os4co 2o3se ose3e o2s1ei ose2n o4sents 2osh o3s2hi o3sho 2osi o3sk o4ska os3ke o4ski 2os2kl 2os2ko os2lo 2oso 2os1p os2pe os3pec o3s2po os2sa oss3and os4sä os2sei os4s3en4k os4s3enz os2s3o os4son os2s3p os2s3t ost1a2b os4t3am ost3ang os3tarr os4ta4s ost1au os4tei oster3e os6t5er6we os2t3h os3til os3to os4t1ob ost3ran ost3rä ost3re ost3rot ost3uf 2osu4 2o3sy o3s2ze o2ß1el o2ß1en2k o2ß1enz o2ß1ere o2ß1erf 2o1t ota2go o5tark o2t1au ot3aug o2teb o3t2e1i otei4n ote2l1a ote4lei ot4em3 otemp2 o2t1erw ote2s 4ot2h ot4he ot5hel o2t3hi ot3hos o2thr o2t1i2m ot2in otli2 ot4ol ot1opf ot2or oto2ra oto1s o3tra o2t3re ot3rin ot2sa ot3sc ots1p ot4spa ots2pe ot2spr ot4terk ot2th ot2t3r ot4tri o3tü o2u oub4 ou2ce ou1f4l oug2 ou2ge ou3gl o3uh ou4le. o3um o3unds oun4ge. 2our ouri4 our4ne. ou3s2i outu4 2ouv 2o1ü o1v ove3s 2ovi oviso3 2ovo 2o1w o3wec owe2r1 o3wi o1x ox2a ox2e 1o2xid ox3l o2xu 1oxy o1yo oy1s4 2o1z o3z2a oz2e ozen4ta o3zi ozon1 órd2 ö1b öbe2la öbe4li öb2l ö2ble ö2b3r öb2s3 2ö1c öch1l ö2chr öch2s öchs4tu öcht4 ö1d ödi3 öd2st ö1e 1öf öf2fl öf3l ögen2s1 ög3l ög3r ö1he öh3l2e öh3ri ö1hu ö3ig. ö1ke ö2ko3 ök3r 3öl. öl1a2 öl1ei öl1em öl4en öl2f1ei öl1im öl1in öl2k3l öl3la öl2nar öl1o2 öls2 öl3sa öl3sz ö2l1u öl2ung ölz2w öm2s 2ön ön2e ö3ni önizi1 önn2e ön2s ön3sc ön3sp ö1nu öo1 ö1pe öpf3l öp4s3t ör3a2 ör1c ör2dr ö2r3ec ö2r1ei ö2r1e2l ör2erg ö2rerl ö3r2erz ör2f3l ör2gl ö2r1im ör2kl örner2 ör1o2 örs2e ör3s2k ört2e ör2tr öru4 ö2r1une ö2sa ö2scha ö4sch3ei ö2schl ö2sch3m ö2schw ö2s1ei ö2sp ös2s1c ös2st ö2st ös3te ös2th ös3tr ö3su ö1ß 2ö1t ö2t3a öte4n3 öt2h öts2 öt2sc öt2tr ö1v ö1w ö1z öze3 özes4 p2a 1pa. 1paa 1pac pa3da pa2dr pa1f4r pag4 pa3gh pa1ho 1pak pa1k4l pak2to 3pala pala3t 1palä pa3li 2palt pa2nar pa3nei pa2neu pan3k4 2panl 2pann 1pa2no pan3sl pant2 panz4 1pap papi2 papieren8 papie8r7end 3para pa2r3af par3akt 1parc pa5reg pa5rek 2par2er 2parg pargel6d 1park. par4kam par4kau par2kl par2kr 1paro 2parp 1partn 1party par3z2 pa3s2p pa4st 2paß 1pat pat4c pat4e2 pa5t4r 1pau p3auf pa3uni 1pä 3pä2c pä3cke 3päd 3pär 3päs pä4t1e2h pä4t3ent pä2t3h pä2to pät3s4 2p1b 2p3c 2p1d2 pda4 p2e 1pe. pe2a pea4r pech1 1ped pe2en pef4 pei1 2peic pe1im pekt4s 2peku 3pel pe2l1a4 pel3d pe2let pe2lex pe3li4n pe4l3ink pell2a pell4e 1pem pena4 pe3n2al pen3da pe4nen 1penn pe2n1o 3pensi 1pensu pen3z2 1pep pe1ra per2an pere2 1perl per4na 3pero pe2rob per2r1a 5pers perwa4 pe3sa pes3s2 pe2st 3pet 1pé 4pf. p2fab p2fad p2faf pf1ai p2f1ak pf1ans p2fa4r pf3are p2f1au 4p3fe. p2fei pf1eim pf1ein p3fen. p2fent p3fer. pf2erw p3f2es pff4 p2f1in3s p2f3lä pf3lei pf3lie pf3lo pf3lu p2for pf3r pf1ra 2pfs2 pf3sl pf3sz 2pf3t 2p1g pgra2 1ph 4ph. ph2a 2phä 2phb 4phd 2p1hei phen3d phen3s 2ph1ers 2phf 4phg phi2ka 4phk ph2l 2phm 2phn p3hop 2phö ph4r 2phs ph3t2 2phthe phu4s 2p1hü 2phz pi2a3 pias4 pi3as. pi3chl p4id2 piegelei8en pi2el piela2 3pier 3pik 1pil pi3le pil4zer pin2e pingen4 ping3s 3pinse pi2o pi3oi pi3onu 3pip pi2pe pi4pel pi3ri 3pirin 3pis 4piso pi3t2a pi1th pit2s 2pitz pi2z1in p1j 2p1k2 pku2 pkur1 1p2l4 2pl. 3p4la p5la. p5lad plan3g 3plä 2ple. ple1c p4leg p4lem 3ple5n4 2plig p4lik p4liz p4lo 2p3lu 2p1m2 2p1n 1p2o po3b4 po1c 3pod 2p3oh po2i po3id 3poin 3pok 3p4ol po2lau po3li po4lor 2pond po1o2b po2p3ak po2p3ar po1pe po2pl po3pt po1ral po1rau 2porn por3s por4tin por4tre por6tri pos2e po4sta pos4t3ag po4stä po2s3te post3ei po2sto pos6tr post3ra po3ta 3pote po2t1u po2w po3x pö2bl pö2c 2p1p p2p3a2b pp3anl ppe4ler ppe2n1 p2p1f4 p2p1h p3p2ho pp3l pp5lan pp1lä p2ple p2p3ra p2p3re p2pri pp3sa ppt2 p2r2 1prak 1prax p4rä 1präd 1präg 3präm 3präs 2pre. 2prec 1pred pre2e1 1prei 3preis 2p3rer 3p4res pri4e 2prig 1prinz 1p4ro 3prob 2proc 3prod 3prog 3proj 2pross pro1st 3prot 1prüf 2prün 2p1s 4ps. ps4an p3se p3s2h ps1id p2sö ps2po p2st p3sta p3stea p3stel p3s2ti pst3r ps2tu p3stü 3p2sy ps2ze 2p1t pt1a pt2ab pt3alb pt3at p3te p4t3ec p4t1ei pte4l p4tele p4t1ent pt3erei p4t1erw p4t1erz p2th pt1in1 pto3me p4tos pto2w p2t3r pt3s2 ptt2 pt1um pt1urs ptü4 3p2ty pt3z 1pu pu1a pub4 2puc pu2dr 2p1uh pul2sp 2pund pun2s 2punt 2pur pu2s3t 3put put2s 1püf 2pül pün2 2p1v 2p1w pwa4r 3py1 pys4 py3t 2p1z qu4 1queu 1ra. ra2ab 2r3aac r3aal ra3ar r1ab ra2bar rab2bl 2rabd r2aber 2rabf 2rabg 1r4abi ra2br 2rabs 2rabt 2r3abw 1raby ra1ce 2r1acet ra4cheb ra4chin racht3r rach6trä ra2chu r2ack r2ad r4ad. ra2dam 2radap 3radf 3radl r3a2d3r rad5t 1rae r2af raf3ar ra2fer ra3ge ra3gle ra2gn 3r2ahm 4raht r2ai 2raic rail4l 2r3air 1rake 3ra1k4l ra2kre ra2kro 2rakti 3rakü r2al r4al. ra2la2 ral3ab rala4g r3alar ral3b 3r4ald ra3le 2ralg r4ali rali5er. rali5ers ralk2 ral3la rall2e 2rallg 2r3alm. r3alp. 2ralpe r4als r3al3t r4alt2h ra2lu 3raly rama3s ra2mer 1r2ami r2amm ram4man ram6m5ers ram4m3u ram2p3l 2r1amt ramt4s r2an. 4ranc r4anda r4ande ran4dep ran4d3er rand3s 4r3anei r4aner 2ranf 1rangi rani1e ran2kr 2ranl 2r1anm 2r1anp 2ranr r2ans. r2ansp ran4spa 2rantr 2r3anw r2ap 2rapf r1ar r2ara 2rarb 3rarei rar3f4 ra2r1in r2ark r2arp 2r3arz r2as r4as. ras2a ra4schl 2r3asph 2raß 1rat r4at. ra2t1a r3atl rat4r rat2st 2r3atta 4rau. 3raub. 4raud rau3e2n 2rauf 2raug 3raum rau4m3ag rau4man rau2mi 3rausc 2rausg rau2sp 2raus5s raut5s 1raü r2ax 3r2äd 4räf 4räg 2räh 2räm 3rän. 3räni 3räns 2r1är r2är. rä3ra rä2s1c 3rätse rä2u räu2s räu5sche 4räut 2r1b r2b1ab r2b1a2de r2bak rbal3a rba3re rb1art rb1auf rbb2 rb1ech r4belä rb1ent rbe3r2e r3b2la rbla2d r8blasser r4b3last r3blä r2ble. rb3ler rb2lin rb2lö rb2o rb4ri rb2s rb3se rb4sei rb3ska rbs1o rb3sp rb4stä rb3str rb2u rby4t 2rc r1ce r1che. r1chen r1chi rch3l rch3m rch3r rch1s2 rch3sp rchst4r rch3ta rch6terw rch1w r1ci r2ck1 r1cl r1ç 2r1d r3d2ac r2daf r2d1ak r2d1al rd2am rdani1 rd1ant rd1anz r4dap r2dei rd2ei. r2d1elb r3den rden3d rden4gl rde3re rder4er rderin6s r4d3ernt rde3sp rdi3a2 rdia4l r2d1inn rd1it rdo2be r3don rd1os r2dö rd3rat rd4ri rdt4 rd3ta rd3th rdwa4 1re 3re. re3aler re2alt re2am re3as re3at. re3ats 2reä re2b1a re2b1l reb1r reb3ra re2bü r2ech rech3ar 4rechs 2reck. 2recki 3red. 4redd 2redit re1el re1er 3refe 4reff 3refl 3refo 3reg 5reg. rege4l3ä re2hac re4h3ent re2h1i rehl4 re2h1o r2ei. rei4bl r2eie 2reig 3reigew rei3l2a rei3l2i reim2p r1ein rei3nec 4reing r3eink 4reinr rein8s7tre re1in2v reister6 3rek 4re2ke re3la 2r1elb rel2e re3lei 2re2lek 2r1elf re3lo 2r1elt relu2 r4em. r2emi 4rempf 4remu r4en. r2ena rena2b re3nal re2nä 3rendi ren3dr re4n3end ren4gl 2rengp re2ni r1ense 2r1entl 2r1ents 2rentw 4r3entz r2enz re3or 3repe 3repo 4repp 3r4er. 2r1erb r2erbr 2r1erd r1erf r1erg r4ergen r1erk 4r3erken r2erki r1erl 4r3erlau 2rerlö 2r1erm rer2n 2r1ernä 4r3erns 4r3ernt r2ero re2rob r1erö 3r2ers. 2r1ersa r2erse 2rersp r1ert r2erte 2rertr 2r1erz rer5ze r2erzy 3r4es. re2sa 3rese 3reso 2ress ress2e res6s5erw 3rest re1sta re2s2tu 3resu re2thy re2u reu3g2 2reul re3uni 2r1eur 2reü 2r3evid r1ew rewa4r re2wi 2r3e2x1 3rez 4rezi 1ré 2r1f rf1ält rf2äu r2fent rf2es rfi4le. rf3lic rf3lin rf4lö r3flü rfolg4s r3for rf4ru rf4rü rf2sa rf2s1ä rf4s1id rf2s3pr rf2s3t rf2ta rf3t4r rf2u 4r1g rg2ab r2g1a2d r2g1ah r2g1ak rg2an rge4an rge2bl rge4l3er rgen4z3w rge4ral rge4tap r2geto rgi4sel r2glan r2gleu r2glig r2gno r2g1ob r2g3ral r2greg r2gres r2gret rg3rin rg3sp rgs4tr rg5s2tu r1h4 2rh. 2rha r2ha. 2rhä 3r4he. 3r4hen r3her r2hoe rho2i3 2rhol 2rhö 2rhs rhu2s 1ri ri3am ria1s ri3at rib2bl ri1ce ri1cha rid2 ri2d3an 2ridol r2ie rie2fr ri1el riene4 rien3s rie2nu ri1er. ri4ere ri3ers. ri3esti ri1eu ri2f1a ri2f1ei ri2fer ri2f1o ri2fr rif3s rif4ter 3rig 5rig. ri4gene 5rigj rig1l 4rigr rik1l ri4kla r2imb 2rimp rim2s rim4sc r2i3na 2r1ind rin4dex rin4diz ri3n4e rine1i 2r1inf rin2fo ring3l rin2gr 2r1inh 2rinit 2rink 3rinn 6r5innenm 4r3inner 4rinnta r1innu 2r1ins 3r4ins. rin4so rin2sp r4inspi 2rint rin4teg rin4t5r 2r1inv 4r1ir r2is ris2a ri4scho ri4schw 3risik ri3so ri4s1p 3riss ri2st ris6t5ers r2it r3i2tal ri3t2i rit4r rit2tr 5ritu rix1 1rí 2r1j 2r1k rk2am r2käh r3klau r2klis rk4lo rk2lu rk4n r2k5nu rk3räu r2k3rea r3kri rk3rin rk2s1e rk3shi rk2sp rk1st rkstati6 rk4stec rk2ta rk4t3eng rk4t3erf rkt3ers rk6tersc rk4t3erw rk2tin rk2t1o2 rk2t3r rk3tra rk4tri rk1uh rk2um rku2n rk1uni 4r1l r3l2a rl2e rle2a r3lec rle2i r3let r3l2i rli2s r3l2o rl2ö rlös3s rl2s1p rl3ste rl2s3to rl3t 4r1m r3m2ag rma2la r2m1ald rm1ans rm1anz rm1a2p r2maph rm2är rm3d2 r3me. r2m1ef r2meo rm2es r2mide r2m1im r2m1o2ri rmo1s rm3sa rm3sta rmt2a rm2u rm3ums 4rn rna2b rna4n rn2and rn3ani r2n1anz rn2a2r rn3are rn3ari r2nau rnd4 rn3dr r3ne rn3e4ben r4nef rn2ei rn3eif r4n3eis rne2n r4n1ene rn3ense r4nerf r4n1erg rn4erhi r4nerk r4n1ert r5nes rn2et r4nex rn3f rng2 r3ni r4n1in r3nod r2n1op r2n1or rn1ö r1nöt rn3s2ä rn3s2p rn3s2z rn3t2e r1nu rn1ur r1nü r1ny ro2bei 2robj 3robo 2robs ro1c 3rock. r2o3de ro3e4 2rof roh1l roh3na 3r2ohr 3roi ro1ir ro3le rol4lan rol3l4en rol3s 2roly 4rom. ro2mad ro2mer 4romm 4romt r2on ro4nerb 3ronn rons2 ron4tan 4ro1ny ro1pe ro3ph r1or r2ora ror3al ro2rat ro2rei ro2r1o ror3th ro3sh ro3s2i ro3smo ros2s1c ro3sta rost1r 4roß ro2ßu ro4tag rote3i ro2tho ro4tri rots2o rot2ta ro3t2u ro3unt 3rout 2rox rö2b3l rö2du 2röf 4rög 1r2öh r1ök 1r2öl 3römi 4röp r1ör r2ös. r2öse 2r1p2 r3p4a rp4e rpe2re rpe4r3in rpf4 r2pli r3po rpro1 rps3t rp3t r3pu r1q 2r1r rr2ab rr2ar rr1äm rrb2 rr1c r3r2e rre4ale rrer4s rre2st r4rew rr2he rrik2 rr2n3a rr2o r2r3ob rro3m rr2st rr3stu rr2th r3ru r3r2ü rrü1b 4r1s rs3ab r2s1a2d r4samp r4s1amt rs2an r2s3ang rs3anp rs3ant rs3ar r3sch2e r6scherl rsch2l r3schu r3schw r2sein rse2n1 rs2end rse4ne rs1ere rs1erö rs1ers rs1erz rs1eta r3sho r3si rs2kal rs2kan rs2kie rs2kis rs2kl r4sko r4skr r4sku rs3l rs4no r3so r4sob r4s1op r4sord r4s3ort. rs2p4 r2s3ph rs3s2 r4stant rs2tec r6st5eing rs4temp rs4terb rs4t3er4w rs2th rs2ti r3stie r2stin rst3ing r2stip r3sto rs4tob r4stot r3stö r3s4tr rst3ran r6strang rs2tu r3s4tü r3swi r3sy 4r1t rtal2 r2t1alm rtals1 rt1am rt1ang rt1ann rt1ant rt1anz r2t1ar rt3a4re r2t3att rt1är rte1e2 rt4eif rtei3la rtei1s4 r2telf r2temo rte2n1 rten3s2 rt3erei r4terfa r4terfo r4t3erh r2t1erk r4t3er4la r4t3erle r4t3ernä rter4re rt1ers rte3s2k r2thi rt3hol rt2hum r2t1id r2t1ima r2tinf rto1p rt1or rto2ri r3tö r4t3rak rt3rec r4treis r5tri rt3ros rtrü2c r4ts rt4s1eh rt2so rt2spa rt2spr rtt4 r2t1urt r3tü rt3z 1ru ru1a ru3a2r3 rube2 ruch3st ru6ckerl ru2cku rude2a ru2dr 3ruf ru2fa ruf2s3 4rug 2r1uhr 3ruin ru1ins ru1is 2rum 4rumf ru2mi 4ruml r2ums. 4rumz 2r1una 2rund run2d1a r2unde rund3er run6derl run6ders run6derw 2r1unf 2rungl 2r1u2ni 4r3unio run2kr 2r1unl 2r1unm 4runn 4r3unt 2runw ru3pr 4r3ur ru2ra ru2r1e 5ruro ru2si rus2s1p rus4st ru2st ru3sta 3rut ru4tei rut3h ru2t1o2 ru2t3r 4ruz ru2zw 1rü 2rüb rü1ben rü1ch 4rümm 2r1v rve4n1e 2r1w rwun3s 4r1x 1ry ry2c 2r1z rz1a2c rz2an r2zar r2zas r5zene rz1eng r4z3ents r2z1erf r2z1erg r2z1erk r2z1erw rz1id r3z2of rz1op rz2ö rz3te rz2th rz2t3ro rzug2u r3zwä r3z2wec 1sa 3sa. 3saa 2s1ab sa2be 3sabet sa2bl sa3ble sa2br 4sabs sa2cho2 sach3t 2s1ada s1adm 2s1a2dr 3safa sa2fe 2s3aff 3safi sa1f4r 3saga sa4gent sag4n sa2gr 3s2ai sa3i2k1 sail2 2s1ak sa2ka 3saki 3sakr 4sakt 3s2al. sa4l3erb sa2l1id 3salo sal2se 2s1alt 3s2alz 3sam s3ameri 5samm 6s1amma 4s1amn s1amp sam2to s1an s2an. 2s3a2na s3anb s2an2c s2and s4and. san4dri 3sang. 2s3anh 3sani 2s3anl 2s3ans san4sk 4s3antr 2s3anw 2s1ap sa2po 3sapr 2s1ar 3s4ar. 3s2ara 4s3arb 3s2ard 3sari s3arr 3s2ars 4sarti s1asp 4s3a2sy 3sat sat2a 4s3ath 4s3atl 4satm sa2tr sa3ts sat4z3en s1a4u 3sau. 3sauc 3saue 2s3aufb sau2gr 3saum 3saur sauri1 2s3ausb 3s2ause s3ausw 2s3av sa2vo 1sä s3ähn 3säl s1ält 2s1äm 2s1änd 3sänge 2s1är 3s2ät 3säul 2säuß 4s3b4 sba4n sbe3r2e 1sc 2sc. 2scam s2can s2cap 2scar 2s1ce 6sch. 2schak s4ch2al 4schanc 4schang 2schao s4chä 4schb 4schc 2schd 3sche. 2schef sch3ei. 4schemp sch2en 3sches 4schess 4schex 2schf 2schg 2schh schi4e s4chim 4schiru 3schis 2schk s4chl 4schle. 6schlein sch6lit 2schmö 2schn. 2schox s4chö 2schp 2schq 4schre. 4schrin sch3rom 4schrou 6schs schs2e sch3s2k 4sch3t scht2a scht4r s4chu 4schunt sch2up 3schü 2schv 4schwet sch4wil 2schz 2scj 4s3cl 2sco 3s4cop 3sco4r s2cr 2scs 2scu 4s3d2 sda3me sde1s sdien4e sd4r 1se se3at. 2s1e2ben seb4r 2s1echo s1echt 2s1e2ck 3see se1ec se2e1i4 see3ig seein2 se1er. se1erö 2s1eff se2gal se2gl seg4r 3seh se2h1a4 se3he se4h1ei se4hel se4herk se2hin seh1l seh3re seh1s seh3t se2hüb 2s1ei. 2s1eie 2s1eig s1ein 5s4ein. 2seinb sein4du sei3n2e sein4fo 4seing 2seinh 4seink 2seinl 2seinn 4seinr s4eins. 4seinsp 4seinst 2seinw 4s1eis 3s2eit 3s2ek s2el. se2l1a se3lad sela4g se3lam sel1ec 4selem se4l3erl sel3ers 2self. s3elix se2l3ö s2els sel3sz sel3tr s4e3ma 2s1emp 3s2en. se4nag se2nä 2s1endl sen3gl 3s2eni 3senk se2no se4nob 3s2ens s2ent. 4s1entf 2s3entg s2enti 2s1ents 2sentw 2sentz se2n3u seo2r 4s1e2pos 3seq s4er. 3sera ser3a2d se2r3al se5ref s3ereig 6sereign se4r3eim se4r3enk ser2er 2s1erfo s2erfr s3erfü 4serfül ser3g s2ergr s1erh 2serhö 3seri 4serken 2s3ernt se2rob 4s3eröf s2ers. 2sersa 4serseh s4ert. s2erta seru2 se4r1uf se3rum se3rund 3s4erv 5ses. se2sel se1sta se3su 3set 4se4tap se2tat 4s1e2th se1u2n 2s1ex se2xe 4sexp sex3t 1sé 4s3f4 sfal6l5er sflo4 4s3g2 2s1h sh2a 3s2ha. sha2k 4s3han 1shas s3hä s3h2e 3shi. 3shid shi4r sh3n s3hoc 4shof 3shop sho4re 3show s3hö sh4r 1si si2ach si3ach. si2ad 2siat sib4 5si1c 2s1i2deo s2ido 3s4ie siege4s sien3 si3ene si1err sie2s si1f4 3s4ig si2g1a2 sig4n si3gnu si2g3r sig4st si2k1ab si2k1ä sik3erl si2ki si4k1l si2kr sik3s sik3t4 si2ku 3silo 2s1imm si3n4a 2s1ind 2s1inf sing1a sin3gh sin3g4l sin2gr sing3sa 4s1inh sin1i sini1e 2s1inq 2s1ins 2s1int 4s1inv 3sio sion4 3s2is si2sa si4schu si2s1e si2s1o si2s1p sis3s 3s2it si2tau sit3r si2tra si3tu siv1a sive3 si2vr 1sí 2s1j 2s1k2 4sk. 3skala 4skam 4skanz s3kar 4skas ska4te. 4skateg ska4tes 4skb s4kep 3s2ki. s2kif s2kig 3s2kik 4skir ski1s 3skiz sk4l 4s3klas sk4n 4skom 4skor 4skow 4skö 4sks 4sk3t 3skulp 2s1l2 3slal 4slan sla2ve s2law s3lä sl3b s3le sler3s s3li 3s4lip sli4tu s3lo. slo3be s3loe 2s3m2 2s3n4 4sna snab4 sni3er. sni3ers 4s5not 4snö 1so 3so. so4a 2s1o2b so1c so3et 3soft 3sog s1o2he 4sohng 2s1ohr 3sol so3la so4l1ei sol4ler 4so2ly 3som 3s2on son3au sone2 son5ende son3sä son2s1o so3o 2sopf 3sor. so1ral s1orc 2s3ord so2rei 2s1orga 5s2orge 2s1o2rie so2r1o2 3sors so4ru 3sos s4os. 4s1ost so3unt 3sov 4s1o2ve 3sow 2s1ox 3soz 1sö sö2c sö2f 2s1ök 2s1ö2l s1ös 1sp2 2sp. 2spaa 4spak 2spala spani7er. 4spap 2spara 4sparo 3sparu 3spaß 4spau s2paz s2pä 3späh 2spär s3pe. 2spel 4spensi spe3p4 s1peri 2sperl 2spero s2perr 4spers 4spet 3s2pez 4s3pf 2spha s4phä s3phe 3s2pi4e 4spier4 spi2k 4spil 3spio 4spi4p 4spis 2spl 4spla 4splä 4sple 3s2pli s3p4lu s3pn 2spod 2spog s2poi 2spok 4spol 4s3pos s2pott 4spr. s2prac s2pran 4sprax 2spräm 4spräs 3s4prec 2spred 2spres 2sprob 3spross 3spru 4sprüf 2s3ps 2s4pt 2spun 2spup 3spur 4sput 4spy 2s1q 4s3r4 srat2s srat4sc sret3 srö2s1 srücker6 srü2d 6s1s ssa3bo ss1a2ck s5saf s3sag ss1aj s3sal s4s1ala s4s1alb s4s3amt s4s3ang s2sano s4sans ss2ant s4s3anz s3sa1s2 ss3att s3s2ä s4sce s4sco ss1ec s2s1ega sse3ha sse3inf sse3in4t sse6r5att ss1erö ss3erse s3s2es sse3ta ss3l ss1off ssoi4 s2s1op ss1ori ss2po s2spro ssquet4 ss3s4 sst2a s3stel ss2th ss2ti ss4tip ss2tur s3stü ss1ums s1t 6st. s2ta 4sta. 3staa 2stabb st2ac 3s4tad 3staff 2stag 3stah 2stak 2stale s3ta3li 2stalk st1alm st1alp st1ami 4stan. sta4na 3stand 2stani 4s3tann 2stans 2stanw s4tar. 4stari s4tars st1asi s3tat. s4tau. 2stauf 2staum 3staur 2staus 3staus. 2stax 3s2tä 4stäg 4stält s4tänd 5stätt s3täus 2stb 2st3c 2std st2e 4s5te. 2stea 4stechn s2ted 4stee 3s2teg ste2gr 3s4teh s2te2i 3steig 4steil 3steilh stei4na 1s2tel 2stel. stel4l3ä 2steln 2stels 2stem 4stem. ste4mar 4sten s5ten. s4t3ends s4t3engl st4ens s4t3entf s2tep 2ster 6s5ter. ste6rers 4sterm 3sternc 4stes s4t3ese stes6se. ste4st 2stet s4teti 3s4tett 3s2teu 1steue 4steuf st3ev 4stex 2stf 2stg 4sth s4thä s4thi s2t3ho s2thu 2stia 2stib s2tic sti2e 2stie. s2tieg s2tiel 2stien 3s2tif 2stig 2stik s2til 3s4tim s4tinf s3tinn st1ins 2stio 1s2ti2r 2stis st1i4so 1stitu 2stiv 2stj 2stk 4stl 4stm 2stn s2to 2sto. s3tob 2sto3d 4stod. 1stof s4toff s4t3om 4ston 4stoo 2stopo 2stor. 2store 2storg 2stori s3tort 2stose sto3s2t 1stoß 4stote 4stou 2stow 2stoz 1stö 2stöch 2stöt 2stp 2stq s2tr 2strad 2strag 1s4trah 4strai 4strak 2stral 4strans 3s4tras 5straß 4straum 4s5träg 4sträne 4s5tref 4streib 5st4reif st3renn 2s4trig 1s4tri2k 2s5tris st3roll stro4ma 1stru 2strua 2strug 3struk 4st3run 2strup 2s4t3s4 2st3t4 st2u 1stub 4stuc 3s4tud 2stue 3stuf 3stuh 2stum2s stum4sc 2stumt stu2n 2stun. 3s4tund s2t3uni 4stunn 2s3tuns 2stunt stu3re st3url 2sturn 2st3urt 2s3tus 1stü 2stüch 2stür. 2stüre 2stürg 2stürs 3stüt 2stv 2stw 3s2tyl 4st3z 1su su1an 3su2b3 su4ba2 4subi 3su1c su2cha such4st 2s1u2f 2s1uh su1is su1it. sul2a sul2i sult2 su2mar su2mau 3s2ume su2mel su6m5ents s3umfe 3summ sum1o2 su2mor s3umsa s3umst su2n 3sun. sun6derh su4ne s1unf 2s1uni 4sunt 3s2up sup3p su2ra 2s1url s1urt s4u2s1 su3sa su3sh su3si sus3s 3suv 1sü 2sü4b 3süc sü2d1 süden2 3sün 4s3v 2s1w s3wa s3we sweh2 4swie 4swil 1s4y syl1 sy4n3 2s1z 4s3za 4s3zei s2zena 3s4zene 4szent s2zes 4s3zet s2zis sz2o 4s3zu s3zü 4s3zw 2ß1a2 2ß1b2 2ß1c 2ß1d 1ße 2ß1ec 2ß1e2g 2ß1ei ße2l1a ßen3g ße2ni ße2no ße2ro ß2ers. 2ßerse ßer3t 2ß1f 2ß3g2 ßge2bl 2ß1h 1ßi ßi2g1a2 ßig4s 2ß1in ß1j 2ß1k4 2ß1l ßler3 2ß1m 2ß1n2 ß1o2 ßos2 2ß1p2 2ß3r2 2ß1s2 ßst2 2ß1t 1ßu 2ß1um 2ß1ü 2ß1v 2ß1w 2ß1z 1ta 3ta. 4taa 5taan 4tab. ta2b1an 2t1abb 3tabel 2taben ta4bend 2tabf 2tabg 2tabh 2tabk 3table 2t3abn ta2br 4tabs 2t3abt ta2bü 2tabw 2tabz 2t1ac 3tacu t1ada tadi3 2t1a2dr ta3d2s 3taf. 3taf2e 4taff t1afg t1af4r 3t2ag ta2ga2 ta2g1ei 4t3a4gent 4ta3gl t3ago tag4st tah2 tah3le tahl3sk t2ai ta3i2k tai2l ta1ins tai4r ta1ir. t1a2ka ta2kro tak6ta 3taktb 3t2aktu 2takz 3t2al. ta2la ta3lag ta3lak t1alb. t1albk tal3d 3t4ale ta4lens tal2lö 3talo ta2l1op 2talt 2tam 3tame ta2mer ta2mi t1ampl t1amt 3tan. t1a2na 2tanb 4t2and ta3ne 4tanf 2tang 3tani t2ank t3ankl 4tanl 2t1anme 4t1anna t2ano t1ans 3t2ans. 4t3ansi 4t3ansp ta2nu 2tanwa 2tanwä t2anz. t1anza tan6zerh t1anzu ta3or ta2pe. ta2pes 2tapf ta2pl 2tarb ta4rens ta4r3ere 3t4a3ri 4tark 2t1arm 2tart t1arti tar2to ta2ru 2t1arz 3tas ta3sa 4t1asp ta2ta2b ta2tan ta2tau tat3ei ta2tem ta2t3er ta2th tat3he t3atl t4atm ta2tom 4tatue ta2t1um 2t1auf 4taufg tau3f4li 4taufn t1auk 3taum t1ausb 3tausc tau6schr tau6schw t2ause 4t3ausg t1ausk 4tausl 4t3auss 4t1ausw 3tav 3tax taxi1s 1tä 4täb tä1c 4täd 3täe 3täg 4tägy 2täh 2t1ält 4täm t1ämt t1ängs 3tänz t1äp t2är. tä2ru tä2s t2ät 4tätt 2täuß 2täx 1tà 4t3b2 tbe3r2e tblock5e tblocken8 4t1c t3cha t3che tch2i tch3l t2chu tch1w t4ck t3cl t3cr 4t3d4 tdun2 1te 3te. te2a2 2teak te3al te3an 3teba 3t4ebb 4t1e2ben t2ech te3cha 3techn 2teck teck2e te2cki te1em te2en3 te1erw te2es 2teff teg3re 2teh 3teha 3tehä 3tei. t3eifr teik4 3teil 4teilhe 2t1ein tein3e4c t3einge t3einla 4teinn t3eis. t3eisb tekt2 5tel. 3tela te2l3ab te2l1ac te2l1au telb4 3te3le tel1eb tele4be te4l1ec te4l1eh te4lein 2telem tel1en te4lerd te4leu 4t3elf. 3telg te2l1in te2lit 3telk tell2e 5teln te4lost te2l1ö 3telp 5tels tel3s2k 3telt4 tel3ta tel3th 3tem. te2m1ei te2min 2temme te2m1o2r 3temper 2tempf tem3s te4m1u 3ten t6en. ten3a tena2b te4na2d te4na4g te4nas te4nau te2nä t4enb ten3da 4t3endf t6endi 4t1endl t6endo 4t3endp ten3d4r te2n1e2b te2nef te3n4ei. ten3eid ten3ens 4tenerg te2net ten3g 4t1eng. ten4gla t4enh te2ni te4n3in t4enj t4enm ten3n tens2e 4tensem t4enta t3entb 4tentd t4ente 4tentn tent3ri 4t3entw 4t3entz ten6zerh ten3zw t3e2pi 3t4er. tera2b te1raf ter3am te3ran. 4terbs 4terbt 3terc 4t3erde. te2re2b te4r3eif te2rel ter3end te4reng te4rerk terer4z 4terfol t4erfr 4terfül 3ter3g2 6tergrei t6ergru t4eri te3ria 4terklä 2t1erlö ter4mer 3termi ter4n3ar 2ternc t3erneu t4ero t3erö ter4re. t4ers. t6erscha ter4ser terst4 t4erst. t4ersti t4erstu tert2 teru2 te4r1uf ter4wäh 6terwerb ter3za 2t3erzb 3tes tesa2c te2san tesä2c te2sel te2spr tes3s2 t2est tes3tan test3ei tes6ter6g tes6terk testes4 te2su 3tet2 t2et. te2tat 4teth 4tetl teu3ere teu3eri 3teuf 3teum te1un 3teur. teu2r3a te2vi te1xa 2t3e2xe 2t1e2xi 4texp 3text 2t1exz 4t1f4 tfi2l 4t1g2 tger2 t1h 4th. 2th4a 3t4ha. t2hag t3hai t2hak 3thal. 4t3hau 2t3hä th2e 1t2he. 3thea 2theb t2hec 2t3hei t4hein t2hek t2hem 1then t4hene t4heni 3theo 2therr t2hes 3these t2heu 1thi t2hik 2t3hil 2t3him 2thk 4th3l 4th3m 2th3n 1t2ho 2t3hoc t3hof 2t3hoh t4hol. t3hor 2t3hot thou2 4t3hö 2thp 1th2r2 4thrin. 4thrins 2ths 2thub 4thun 2thü 2thv t2hy 1ti ti2ad ti3a2m 3tib4 ti1ce tiden2 ti4dend ti2deo 3tief. tieg4 2tieh ti1el ti3e4n3 3ti2er tie4rec ti1et ti1eu 3tif. ti1fr 4tift 3tig ti4gerz 3tik ti2kam ti2kar ti2kin ti2krä ti2lar ti2lau ti2lei ti2lel 3tilg ti2lö til3s tilt4 ti2lu ti2ma2g t2imi tim2m1a 4t1imp 3t2in. ti3na t1inb 4t1ind ti3n2e t1inf tin2g1a ting3l ting3s t1in1it 2t1inj tin2k1l 3t2ins. 4t1inse 2t1int ti1nu 4t1inv 3tio ti3or 3tip ti3pl ti4que. ti1rh 3tis ti4scha tisch3w ti2sei ti2sp ti1sta 3ti3t2e 2ti3tu tium2 3tiv ti2van tive3 ti2vel ti4v3erl ti2v1o ti2v3r ti2za 2t1j 4t3k4 4t3l tl4e 5tlem tle2r3a 6t5li tlung4 4t3m2 tmal2 tmen6t3 tmo4des 4t5n4 tnes2 tnes4s 1to 3to. to4as to5at 4tobj tob2l to1c 3tocht to6ckent 3tod tode2 4to2d1er to4d1u toi4r 3tok to3la 3tole 4tolz tom1e2 to2men 2tomg 3ton to2nau to2neh 3too to2pak to2pat 3topo 2topt 3tor. to1ra to2rau to4rän 4torc t1ord 3tore to2rel t1org t3orga 3torin tor3int to2rö 3tors t1ort. to2ru t2orw to3sc 3tose to4sk tos2p 4toss 3tost4 to1sta 4toß 3to3te to2tho 3totr tots2 3t4ou touil4 to3un 3tow 2tö 3töch 4töf 4t1ök tö4l 3tön t1öst 4töß 3töt 4t3p2 tpf4 2t1q 1t2r4 2tr. 5tra. 3trac tra3cha 4tract t3rad. tra4dem tra4far 3trag 6trahm 5t4rai 3trak 3tral 2t3rams 3t4ran. 2trand 3trank t3rann 3trans t3rase t3rasi 4traß 5träc 3träg 3träne 4träs 4träß 4t5re. tre4ale 4treb tre2br 4trec t3rech t4reck 6t3red 5t4ree 3tref 4trefe 4trefo 4treg t4rei. 3t4reib 4treic 2treif t3reig 2t3reih t3rein t3reis 6treit t3reiz 2trek 6t3rel t4rem t4ren. 3trend 4trendi t3rent 2trepe 2trepo t4repr t4rer t4res. t4ret tre2t3r t4reu 3treuh t3rev 2trez 5t4ré 2t3rh 3tri 4tric 5trieb tri4er 5trigg t3rind 4tring tri3ni 4trinn t4rip 4tript tri2x trizi1 3tro. 3troe 3t4roi tro2ke 4trom. tro2mi 4troml 3tron 2t3roo t4rop 3tropf 3troy t3röc 2tröh 3trös 2t3röt 3trua 4truk trum2 trums1 2t3rund 3t4runk 5t4rup tru2th t4rüb trü1be trü1bu 2t3rüc trücker6 t4rüg try1 2ts 4ts. t4sa4b t3s2ac ts1ad t2s1ah ts1al t4s1amt4 t2san t4s3ar ts1as t2sau t2s1än t3s2cha t4schar t3sch2e t4schef ts4chem tsch4li t4schro ts4cor t2s1e2b t3seil t4seind ts1em tse2n1 t2s1eng t2s1ent t2s1er t4s3esse t2s1i2d ts1ini t2s1ir ts3kr t1slal ts1o tso2r t3sou t2sö t3spal ts1par ts4pare t2spä ts2ped t3spek t2sph t3s2pi t2spo t3s2pon t3s2por t4sprei ts3s4 t1st4 t4stag ts3tak ts4tal ts3täti t2s3tep t3s4tero t2stip t4stit ts3toc ts3tor ts3trad t4stran ts3trau t2s3trä t4streu t2stri t4strop t2s3trü ts2tu t2s1u 1tsub t3sy 4t1t tt1ab tta2be tt2ac t2t1ad tta6gess tt1ak tt2al tt2ant tt1art tta1s tt1ebe tt1eif tt1eis t3tel tte2la tte4leb tte4len ttel1o ttes1 tte2sa tte2sä tt2häu t2t3ho t3ti t3to tto1s t3tö t3tro tt3ru tt3rü tt2sen tt2sor tts1p tt2spe tt2spr tt2sti ttt4 t3tu tt2un t3tü 1tu tu1alm tu3an 2tub 3tuc tu2chi 2tud 3tue 4tuf tuf2e tu3fen t3u2fer tuff3 2tuh tu2is 2tuk t3u2kr tul2a t2um. 3t2ume 2t3umf 2t3umg 2t3umk 2t3umr tum2si tum2so tums5tr 2t3umt 2t3umz 3tun. 2t1una 2t1und 3tune 2t3unf 3tung t3unga tung4s5 2tunif 2t1u2nio 2t3unt t1up. tu2r1a4g tu2rä tur1c tu2re. tu2rei tu2r1er tu2res tu2r1e4t turin1 3turn tu2ro tu4ru tu2sa tu4schl tu2so tu3ta 2tü 4tüb 3tüch tück2s 3tüf 3tüm 3tür. tür1c 3türe 3türg 3tür3s 3tüten 4tütz 4t3v 4t3w twa2 twi4e 1ty1 3typ ty2pa tys4 4t1z t2za4 tz1ag tz1al tz1ar tz1au tz1ä t3ze. t2z1e2c t2z1eie t2z1eis tze4n1 tz2ene tz3ents tz1erl tz2ers t3ze2s tzgel2 tz1ind tz1int t2zor tz2ö tz2th tz2tin tz1wä tz1wi tz1wu 2ua u1a2b u1a2c uad4r u1al. ua2lau u1alb u3alet u1alf u3a2lo u1alr u1als u1alt ua2lu u1am u1ans u3ar. uara2b u1ars ua3sa ua2th uat2i u3au u1ay u1äm u1äu 2u1b u2be2c u3b4i ubi3os. ub2l ub3lic u2b3lu u2bop ub1r ub3rä u2b3rit ub2san ub2s1o ub2spa u2büb 2uc uc1c u1ce uch1a u1cha. uch1ä u1che u2ch1e4c uch1ei u3ches u1chi uch1il uch1in uch3l uch3m uch3n u2ch3r uch2so uch4spr uchst4 uch4tor uch2t3r u1chu uch3ü uch1w u1ci u2ckem u4ckent u3ck2er u2cki u1cl 2u1d u3d2a uden3s2 uder2e udert4 udi3en uditi4 u2don ud3ra u3dru 2u1e ue2ck u2ed ue2en u2eg u2ela ue2le ueli4 ue2mi uen1 ue2nä ue2ner uenge4 ue2ni ue2no uen2zu u2ep ue2r3a ue2r1ä u2ere u3ereh ue3reig u3erer ue4rerg ue4rerk u3erex uer3g2 u4erinn u3erin4t uer2ne uer4ner uern3s4t ue2r3o u3err uer3sc uer3t2 u3erum u3erunf u3erunt ue2ta ue4tek u3fah uf1ak uf3ar u3fas uf1au u2f1äs u2f1ä2ß u2f1ei u2f1em u3fen. u2fent u2f1erh u4ferle uf2ern 2uff uff4l uf2fro uffs4 uf3l u2fob ufo2r uf1ori uf3r uf3sä uf4sin uf4so uf2spo ufs3tem uf2t1eb uft3s2 u2fum 2u1g u4gabte ug1af ug1ak u2g1ap uga4s ug1au ug3d2 u2g1ei u2g1erf u2g1erl ugge4st ug3hu u2g1l ug3lad ug3lo u3g2lö u4glu u2g3n ugo3 ug1or u2gö u4g3reis ug3ro ug3rüs ug3se ug4ser ug3si ug3spa ug4spr ug4spu ug5stä ug3str ug3stü u2gü u1h 2uh. uhe3s6 uh1la uh1lä uh2li uhme4 uhr1a uh2rer uh3ri uh4rin uhrt4 uh2ru uh4rü uh1w 2ui ui2ch u1ie ui1em u3ig u4ige u1in. u1is. u3isch. u3ischs uisi4n ui4s5t u1j uk2a u3käu u1ke u1ki u1k2l ukle1i uk4n uk2ö u1k4r uk2ta uk2t1in uk2t3r u1ku uku2s u1l ul1ab ul1am ula2s ul1äm ulb4 ul2dr uld2se u2l1el ule4n ul1erf ul1erh ul1erw ule2sa ule2t ul1eta u2lex ul3f4 ulg4 uli2k ul1ins ul3ka ul2kn ull2a ul2les ull3s ulm3ein ulo2i ul1or ul2p1h ul2sa ul4sam uls2th uls3z 2ulta ul3th ul4tri ult3s u2lü ul2vr ulz2w u2m3a2k um1all um1anz u2m1art u2m1aus u2maut 1um3d2 um2en ument4s umer2a u2m1erg u2m1erl u2m1erw 1umf 1umg um1ins um1ir 1umk 1um3l 4umm umm2a umpf4li um2p3le 1umr 3umsat um4ser um2sim um2s1pe um2su um3t2 um2un u2m1ur 1umz un1 4un. 2una. 1unab un3ac un4al u3n2am u2n3an 2un2as un3at 1unda un4dab 1undd un4dei un4d3erf und5erha 1undf 2undg un2did 1undn un2dor un2d3r 4unds. und3sp und3st un2d1um 1undv 1undz u3ne une2b une2h un2ei. un3ein unen2t un4es4 1unget 1ungew ung5h 1unglü un2g1r ung3ra ung3ri ung4sa un2id un3ide 1u2nif unik4 un2im uni2r 2unis un3isl u3n2it 3u2niv 2unk un2k1a2 un2kei unks2 unk4tit unk2t3r 3unku unna2 un2n3ad un3n2e uno4r un2os 1unr uns2 2uns. un3se 1unsi un3sk un3sp uns4t1r 1unt un3ta unte4ri un3tr unt3s 2untu unvol2 unvoll3 1unw 2unz 2uo u1o2b u3of u3or. u1or3c u3ors uos2 u1os. uote2 u1pa u1pe2 uper1 up2fa u2pf2e u2pf1i u3pi up2pl up2pr u1pr up4t3a2 upt3erg upt1o up4tr u1q 2ur. u1ra u2rab u3raba ura2be u2r3a2m u2r1ana ur2anb u2r1ang ur2anh u2r1an5s u2rar ur3a4ren u2r3att u2r1au 2u1rä ur1än ur3b2a urch1 urd2 ur3di 2ure ur1eff u2rele ure4n u4r1ep ur1erh ur1erw 2urf urf3t ur2gri urgros4 urg3s4 uri2c ur1im ur1ini ur3ins ur1int urk2s 1urlau 4u1ro u3rol uro1s u1rö ur3p ur3sac ur2san ur2sau ur2ser ur4sin urst4r ur4sw ur3s2ze urt2 u3ru urü2 ur2za ur2zä ur2zi ur2zo ur2z1w 2us u4saf us4ann u6schent usch5wer u2s1ec u2s1ei u3seid u3sep use1ra u2serp u2s1ese usi3er. usi5ers. us3kl u4sko us3oc u3soh u2s1op us1ou us3part u2s1pas u2spat us1pe u3s2pek us1pic u5s4piz u2spo us2por u2spu us4sez us2sof ust3abe u1stal us3tau us2th ust2in us3tr u5stras us6tris u1stu u2stun u2stur us2ur u2sü 2u1ß 2u1t ut1alt ut3a2m u2t1ap u2t1ar u2tär u3te ut1eg ute4ge ut1ei. ut1eie ute2n1 u2tent uter4er u4t3ersa ut2es ut2et u4tev u4t1ex utfi4 ut2he u2thi u2t3ho u2thu uto1 uto4ber uto3c ut1opf u2tops ut4or utos4 u3tö ut3rea ut3rü ut3s2a ut2s1ä ut4schl ut4schm ut4schö ut2spa ut3te ut5t4l utts2 utu4re utu5ru u3tü utz3eng ut2z1in ut2zo ut2z1w 2u1u2 uufe2 u1ü2 2u1v4 u2ve. uve3rä u1w 2u1x ux2e ux2o ux3t u1ya 2u1z uz1we uz3z4 1üb 2übc 2übd übe2 übe3c über3 üb3l üb3r üb2s3t 2üc ü1che üch3l üch2s1c ücht4e ü3cken ück1er ück3eri ü4ckers ück4spe 2üd üd3a4 ü3den. üden4g ü3d2ens üd1o4 üd3r üd3s2 üdsa1 üd3t4 üdwes2 ü2f1a ü2f1ei üfer2 ü2f1erg üf2fl ü2f1i üf3l üf2to ü1g üge6leis ü2g3l ü2gn üg3s üg4st üh1a ü1he ü2h1ei ü2h1eng ü2h1erk ü2h1erz üh1i ühla2 ühl1ac ühl2e üh3mo üh3ne ühn2s üh3r2e ühr3ei. üh1ro ühr3ta üh1s ühs2p üh3t üh4th ü1hu üh1w ü1k ül1a ül2c ül4e ül2la ül2l1ei ül2lo ül2lö ü1lu ü2ment 2ün ü2n1a ün2da ün2dr ünd3s ünen3 ün2fa ün2f1ei ün2fli ün2fr ün2g3l ünn2s ün2s ün3sc ün3se ün3sp ün3str ünt2 ü1nu ün2za ü1pe ü1pi üp2pl ür1a ü2r1ei ür2fl ür2fr ür4g3en4g ü3r2o1 ürr2 ür2s ür3sc ür3se ür3sp ürt2h üs2a ü2schl üse3h üse3l üse1s üs2s1c üss2e üs2st ü2st üste3ne ü1ß 2üt ü2t1al ü2t3r üt2s1 üt2tr ü1v ü1z 2v1ab va1c val2s 2vang 2varb va1s v4at va2t3a4 va2tei va2t3h vatik2 va4t1in vati8ons. va2t3r vat3s4 va2t1u 2v1au 2v1b 2v1d 1ve2 ve3ar ve3b ve3c ve3d ve3g ve3h ve4i veit4 veits3 ve3la ve4l1au ve3le ve3li ve3lo ve3ma 2ve3mu ve3nal ven2c ve3ne venen4d ve3ni ve3nö ve3o ver1 ver3a ve3rad ve3rand ve3ras ver3b2 verd2 vere2 ve4rek verf4 verg4 ve3ri ve4rin ver3k ver3st vert2 ver5te ver3u ves1 2ve3sc 2ve3s2e ves3ti ve3ta vete1 ve3tr 2veü ve3v ve3x2 2v1f4 2v1g 2v1h vi3ar vi4a3t vi2c vid3s2t vie2h3a vi2el vi2er vie4rec vie2w1 vig2 2vii vi2l1a vi4leh vi2l1in 2v1i2m vima2 vi4na vin2s 2v1int vi3sa vise4 vi3s2o vi2sp vis2u 2v1k 2v1l2 2v1m 2v1n 2v1ob vo3ga vo2gu 3vol voll1a vollen4 vol6l5end vol2li 2v1op vo2r1 vor3a vor3d vor3e vor3g vo3ri vo5rig vormen4 3voy vö2c 2v1p v2r 2v3ra v3re v4ree 2v3ro 2vs vs2e v1sta v1steu v3s2z 2v3t vu2et 2vumf 2v1v 2v1w 2v1z w2a 1waa wab2bl wa3che wach6stu wach4t4r waffe2 waffel3 1wag wa5ge wa2g3n wa3go 1wah wahl5ent wah4ler wah2li wai2b 1wal 2walb wal4da 2walm wal2ta wal2to walt4st wa3na wandels6 wang4s wa2p 1war2e ware1i war3ste wart4e 1was wa3sa wa4scha wa3se wa3sh wass4e w2ä 1wäh 1wäl 2wäng 1wäs wäs2c wä3sche 2w1b2 wbu2 2w1c 2w1d we2a we2ba 4webeb we2bl web3s we3cke. we5cken. we3ckes we2e4 weed3 we2fl 1weg we2g1a we2g3l we2g3r weg3s4 1weh we2i wei4bl 2weie weik4 weis4s3p wei3str wei4tr wel6schl wel6schr wel2t1 wel4t3a4 wel6t5en6d wel4tr wen3a4 we3ni wen4k3ri we2r3a wer2bl 1werbu werd2 5werdens 1werdu werer2 wer2fl wer4gel we4r3io 1werk. wer2ka 1werke wer2kl wer2ku we2rö wer2s wer2ta wer6t5erm wer2to 1werts 1wese we2s1p we4st west1a west3ei wes2th west1o2 west3r wes4tu 1wet wet2s wett3s 2w1ey 2w1g 2w3h wi3cka 1wid wi2e wie3l wien2e wie2st wik2 1wil wim2ma wim4m3u win4d3e4c win2dr win2e 2wing win8n7ersc 1wi4r wi3s2e wi2sp 1wiss wi3th 1witzl 2w1k 2w1l 2w1m 2wn wn3s 1wo1c wo2cha woche4 1woh woh2le 1wolf wolf4s3 wol4ler wor3a wo2r3i wor2t3r wo4r3u wot2 1wöc wört2h 2w1p w2r w3ro 2w1s w3s2k ws2t 2w1t wti2 w2u 1wuc wul2 wul3se wun2s 4wur. wur2fa wur2s 1wurst wus2 wus3te 1wu4t1 1wüh wül2 wün3 2w1w x1a 1xa. 2xa2b 1x2ad 1xae xa1fl 1x2ag x3a2m x2anz 1x2as 2x1b 2xc x1ce x1ch x1cl 4x1d 1xe x1e4g 2xek xe2l xe3lei x1em 3x2em. x2en xen3s2 x2er. x2ere xers2 3xes 2x3eu 2x1f 2x1g 2x1h xib4 xi1c xich2 xide2 xi2d1em x1i2do xie3l xi3g xil1 xil2a xi2lo xi2lu xin3s2 x2is1 xis2c xi2se xi2so2 xis3s xis4tä xi2su x1i2tu x1j 2x1k2 2x2l2 x3lä x3le 2x1m 2x1n x1or 4x1p xpor6ter x1q 2x1r 2x3s2 4x1t x2t1a xt2as xt1ä x2tän xtblo4 x2t1e2d x2t1ei x4tent x2t1er2f x2t3ev xtfi4 x2t1il2l xtra3b4 x2t3ran xt3s2 xt1u x3tur 1xu xu1a x1u2n xu2s 2xv 2x1w 2xy 3xy. 3xys x1z 2y1ab 1yac y1al. y1a2m yan2g y1ank y1ät y1b y1c2 y2chi y3chis ych3n y1d4 y1e y2ef yen4n y2ere y2es. yes2p ye2th y1f2 y1g ygi2 ygie5 yg2l y1h yhr2 y1i4 y1j y1k2 yke3n yk3s2 y1l y2l3a2m yl4ante yl3c y4le. yli4n yloni1 yl3s2 y2l1u yma4t ym3p4 ympi1 y2n1o yno4d ynt2 y1nu y1of yom2 yon4i y1ont y1os y1ou y1p ypa2 yp3an ype2 y2pf y3ph y2p1in ypo3 y4p3s y1r y3r2e y3ri yri2a yri1e y3r4o yrr2 ys2an y3s2c yse1 y3s2h y4s3l ysme3 ys2po ys1pr ys3t4 y1s4ty y2s1u2 y3s2z y1t2 y2te. y2tes y3to1 yu2r yure3 y1v y1w y1y y1z2 2z3a2b zab3l za1c z1a2d za3de 2z1af za3gr 3zah 2z3a2k zale3 2z1all 2z1am z1an za2na 2z3anf 3zani 2z3anl 2zarb 2zarc z1arm z1arti zar2tr 2z1arz z1as za1st4 2z3at3 3zaub z1au2f z3aug 3zaun zä2 2z1äc 3z2äh 2z1äm z1ärg z1ärm 4z3b4 zbü1b zbübe3 2z3c 2z3d2 zdan2 zdä1 2z1e2ben 2zecho 2z1eck ze1e 2z1eff zeik4 zei3la zeile4 2z1ein zei3s4 zeist4 zei2t1a zeit5end zei4t3er zei2tr ze2l1a2 ze2len ze2l1er ze2l1in zell2a zel3sz zel3t2h zelu2 2z1emp 5zen. ze4n3ac zen3n ze2no zens2e zen4sem 3zent zent3s zen4zer z2er. ze2r3a ze2re2b 2z1ergä 4z3ergeb z3erhal 2zerhö zerin4t zerk2 z2erl. 2zerlö z2ern zer4neb zer4n3ei ze2ro 2z1erq zers2 2z1ersa 4z3erste zert1a4 zer4t3ag zert4an zer6tere zer4tin zer6trau 4zerwei 2z1erz 3z2erza ze2sä ze3sc zes1e zes1i ze3sku ze2sp zessen4 zes6s5end zes2sp zes2st ze2s3t ze3sta ze2tr 2zetts 2z1ex 2z1f4 2z1g2 zger2a 2z1h z2hen zhir3 zi3alo zi3ar zid3r zi1erh ziers1 zi1es. zil2e 2z1imp zin2e zin4er 2z1inf 2z1inh zin1it zin2sa zin4ser 4zinsuf 2z1inv zi2o3 zi3op zirk2 zirk6s zi3s2z zi1t2h 2z1j 2z3k4 2z1l2 2z1m2 zme2e 2z3n4 2z1ob 2z1of zo2gl 2z1oh 3zol zon4ter zo2o 2zope z1or zo2ri zor4ne 2z1osz 2z3ot 2zö2f z1öl 2zön 2z3p4 2z1q 2z3r2 4z1s2 z3sa z3sh z3sk z3sz 2z1t z2t1au z4tehe z3t2her zt3ho zt1ins z3tö zt3rec zt3s2 z3tü zu1 zu3a zub4 zu4ch zu3cke zud4 zudi4 zu2el zu3f4 zu2g1ar zu4gent zu3gl zug1un 2z1uhr zu3k 2z1um. zumen2 2zumf 2zumg 2zuml 2z1ums zun2e zung4 2zunt zup2fi zu3r2a z1urk 2z1url 2z1urs 2z1urt zu3s4 zu5t2 zuz2 2züb zür1c 2z1v zw2 z1wac 4zwah zwan2d1 z2wang z1war 2zwas 4zwäl 2zweg z2weig z1weis 2z1wel 2z1wen 2z1wer z2werg 2z1wes 2zwet 4zwir z2wit 2z1wo z1wör z1wur 2z1wü 4z1z z3z4a zzi1s4 z3z2o zz2ö %} % %\endinput % %%% Local Variables: %%% mode: tex %%% coding: utf-8 %%% End: fizmo-0.7.10/libfizmo/src/interpreter/.splintrc000644 000765 000024 00000000012 12606024314 022453 0ustar00chrenderstaff000000 000000 +posixlib fizmo-0.7.10/libfizmo/src/interpreter/babel.c000644 000765 000024 00000046345 12606024314 022050 0ustar00chrenderstaff000000 000000 /* babel.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include #ifndef DISABLE_BABEL #include #include #include #include #include #endif // DISABLE_BABEL #include "babel.h" #include "config.h" #include "fizmo.h" #include "../tools/tracelog.h" #include "../tools/filesys.h" #include "../tools/unused.h" static z_file *timestamp_file; static struct babel_timestamp_entry *babel_timestamp_entries; static char *timestamp_input = NULL; static int timestamp_input_size = 0; static char *filename_input = NULL; static int filename_input_size = 0; static char *unquoted_filename_input = NULL; void free_babel_story_info(struct babel_story_info *b_info) { free(b_info->serial); free(b_info->title); free(b_info->author); free(b_info->description); free(b_info->language); free(b_info); } void free_babel_doc_entry(struct babel_doc_entry *entry) { if (entry == NULL) return; #ifndef DISABLE_BABEL xmlFreeDoc(entry->babel_doc); #endif free(entry->filename); free(entry); } void free_babel_info(struct babel_info *babel) { int i; if (babel == NULL) return; for (i=0; inof_entries; i++) free_babel_doc_entry(babel->entries[i]); free(babel->entries); free(babel); } #ifndef DISABLE_BABEL static int add_doc_to_babel_info(xmlDocPtr new_babel_doc, struct babel_info *babel, time_t last_mod_timestamp, char *filename) { xmlXPathContextPtr xpathCtx; xmlXPathObjectPtr xpathObj; char *xmlExpr = "/ifindex"; char *xmlNamespacedExpr = "/if:ifindex"; bool uses_if_namespace; struct babel_doc_entry *new_entry; // Check contents xpathCtx = xmlXPathNewContext(new_babel_doc); if(xpathCtx == NULL) { fprintf(stderr,"Error: unable to create new XPath context\n"); return -1; } if (xmlXPathRegisterNs( xpathCtx, (xmlChar*)"if", (xmlChar*)"http://babel.ifarchive.org/protocol/iFiction/") == -1) { fprintf(stderr,"Error: unable to create new namespace\n"); xmlXPathFreeContext(xpathCtx); return -1; } xpathObj = xmlXPathEvalExpression((xmlChar*)xmlExpr, xpathCtx); if (xpathObj == NULL) { xmlXPathFreeContext(xpathCtx); fprintf( stderr, "Error: unable to evaluate xpath expression \"%s\"\n", xmlExpr); return -1; } if (xmlXPathNodeSetGetLength(xpathObj->nodesetval) != 1) { // "/ifindex" was not found. Try "/if:ifindex". xmlXPathFreeObject(xpathObj); xpathObj = xmlXPathEvalExpression( (xmlChar*)xmlNamespacedExpr, xpathCtx); if (xpathObj == NULL) { xmlXPathFreeContext(xpathCtx); fprintf( stderr, "Error: unable to evaluate xpath expression \"%s\"\n", xmlNamespacedExpr); return -1; } if (xmlXPathNodeSetGetLength(xpathObj->nodesetval) != 1) { // Neither "/ifindex" nor "/if:ifindex" found. Skip this file. xmlXPathFreeObject(xpathObj); xmlXPathFreeContext(xpathCtx); return -1; } else uses_if_namespace = true; } else uses_if_namespace = false; xmlXPathFreeObject(xpathObj); xmlXPathFreeContext(xpathCtx); if (babel->nof_entries == babel->entries_allocated) { babel->entries = (struct babel_doc_entry**)fizmo_realloc( babel->entries, sizeof(struct babel_doc_entry*) * (babel->entries_allocated+10)); babel->entries_allocated += 10; } new_entry = (struct babel_doc_entry*)fizmo_malloc( sizeof(struct babel_doc_entry)); new_entry->babel_doc = new_babel_doc; new_entry->uses_if_namespace = uses_if_namespace; new_entry->timestamp = last_mod_timestamp; new_entry->filename = fizmo_strdup(filename); babel->entries[babel->nof_entries] = new_entry; babel->nof_entries++; return 0; } #endif #ifndef DISABLE_BABEL struct babel_info *load_babel_info_from_blorb(z_file *infile, int length, char *filename, time_t last_mod_timestamp) { struct babel_info *result; char *xmlData = (char*)fizmo_malloc(length + 1); xmlDocPtr babel_doc; if (fsi->readchars(xmlData, length, infile) != (size_t)length) { free(xmlData); return NULL; } xmlData[length] = '\0'; babel_doc = xmlReadDoc( (xmlChar*)xmlData, NULL, NULL, XML_PARSE_NOWARNING | XML_PARSE_NOERROR); free(xmlData); if (babel_doc == NULL) return NULL; result = (struct babel_info*)fizmo_malloc(sizeof(struct babel_info)); result->entries = NULL; result->entries_allocated = 0; result->nof_entries = 0; if (add_doc_to_babel_info(babel_doc, result, last_mod_timestamp, filename) != 0) { xmlFreeDoc(babel_doc); free(result); return NULL; } return result; } #else struct babel_info *load_babel_info_from_blorb(z_file *UNUSED(infile), int UNUSED(length), char *UNUSED(filename), time_t UNUSED(last_mod_timestamp)) { return NULL; } #endif struct babel_info *load_babel_info() { struct babel_info *result = NULL; #ifndef DISABLE_BABEL char *cwd = NULL; char *config_dir_name = NULL; z_dir *config_dir; struct z_dir_ent z_dir_entry; time_t last_mod_timestamp; z_file *new_babel_doc_file; xmlDocPtr new_babel_doc; #ifndef DISABLE_CONFIGFILES config_dir_name = get_fizmo_config_dir_name(); #endif // DISABLE_CONFIGFILES if ((config_dir = fsi->open_dir(config_dir_name)) == NULL) return NULL; cwd = fsi->get_cwd(); if (fsi->ch_dir(config_dir_name) != 0) { fsi->close_dir(config_dir); free(cwd); return NULL; } result = (struct babel_info*)fizmo_malloc(sizeof(struct babel_info)); result->entries = NULL; result->entries_allocated = 0; result->nof_entries = 0; while (fsi->read_dir(&z_dir_entry, config_dir) == 0) { if ( (fsi->is_filename_directory(z_dir_entry.d_name) == false) && (strlen(z_dir_entry.d_name) >= 9) && (strcasecmp( z_dir_entry.d_name + strlen(z_dir_entry.d_name) - 9, ".iFiction") == 0) ) { if ((new_babel_doc = xmlReadFile( z_dir_entry.d_name, NULL, XML_PARSE_NOWARNING | XML_PARSE_NOERROR)) != NULL) { if ((new_babel_doc_file = fsi->openfile( z_dir_entry.d_name, FILETYPE_DATA, FILEACCESS_READ)) == NULL) { free_babel_info(result); fsi->ch_dir(cwd); free(cwd); fsi->close_dir(config_dir); return NULL; } last_mod_timestamp = fsi->get_last_file_mod_timestamp(new_babel_doc_file); fsi->closefile(new_babel_doc_file); if ((add_doc_to_babel_info( new_babel_doc, result, last_mod_timestamp, z_dir_entry.d_name)) != 0) { xmlFreeDoc(new_babel_doc); free_babel_info(result); fsi->ch_dir(cwd); free(cwd); fsi->close_dir(config_dir); return NULL; } } } } fsi->ch_dir(cwd); free(cwd); fsi->close_dir(config_dir); #endif return result; } #ifndef DISABLE_BABEL static char *getStoryNodeContent(xmlXPathContextPtr xpathCtx, char *nodeName, char *namespace) { xmlXPathObjectPtr obj2; xmlNodePtr node; char *ptr; char expr[160]; // FIXME: Calculate length. int i; char *result = NULL; int result_size = 0; int index = 0; bool last_was_space; bool is_first_char; int len; char *src; sprintf( expr, "%sbibliographic/%s%s/child::text()|%sbibliographic/%s%s/*", namespace, namespace, nodeName, namespace, namespace, nodeName); obj2 = xmlXPathEvalExpression( (xmlChar*)expr, xpathCtx); //printf("# %d.\n", xmlXPathNodeSetGetLength(obj2->nodesetval)); for (i=0; inodesetval); i++) { node = obj2->nodesetval->nodeTab[i]; if(node->type == XML_ELEMENT_NODE) { if (strcasecmp((char*)node->name, "br") == 0) { ensure_mem_size(&result, &result_size, index+1); result[index++] = '\n'; //result[index++] = 0xa0; } } else if (node->type == XML_TEXT_NODE) { ptr = (char*)xmlNodeGetContent(node); len = strlen(ptr); src = ptr; ensure_mem_size(&result, &result_size, index + len + 1); last_was_space = false; is_first_char = true; while (*src != '\0') { if ( (*src == '\n') || (*src == '\r') || (*src == '\t') || (*src == ' ') ) { if ( (last_was_space == false) && (is_first_char == false) ) { last_was_space = true; } } else { if (last_was_space == true) { result[index] = ' '; index++; } last_was_space = false; result[index] = *src; is_first_char = false; index++; } src++; } result[index] = 0; xmlFree(ptr); } } //printf("(%s)\n", result); xmlXPathFreeObject(obj2); return result; } #endif // DISABLE_BABEL #ifndef DISABLE_BABEL struct babel_story_info *get_babel_story_info(uint16_t release, char *serial, uint16_t checksum, struct babel_info *babel, bool babel_from_blorb) { xmlXPathContextPtr xpathCtx; xmlXPathObjectPtr xpathObj; char *xmlNamespacedExpr="/if:ifindex/if:story[if:identification/if:ifid='ZCODE-%d-%6s' or translate(if:identification/if:ifid, 'ABCDEF', 'abcdef')=translate('ZCODE-%d-%6s-%04x', 'ABCDEF', 'abcdef')]"; char *xmlExpr="/ifindex/story[identification/ifid='ZCODE-%d-%6s' or translate(identification/ifid, 'ABCDEF', 'abcdef')=translate('ZCODE-%d-%6s-%04x', 'ABCDEF', 'abcdef')]"; char expr[strlen(xmlExpr) + 29]; char namespacedExpr[strlen(xmlNamespacedExpr) + 29]; char *current_expr; struct babel_story_info *result = NULL; int i; char if_namespace[] = "if:"; char no_namespace[] = ""; char *current_namespace; if (babel == NULL) return NULL; LIBXML_TEST_VERSION if (strlen(serial) > 6) return NULL; if (babel_from_blorb == false) { sprintf(expr, xmlExpr, release, serial, release, serial, checksum); sprintf(namespacedExpr, xmlNamespacedExpr, release, serial, release, serial, checksum); } else { sprintf(expr, "/ifindex/story"); sprintf(namespacedExpr, "/if:ifindex/if:story"); } //printf("(%s)\n", expr); //printf("(%s)\n", namespacedExpr); for (i=0; inof_entries; i++) { xpathCtx = xmlXPathNewContext(babel->entries[i]->babel_doc); if(xpathCtx == NULL) { fprintf(stderr,"Error: unable to create new XPath context\n"); return NULL; } if (babel->entries[i]->uses_if_namespace == true) { if (xmlXPathRegisterNs( xpathCtx, (xmlChar*)"if", (xmlChar*)"http://babel.ifarchive.org/protocol/iFiction/") == -1) { fprintf(stderr,"Error: unable to create new namespace\n"); xmlXPathFreeContext(xpathCtx); return NULL; } current_expr = namespacedExpr; current_namespace = if_namespace; } else { current_expr = expr; current_namespace = no_namespace; } xpathObj = xmlXPathEvalExpression((xmlChar*)current_expr, xpathCtx); if (xpathObj == NULL) { xmlXPathFreeContext(xpathCtx); fprintf( stderr, "Error: unable to evaluate xpath expression \"%s\"\n", current_expr); return NULL; } if (xmlXPathNodeSetGetLength(xpathObj->nodesetval) == 1) { xpathCtx->node = xpathObj->nodesetval->nodeTab[0]; result = (struct babel_story_info*)fizmo_malloc( sizeof(struct babel_story_info)); result->release_number = release; result->serial = (serial != NULL ? fizmo_strdup(serial) : NULL); result->title = getStoryNodeContent( xpathCtx, "title", current_namespace); result->author = getStoryNodeContent( xpathCtx, "author", current_namespace); result->description = getStoryNodeContent( xpathCtx, "description", current_namespace); result->language = getStoryNodeContent( xpathCtx, "language", current_namespace); } } return result; } #else // DISABLE_BABEL struct babel_story_info *get_babel_story_info(uint16_t UNUSED(release), char *UNUSED(serial), uint16_t UNUSED(checksum), struct babel_info *UNUSED(babel), bool UNUSED(babel_from_blorb)) { return NULL; } #endif // DISABLE_BABEL void store_babel_info_timestamps(struct babel_info *babel) { z_file *out; char *config_dir_name = NULL; char *filename; char *quoted_filename; int i; #ifndef DISABLE_CONFIGFILES config_dir_name = get_fizmo_config_dir_name(); #endif // DISABLE_CONFIGFILES /* Story list should work even if no babel info is available. if ( (babel == NULL) || (babel->nof_entries == 0) ) return; */ if (config_dir_name == NULL) return; filename = fizmo_malloc( strlen(config_dir_name) + 2 + strlen(BABEL_TIMESTAMP_FILE_NAME)); sprintf(filename, "%s/%s", config_dir_name, BABEL_TIMESTAMP_FILE_NAME); if ((out = fsi->openfile(filename, FILETYPE_DATA, FILEACCESS_WRITE)) == NULL) { free(filename); return; } if (babel) { for (i=0; inof_entries; i++) { quoted_filename = quote_special_chars(babel->entries[i]->filename); fsi->fileprintf(out, "%ld\t%s\n", babel->entries[i]->timestamp, babel->entries[i]->filename); free(quoted_filename); } } free(filename); fsi->closefile(out); } void abort_timestamp_input() { if (timestamp_input != NULL) free(timestamp_input); if (filename_input != NULL) free(filename_input); if (unquoted_filename_input != NULL) free(unquoted_filename_input); if (babel_timestamp_entries != NULL) free(babel_timestamp_entries); fsi->closefile(timestamp_file); } bool babel_files_have_changed(struct babel_info *babel) { char *config_dir_name = NULL; char *filename; int data; int nof_babel_timestamp_entries = 0; long offset, size; long timestamp; int i, j; #ifndef DISABLE_CONFIGFILES config_dir_name = get_fizmo_config_dir_name(); #endif // DISABLE_CONFIGFILES if (config_dir_name == NULL) return false; filename = fizmo_malloc( strlen(config_dir_name) + 2 + strlen(BABEL_TIMESTAMP_FILE_NAME)); //printf("%s/%s", config_dir_name, BABEL_TIMESTAMP_FILE_NAME); sprintf(filename, "%s/%s", config_dir_name, BABEL_TIMESTAMP_FILE_NAME); if ((timestamp_file = fsi->openfile( filename, FILETYPE_DATA, FILEACCESS_READ)) == NULL) { free(filename); return true; } if ((data = fsi->readchar(timestamp_file)) != EOF) { fsi->unreadchar(data, timestamp_file); for(;;) { offset = fsi->getfilepos(timestamp_file); while ((data = fsi->readchar(timestamp_file)) != '\t') if (data == EOF) { free(filename); abort_timestamp_input(); return true; } size = fsi->getfilepos(timestamp_file) - offset - 1; if (ensure_mem_size(×tamp_input, ×tamp_input_size, size + 2) == -1) { free(filename); abort_timestamp_input(); return true; } if (size > 0) { fsi->setfilepos(timestamp_file, -(size+1), SEEK_CUR); if (fsi->readchars(timestamp_input, size+1, timestamp_file) != (size_t)size+1) { free(filename); abort_timestamp_input(); return true; } } timestamp_input[size] = '\0'; offset = fsi->getfilepos(timestamp_file); while ((data = fsi->readchar(timestamp_file)) != '\n') if (data == EOF) { free(filename); abort_timestamp_input(); return true; } size = fsi->getfilepos(timestamp_file) - offset - 1; if (ensure_mem_size(&filename_input, &filename_input_size, size+2) == -1) { free(filename); abort_timestamp_input(); return true; } if (size > 0) { fsi->setfilepos(timestamp_file, -(size+1), SEEK_CUR); if (fsi->readchars(filename_input, size+1, timestamp_file) != (size_t)size+1) { free(filename); abort_timestamp_input(); return true; } } filename_input[size] = '\0'; //printf("%s,%s\n", timestamp_input, filename_input); for (i=0; inof_entries; i++) { if (strcmp(babel->entries[i]->filename, filename_input) == 0) { //printf("Found %s\n", filename_input); timestamp = 0; for (j=0; (size_t)jentries[i]->timestamp != timestamp) { //printf("Timestamps dont match\n"); abort_timestamp_input(); free(filename); return true; } break; } } if (i == babel->nof_entries) { abort_timestamp_input(); //printf("File not found: %s\n", filename_input); free(filename); return true; } nof_babel_timestamp_entries++; if ((data = fsi->readchar(timestamp_file)) == EOF) break; fsi->unreadchar(data, timestamp_file); } } free(filename); abort_timestamp_input(); if (nof_babel_timestamp_entries != (babel ? babel->nof_entries : 0)) { //printf("Babel-lists have not equal size.\n"); return true; } return false; } bool babel_available() { #ifndef DISABLE_BABEL return true; #else return false; #endif } fizmo-0.7.10/libfizmo/src/interpreter/babel.h000644 000765 000024 00000005532 12606024314 022046 0ustar00chrenderstaff000000 000000 /* babel.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef babel_h_INCLUDED #define babel_h_INCLUDED #ifndef DISABLE_BABEL #include #endif #include "../tools/types.h" #include "../tools/unused.h" struct babel_doc_entry { #ifndef DISABLE_BABEL xmlDocPtr babel_doc; #else void *babel_doc; #endif char *filename; long timestamp; bool uses_if_namespace; }; struct babel_info { struct babel_doc_entry **entries; int entries_allocated; int nof_entries; }; struct babel_story_info { uint16_t release_number; char *serial; int length; char *title; char *author; char *description; char *language; }; void free_babel_info(struct babel_info *babel); void free_babel_story_info(struct babel_story_info *b_info); struct babel_info *load_babel_info(); struct babel_story_info *get_babel_story_info(uint16_t release, char *serial, uint16_t checksum, struct babel_info *babel, bool babel_from_blorb); void store_babel_info_timestamps(struct babel_info *babel); bool babel_files_have_changed(struct babel_info *babel); bool babel_available(); #ifndef DISABLE_BABEL struct babel_info *load_babel_info_from_blorb(z_file *infile, int length, char *filename, time_t last_mod_timestamp); #else struct babel_info *load_babel_info_from_blorb(z_file *UNUSED(infile), int UNUSED(length), char *UNUSED(filename), time_t UNUSED(last_mod_timestamp)); #endif #endif /* babel_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/blockbuf.c000644 000765 000024 00000017651 12606024314 022570 0ustar00chrenderstaff000000 000000 /* blockbuf.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef blockbuf_c_INCLUDED #define blockbuf_c_INCLUDED #include #include #include "blockbuf.h" #include "fizmo.h" #include "../tools/types.h" #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "../tools/z_ucs.h" BLOCKBUF *create_blockbuffer(z_style default_style, z_font default_font, z_colour default_foreground_colour, z_colour default_background_colour) { BLOCKBUF *result; TRACE_LOG("New blockbuffer, foreground:%d, background: %d.\n", default_foreground_colour, default_background_colour); result = (BLOCKBUF*)fizmo_malloc(sizeof(BLOCKBUF)); result->width = 0; result->height = 0; result->xpos = 0; result->ypos = 0; result->content = NULL; result->default_style = default_style; result->default_font = default_font; result->default_foreground_colour = default_foreground_colour; result->default_background_colour = default_background_colour; result->current_style = default_style; result->current_font = default_font; result->current_foreground_colour = default_foreground_colour; result->current_background_colour = default_background_colour; return result; } void destroy_blockbuffer(BLOCKBUF *blockbuffer) { if (blockbuffer->content != NULL) free(blockbuffer->content); free(blockbuffer); } void store_z_ucs_output_in_blockbuffer(BLOCKBUF *buffer, z_ucs *z_ucs_output) { struct blockbuf_char *ptr = buffer->content + (buffer->ypos * buffer->width) + buffer->xpos; TRACE_LOG("Writing to blockbuffer at %d/%d: \"", buffer->xpos, buffer->ypos); TRACE_LOG_Z_UCS(z_ucs_output); TRACE_LOG("\"\n"); while (*z_ucs_output != 0) { if (*z_ucs_output == Z_UCS_NEWLINE) { buffer->xpos = 0; if (buffer->ypos < buffer->height - 1) { buffer->ypos++; } ptr = buffer->content + (buffer->ypos * buffer->width) + buffer->xpos; } else { if (buffer->xpos >= buffer->width) { TRACE_LOG("Terminating blockbuffer output prematurely at x:%d.\n", buffer->xpos); break; } ptr->character = *z_ucs_output; ptr->font = buffer->current_font; ptr->style = buffer->current_style; ptr->foreground_colour = buffer->current_foreground_colour; ptr->background_colour = buffer->current_background_colour; ptr++; buffer->xpos++; } z_ucs_output++; } } void set_blockbuf_cursor(BLOCKBUF *buffer, int x, int y) { TRACE_LOG("Set blockbuffer-cursor to x:%d, y:%d.\n", x, y); if (x < 0) buffer->xpos = 0; else if (x < buffer->width) buffer->xpos = x; else buffer->xpos = buffer->width - 1; if (y < 0) buffer->ypos = 0; else if (y < buffer->height) buffer->ypos = y; else buffer->ypos = buffer->height - 1; } void set_blockbuf_style(BLOCKBUF *buffer, z_style style) { TRACE_LOG("Set blockbuffer-style to %d.\n", style); buffer->current_style = style; } void set_blockbuf_foreground_colour(BLOCKBUF *buffer, z_colour new_colour) { TRACE_LOG("Set blockbuffer-foreground-colour to %d.\n", new_colour); buffer->current_foreground_colour = new_colour; } void set_blockbuf_background_colour(BLOCKBUF *buffer, z_colour new_colour) { TRACE_LOG("Set blockbuffer-background-colour to %d.\n", new_colour); buffer->current_background_colour = new_colour; } void set_blockbuf_font(BLOCKBUF *buffer, z_font font) { TRACE_LOG("Set blockbuffer-font to %d.\n", font); buffer->current_font= font; } // The buffer will only enlarge itself, but never shrink. This is due to // the fact that many older games are not designed for resizes, and will // keep printing into the old sized lines. If we only enlarge the buffer // we'll make sure we don't lose anything, and restoring the screen by // making the window larger will allow the user to see text the game has // just printed. void blockbuf_resize(BLOCKBUF *buffer, int new_width, int new_height) { int x,y; size_t new_buffer_size; struct blockbuf_char *ptr; if (new_width < buffer->width) { new_width = buffer->width; } if (new_height < buffer->height) { new_height = buffer->height; } if ((new_width == buffer->width) && (new_height == buffer->height)) { return; } new_buffer_size = sizeof(struct blockbuf_char) * new_width * new_height; TRACE_LOG("Resizing blockbuffer to %d*%d (%zd bytes).\n", new_width, new_height, new_buffer_size); buffer->content = (struct blockbuf_char*)fizmo_realloc( buffer->content, new_buffer_size); // Realign existing lines. if (buffer->width < new_width) { for (y=buffer->height-1; y>=0; y--) { TRACE_LOG("Copying %ld bytes from %p to %p (line %d/%d/%d).\n", sizeof(struct blockbuf_char) * (buffer->width), buffer->content + (y * buffer->width), buffer->content + (y * new_width), y, buffer->width, new_width); memmove( buffer->content + (y * new_width), buffer->content + (y * buffer->width), sizeof(struct blockbuf_char) * (buffer->width)); ptr = buffer->content + (y * new_width) + buffer->width; for (x=buffer->width; xcharacter = Z_UCS_SPACE; ptr->foreground_colour = buffer->default_foreground_colour; ptr->background_colour = buffer->default_background_colour; ptr->style = buffer->default_style; ptr->font = buffer->default_font; ptr++; } } } // Fill new lower lines if buffer got larger. ptr = buffer->content + (new_width * buffer->height); for (y=buffer->height; ycharacter = Z_UCS_SPACE; ptr->foreground_colour = buffer->default_foreground_colour; ptr->background_colour = buffer->default_background_colour; ptr->style = buffer->default_style; ptr->font = buffer->default_font; ptr++; } } if (new_width > buffer->width) { buffer->width = new_width; } if (new_height > buffer->height) { buffer->height = new_height; } TRACE_LOG("New blockbuffer dimensions: %d * %d.\n", buffer->width, buffer->height); } size_t count_allocated_blockbuf_memory(BLOCKBUF *buffer) { return sizeof(BLOCKBUF) + sizeof(struct blockbuf_char) * buffer->height * buffer->width; } #endif // blockbuf_c_INCLUDED fizmo-0.7.10/libfizmo/src/interpreter/blockbuf.h000644 000765 000024 00000005505 12606024314 022570 0ustar00chrenderstaff000000 000000 /* blockbuf.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef blockbuf_h_INCLUDED #define blockbuf_h_INCLUDED #include "../tools/types.h" struct blockbuf_char { z_ucs character; z_font font; z_style style; z_colour foreground_colour; z_colour background_colour; }; typedef struct { int width; int height; int xpos; int ypos; struct blockbuf_char *content; z_style current_style; z_font current_font; z_colour current_foreground_colour; z_colour current_background_colour; z_style default_style; z_font default_font; z_colour default_foreground_colour; z_colour default_background_colour; } BLOCKBUF; BLOCKBUF *create_blockbuffer(z_style default_style, z_font default_font, z_colour default_foreground_colour, z_colour default_background_colour); void destroy_blockbuffer(BLOCKBUF *blockbuffer); void store_z_ucs_output_in_blockbuffer(BLOCKBUF *buffer, z_ucs *z_ucs_output); void set_blockbuf_cursor(BLOCKBUF *buffer, int x, int y); void set_blockbuf_style(BLOCKBUF *buffer, z_style style); void set_blockbuf_foreground_colour(BLOCKBUF *buffer, z_colour new_colour); void set_blockbuf_background_colour(BLOCKBUF *buffer, z_colour new_colour); void set_blockbuf_font(BLOCKBUF *buffer, z_font font); void blockbuf_resize(BLOCKBUF *buffer, int new_width, int new_height); size_t count_allocated_blockbuf_memory(BLOCKBUF *buffer); #endif // blockbuf_h_INCLUDED fizmo-0.7.10/libfizmo/src/interpreter/blorb.c000644 000765 000024 00000017101 12606024314 022067 0ustar00chrenderstaff000000 000000 /* blorb.c * * This file is part of fizmo. * * Copyright (c) 2011-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef blorb_c_INCLUDED #define blorb_c_INCLUDED #include #include #include "../tools/types.h" #include "../tools/filesys.h" #include "../tools/i18n.h" #include "../tools/tracelog.h" #include "../locales/libfizmo_locales.h" #include "blorb.h" #include "fizmo.h" #include "iff.h" struct fizmo_blorb_struct { int resource_number; int type; long offset; int v3_number_of_loops; }; typedef struct fizmo_blorb_struct fizmo_blorb; struct fizmo_blorb_map_struct { z_file *blorb_file; fizmo_blorb **blorbs; int frontispiece_image_no; }; typedef struct fizmo_blorb_map_struct fizmo_blorb_map; static fizmo_blorb *fizmo_get_blorb(z_blorb_map *blorb_map, int usage, int resnum) { int i = 0; fizmo_blorb_map *map; fizmo_blorb *blorb; if (blorb_map == NULL) return NULL; map = (fizmo_blorb_map*)blorb_map->blorb_map_implementation; blorb = map->blorbs[i++]; while (blorb != NULL) { if ( (blorb->resource_number == resnum) && (blorb->type == usage) ) return blorb; blorb = map->blorbs[i++]; } return NULL; } static z_blorb_map *fizmo_blorb_init(z_file *blorb_file) { z_blorb_map *result_wrapper; fizmo_blorb_map *result; fizmo_blorb *blorb; int resource_chunk_size; char buf[5]; int nof_resources, nof_loops, blorb_index, resource_number; if (find_chunk("RIdx", blorb_file) == -1) { fsi->closefile(blorb_file); return NULL; } if (read_chunk_length(blorb_file) == -1) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_RETURNED_ERROR_CODE_P1D, -0x0101, "read_chunk_length", errno); result = fizmo_malloc(sizeof(fizmo_blorb_map)); result->blorb_file = blorb_file; result_wrapper = fizmo_malloc(sizeof(z_blorb_map)); result_wrapper->blorb_map_implementation = result; resource_chunk_size = get_last_chunk_length(); nof_resources = (resource_chunk_size - 4) / 12; // Skip next number of resources. if ((fsi->setfilepos(result->blorb_file, 4, SEEK_CUR)) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_RETURNED_ERROR_CODE_P1D, -0x0101, "setfilepos", errno); TRACE_LOG("Number of resources in blorb file: %d.\n", nof_resources); // Count number of images and sounds. result->blorbs = fizmo_malloc(sizeof(fizmo_blorb*) * (nof_resources+1)); buf[4] = '\0'; blorb_index = 0; while (nof_resources > 0) { blorb = fizmo_malloc(sizeof(fizmo_blorb)); if (fsi->readchars(buf, 4, result->blorb_file) != 4) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0106, "readchars"); TRACE_LOG("Type descriptor: %s\n", buf); if (strcmp(buf, "Pict") == 0) blorb->type = Z_BLORB_TYPE_PICT; else if (strcmp(buf, "Snd ") == 0) blorb->type = Z_BLORB_TYPE_SOUND; else if (strcmp(buf, "Exec") == 0) blorb->type = Z_BLORB_TYPE_EXEC; else // Unknown resource. i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_UNKNOWN_ERROR_CASE, -1); blorb->resource_number = read_four_byte_number(result->blorb_file); blorb->offset = read_four_byte_number(result->blorb_file) + 8; blorb->v3_number_of_loops = -1; result->blorbs[blorb_index++] = blorb; nof_resources--; } result->blorbs[blorb_index] = NULL; if (find_chunk("Fspc", result->blorb_file) == 0) { if ((fsi->setfilepos(result->blorb_file, 4, SEEK_CUR)) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_RETURNED_ERROR_CODE_P1D, -0x0101, "setfilepos", errno); result->frontispiece_image_no = read_four_byte_number(result->blorb_file); } else result->frontispiece_image_no = -1; if (ver < 5) { if (find_chunk("Loop", result->blorb_file) == 0) { nof_resources = read_four_byte_number(result->blorb_file) / 8; TRACE_LOG("Number of loop entries: %d.\n", nof_resources); while (nof_resources > 0) { resource_number = read_four_byte_number(result->blorb_file); nof_loops = read_four_byte_number(result->blorb_file); TRACE_LOG("Trying to find resource #%d.\n", resource_number); if ((blorb = fizmo_get_blorb( result_wrapper, Z_BLORB_TYPE_SOUND, resource_number)) != NULL) { TRACE_LOG("Resource found, setting nof_loops to %d.\n", nof_loops); blorb->v3_number_of_loops = nof_loops; } nof_resources--; } } } return result_wrapper; } static long fizmo_get_blorb_offset(z_blorb_map *blorb_map, int usage, int resnum) { fizmo_blorb *result_blorb; if ((result_blorb = fizmo_get_blorb(blorb_map, usage, resnum)) == NULL) return -1; else return result_blorb->offset; } static int fizmo_get_frontispiece_resource_number(z_blorb_map *blorb_map) { fizmo_blorb_map *map; if (blorb_map == NULL) return -1; map = (fizmo_blorb_map*)blorb_map->blorb_map_implementation; return map->frontispiece_image_no; } static int fizmo_free_blorb_map(z_blorb_map *blorb_map) { int i = 0; fizmo_blorb_map *map; fizmo_blorb *blorb; if (blorb_map == NULL) return -1; map = (fizmo_blorb_map*)blorb_map->blorb_map_implementation; blorb = map->blorbs[i++]; while (blorb != NULL) { free(blorb); blorb = map->blorbs[i++]; } free(map->blorbs); free(map); free(blorb_map); return 0; } int get_v3_sound_loops_from_blorb_map(z_blorb_map *blorb_map, int resnum) { fizmo_blorb *result_blorb; if ((result_blorb = fizmo_get_blorb(blorb_map, Z_BLORB_TYPE_SOUND, resnum)) == NULL) return -1; else return result_blorb->v3_number_of_loops; } struct z_blorb_interface fizmo_blorb_interface = { &fizmo_blorb_init, &fizmo_get_blorb_offset, &fizmo_get_frontispiece_resource_number, &fizmo_free_blorb_map }; struct z_blorb_interface *active_blorb_interface = &fizmo_blorb_interface; #endif /* blorb_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/blorb.h000644 000765 000024 00000003471 12606024314 022101 0ustar00chrenderstaff000000 000000 /* blorb.h * * This file is part of fizmo. * * Copyright (c) 2011-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef blorb_h_INCLUDED #define blorb_h_INCLUDED #include "../blorb_interface/blorb_interface.h" #ifndef blorb_c_INCLUDED extern struct z_blorb_interface *active_blorb_interface; #endif // blorb_c_INCLUDED int get_v3_sound_loops_from_blorb_map(z_blorb_map *blorb_map, int resnum); #endif /* blorb_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/cmd_hst.c000644 000765 000024 00000010362 12606024314 022412 0ustar00chrenderstaff000000 000000 /* cmd_hst.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef cmd_hst_c_INCLUDED #define cmd_hst_c_INCLUDED #define _XOPEN_SOURCE_EXTENDED 1 #define _XOPEN_SOURCE 1 // __STDC_ISO_10646__ #include #include #include "cmd_hst.h" #include "fizmo.h" #include "../tools/tracelog.h" #include "../tools/types.h" #include "../tools/i18n.h" // The array "command_history_entries" stores pointer to the latest commands // entered by the user. In case the user has entered more commands than // NUMBER_OF_REMEMBERED_COMMANDS, pointers in the array are not copied, // instead the "start_index" and "end_index" are adjusted accordingly. static zscii *command_history_entries[NUMBER_OF_REMEMBERED_COMMANDS]; // If wrap_around_is_active == false, start_index == end_index means that // the buffer is empty, otherwise full. bool wrap_around_is_active = false; // "start_index" denotes the position of the oldest stored command. static unsigned int start_index = 0; // "end_index" is one step ahead of the latest stored command. static unsigned int end_index = 0; void store_command_in_history(zscii *new_command) { zscii *ptr = (zscii*)fizmo_strdup((char*)new_command); if (start_index == end_index) { if (wrap_around_is_active == true) { free(command_history_entries[start_index]); TRACE_LOG("Storing command %p at %d.\n", ptr, end_index); command_history_entries[end_index] = ptr; if (++end_index == NUMBER_OF_REMEMBERED_COMMANDS) { end_index = 0; } start_index = end_index; } else { // The buffer ist still empty. TRACE_LOG("Storing command %p at 0.\n"); command_history_entries[0] = ptr; end_index = 1; } } else { // There's still space to store new commands. TRACE_LOG("Storing command %p at %d.\n", ptr, end_index); command_history_entries[end_index] = ptr; if (++end_index == NUMBER_OF_REMEMBERED_COMMANDS) { end_index = 0; start_index = 0; wrap_around_is_active = true; } } TRACE_LOG("start_index: %d, end_index: %d.\n", start_index, end_index); } int get_number_of_stored_commands() { return wrap_around_is_active == false ? end_index - start_index : NUMBER_OF_REMEMBERED_COMMANDS; } zscii *get_command_from_history(unsigned int command_index) { unsigned int history_index; TRACE_LOG("requested: %d.\n", command_index); TRACE_LOG("stored: %d.\n", get_number_of_stored_commands()); if (command_index < end_index) { history_index = end_index - command_index - 1; } else if (wrap_around_is_active == true) { history_index = (NUMBER_OF_REMEMBERED_COMMANDS - (command_index - end_index)) - 1; } else { return NULL; } TRACE_LOG("history_index: %d.\n", history_index); return command_history_entries[history_index]; } #endif // cmd_hist_c_INCLUDED fizmo-0.7.10/libfizmo/src/interpreter/cmd_hst.h000644 000765 000024 00000003430 12606024314 022415 0ustar00chrenderstaff000000 000000 /* cmd_hst.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef cmd_hst_h_INCLUDED #define cmd_hst_h_INCLUDED #include "../tools/types.h" #include "config.h" void store_command_in_history(zscii *new_command); int get_number_of_stored_commands(); zscii *get_command_from_history(unsigned int command_index); #endif /* cmd_hst_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/config.c000644 000765 000024 00000050567 12606024314 022251 0ustar00chrenderstaff000000 000000 /* config.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef config_c_INCLUDED #define config_c_INCLUDED #include #include #include #include #include #if !defined (__WIN32__) #include #endif // !defined (__WIN32__) #include "../tools/tracelog.h" #include "config.h" #include "fizmo.h" #include "mathemat.h" #include "output.h" #include "../tools/types.h" #include "../tools/i18n.h" #include "../locales/libfizmo_locales.h" #define BUFSIZE 5 //int system_charset = SYSTEM_CHARSET_ASCII; bool auto_adapt_upper_window = true; bool auto_open_upper_window = true; bool skip_active_routines_stack_check_warning = false; char config_true_value[] = "true"; char config_false_value[] = "false"; char empty_string[] = ""; bool user_homedir_initialized = false; char *user_homedir = NULL; struct configuration_option configuration_options[] = { // String values: { "autosave-filename", NULL }, { "background-color", NULL }, { "foreground-color", NULL }, { "i18n-search-path", NULL }, { "input-command-filename", NULL }, { "locale", NULL }, { "max-undo-steps", NULL }, { "random-mode", NULL }, { "record-command-filename", NULL }, { "save-text-history-paragraphs", NULL }, { "savegame-default-filename", NULL }, { "savegame-path", NULL }, { "stream-2-left-margin", NULL }, { "stream-2-line-width", NULL }, { "transcript-filename", NULL }, { "z-code-path", NULL }, { "z-code-root-path", NULL }, // Boolean values: { "disable-external-streams", NULL }, { "disable-restore", NULL }, { "disable-save", NULL }, { "disable-sound", NULL }, { "disable-stream-2-hyphenation", NULL }, { "disable-stream-2-wrap", NULL }, { "dont-set-locale-from-config", NULL }, { "enable-font3-conversion", NULL }, { "quetzal-umem", NULL }, { "restore-after-save-and-quit-file-before-read", NULL }, { "save-and-quit-file-before-read", NULL }, { "set-tandy-flag", NULL }, { "start-command-recording-when-story-starts", NULL }, { "start-file-input-when-story-starts", NULL }, { "start-script-when-story-starts", NULL }, { "sync-transcript", NULL }, { "flush-output-on-newline", NULL }, // NULL terminates the option list. { NULL, NULL } }; static char *expand_configuration_value(char *unexpanded_value) { static char *homedir; static int homedir_len; char *ptr = unexpanded_value; int resultlen; char *result, *resultindex; char *var_name; char buf; if (unexpanded_value == NULL) return NULL; if ((homedir = get_user_homedir()) == NULL) homedir = empty_string; homedir_len = strlen(homedir); TRACE_LOG("Value to expand: \"%s\".\n", unexpanded_value); resultlen = 0; while (*ptr != 0) { if (*ptr == '$') { ptr++; if (*ptr == '(') { ptr++; var_name = ptr; while ( (*ptr != 0) && (*ptr != ')') ) ptr++; if (*ptr != ')') return NULL; buf = *ptr; *ptr = 0; if (strcmp(var_name, "HOME") == 0) { resultlen += strlen(homedir); } else { *ptr = buf; return NULL; } *ptr = buf; ptr++; } else return NULL; } else { ptr++; resultlen++; } } TRACE_LOG("result len: %d.\n", resultlen); result = fizmo_malloc(resultlen + 1); resultindex = result; ptr = unexpanded_value; while (*ptr != 0) { if (*ptr == '$') { ptr++; if (*ptr == '(') { ptr++; var_name = ptr; while ( (*ptr != 0) && (*ptr != ')') ) ptr++; if (*ptr != ')') { free(result); return NULL; } buf = *ptr; *ptr = 0; if (strcmp(var_name, "HOME") == 0) { strcpy(resultindex, homedir); resultindex += homedir_len; } else { *ptr = buf; // Can't ever reach this point due to loop 1. } *ptr = buf; ptr++; } } else { *resultindex = *ptr; ptr++; resultindex++; } } *resultindex = 0; TRACE_LOG("result expanded value: %s / %p.\n", result, result); return result; } int append_path_value(char *key, char *value_to_append) { char *str, *str2; int result; if ((str = get_configuration_value(key)) != NULL) { str2 = fizmo_malloc(strlen(str) + strlen(value_to_append) + 2); strcpy(str2, str); strcat(str2, ":"); strcat(str2, value_to_append); TRACE_LOG("Appended path: %s.\n", str2); result = set_configuration_value(key, str2); free(str2); return result; } else return set_configuration_value(key, value_to_append); } int set_configuration_value(char *key, char* new_unexpanded_value) { int i, return_code, result; char *new_value = NULL; char buf[BUFSIZE]; short color_code; char *endptr; if (key == NULL) return -1; if (new_unexpanded_value != NULL) if ((new_value = expand_configuration_value(new_unexpanded_value)) == NULL) return -1; #ifdef ENABLE_TRACING TRACE_LOG("Setting configuration key \"%s\".\n", key); if (new_value != NULL) { TRACE_LOG("New value: %s at %p.\n", new_value, new_value); } #endif //ENABLE_TRACING i = 0; while (configuration_options[i].name != NULL) { TRACE_LOG("i:%d, name:%s.\n", i, configuration_options[i].name); if (strcmp(configuration_options[i].name, key) == 0) { // Parse option values which cannot be simply copied: if (strcmp(key, "locale") == 0) { TRACE_LOG("Trying to set locale to \"%s\".\n", new_value); return_code = (strcmp(get_configuration_value( "dont-set-locale-from-config"), "true") == 0) ? 0 : set_current_locale_name(new_value); free(new_value); return return_code; } else if (strcmp(key, "random-mode") == 0) { if (new_value == NULL) return -1; else if (strcmp(new_value, "random") == 0) { if (configuration_options[i].value != NULL) free(configuration_options[i].value); configuration_options[i].value = new_value; seed_random_generator(); return 0; } else if (strcmp(new_value, "predictable") == 0) { if (configuration_options[i].value != NULL) free(configuration_options[i].value); configuration_options[i].value = new_value; TRACE_LOG("stored value: %p.\n", configuration_options[i].value); seed_random_generator(); return 0; } else return -1; } else if (strcmp(key, "i18n-search-path") == 0) { // Forward to i18n, since this is in tools and cannot access the // "config.c" file. return_code = set_i18n_search_path(new_value); free(new_value); return return_code; } // Options for values which can simply be copied. else if ( (strcmp(key, "z-code-path") == 0) || (strcmp(key, "z-code-root-path") == 0) || (strcmp(key, "autosave-filename") == 0) || (strcmp(key, "savegame-path") == 0) || (strcmp(key, "savegame-default-filename") == 0) || (strcmp(key, "transcript-filename") == 0) || (strcmp(key, "save-text-history-paragraphs") == 0) || (strcmp(key, "input-command-filename") == 0) || (strcmp(key, "record-command-filename") == 0) ) { if (configuration_options[i].value != NULL) free(configuration_options[i].value); configuration_options[i].value = new_value; return 0; } // Integer values else if ( (strcmp(key, "stream-2-line-width") == 0) || (strcmp(key, "stream-2-left-margin") == 0) || (strcmp(key, "max-undo-steps") == 0) ) { if (new_value == NULL) return -1; if (strlen(new_value) == 0) { free(new_value); return -1; } strtol(new_value, &endptr, 10); if (*endptr != 0) { free(new_value); return -1; } if (configuration_options[i].value != NULL) free(configuration_options[i].value); configuration_options[i].value = new_value; return 0; } // Color options else if (strcmp(key, "foreground-color") == 0) { if (new_value == NULL) return -1; color_code = color_name_to_z_colour(new_value); free(new_value); if (color_code == -1) return -1; if (snprintf(buf, BUFSIZE, "%d", color_code) >= BUFSIZE) return -1; if (configuration_options[i].value != NULL) free(configuration_options[i].value); configuration_options[i].value = fizmo_strdup(buf); default_foreground_colour = color_code; return 0; } else if (strcmp(key, "background-color") == 0) { if (new_value == NULL) return -1; color_code = color_name_to_z_colour(new_value); free(new_value); if (color_code == -1) return -1; if (snprintf(buf, BUFSIZE, "%d", color_code) >= BUFSIZE) return -1; if (configuration_options[i].value != NULL) free(configuration_options[i].value); configuration_options[i].value = fizmo_strdup(buf); default_background_colour = color_code; return 0; } // Boolean options else if ( (strcmp(key, "disable-external-streams") == 0) || (strcmp(key, "disable-restore") == 0) || (strcmp(key, "disable-save") == 0) || (strcmp(key, "disable-sound") == 0) || (strcmp(key, "enable-font3-conversion") == 0) || (strcmp(key, "quetzal-umem") == 0) || (strcmp(key, "random-mode") == 0) || (strcmp(key, "restore-after-save-and-quit-file-before-read") == 0) || (strcmp(key, "save-and-quit-file-before-read") == 0) || (strcmp(key, "set-tandy-flag") == 0) || (strcmp(key, "start-command-recording-when-story-starts") == 0) || (strcmp(key, "start-script-when-story-starts") == 0) || (strcmp(key, "start-file-input-when-story-starts") == 0) || (strcmp(key, "disable-stream-2-hyphenation") == 0) || (strcmp(key, "disable-stream-2-wrap") == 0) || (strcmp(key, "sync-transcript") == 0) || (strcmp(key, "dont-set-locale-from-config") == 0) || (strcmp(key, "flush-output-on-newline") == 0) ) { if ( (new_value == NULL) || (*new_value == 0) || (strcmp(new_value, config_true_value) == 0) ) { if (new_value != NULL) free(new_value); if (configuration_options[i].value != NULL) free(configuration_options[i].value); configuration_options[i].value = fizmo_strdup(config_true_value); return 0; } else if ((new_value != NULL) && (strcmp(new_value, config_false_value)==0)) { free(new_value); if (configuration_options[i].value != NULL) free(configuration_options[i].value); configuration_options[i].value = fizmo_strdup(config_false_value); return -1; } else { free(new_value); return -1; } } else { i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_UNKNOWN_CONFIGURATION_OPTION_P0S, -0x0101, key); } } i++; } if (active_interface != NULL) { result = active_interface->parse_config_parameter(key, new_value); if (result == -1) { i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_INVALID_VALUE_P0S_FOR_PARAMETER_P1S, -0x0101, key, new_value); } } if (active_sound_interface == NULL) return -2; else { result = active_sound_interface->parse_config_parameter(key, new_value); if (result == -1) { i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_INVALID_VALUE_P0S_FOR_PARAMETER_P1S, -0x0101, key, new_value); } } return result; } char *get_configuration_value(char *key) { int i = 0; char **interface_option_names; if (key == NULL) return NULL; TRACE_LOG("Retrieving config value: %s.\n", key); if (strcmp(key, "i18n-search-path") == 0) { // Forward to i18n, since this is in tools and cannot access the // "config.c" file. return get_i18n_search_path(); } else if (strcmp(key, "locale") == 0) { return get_current_locale_name_in_utf8(); } else if ( (strcmp(key, "background-color-name") == 0) || (strcmp(key, "foreground-color-name") == 0) ) { return z_colour_names[ atoi( get_configuration_value( ( strcmp(key, "background-color-name") == 0 ? "background-color" : "foreground-color")))]; } else { while (configuration_options[i].name != NULL) { TRACE_LOG("i:%d, name:%s.\n", i, configuration_options[i].name); if (strcmp(configuration_options[i].name, key) == 0) { // Boolean options if ( (strcmp(key, "disable-external-streams") == 0) || (strcmp(key, "disable-restore") == 0) || (strcmp(key, "disable-save") == 0) || (strcmp(key, "disable-sound") == 0) || (strcmp(key, "enable-font3-conversion") == 0) || (strcmp(key, "quetzal-umem") == 0) || (strcmp(key, "restore-after-save-and-quit-file-before-read") == 0) || (strcmp(key, "save-and-quit-file-before-read") == 0) || (strcmp(key, "set-tandy-flag") == 0) || (strcmp(key, "start-command-recording-when-story-starts") == 0) || (strcmp(key, "start-script-when-story-starts") == 0) || (strcmp(key, "start-file-input-when-story-starts") == 0) || (strcmp(key, "disable-stream-2-hyphenation") == 0) || (strcmp(key, "disable-stream-2-wrap") == 0) || (strcmp(key, "sync-transcript") == 0) || (strcmp(key, "dont-set-locale-from-config") == 0) || (strcmp(key, "flush-output-on-newline") == 0) ) { if (configuration_options[i].value == NULL) { TRACE_LOG("return \"false\".\n"); return config_false_value; } else { TRACE_LOG("return \"%s\".\n", configuration_options[i].value); return configuration_options[i].value; } } // String options else if ( (strcmp(key, "random-mode") == 0) || (strcmp(key, "z-code-path") == 0) || (strcmp(key, "z-code-root-path") == 0) || (strcmp(key, "autosave-filename") == 0) || (strcmp(key, "savegame-path") == 0) || (strcmp(key, "savegame-default-filename") == 0) || (strcmp(key, "transcript-filename") == 0) || (strcmp(key, "input-command-filename") == 0) || (strcmp(key, "record-command-filename") == 0) || (strcmp(key, "background-color") == 0) || (strcmp(key, "foreground-color") == 0) || (strcmp(key, "save-text-history-paragraphs") == 0) || (strcmp(key, "stream-2-line-width") == 0) || (strcmp(key, "stream-2-left-margin") == 0) || (strcmp(key, "max-undo-steps") == 0) ) { TRACE_LOG("Returning value at %p.\n", configuration_options[i].value); return configuration_options[i].value; } else { // Internal error: config-key was found in configuration_options[], // but not in the hardcoded keys above. TRACE_LOG("Unknown config key: \"%s\".", key); return NULL; } } i++; } if (active_interface != NULL) { if ((interface_option_names = active_interface->get_config_option_names()) != NULL) { i = 0; while (interface_option_names[i] != NULL) if (strcmp(interface_option_names[i++], key) == 0) return active_interface->get_config_value(key); } } if (active_sound_interface != NULL) { if ((interface_option_names = active_sound_interface->get_config_option_names()) != NULL) { i = 0; while (interface_option_names[i] != NULL) if (strcmp(interface_option_names[i++], key) == 0) return active_sound_interface->get_config_value(key); } } TRACE_LOG("Unknown config key: \"%s\".", key); return NULL; } } /* char **get_valid_configuration_options(char *key, ...) { char **result; int result_index; size_t memory_size; va_list ap; char *ptr; int i; if (strcmp(key, "locale") == 0) { va_start(ap, key); ptr = va_arg(ap, char*); va_end(ap); if (ptr == NULL) return NULL; result_index = 0; for (i=0; ipw_dir == NULL) user_homedir = NULL; else user_homedir = strdup(pw_entry->pw_dir); #else if ((user_homedir = getenv("HOME")) == NULL) user_homedir = getenv("HOMEPATH"); #endif // !defined (__WIN32__) user_homedir_initialized = true; } return user_homedir; } #endif /* config_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/config.h000644 000765 000024 00000007624 12606024314 022252 0ustar00chrenderstaff000000 000000 /* config.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef config_h_INCLUDED #define config_h_INCLUDED #include "../tools/types.h" #define FIZMO_CONFIG_DIR_NAME "fizmo" #define DEFAULT_XDG_CONFIG_HOME ".config" #define SYSTEM_FIZMO_CONF_FILE_NAME "/etc/fizmo.conf" #define DEFAULT_XDG_CONFIG_DIRS "/etc/xdg" #define FIZMO_CONFIG_FILE_NAME "config" #define BABEL_TIMESTAMP_FILE_NAME "babel-timestamps" #define NUMBER_OF_FILES_TO_SHOW_PROGRESS_FOR 10 #define DEFAULT_LOCALE "en_US" #define FIZMO_COMMAND_PREFIX '/' #define Z_STACK_INCREMENT_SIZE 64 #define MAXIMUM_SAVEGAME_NAME_LENGTH 64 #define DEFAULT_SAVEGAME_FILENAME "savegame.qut" #define MAXIMUM_SCRIPT_FILE_NAME_LENGTH 64 #define DEFAULT_TRANSCRIPT_FILE_NAME "transcript.txt" #define DEFAULT_INPUT_COMMAND_FILE_NAME "input-script.txt" #define DEFAULT_RECORD_COMMAND_FILE_NAME "record.txt" #define DEFAULT_STREAM_2_LINE_WIDTH 78 // Note that some games (Aisle may be an example) format their output // (the title screen) according to the current screen width. #define DEFAULT_STREAM_2_LEFT_PADDING 1 #define DEFAULT_TRACE_FILE_NAME "tracelog.txt" #define MAXIMUM_STREAM_3_DEPTH 16 #define NUMBER_OF_REMEMBERED_COMMANDS 100 #define SYSTEM_CHARSET_ASCII 0 #define SYSTEM_CHARSET_ISO_8859_1 1 #define SYSTEM_CHARSET_UTF_8 2 // Assuming that the maximum dynamic memory of a story may be 100kb and // that we'll spare 10 Megabytes of RAM for undo purposes we can store // a maximum of 10240 undo steps. #define DEFAULT_MAX_UNDO_STEPS 10240 #define RANDOM_SEED_SIZE 32 // Ignorig this error makes "HugeCave.z8" work. #define IGNORE_TOO_LONG_PROPERTIES_ERROR 1 #define STREAM_2_PRELOAD_BUFFER_SIZE 1024 //#define THROW_SIGFAULT_ON_ERROR 1 struct configuration_option { char *name; char *value; }; #ifndef config_c_INCLUDED extern int system_charset; extern bool auto_adapt_upper_window; extern bool auto_open_upper_window; extern bool skip_active_routines_stack_check_warning; extern char config_true_value[]; extern char config_false_value[]; extern struct configuration_option configuration_options[]; extern bool foreground_color_was_changed; extern bool background_color_was_changed; #endif /* config_c_INCLUDED */ int set_configuration_value(char *key, char* new_value); int append_path_value(char *key, char *value_to_append); char *get_configuration_value(char *key); //char **get_valid_configuration_options(char *key, ...); bool is_valid_libfizmo_config_key(char *key); char *get_user_homedir(); #endif /* config_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/debugger.c000644 000765 000024 00000022374 12606024314 022563 0ustar00chrenderstaff000000 000000 /* debugger.c * * This file is part of fizmo. * * Copyright (c) 2011-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef debugger_c_INCLUDED #define debugger_c_INCLUDED #define DEBUGGER_INPUT_BUFFER_SIZE 1024 #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../tools/tracelog.h" #include "../tools/list.h" #include "debugger.h" #include "zpu.h" #include "streams.h" #include "text.h" #include "fizmo.h" #include "variable.h" #include "config.h" #include "stack.h" #define BUFFER_SIZE 256 // Must not be set below 256. // Pure PCs are saved until the story is available, meaning until the // function "debugger_story_has_been_loaded" has been called. From then on, // breakspoints are stored as pointers relative to z_mem in order to // speed up searching. list *pcs = NULL; list *breakpoints = NULL; bool story_has_been_loaded = false; int sockfd; struct sockaddr_in serv_addr; int newsockfd = -1; struct sockaddr_in cli_addr; socklen_t clilen; char buffer[BUFFER_SIZE]; static void debugger_output(int socked_fd, char *text) { write(socked_fd, text, strlen(text)); } void add_breakpoint(uint32_t breakpoint_pc) { static uint32_t *new_element; if (story_has_been_loaded == false) { if (pcs == NULL) pcs = create_list(); new_element = malloc(sizeof(uint32_t)); *new_element = breakpoint_pc; add_list_element(pcs, new_element); } else { if (breakpoints == NULL) breakpoints = create_list(); add_list_element(breakpoints, z_mem + breakpoint_pc); } } void debugger_story_has_been_loaded() { size_t index, len; uint32_t *element; char prefix_string[] = { FIZMO_COMMAND_PREFIX, 0 }; int flags; //add_breakpoint(0x200d0); story_has_been_loaded = true; if (pcs != NULL) { len = get_list_size(pcs); breakpoints = create_list(); for (index=0; index= 0) break; if (errno != EINTR) { perror("accept"); exit(-1); } } flags = fcntl(newsockfd, F_GETFL, 0); fcntl(newsockfd, F_SETFL, flags | O_NONBLOCK); debugger_output(newsockfd, "\nFizmo "); debugger_output(newsockfd, FIZMO_VERSION); debugger_output(newsockfd, " debugger.\n"); debugger_output(newsockfd, "Enter \""); debugger_output(newsockfd, prefix_string); debugger_output(newsockfd, "debug\" as story input to start debugging.\n\n"); } void do_breakpoint_actions() { if (breakpoints == NULL) return; if (list_contains_element(breakpoints, pc) == false) return; //debugger_output("\nReached breakpoint.\n"); debugger(); } void debugger() { int n, i; fd_set input_set; uint8_t dbg_z_instr; uint8_t dbg_z_instr_form; uint8_t dbg_number_of_operands; uint8_t *dbg_pc = pc; debugger_output(newsockfd, "\nEntering debugger.\n"); for(;;) { parse_opcode( &dbg_z_instr, &dbg_z_instr_form, &dbg_number_of_operands, &dbg_pc); sprintf(buffer, "\n: %6lx: %d %d %d\n", (long)(pc - z_mem), dbg_z_instr, dbg_z_instr_form, dbg_number_of_operands); debugger_output(newsockfd, buffer); for (i=0; i 2) buffer[n-2]=0; else *buffer = 0; debugger_output(newsockfd, "\n"); if ( (strcmp(buffer, "exit") == 0) || (strcmp(buffer, "quit") == 0) ) { break; } else if (strcmp(buffer, "help") == 0) { debugger_output(newsockfd, "Valid commands:\n"); debugger_output(newsockfd, " - stack: Dump stack contents.\n"); debugger_output(newsockfd, " - story: Print story file information.\n"); debugger_output(newsockfd, " - exit, quit: Leave debugger.\n"); } else if (strcmp(buffer, "stack") == 0) { i = 0; n = z_stack_index - z_stack; while (i < n) { if ( (i % 8) == 0) { if (i > 0) { debugger_output(newsockfd, "\n"); } sprintf(buffer, "%06x:", i); debugger_output(newsockfd, buffer); } sprintf(buffer, " %04x", z_stack[i]); debugger_output(newsockfd, buffer); i++; } debugger_output(newsockfd, "\n"); } else if (strcmp(buffer, "story") == 0) { sprintf(buffer, "Z-Story version: %d.\n", active_z_story->version); debugger_output(newsockfd, buffer); sprintf(buffer, "Release code: %d.\n", active_z_story->release_code); debugger_output(newsockfd, buffer); sprintf(buffer, "Serial code: %s.\n", active_z_story->serial_code); debugger_output(newsockfd, buffer); sprintf(buffer, "Checksum: %d.\n", active_z_story->checksum); debugger_output(newsockfd, buffer); sprintf(buffer, "Dynamic memory end: $%lx.\n", (long)(active_z_story->dynamic_memory_end - z_mem)); debugger_output(newsockfd, buffer); sprintf(buffer, "Static memory end: $%lx.\n", (long)(active_z_story->static_memory_end - z_mem)); debugger_output(newsockfd, buffer); sprintf(buffer, "High memory: $%lx.\n", (long)(active_z_story->high_memory - z_mem)); debugger_output(newsockfd, buffer); sprintf(buffer, "High memory end: $%lx.\n", (long)(active_z_story->high_memory_end - z_mem)); debugger_output(newsockfd, buffer); } else { debugger_output(newsockfd, "Unknown command \""); debugger_output(newsockfd, buffer); debugger_output(newsockfd, "\".\n"); } } debugger_output(newsockfd, "Leaving debugger.\n"); //close(newsockfd); return; } void debugger_interpreter_stopped() { int nof_elements; uint32_t **elements; int i; close(newsockfd); close(sockfd); if (pcs != NULL) { nof_elements = get_list_size(pcs); elements = (uint32_t**)delete_list_and_get_ptrs(pcs); for (i=0; i #include #define DEBUGGER_PORT 2048 #define DEBUGGER_IP_ADDRESS "127.0.0.1" void add_breakpoint(uint32_t breakpoint_pc); void debugger_story_has_been_loaded(); void do_breakpoint_actions(); void debugger(); void debugger_interpreter_stopped(); #endif /* debugger_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/filelist.c000644 000765 000024 00000114213 12606024314 022604 0ustar00chrenderstaff000000 000000 /* filelist.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include "filelist.h" #include "fizmo.h" #include "babel.h" #include "iff.h" #include "config.h" #include "../tools/tracelog.h" #include "../tools/types.h" #include "../tools/unused.h" #include "../tools/filesys.h" static int nof_files_found; static int nof_files_searched; static int nof_directories_searched; static char *serial_input = NULL; static int serial_input_size = 0; static char *title_input = NULL; static int title_input_size = 0; static char *author_input = NULL; static int author_input_size = 0; static char *language_input = NULL; static int language_input_size = 0; static char *description_input = NULL; static int description_input_size = 0; static char *filename_input = NULL; static int filename_input_size = 0; static char *blorbfile_input = NULL; static int blorbfile_input_size = 0; static char *filetype_input = NULL; static int filetype_input_size = 0; static char *unquoted_serial_input = NULL; static char *unquoted_title_input = NULL; static char *unquoted_author_input = NULL; static char *unquoted_language_input = NULL; static char *unquoted_description_input = NULL; static char *unquoted_filename_input = NULL; static char *unquoted_blorbfile_input = NULL; static char *unquoted_filetype_input = NULL; static char filetype_raw[] = "raw"; static char filetype_zblorb[] = "zblorb"; static uint16_t release_input; static long storyfile_timestamp_input; static int length_input; static uint16_t checksum_input; static int version_input; static z_file *in; static bool in_zfile_open = false; static int nof_files_searched; static bool show_progress = false; // 1,268,210 files in 243,656 directories. void new_file_searched(char *filename, char *UNUSED(dirname)) { float percentage; if (filename != NULL) { nof_files_searched++; percentage = ((double)nof_files_searched / (double)nof_files_found) * 100; printf("\rUpdating story-list, scanning %d files, %3.0lf%% done.", nof_files_found, percentage); fflush(stdout); //printf("file:%s\n", filename); } else { nof_directories_searched++; //printf("%s (%d)\n", dirname, nof_directories_searched); } if ( (nof_files_searched != 0) && (nof_files_searched % 100 == 0) ) { //printf("%d files.\n", nof_files); } } void free_unquote_buffers() { if (unquoted_serial_input != NULL) { free(unquoted_serial_input); unquoted_serial_input = NULL; } if (unquoted_title_input != NULL) { free(unquoted_title_input); unquoted_title_input = NULL; } if (unquoted_author_input != NULL) { free(unquoted_author_input); unquoted_author_input = NULL; } if (unquoted_language_input != NULL) { free(unquoted_language_input); unquoted_language_input = NULL; } if (unquoted_description_input != NULL) { free(unquoted_description_input); unquoted_description_input = NULL; } if (unquoted_filename_input != NULL) { free(unquoted_filename_input); unquoted_filename_input = NULL; } if (unquoted_blorbfile_input != NULL) { free(unquoted_blorbfile_input); unquoted_blorbfile_input = NULL; } if (unquoted_filetype_input != NULL) { free(unquoted_filetype_input); unquoted_filetype_input = NULL; } } void abort_entry_input() { if (serial_input != NULL) { free(serial_input); serial_input = NULL; } serial_input_size = 0; if (title_input != NULL) { free(title_input); title_input = NULL; } title_input_size = 0; if (author_input != NULL) { free(author_input); author_input = NULL; } author_input_size = 0; if (language_input != NULL) { free(language_input); language_input = NULL; } language_input_size = 0; if (description_input != NULL) { free(description_input); description_input = NULL; } description_input_size = 0; if (filename_input != NULL) { free(filename_input); filename_input = NULL; } filename_input_size = 0; if (blorbfile_input != NULL) { free(blorbfile_input); blorbfile_input = NULL; } blorbfile_input_size = 0; if (filetype_input != NULL) { free(filetype_input); filetype_input = NULL; } filetype_input_size = 0; free_unquote_buffers(); if (in_zfile_open == true) { fsi->closefile(in); in_zfile_open = false; } } void free_z_story_list_entry(struct z_story_list_entry *entry) { if (entry->serial != NULL) free(entry->serial); if (entry->title != NULL) free(entry->title); if (entry->author != NULL) free(entry->author); if (entry->language != NULL) free(entry->language); if (entry->description != NULL) free(entry->description); if (entry->filename != NULL) free(entry->filename); if (entry->blorbfile != NULL) free(entry->blorbfile); if (entry->filetype != NULL) free(entry->filetype); free(entry); } void free_z_story_list(struct z_story_list *story_list) { if (story_list == NULL) return; while (story_list->nof_entries > 0) { free_z_story_list_entry(story_list->entries[story_list->nof_entries - 1]); story_list->nof_entries--; } free(story_list->entries); free(story_list); } int parse_next_story_entry() { int index; int data; long offset; long size; index = 0; release_input = 0; while (index < 5) { if ((data = fsi->readchar(in)) == EOF) { if (index == 0) break; else { abort_entry_input(); TRACE_LOG("#0\n"); return -1; } } if (data == '\t') break; if (isdigit(data) == 0) { break; } release_input *= 10; release_input += (data - '0'); index++; } if ( (index == 5) && (fsi->readchar(in) != '\t') ) { abort_entry_input(); TRACE_LOG("#1\n"); return -1; } offset = fsi->getfilepos(in); while ((data = fsi->readchar(in)) != '\t') if (data == EOF) { abort_entry_input(); TRACE_LOG("#2\n"); return -1; } size = fsi->getfilepos(in) - offset - 1; if (ensure_mem_size(&serial_input, &serial_input_size, size + 2) == -1) { abort_entry_input(); TRACE_LOG("#3\n"); return -1; } if (size > 0) { fsi->setfilepos(in, -(size+1), SEEK_CUR); if (fsi->readchars(serial_input, size+1, in) != (size_t)size+1) { abort_entry_input(); TRACE_LOG("#4\n"); return -1; } } serial_input[size] = '\0'; unquoted_serial_input = unquote_special_chars(serial_input); index = 0; length_input = 0; do { if ((data = fsi->readchar(in)) == EOF) { abort_entry_input(); TRACE_LOG("#5\n"); return -1; } if (data != '\t') { if (isdigit(data) == 0) { break; } length_input *= 10; length_input += (data - '0'); } } while (data != '\t'); index = 0; checksum_input = 0; while (index < 5) { if ((data = fsi->readchar(in)) == EOF) { abort_entry_input(); TRACE_LOG("#6\n"); return -1; } if (data == '\t') break; if (isdigit(data) == 0) { TRACE_LOG("#7\n"); return -1; } checksum_input *= 10; checksum_input += (data - '0'); index++; } TRACE_LOG("cs:%d\n", checksum_input); if ( (index == 5) && (fsi->readchar(in) != '\t') ) { abort_entry_input(); TRACE_LOG("#8\n"); return -1; } if ((data = fsi->readchar(in)) == EOF) { abort_entry_input(); TRACE_LOG("#9\n"); return -1; } TRACE_LOG("data:%c\n", data); if (isdigit(data) == 0) { abort_entry_input(); TRACE_LOG("#10\n"); return -1; } version_input = data - '0'; TRACE_LOG("versioninput:%c\n", version_input); if (fsi->readchar(in) != '\t') { abort_entry_input(); TRACE_LOG("#11\n"); return -1; } offset = fsi->getfilepos(in); while ((data = fsi->readchar(in)) != '\t') if (data == EOF) { abort_entry_input(); TRACE_LOG("#12\n"); return -1; } size = fsi->getfilepos(in) - offset - 1; if (ensure_mem_size(&title_input, &title_input_size, size + 2) == -1) { abort_entry_input(); TRACE_LOG("#13\n"); return -1; } if (size > 0) { fsi->setfilepos(in, -(size+1), SEEK_CUR); if (fsi->readchars(title_input, size+1, in) != (size_t)size+1) { abort_entry_input(); TRACE_LOG("#14\n"); return -1; } } title_input[size] = '\0'; unquoted_title_input = unquote_special_chars(title_input); //printf("title:[%s]\n", title_input); offset = fsi->getfilepos(in); while ((data = fsi->readchar(in)) != '\t') if (data == EOF) { abort_entry_input(); TRACE_LOG("#15\n"); return -1; } size = fsi->getfilepos(in) - offset - 1; if (ensure_mem_size(&author_input, &author_input_size, size + 2) == -1) { abort_entry_input(); TRACE_LOG("#16\n"); return -1; } if (size > 0) { fsi->setfilepos(in, -(size+1), SEEK_CUR); if (fsi->readchars(author_input, size+1, in) != (size_t)size+1) { abort_entry_input(); TRACE_LOG("#17\n"); return -1; } } author_input[size] = '\0'; unquoted_author_input = unquote_special_chars(author_input); //printf("author:[%s]\n", author_input); offset = fsi->getfilepos(in); while ((data = fsi->readchar(in)) != '\t') if (data == EOF) { abort_entry_input(); TRACE_LOG("#15\n"); return -1; } size = fsi->getfilepos(in) - offset - 1; if (ensure_mem_size(&language_input, &language_input_size, size + 2) == -1) { abort_entry_input(); TRACE_LOG("#16\n"); return -1; } if (size > 0) { fsi->setfilepos(in, -(size+1), SEEK_CUR); if (fsi->readchars(language_input, size+1, in) != (size_t)size+1) { abort_entry_input(); TRACE_LOG("#17\n"); return -1; } } language_input[size] = '\0'; unquoted_language_input = unquote_special_chars(language_input); //printf("language:[%s]\n", language_input); offset = fsi->getfilepos(in); while ((data = fsi->readchar(in)) != '\t') if (data == EOF) { abort_entry_input(); TRACE_LOG("#18\n"); return -1; } size = fsi->getfilepos(in) - offset - 1; if (ensure_mem_size(&description_input, &description_input_size, size+2)==-1) { abort_entry_input(); TRACE_LOG("#19\n"); return -1; } if (size > 0) { fsi->setfilepos(in, -(size+1), SEEK_CUR); if (fsi->readchars(description_input, size+1, in) != (size_t)size+1) { abort_entry_input(); TRACE_LOG("#20\n"); return -1; } } description_input[size] = '\0'; unquoted_description_input = unquote_special_chars(description_input); //printf("desc:[%s]\n", description_input); offset = fsi->getfilepos(in); while ((data = fsi->readchar(in)) != '\t') if (data == EOF) { abort_entry_input(); TRACE_LOG("#21\n"); return -1; } size = fsi->getfilepos(in) - offset - 1; if (ensure_mem_size(&filename_input, &filename_input_size, size + 2) == -1) { abort_entry_input(); TRACE_LOG("#22\n"); return -1; } if (size > 0) { fsi->setfilepos(in, -(size+1), SEEK_CUR); if (fsi->readchars(filename_input, size+1, in) != (size_t)size+1) { abort_entry_input(); TRACE_LOG("#23\n"); return -1; } } filename_input[size] = '\0'; unquoted_filename_input = unquote_special_chars(filename_input); offset = fsi->getfilepos(in); while ((data = fsi->readchar(in)) != '\t') if (data == EOF) { abort_entry_input(); TRACE_LOG("#24\n"); return -1; } size = fsi->getfilepos(in) - offset - 1; if (ensure_mem_size(&blorbfile_input, &blorbfile_input_size, size + 2) == -1) { abort_entry_input(); TRACE_LOG("#25\n"); return -1; } if (size > 0) { fsi->setfilepos(in, -(size+1), SEEK_CUR); if (fsi->readchars(blorbfile_input, size+1, in) != (size_t)size+1) { abort_entry_input(); TRACE_LOG("#26\n"); return -1; } } blorbfile_input[size] = '\0'; unquoted_blorbfile_input = unquote_special_chars(blorbfile_input); offset = fsi->getfilepos(in); while ((data = fsi->readchar(in)) != '\t') if (data == EOF) { abort_entry_input(); TRACE_LOG("#27\n"); return -1; } size = fsi->getfilepos(in) - offset - 1; if (ensure_mem_size(&filetype_input, &filetype_input_size, size + 2) == -1) { abort_entry_input(); TRACE_LOG("#28\n"); return -1; } if (size > 0) { fsi->setfilepos(in, -(size+1), SEEK_CUR); if (fsi->readchars(filetype_input, size+1, in) != (size_t)size+1) { abort_entry_input(); TRACE_LOG("#29\n"); return -1; } } filetype_input[size] = '\0'; unquoted_filetype_input = unquote_special_chars(filetype_input); index = 0; storyfile_timestamp_input = 0; while (index < 16) { if ((data = fsi->readchar(in)) == EOF) { abort_entry_input(); TRACE_LOG("#30\n"); return -1; } if (data == '\n') { fsi->unreadchar(data, in); break; } if (isdigit(data) == 0) { break; } storyfile_timestamp_input *= 10; storyfile_timestamp_input += (data - '0'); index++; } //printf("filename:[%s]\n", filename_input); /* printf("%d|%s|%d|%s|%s|%s|%s\n", release_input, serial_input, checksum_input, title_input, author_input, description_input, filename_input); */ while ((data = fsi->readchar(in)) != '\n') if (data == EOF) break; return 0; } static char *get_filelist_name() { char *dir_name = NULL; char *filename; #ifndef DISABLE_CONFIGFILES dir_name = get_fizmo_config_dir_name(); #endif // DISABLE_CONFIGFILES if (dir_name == NULL) return NULL; filename = malloc(strlen(dir_name) + 16); strcpy(filename, dir_name); strcat(filename, "/story-list.txt"); return filename; } static z_file *open_story_list(bool write_enabled) { char *filename; z_file *result; if ((filename = get_filelist_name()) == NULL) return NULL; result = fsi->openfile(filename, FILETYPE_DATA, write_enabled == true ? FILEACCESS_WRITE : FILEACCESS_READ); free(filename); return result; } struct z_story_list_entry *store_current_entry() { struct z_story_list_entry *result; if ((result = malloc(sizeof(struct z_story_list_entry))) == NULL) return NULL; //printf("storing %s, %d, %d\n", serial_input, release_input, length_input); result->release_number = release_input; result->serial = fizmo_strdup(unquoted_serial_input); result->z_code_version = version_input; result->length = length_input; result->checksum = checksum_input; result->title = fizmo_strdup(unquoted_title_input); result->author = fizmo_strdup(unquoted_author_input); result->language = fizmo_strdup(unquoted_language_input); result->description = fizmo_strdup(unquoted_description_input); result->filename = fizmo_strdup(unquoted_filename_input); result->blorbfile = fizmo_strdup(unquoted_blorbfile_input); result->filetype = fizmo_strdup(unquoted_filetype_input); //result->entry_line_index = line_index; result->storyfile_timestamp = storyfile_timestamp_input; return result; } struct z_story_list_entry *add_entry_to_story_list( struct z_story_list *story_list, char *title, char *author, char *language, char *description, char *serial, int version, int length, uint16_t checksum, uint16_t release, char *story_filename, char *story_blorbfile, char *story_filetype, long storyfile_timestamp) //, int line_index) { void *ptr; struct z_story_list_entry *result; int insert_index; //printf("Adding %d:%s\n", story_list->nof_entries, story_filename); TRACE_LOG("Adding new story entry #%d: %s, \"%s\".\n", story_list->nof_entries, story_filename, description != NULL ? description : ""); if (story_list->nof_entries == story_list->nof_entries_allocated) { if ((ptr = (struct z_story_list_entry**)fizmo_realloc( story_list->entries, sizeof(struct z_story_list_entry*) * (story_list->nof_entries_allocated + 10))) == NULL) { TRACE_LOG("Cannot realloc.\n"); return NULL; } story_list->entries = ptr; story_list->nof_entries_allocated += 10; } if ((result = malloc(sizeof(struct z_story_list_entry))) == NULL) { TRACE_LOG("Cannot malloc.\n"); return NULL; } result->release_number = release; result->serial = fizmo_strdup(serial); result->z_code_version = version; result->length = length; result->checksum = checksum; result->title = fizmo_strdup(title); result->author = fizmo_strdup(author); result->language = fizmo_strdup(language); result->description = fizmo_strdup(description); result->filename = fizmo_strdup(story_filename); result->blorbfile = (story_blorbfile != NULL ? fizmo_strdup(story_blorbfile) : NULL); result->filetype = fizmo_strdup(story_filetype); result->storyfile_timestamp = storyfile_timestamp; insert_index = 0; while (insert_index < story_list->nof_entries) { if (strcmp(result->title, story_list->entries[insert_index]->title) < 0) break; insert_index++; } TRACE_LOG("Insert index: %d.\n", insert_index); if (insert_index < story_list->nof_entries) { TRACE_LOG("Move to %p from %p.\n", story_list->entries + insert_index + 1, story_list->entries + insert_index); memmove( story_list->entries + insert_index + 1, story_list->entries + insert_index, (story_list->nof_entries - insert_index) * sizeof(struct z_story_list_entry*)); } story_list->entries[insert_index] = result; story_list->nof_entries++; return result; } struct z_story_list *get_empty_z_story_list() { struct z_story_list *result; if ((result = malloc(sizeof(struct z_story_list))) == NULL) return NULL; result->nof_entries_allocated = 0; result->nof_entries = 0; result->entries = NULL; return result; } struct z_story_list *get_z_story_list() { int data; struct z_story_list *result = get_empty_z_story_list(); if ((in = open_story_list(false)) == NULL) return result; in_zfile_open = true; for(;;) { if ((data = fsi->readchar(in)) == EOF) { abort_entry_input(); return result; } else fsi->unreadchar(data, in); if (parse_next_story_entry() == -1) { abort_entry_input(); return result; } add_entry_to_story_list( result, unquoted_title_input, unquoted_author_input, unquoted_language_input, unquoted_description_input, unquoted_serial_input, version_input, length_input, checksum_input, release_input, unquoted_filename_input, unquoted_blorbfile_input, unquoted_filetype_input, storyfile_timestamp_input); } } // This method reads story info from a parsed list. For other purposes, see // function "get_z_story_entry_from_list". static struct z_story_list_entry *get_z_story_entry(char *serial, uint16_t release, int length, struct z_story_list *story_list) { struct z_story_list_entry *entry; int i = 0; if (story_list == NULL) return NULL; //printf("looking for: %s, %d, %d\n", serial, release, length); while (i < story_list->nof_entries) { entry = story_list->entries[i]; /* printf("cmp(%d): %s/%s, %d/%d, %d/%d\n", i,entry->serial, serial, entry->release_number, release, entry->length, length); */ if ( (strcmp(entry->serial, serial) == 0) && (entry->release_number == release) && (entry->length == length) ) { //printf("Found\n"); return entry; } i++; } return NULL; } // This method will parse entries in the story-list until a matching one // has been found. It will discard all non-matches and return only a single // entry, making it useful for retrieving data about a single story when // the list is not needed. To get an entry from an already parsed list, see // "get_z_story_entry" instead. struct z_story_list_entry *get_z_story_entry_from_list(char *serial, uint16_t release, uint16_t checksum) { struct z_story_list_entry *result; int data; if ((in = open_story_list(false)) == NULL) return NULL; in_zfile_open = true; for(;;) { if ((data = fsi->readchar(in)) == EOF) { abort_entry_input(); return NULL; } else fsi->unreadchar(data, in); if (parse_next_story_entry() == -1) { abort_entry_input(); return NULL; } if ( (strcmp(serial_input, serial) == 0) && (release_input == release) && (checksum_input == checksum) ) { result = store_current_entry(); //line_index); abort_entry_input(); return result; } } } int remove_entry_from_list(struct z_story_list *story_list, struct z_story_list_entry *entry) { int entry_index = 0; while (entry_index < story_list->nof_entries) { if (story_list->entries[entry_index] == entry) break; entry_index++; } if (entry_index >= story_list->nof_entries) return -1; if (entry_index + 1 < story_list->nof_entries) { memmove( story_list->entries + entry_index, story_list->entries + entry_index + 1, sizeof(struct z_story_list_entry*) * (story_list->nof_entries - entry_index - 1)); } story_list->nof_entries--; return 0; } static int detect_and_add_z_file(char *filename, char *blorb_filename, struct babel_info *babel, struct z_story_list *story_list) { z_file *infile; uint8_t buf[30]; uint32_t val; char serial[7]; int version; uint16_t checksum; uint16_t release; struct babel_story_info *b_info = NULL; char *title; char *author; char *language; char *description; char *ptr, *ptr2; int length; time_t storyfile_timestamp; char *empty_string = ""; struct z_story_list_entry *entry; int chunk_length = -1; struct babel_info *file_babel = NULL; bool file_is_zblorb; char *cwd = NULL; char *abs_filename = NULL; if (filename == NULL) return -1; if (filename[0] != '/') { cwd = fsi->get_cwd(); abs_filename = fizmo_malloc(strlen(cwd) + strlen(filename) + 2); sprintf(abs_filename, "%s/%s", cwd, filename); } else abs_filename = filename; if ((infile = fsi->openfile(abs_filename, FILETYPE_DATA, FILEACCESS_READ)) == NULL) { if (cwd != NULL) { free(cwd); free(abs_filename); } return -1; } if ((storyfile_timestamp = fsi->get_last_file_mod_timestamp(infile)) < 0) { fsi->closefile(infile); if (cwd != NULL) { free(cwd); free(abs_filename); } return -1; } if (fsi->readchars(buf, 30, infile) != 30) { fsi->closefile(infile); if (cwd != NULL) { free(cwd); free(abs_filename); } return -1; } if (memcmp(buf, "FORM", 4) == 0) { // IFF file. if ( (is_form_type(infile, "IFRS") != true) || (find_chunk("ZCOD", infile) == -1) ) { fsi->closefile(infile); if (cwd != NULL) { free(cwd); free(abs_filename); } return -1; } file_is_zblorb = true; if (find_chunk("IFmd", infile) == 0) { read_chunk_length(infile); chunk_length = get_last_chunk_length(); file_babel = load_babel_info_from_blorb( infile, chunk_length, abs_filename, storyfile_timestamp); babel = file_babel; } find_chunk("ZCOD", infile); read_chunk_length(infile); length = get_last_chunk_length(); if (fsi->readchars(buf, 30, infile) != 30) { fsi->closefile(infile); if (cwd != NULL) { free(cwd); free(abs_filename); } return -1; } } else { fsi->setfilepos(infile, 0, SEEK_END); length = fsi->getfilepos(infile); file_is_zblorb = false; } fsi->closefile(infile); val = (buf[16] << 24) | (buf[17] << 16) | (buf[18] << 8) | (buf[19]); if ( ((val & 0xbe00f0f0) != 0x3030) || (*buf < 1) || (*buf > 8) ) { if (cwd != NULL) { free(cwd); free(abs_filename); } return -2; } version = *buf; memcpy(serial, buf + 0x12, 6); serial[6] = '\0'; checksum = (buf[0x1c] << 8) | buf[0x1d]; release = (buf[2] << 8) | buf[3]; if ((entry = get_z_story_entry(serial, release, length, story_list)) != NULL) { // We already have the story in our story-list. If we have a raw file // we can just quit if the support-blorbfilename is the same (raw files // don't contain metadata which might have changed). if ( (file_is_zblorb == false) && ( ( (entry->blorbfile == NULL) && (blorb_filename != NULL) ) // || (Don't delete blorb file) // ( (blorb_filename == NULL) && (entry->blorbfile != NULL) ) || ( (entry->blorbfile != NULL) && (blorb_filename != NULL) && (strcmp(blorb_filename, entry->blorbfile) == 0) ) ) ) { if (cwd != NULL) { free(cwd); free(abs_filename); } return -3; } //printf("%ld / %ld\n", storyfile_timestamp, entry->storyfile_timestamp); // In case new file is a zblorb and we have save a raw file, remove the // raw and keep the blorb (so we can get images and sound). We'll also // re-read the file contents if the file has changed (metadata might // have been altered). if ( (strcmp(entry->filetype, filetype_raw) == 0) || (storyfile_timestamp > entry->storyfile_timestamp) ) { remove_entry_from_list(story_list, entry); //printf("%s...\n", abs_filename); } else { if (cwd != NULL) { free(cwd); free(abs_filename); } return -4; } } ptr2 = NULL; if ((b_info = get_babel_story_info( release, serial, checksum, babel, file_is_zblorb)) != NULL) { title = (b_info->title == NULL ? empty_string : b_info->title); author = (b_info->author == NULL ? empty_string : b_info->author); language = (b_info->language == NULL ? empty_string : b_info->language); description = (b_info->description != NULL) ? b_info->description : empty_string; } else { if ((title = strrchr(abs_filename, '/')) == NULL) title = abs_filename; else title++; if ((ptr = strrchr(title, '.')) != NULL) { TRACE_LOG("strdup: %s\n", title); ptr2 = fizmo_strdup(title); ptr = strrchr(ptr2, '.'); if ( ( (strlen(ptr) == 3) && (ptr[1] == 'z') && (isdigit(ptr[2]) != 0) ) || (strcasecmp(ptr, ".dat") == 0) || (strcasecmp(ptr, ".zblorb") == 0) ) *ptr = '\0'; *ptr2 = toupper(*ptr2); title = ptr2; } author = empty_string; language = empty_string; description = empty_string; } add_entry_to_story_list( story_list, title, author, language, description, serial, version, length, checksum, release, abs_filename, file_is_zblorb ? NULL : blorb_filename, file_is_zblorb ? filetype_zblorb : filetype_raw, storyfile_timestamp); if (b_info != NULL) free_babel_story_info(b_info); if (ptr2 != NULL) free(ptr2); if (file_babel != NULL) free_babel_info(file_babel); if (cwd != NULL) { free(cwd); free(abs_filename); } return 0; } static int count_files(char *abs_dir_name, bool recursive) { z_dir *current_dir; struct z_dir_ent z_dir_entry; char *dirname = NULL; int dirname_size = 0; int len; int result = 0; char *cwd = fsi->get_cwd(NULL, 0); if ((fsi->ch_dir(abs_dir_name)) == -1) { free(cwd); return 0; } TRACE_LOG("Counting files for \"%s\".\n", abs_dir_name); if ((current_dir = fsi->open_dir(".")) == NULL) { printf("\"%s\":\n", abs_dir_name); perror("could not opendir"); fsi->ch_dir(cwd); free(cwd); return 0; } while (fsi->read_dir(&z_dir_entry, current_dir) == 0) { if ( (strcmp(z_dir_entry.d_name, ".") == 0) || (strcmp(z_dir_entry.d_name, "..") == 0) ) continue; len = strlen(abs_dir_name) + strlen(z_dir_entry.d_name) + 2; if (len > dirname_size) { dirname = (char*)fizmo_realloc(dirname, len); dirname_size = len; } strcpy(dirname, abs_dir_name); if (dirname[strlen(dirname) - 1] != '/') strcat(dirname, "/"); strcat(dirname, z_dir_entry.d_name); if (fsi->is_filename_directory(z_dir_entry.d_name) == true) { if (recursive == true) result += count_files(dirname, true); } else result++; } if (dirname != NULL) free(dirname); fsi->close_dir(current_dir); fsi->ch_dir(cwd); free(cwd); //printf("result:%d\n", result); TRACE_LOG("count-result: %d\n", result); return result; } static int search_dir(char *abs_dir_name, void (*update_func)(char *filename, char *dirname), struct z_story_list *story_list, bool recursive, struct babel_info *babel) { z_dir *current_dir; struct z_dir_ent z_dir_entry; char *dirname = NULL; int dirname_size = 0; int len; char *cwd = fsi->get_cwd(); TRACE_LOG("Trying to readdir \"%s\".\n", abs_dir_name); if ((fsi->ch_dir(abs_dir_name)) == -1) { return -1; } if ((current_dir = fsi->open_dir(".")) == NULL) { printf("\"%s\":\n", abs_dir_name); perror("could not opendir"); return -1; } if ( (show_progress == true) && (update_func != NULL) ) update_func(NULL, abs_dir_name); while (fsi->read_dir(&z_dir_entry, current_dir) == 0) { if ( (strcmp(z_dir_entry.d_name, ".") == 0) || (strcmp(z_dir_entry.d_name, "..") == 0) ) continue; len = strlen(abs_dir_name) + strlen(z_dir_entry.d_name) + 2; if (len > dirname_size) { dirname = (char*)fizmo_realloc(dirname, len); dirname_size = len; } strcpy(dirname, abs_dir_name); if (dirname[strlen(dirname) - 1] != '/') strcat(dirname, "/"); strcat(dirname, z_dir_entry.d_name); if (fsi->is_filename_directory(z_dir_entry.d_name) == true) { if (recursive == true) search_dir(dirname, update_func, story_list, true, babel); } else { if ( (show_progress == true) && (update_func != NULL) ) update_func(z_dir_entry.d_name, NULL); detect_and_add_z_file(dirname, NULL, babel, story_list); } } if (dirname != NULL) free(dirname); fsi->close_dir(current_dir); fsi->ch_dir(cwd); free(cwd); return 0; } void build_filelist(char *root_dir, struct z_story_list *story_list, bool recursive, struct babel_info *babel) { char *cwd = fsi->get_cwd(); char *absrootdir; if (root_dir == NULL) { TRACE_LOG("Building filelist for rootdir: \"/\".\n"); search_dir("/", &new_file_searched, story_list, recursive, babel); } else { TRACE_LOG("Building filelist for rootdir: \"%s\".\n", root_dir); if ((fsi->ch_dir(root_dir)) == -1) detect_and_add_z_file(root_dir, NULL, babel, story_list); else { // Avoid relative names like "./zork1.z3". absrootdir = fsi->get_cwd(NULL, 0); search_dir(absrootdir, &new_file_searched, story_list, recursive, babel); free(absrootdir); } } fsi->ch_dir(cwd); free(cwd); } void save_story_list(struct z_story_list *story_list) { z_file *out; struct z_story_list_entry *entry; int i = 0; char *quoted_serial = NULL; char *quoted_title = NULL; char *quoted_author = NULL; char *quoted_language = NULL; char *quoted_description = NULL; char *quoted_filename = NULL; char *quoted_blorbname = NULL; char *quoted_filetype= NULL; if ((out = open_story_list(true)) == NULL) return; while (i < story_list->nof_entries) { entry = story_list->entries[i++]; quoted_serial = quote_special_chars(entry->serial); quoted_title = quote_special_chars(entry->title); quoted_author = quote_special_chars(entry->author); quoted_language = quote_special_chars(entry->language); quoted_description = quote_special_chars(entry->description); quoted_filename = quote_special_chars(entry->filename); quoted_blorbname = quote_special_chars(entry->blorbfile); quoted_filetype = quote_special_chars(entry->filetype); //printf("%d/%d\n", i, story_list->nof_entries); fsi->fileprintf( out, "%d\t%s\t%d\t%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%ld\n", entry->release_number, quoted_serial, entry->length, entry->checksum, entry->z_code_version, (quoted_title == NULL ? "" : quoted_title), (quoted_author == NULL ? "" : quoted_author), (quoted_language == NULL ? "" : quoted_language), (quoted_description == NULL ? "" : quoted_description), quoted_filename, (quoted_blorbname == NULL ? "" : quoted_blorbname), quoted_filetype, entry->storyfile_timestamp); if (quoted_serial != NULL) free(quoted_serial); if (quoted_title != NULL) free(quoted_title); if (quoted_author != NULL) free(quoted_author); if (quoted_language != NULL) free(quoted_language); if (quoted_description != NULL) free(quoted_description); if (quoted_filename != NULL) free(quoted_filename); if (quoted_blorbname != NULL) free(quoted_blorbname); if (quoted_filetype != NULL) free(quoted_filetype); } fsi->closefile(out); } struct z_story_list *update_fizmo_story_list() { #ifdef DISABLE_CONFIGFILES return NULL; #else // DISABLE_CONFIGFILES struct z_story_list *result; struct z_story_list_entry *entry; char *str, *str_copy, *path; z_file *file; struct babel_info *babel; int i; nof_files_found = 0; nof_files_searched = 0; nof_directories_searched = 0; ensure_dot_fizmo_dir_exists(); babel = load_babel_info(); if (babel_files_have_changed(babel) == true) { // Don't load current list of story, rebuild index with the newly // changed babel data. result = get_empty_z_story_list(); store_babel_info_timestamps(babel); } else { // Babel data is the same, use pre-indexed story list. result = get_z_story_list(); i = 0; while (i < result->nof_entries) { entry = result->entries[i]; if ((file = fsi->openfile( entry->filename, FILETYPE_DATA, FILEACCESS_READ)) == NULL) remove_entry_from_list(result, entry); else { fsi->closefile(file); i++; } } } if ((str = getenv("ZCODE_PATH")) == NULL) str = getenv("INFOCOM_PATH"); if (str != NULL) set_configuration_value("z-code-path", str); if ((str = getenv("ZCODE_ROOT_PATH")) != NULL) set_configuration_value("z-code-root-path", str); if ((str = get_configuration_value("z-code-path")) != NULL) { path = strtok(str, ":"); while (path != NULL) { TRACE_LOG("Counting for token \"%s\".\n", path); nof_files_found += count_files(path, false); path = strtok(NULL, ":"); } } if ((str = get_configuration_value("z-code-root-path")) != NULL) { str_copy = strdup(str); path = strtok(str_copy, ":"); while (path != NULL) { TRACE_LOG("Counting for token \"%s\".\n", path); nof_files_found += count_files(path, true); path = strtok(NULL, ":"); } free(str_copy); } TRACE_LOG("nof_files_found: %d, %d\n", nof_files_found, NUMBER_OF_FILES_TO_SHOW_PROGRESS_FOR); if (nof_files_found >= NUMBER_OF_FILES_TO_SHOW_PROGRESS_FOR) show_progress = true; else show_progress = false; //printf("\n"); // newline for \r-progress indicator //build_filelist(".", result, false, babel); if ((str = get_configuration_value("z-code-path")) != NULL) { str_copy = strdup(str); path = strtok(str_copy, ":"); while (path != NULL) { build_filelist(path, result, false, babel); path = strtok(NULL, ":"); } free(str_copy); } if ((str = get_configuration_value("z-code-root-path")) != NULL) { str_copy = strdup(str); path = strtok(str_copy, ":"); while (path != NULL) { build_filelist(path, result, true, babel); path = strtok(NULL, ":"); } free(str_copy); } if (show_progress == true) printf("\n"); TRACE_LOG("noffiles: %d\n", result->nof_entries); save_story_list(result); store_babel_info_timestamps(babel); free_babel_info(babel); return result; #endif // DISABLE_CONFIGFILES } void detect_and_add_single_z_file(char *input_filename, char *blorb_filename) { struct z_story_list *z_story_list = get_z_story_list(); struct babel_info *babel = load_babel_info(); TRACE_LOG("noffiles: %d\n", z_story_list->nof_entries); detect_and_add_z_file(input_filename, blorb_filename, babel, z_story_list); TRACE_LOG("noffiles: %d\n", z_story_list->nof_entries); save_story_list(z_story_list); store_babel_info_timestamps(babel); free_z_story_list(z_story_list); free_babel_info(babel); } void search_directory(char *absolute_dirname, bool recursive) { struct z_story_list *z_story_list = get_z_story_list(); struct babel_info *babel = load_babel_info(); #ifndef DISABLE_CONFIGFILES ensure_dot_fizmo_dir_exists(); #endif // DISABLE_CONFIGFILES if ((nof_files_found = count_files(absolute_dirname, recursive)) > 0) { show_progress = true; nof_files_searched = 0; nof_directories_searched = 0; build_filelist(absolute_dirname, z_story_list, recursive, babel); } //printf("%d, %s\n", z_story_list->nof_entries, absolute_dirname); save_story_list(z_story_list); store_babel_info_timestamps(babel); free_z_story_list(z_story_list); free_babel_info(babel); } fizmo-0.7.10/libfizmo/src/interpreter/filelist.h000644 000765 000024 00000004723 12606024314 022615 0ustar00chrenderstaff000000 000000 /* filelist.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef filelist_h_INCLUDED #define filelist_h_INCLUDED #include "../tools/types.h" struct z_story_list { struct z_story_list_entry **entries; int nof_entries_allocated; int nof_entries; }; struct z_story_list_entry { uint16_t release_number; char *serial; int length; uint16_t checksum; uint8_t z_code_version; char *title; char *author; char *language; char *description; char *filename; char *blorbfile; char *filetype; long storyfile_timestamp; }; void free_z_story_list(struct z_story_list *story_list); void free_z_story_list_entry(struct z_story_list_entry *entry); struct z_story_list *get_z_story_list(); struct z_story_list_entry *get_z_story_entry_from_list(char *serial, uint16_t release, uint16_t checksum); struct z_story_list *update_fizmo_story_list(); void detect_and_add_single_z_file(char *input_filename, char *blorb_filename); void search_directory(char *absolute_dirname, bool recursive); #endif /* filelist_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/fizmo.c000644 000765 000024 00000112005 12606024314 022112 0ustar00chrenderstaff000000 000000 /* fizmo.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef fizmo_c_INCLUDED #define fizmo_c_INCLUDED #include #include #include #include //#include #include #include #include "fizmo.h" #include "zpu.h" #include "text.h" #include "mathemat.h" #include "stack.h" #include "misc.h" #include "streams.h" #include "config.h" #include "savegame.h" #include "output.h" #include "iff.h" #include "filelist.h" #include "routine.h" #include "variable.h" #include "undo.h" #include "blorb.h" #include "hyphenation.h" #include "undo.h" #include "../tools/z_ucs.h" #include "../tools/types.h" #include "../tools/i18n.h" #include "../tools/tracelog.h" #include "../tools/filesys.h" #include "../tools/unused.h" #include "../locales/libfizmo_locales.h" #ifndef DISABLE_OUTPUT_HISTORY #include "history.h" #endif // DISABLE_OUTPUT_HISTORY #ifndef DISABLE_BLOCKBUFFER #include "blockbuf.h" #endif // DISABLE_BLOCKBUFFER #ifdef ENABLE_DEBUGGER #include "debugger.h" #endif // ENABLE_DEBUGGER #define MAX_CONFIG_OPTION_LENGTH 512 struct z_story *active_z_story; struct z_screen_interface *active_interface = NULL; struct z_sound_interface *active_sound_interface = NULL; uint8_t ver = 0; uint8_t *header_extension_table; uint8_t header_extension_table_size; //static int16_t maximum_z_story_size[] // = { 128, 128, 128, 256, 256, 512, 512, 512 }; static int enable_script_after_start = 0; #ifndef DISABLE_CONFIGFILES char *fizmo_config_dir_name = NULL; char *xdg_config_home = NULL; static char *default_xdg_config_home = DEFAULT_XDG_CONFIG_HOME; static char *default_xdg_config_dirs = DEFAULT_XDG_CONFIG_DIRS; static bool fizmo_config_dir_name_initialized = false; static bool xdg_config_dir_name_initialized = false; static bool config_files_were_parsed = false; #endif // DISABLE_CONFIGFILES #ifndef DISABLE_BLOCKBUFFER /*@null@*/ BLOCKBUF *upper_window_buffer = NULL; #endif // DISABLE_BLOCKBUFFER #ifndef DISABLE_OUTPUT_HISTORY void (*paragraph_attribute_function)(int *parameter1, int *parameter2) = NULL; void (*paragraph_removal_function)(int parameter1, int parameter2) = NULL; #endif // DISABLE_OUTPUT_HISTORY // "load_z_story" returns malloc()ed z_story, may be freed using free_z_story(). static struct z_story *load_z_story(z_file *story_stream, z_file *blorb_stream) { struct z_story *result; int z_file_version; char *ptr, *ptr2; char *cwd = NULL; long len; long story_size = -1; char *absolute_directory_name; char *story_filename; #ifndef DISABLE_FILELIST struct z_story_list_entry *story_data; #endif result = (struct z_story*)fizmo_malloc(sizeof(struct z_story)); result->z_story_file = story_stream; // First, check if the input file is a blorb file. if (detect_simple_iff_stream(story_stream) == true) { // Check if the supplied z-code IFF file actually contains code. if ( (is_form_type(result->z_story_file, "IFRS") != true) || (find_chunk("ZCOD", result->z_story_file) == -1) ) { // The IFF file we've received is not an (Z-)executable blorb file // so there's nothing we can start. The IFF file can also not be // a savegame, since this case has already been handled in fizmo_start. TRACE_LOG("No executable blorb."); return NULL; } // The supplied first file is a valid .zblorb file so we can initiate // the story from it. if (read_chunk_length(result->z_story_file) == -1) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_RETURNED_ERROR_CODE_P1D, -0x0101, "read_chunk_length", errno); if ((result->story_file_exec_offset = fsi->getfilepos(result->z_story_file)) == -1) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_RETURNED_ERROR_CODE_P1D, -0x0101, "getfilepos", errno); story_size = get_last_chunk_length(); // Since we've got a .zblorb file, we also already know where to load // resources from. result->blorb_file = result->z_story_file; } else { // In case we don't have a .zblorb supplied as first argument, we should // have gotten some .z? file. We'll try to open it again, this time as // a regular file instead of an IFF file. if ((fsi->setfilepos(result->z_story_file, 0, SEEK_END)) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_RETURNED_ERROR_CODE_P1D, -0x0101, "setfilepos", errno); if ((story_size = fsi->getfilepos(result->z_story_file)) == -1) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_RETURNED_ERROR_CODE_P1D, -0x0101, "getfilepos", errno); result->story_file_exec_offset = 0; result->blorb_file = blorb_stream; } result->blorb_map = result->blorb_file != NULL ? active_blorb_interface->init_blorb_map(result->blorb_file) : NULL; // At this point we're sure that "input_filename" contains either the name // of a .zcode or a .zblorb file. ptr = fizmo_strdup(story_stream->filename); if ((ptr2 = strrchr(ptr, '/')) != NULL) { *ptr2 = '\0'; ptr2++; cwd = fsi->get_cwd(); fsi->ch_dir(ptr); } else { ptr2 = ptr; } absolute_directory_name = fsi->get_cwd(); TRACE_LOG("absdirname: %s.\n", absolute_directory_name); len = strlen(absolute_directory_name) + strlen(ptr2) + 2; // "absolute_file_name" may be required to locate ".SND" files. result->absolute_file_name = (char*)fizmo_malloc(len); strcpy(result->absolute_file_name, absolute_directory_name); free(absolute_directory_name); strcat(result->absolute_file_name, "/"); strcat(result->absolute_file_name, ptr2); if (cwd != NULL) fsi->ch_dir(cwd); free(cwd); free(ptr); if ((fsi->setfilepos( result->z_story_file, result->story_file_exec_offset, SEEK_SET)) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_RETURNED_ERROR_CODE_P1D, -0x0101, "setfilepos", errno); if ((z_file_version = fsi->readchar(result->z_story_file)) == EOF) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_ERROR_READING_FIRST_STORY_BYTE_FROM_P0S, -0x0102, story_stream->filename); result->version = (uint8_t)z_file_version; TRACE_LOG("Game is version %d.\n", result->version); if ((result->version < 1) || (result->version > 8)) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_UNKNOWN_STORY_VERSION_P0D, -0x0103, (long int)result->version); /* // No size check any more: Even the original Beyond Zork breaks the official // size barrier. if (story_size > (long)maximum_z_story_size[result->version-1] * 1024l) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_STORY_FILE_OF_SIZE_P0D_TOO_LARGE_ONLY_P1D_BYTES_ALLOWED, -0x0104, (long int)story_size, (long int)maximum_z_story_size[result->version-1] * 1024l); */ result->memory = (uint8_t*)fizmo_malloc((size_t)story_size); *(result->memory) = result->version; TRACE_LOG("Loading %li bytes from \"%s\".\n", story_size-1, story_stream->filename); if (fsi->readchars( result->memory+1, (size_t)(story_size - 1), result->z_story_file) != (size_t)(story_size - 1)) { story_filename = strdup(story_stream->filename); if (fsi->closefile(result->z_story_file) == EOF) (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_ERROR_WHILE_CLOSING_FILE_P0S, -0x0107, story_stream->filename); i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_ERROR_WHILE_READING_FILE_P0S, -0x0106, story_filename); free(story_filename); } result->high_memory_end = result->memory + story_size - 1; TRACE_LOG("High memory end: %x.\n", result->high_memory_end - result->memory); //result->memory[0x1e] = 1; //result->memory[0x1f] = 2; result->static_memory = result->memory + load_word(result->memory + 0xe); result->dynamic_memory_end = result->static_memory - 1; TRACE_LOG("Dynamic memory end: %x\n", result->dynamic_memory_end - result->memory); result->static_memory_end = result->memory + (story_size > 0xffff ? 0xffff : story_size); TRACE_LOG("Static memory end: %x\n", result->static_memory_end - result->memory); result->high_memory = result->memory + load_word(result->memory + 0x4); TRACE_LOG("High memory: %x\n", result->high_memory - result->memory); result->global_variables = result->memory + load_word(result->memory + 0xc); if (result->version >= 6) { result->routine_offset= 8 * load_word(result->memory + 0x28); result->string_offset = 8 * load_word(result->memory + 0x2a); } else { result->routine_offset= 0; result->string_offset = 0; } result->abbreviations_table = result->memory + load_word(result->memory+0x18); result->property_defaults = result->memory + load_word(result->memory+0xa)-2; if (result->version <= 3) { result->object_size = 9; result->object_tree = result->memory + load_word(result->memory + 0xa) + 31*2 - result->object_size; result->maximum_object_number = 255; result->maximum_property_number = 31; result->maximum_attribute_number = 31; result->object_node_number_index = 4; result->object_property_index = 7; } else { result->object_size = 14; result->object_tree = result->memory + load_word(result->memory + 0xa) + 63*2 - result->object_size; result->maximum_object_number = 65535; result->maximum_property_number = 63; result->maximum_attribute_number = 48; result->object_node_number_index = 6; result->object_property_index = 12; } if (result->version == 1) result->alphabet_table = alphabet_table_v1; else if ((result->version >= 5) && (load_word(result->memory + 0x34) != 0)) result->alphabet_table = result->memory + load_word(result->memory + 0x34); else result->alphabet_table = alphabet_table_after_v1; result->dictionary_table = result->memory + load_word(result->memory+0x8); // 8.2.1: In Versions 1 and 2, all games are "score games". In Version 3, // if bit 1 of 'Flags 1' is clear then the game is a "score game"; if it // is set, then the game is a "time game". if (result->version <= 2) { result->score_mode = SCORE_MODE_SCORE_AND_TURN; } else if (result->version == 3) { if ((result->memory[1] & 0x2) == 0) result->score_mode = SCORE_MODE_SCORE_AND_TURN; else result->score_mode = SCORE_MODE_TIME; } else result->score_mode = SCORE_MODE_UNKNOWN; if (enable_script_after_start != 0) result->memory[0x11] |= 1; result->release_code = load_word(result->memory + 0x2); memcpy(result->serial_code, result->memory+0x12, 6); result->serial_code[6] = (char)0; result->checksum = load_word(result->memory + 0x1c); header_extension_table = result->memory + load_word(result->memory + 0x36); header_extension_table_size = load_word(header_extension_table); #ifdef ENABLE_TRACING if (active_sound_interface != NULL) { TRACE_LOG("Sound interface available.\n"); } else { TRACE_LOG("No sound interface available.\n"); } #endif // ENABLE_TRACING if (result->version == 6) { if ( (active_sound_interface != NULL) //&& //(strcmp(get_configuration_value("force-8bit-sound"), "true") != 0) ) result->memory[1] |= 0x20; } else if ( ( (active_sound_interface == NULL) //|| //(strcmp(get_configuration_value("force-8bit-sound"), "true") == 0) ) && (result->version >= 5) ) result->memory[0x11] &= 0x7f; // No mouse currently implemented. result->memory[0x11] &= 0xdf; TRACE_LOG("flags2: %x.\n", result->memory[0x11]); if (result->version >= 6) result->max_nof_color_pairs = 11 * 11; // (2 to 12) ^2 else if (result->version == 5) result->max_nof_color_pairs = 8 * 8; // (2 to 9) ^2 else result->max_nof_color_pairs = 0; #ifndef DISABLE_FILELIST detect_and_add_single_z_file( story_stream->filename, blorb_stream != NULL ? blorb_stream->filename : NULL); if ((story_data = get_z_story_entry_from_list( result->serial_code, result->release_code, result->checksum)) != NULL) { if ( (result->blorb_file == NULL) && (story_data->blorbfile != NULL) && (strlen(story_data->blorbfile) != 0) ) { TRACE_LOG("Load blorb: %s\n", story_data->blorbfile); if ((result->blorb_file = open_simple_iff_file( story_data->blorbfile, IFF_MODE_READ)) != NULL) result->blorb_map = active_blorb_interface->init_blorb_map(result->blorb_file); } result->title = fizmo_strdup(story_data->title); if (story_data->language != NULL) set_configuration_value("locale", story_data->language); free_z_story_list_entry(story_data); } else { result->title = NULL; } #else result->title = NULL; #endif return result; } static void free_z_story(struct z_story *story) { free(story->memory); if (story->title != NULL) free(story->title); if (story->blorb_map != NULL) active_blorb_interface->free_blorb_map(story->blorb_map); if (story->blorb_file != NULL) fsi->closefile(story->blorb_file); free(story->absolute_file_name); free(story); } /* struct z_story_blorb_image *get_image_blorb_index(struct z_story *story, int resource_number) { int i; if ( (resource_number < 0) || (resource_number > story->nof_images) ) return NULL; for (i=0; inof_images; i++) if (story->blorb_images[i].resource_number == resource_number) return &story->blorb_images[i]; return NULL; } struct z_story_blorb_sound *get_sound_blorb_index(struct z_story *story, int resource_number) { int i; for (i=0; inof_sounds; i++) if (story->blorb_sounds[i].resource_number == resource_number) return &story->blorb_sounds[i]; return NULL; } */ int close_interface(z_ucs /*@null@*/ *error_message) { int return_code; if (active_interface != NULL) { return_code = active_interface->close_interface(error_message); active_interface = NULL; } else return_code = 0; /*@-globstate@*/ return return_code; /*@+globstate@*/ } void *fizmo_malloc(size_t size) { void *result; if ((result = malloc(size)) == NULL) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_MALLOC_P0D_RETURNED_NULL_PROBABLY_OUT_OF_MEMORY, -1, size); return result; } void *fizmo_realloc(void *ptr, size_t size) { void *result; if ((result = realloc(ptr, size)) == NULL) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_REALLOC_P0D_RETURNED_NULL_PROBABLY_OUT_OF_MEMORY, -1, size); return result; } char *fizmo_strdup(char *s1) { void *result; if ((result = strdup(s1)) == NULL) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_MALLOC_P0D_RETURNED_NULL_PROBABLY_OUT_OF_MEMORY, -1, strlen(s1)); return result; } int ensure_mem_size(char **ptr, int *current_size, int size) { if (size > *current_size) { if ((*ptr = fizmo_realloc(*ptr, size)) == NULL) return -1; *current_size = size; } return 0; } #ifndef DISABLE_CONFIGFILES char *get_xdg_config_dir_name() { char *config_dir_used, *home_dir; if (xdg_config_dir_name_initialized == true) return xdg_config_home; config_dir_used = getenv("XDG_CONFIG_HOME"); if ( (config_dir_used == NULL) || (strlen(config_dir_used) == 0) ) config_dir_used = default_xdg_config_home; // In case we don't have an absolute path here, resolve using home // directory. if (*config_dir_used != '/') { if ((home_dir = get_user_homedir()) == NULL) return NULL; xdg_config_home = (char*)fizmo_malloc( strlen(home_dir) + strlen(config_dir_used) + 2); sprintf(xdg_config_home, "%s/%s", home_dir, config_dir_used); } else { xdg_config_home = fizmo_strdup(config_dir_used); } xdg_config_dir_name_initialized = true; return xdg_config_home; } #endif // DISABLE_CONFIGFILES #ifndef DISABLE_CONFIGFILES char *get_fizmo_config_dir_name() { char *config_dir_used = NULL; if (bool_equal(fizmo_config_dir_name_initialized, false)) { config_dir_used = get_xdg_config_dir_name(); fizmo_config_dir_name = (char*)fizmo_malloc( strlen(config_dir_used) + strlen(FIZMO_CONFIG_DIR_NAME) + 2); sprintf(fizmo_config_dir_name, "%s/%s", config_dir_used, FIZMO_CONFIG_DIR_NAME); } fizmo_config_dir_name_initialized = true; return fizmo_config_dir_name; } #endif // DISABLE_CONFIGFILES #ifndef DISABLE_CONFIGFILES void ensure_dot_fizmo_dir_exists() { char *dir_name = get_fizmo_config_dir_name(); char *xdg_config_dir_name; z_dir *dir; // XDG guide says: If, when attempting to write a file, the destination // directory is non-existant an attempt should be made to create it with // permission 0700. if (dir_name == NULL) return; if ((dir = fsi->open_dir(dir_name)) != NULL) { fsi->close_dir(dir); return; } xdg_config_dir_name = get_xdg_config_dir_name(); if ((dir = fsi->open_dir(xdg_config_dir_name)) == NULL) { if (fsi->make_dir(xdg_config_dir_name) == -1) return; } else fsi->close_dir(dir); fsi->make_dir(dir_name); } #endif // DISABLE_CONFIGFILES void fizmo_new_screen_size(uint8_t width, uint8_t height) { if (!z_mem) { /* This shouldn't be called before z_mem is allocated. However, the startup sequence is complicated and I want to be extra careful. */ return; } #ifndef DISABLE_BLOCKBUFFER if ( (ver >= 3) && (upper_window_buffer != NULL) && (upper_window_buffer->height > 0) ) blockbuf_resize( upper_window_buffer, (int)width, upper_window_buffer->height); #endif // DISABLE_BLOCKBUFFER if (ver >= 4) { TRACE_LOG("Writing %d to $20, %d to $21.\n", height, width); z_mem[0x20] = height; z_mem[0x21] = width; } if (ver >= 5) { // 8.4.3: In Version 5 and later, the screen's width and height in // units should be written to the words at $22 and $24. TRACE_LOG("Writing %d to $22, %d to $24.\n", width, height); z_mem[0x22] = width >> 8; z_mem[0x23] = width & 0xff; z_mem[0x24] = height >> 8; z_mem[0x25] = height & 0xff; } } void write_interpreter_info_into_header() { uint16_t width, height; if (active_interface == NULL || z_mem == NULL) return; TRACE_LOG("Linking interface \"%s\" to active story.\n", active_interface->get_interface_name()); // Write status line informiation to the header if (ver <= 3) { // In Versions 1 to 3, a status line should be printed by the // interpreter, as follows. In Version 3, it must set bit 4 of // 'Flags 1' in the header if it is unable to produce a status line. if (active_interface->is_status_line_available() == true) { TRACE_LOG("Status line is availiable.\n"); z_mem[1] |= 0x10; } else { TRACE_LOG("Status line is not availiable.\n"); z_mem[1] &= (0xff & ~0x10); } if (active_interface->is_split_screen_available() == true) z_mem[1] |= 0x20; if (active_interface->is_variable_pitch_font_default() == true) z_mem[1] |= 0x40; if (strcmp(get_configuration_value("set-tandy-flag"), "true") == 0) z_mem[1] |= 0x08; } if (ver >= 4) { z_mem[0x1e] = FIZMO_INTERPRETER_NUMBER; z_mem[0x1f] = FIZMO_INTERPRETER_REVISION if (active_interface->is_bold_face_available() == true) { TRACE_LOG("Boldface is available.\n"); z_mem[1] |= 0x04; } else { TRACE_LOG("Boldface is not available.\n"); z_mem[1] &= (0xff & ~0x04); } if (active_interface->is_italic_available() == true) z_mem[1] |= 0x08; if (active_interface->is_fixed_space_font_available() == true) z_mem[1] |= 0x10; // Write information about timed input if (active_interface->is_timed_keyboard_input_available() == true) z_mem[1] |= 0x80; width = active_interface->get_screen_width_in_characters(); height = active_interface->get_screen_height_in_lines(); fizmo_new_screen_size(width, height); if (ver >= 5) { // Write color information into the header if (active_interface->is_colour_available() == true) z_mem[1] |= 0x1; // picture support / character font support for beyond zork if (active_interface->is_character_graphics_font_availiable() == false) z_mem[0x11] &= 0xf7; upper_window_foreground_colour = default_foreground_colour; upper_window_background_colour = default_background_colour; lower_window_foreground_colour = default_foreground_colour; lower_window_background_colour = default_background_colour; z_mem[0x2c] = (uint8_t)default_background_colour; z_mem[0x2d] = (uint8_t)default_foreground_colour; z_mem[0x26] = 1; z_mem[0x27] = 1; if (ver >= 6) { if (active_interface->is_picture_displaying_available() == true) z_mem[1] |= 0x2; } } } z_mem[0x32] = OBEYS_SPEC_MAJOR_REVISION_NUMER; z_mem[0x33] = OBEYS_SPEC_MINOR_REVISION_NUMER; } int fizmo_register_screen_interface(struct z_screen_interface *screen_interface) //, z_colour screen_default_foreground_color, //z_colour screen_default_background_color) { z_colour default_colour; if (active_interface != NULL) return -1; default_colour = screen_interface->get_default_foreground_colour(); if (is_regular_z_colour(default_colour) == false) return -2; default_foreground_colour = default_colour; if (set_configuration_value("foreground-color", z_colour_names[default_foreground_colour]) != 0) return -3; default_colour = screen_interface->get_default_background_colour(); if (is_regular_z_colour(default_colour) == false) return -4; default_background_colour = default_colour; if (set_configuration_value("background-color", z_colour_names[default_background_colour]) != 0) return -5; active_interface = screen_interface; register_i18n_stream_output_function(streams_z_ucs_output); register_i18n_abort_function(abort_interpreter); return 0; } void fizmo_register_sound_interface( struct z_sound_interface *sound_interface) { TRACE_LOG("Registered sound interface at %p.\n", sound_interface); active_sound_interface = sound_interface; } void fizmo_register_blorb_interface( struct z_blorb_interface *blorb_interface) { TRACE_LOG("Registered blorb interface at %p.\n", blorb_interface); active_blorb_interface = blorb_interface; } #ifndef DISABLE_CONFIGFILES static int parse_fizmo_config_file(char *filename) { char key[MAX_CONFIG_OPTION_LENGTH]; char value[MAX_CONFIG_OPTION_LENGTH]; int c, i; z_file *config_file; TRACE_LOG("Parsing config file \"%s\".\n", filename); if ((config_file = fsi->openfile(filename, FILETYPE_DATA, FILEACCESS_READ)) == NULL) return 0; while ((c = fsi->readchar(config_file)) != EOF) { i = 0; while ( (c != '=') && (c != '\n') && (c != EOF) ) { if ( (i < MAX_CONFIG_OPTION_LENGTH - 1) && ( ! ((i == 0) && (c == ' '))) ) key[i++] = (char)c; c = fsi->readchar(config_file); } if ( (c == '=') || (c == '\n') ) { while ( (i > 0) && (key[i-1] == ' ') ) i--; key[i] = '\0'; i = 0; if (c == '=') { do c = fsi->readchar(config_file); while (c == ' '); while ( (c != '\n') && (c != EOF) && (i < MAX_CONFIG_OPTION_LENGTH-1) ) { value[i++] = (char)c; c = fsi->readchar(config_file); } while ( (i > 0) && (value[i-1] == ' ') ) i--; } if (c == '\n') { value[i] = '\0'; if ( (key[0] != 0) && (key[0] != '#') ) { TRACE_LOG("Incoming config key: \"%s\".\n", key); // Don't set and overwrite path, append instead. if ( (strcmp(key, "z-code-path") == 0) || (strcmp(key, "z-code-root-path") == 0) ) { append_path_value(key, value); } else { set_configuration_value(key, value); } } } } } fsi->closefile(config_file); return 0; } #endif // DISABLE_CONFIGFILES #ifndef DISABLE_CONFIGFILES int parse_fizmo_config_files() { char *config_dirs, *dir; char *string_to_split, *split_index; char *filename = NULL; int filename_size = 0; if (bool_equal(config_files_were_parsed, true)) return 0; parse_fizmo_config_file(SYSTEM_FIZMO_CONF_FILE_NAME); config_dirs = getenv("XDG_CONFIG_DIRS"); if ( (config_dirs == NULL) || (strlen(config_dirs) == 0) ) config_dirs = default_xdg_config_dirs; string_to_split = fizmo_strdup(config_dirs); for(;;) { split_index = strrchr(string_to_split, ':'); if (split_index == NULL) dir = string_to_split; else { *split_index = '\0'; dir = split_index + 1; } ensure_mem_size(&filename, &filename_size, strlen(dir) + strlen(FIZMO_CONFIG_DIR_NAME) + strlen(FIZMO_CONFIG_FILE_NAME) + 3); sprintf(filename, "%s/%s/%s", dir, FIZMO_CONFIG_DIR_NAME, FIZMO_CONFIG_FILE_NAME); parse_fizmo_config_file(filename); if (split_index == NULL) break; } dir = get_fizmo_config_dir_name(); if (dir != NULL) { ensure_mem_size(&filename, &filename_size, strlen(dir) + strlen(FIZMO_CONFIG_FILE_NAME) + 2); sprintf(filename, "%s/%s", dir, FIZMO_CONFIG_FILE_NAME); parse_fizmo_config_file(filename); } config_files_were_parsed = true; if (filename != NULL) free(filename); return 0; } #endif // DISABLE_CONFIGFILES // This will quote all newlines, TABs and backslashes which must not appear // in a config-file. Returns a new malloced string which should be freed after // use. char *quote_special_chars(char *s) { char *ptr, *result; size_t len; if (s == NULL) return NULL; len = strlen(s) + 1; ptr = s; while (*ptr != '\0') { if ( (*ptr == '\n') || (*ptr == '\t') || (*ptr == '\\') ) len++; ptr++; } result = (char*)fizmo_malloc(len); ptr = result; while (*s != '\0') { if (*s == '\n') { *ptr = '\\'; ptr++; *ptr = 'n'; } else if (*s == '\t') { *ptr = '\\'; ptr++; *ptr = 't'; } else if (*s == '\\') { *ptr = '\\'; ptr++; *ptr = '\\'; } else { *ptr = *s; } s++; ptr++; } *ptr = '\0'; return result; } char *unquote_special_chars(char *s) { char *ptr, *result; size_t len; if (s == NULL) return NULL; len = strlen(s) + 1; ptr = s; while (*ptr != '\0') { if (*ptr == '\\') { ptr++; if ( (*ptr == 'n') || (*ptr == 't') || (*ptr = '\\') ) len--; else fprintf(stderr, "Invalid input: \"\\%c\".", *s); } ptr++; } result = (char*)fizmo_malloc(len); ptr = result; while (*s != '\0') { if (*s == '\\') { s++; if (*s == 'n') *ptr = '\n'; else if (*s == 't') *ptr = '\t'; else if (*s== '\\') *ptr = '\\'; } else *ptr = *s; ptr++; s++; } *ptr = 0; return result; } #ifndef DISABLE_OUTPUT_HISTORY void fizmo_register_paragraph_attribute_function( void (*new_paragraph_attribute_function)(int *parameter1, int *parameter2)) { paragraph_attribute_function = new_paragraph_attribute_function; } void fizmo_register_paragraph_removal_function( void (*new_paragraph_removal_function)(int parameter1, int parameter2)) { paragraph_removal_function = new_paragraph_removal_function; } #endif // DISABLE_OUTPUT_HISTORY void fizmo_start(z_file* story_stream, z_file *blorb_stream, z_file *restore_on_start_file) { char *value; bool evaluate_result; uint8_t flags2; int val; char *str, *default_savegame_filename = DEFAULT_SAVEGAME_FILENAME; if (active_interface == NULL) { TRACE_LOG("No active interface."); return; } register_i18n_stream_output_function( streams_z_ucs_output); register_i18n_abort_function( abort_interpreter); #ifndef DISABLE_CONFIGFILES ensure_dot_fizmo_dir_exists(); #endif // DISABLE_CONFIGFILES if ((str = getenv("ZCODE_PATH")) == NULL) str = getenv("INFOCOM_PATH"); if (str != NULL) append_path_value("z-code-path", str); if ((str = getenv("ZCODE_ROOT_PATH")) != NULL) append_path_value("z-code-root-path", str); #ifndef DISABLE_CONFIGFILES parse_fizmo_config_files(); #endif // DISABLE_CONFIGFILES if (get_configuration_value("random-mode") == NULL) set_configuration_value("random-mode", "random"); //set_configuration_value("disable-external-streams", "true"); open_streams(); init_signal_handlers(); active_z_story = load_z_story(story_stream, blorb_stream); if ( (active_z_story->release_code == 2) && (strcmp(active_z_story->serial_code, "AS000C") == 0) ) skip_active_routines_stack_check_warning = true; z_mem = active_z_story->memory; TRACE_LOG("Z-Mem at %p.\n", z_mem); ver = active_z_story->version; #ifdef ENABLE_DEBUGGER debugger_story_has_been_loaded(); #endif // ENABLE_DEBUGGER init_opcode_functions(); if ((str = get_configuration_value("savegame-default-filename")) != NULL) default_savegame_filename = str; val = DEFAULT_MAX_UNDO_STEPS; if ((str = get_configuration_value("max-undo-steps")) != NULL) val = atoi(str); set_max_undo_steps(val); init_streams(default_savegame_filename); (void)latin1_string_to_zucs_string( last_savegame_filename, default_savegame_filename, MAXIMUM_SAVEGAME_NAME_LENGTH + 1); TRACE_LOG("Converted savegame default filename: '"); TRACE_LOG_Z_UCS(last_savegame_filename); TRACE_LOG("'.\n"); current_foreground_colour = default_foreground_colour; current_background_colour = default_background_colour; /* active_interface->set_colour( default_foreground_colour, default_background_colour, -1); */ active_interface->link_interface_to_story(active_z_story); TRACE_LOG("sound-strcmp: %d.\n", strcmp(get_configuration_value("disable-sound"), "true")); if ( (active_sound_interface != NULL) && (strcmp(get_configuration_value("disable-sound"), "true") != 0) ) { TRACE_LOG("Activating sound.\n"); active_sound_interface->init_sound(); } write_interpreter_info_into_header(); // REVISIT: Implement general initalization for restore / restart etc. active_window_number = 0; current_font = Z_FONT_NORMAL; #ifndef DISABLE_BLOCKBUFFER if (ver >= 3) upper_window_buffer = create_blockbuffer( Z_STYLE_ROMAN, Z_FONT_NORMAL, current_foreground_colour, current_background_colour); #endif // DISABLE_BLOCKBUFFER #ifndef DISABLE_OUTPUT_HISTORY outputhistory[0] = create_outputhistory( 0, Z_HISTORY_MAXIMUM_SIZE, Z_HISTORY_INCREMENT_SIZE, default_foreground_colour, default_background_colour, Z_FONT_NORMAL, Z_STYLE_ROMAN); #endif /* DISABLE_OUTPUT_HISTORY */ terminate_interpreter = INTERPRETER_QUIT_NONE; if ( (ver <= 8) && (ver != 6) ) { while (terminate_interpreter == INTERPRETER_QUIT_NONE) { if (restore_on_start_file != NULL && active_interface->restore_autosave) { /* Use the interface's restore routine. */ int res = active_interface->restore_autosave(restore_on_start_file); restore_on_start_file = NULL; if (res) interpret_resume(); else interpret_from_address(load_word(z_mem + 0x6)); } else if (restore_on_start_file != NULL) { value = get_configuration_value( "restore-after-save-and-quit-file-before-read"); if ( (value != NULL) && (strcmp(value, "true") == 0) ) evaluate_result = false; else evaluate_result = true; if (restore_game_from_stream( 0, (uint16_t)(active_z_story->dynamic_memory_end - z_mem + 1), restore_on_start_file, evaluate_result) == 2) { //TRACE_LOG("Redrawing screen from history.\n"); //active_interface->game_was_restored_and_history_modified(); interpret_resume(); } restore_on_start_file = NULL; } else interpret_from_address(load_word(z_mem + 0x6)); if (terminate_interpreter == INTERPRETER_QUIT_RESTART) { TRACE_LOG("Initiating restart.\n"); // Restart the game. (Any "Are you sure?" question must be asked by the // game, not the interpreter.) The only pieces of information surviving // from the previous state are the "transcribing to printer" bit (bit 0 // of 'Flags 2' in the header, at address $10) and the "use fixed pitch // font" bit (bit 1 of 'Flags 2'). flags2 = z_mem[0x11] & 0x3; drop_z_stack_words(z_stack_index - z_stack); number_of_stack_frames = 0; stack_words_from_active_routine = 0; number_of_locals_active = 0; store_first_stack_frame(true, 0, 0, 0); if ((fsi->setfilepos( active_z_story->z_story_file, active_z_story->story_file_exec_offset, SEEK_SET)) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_RETURNED_ERROR_CODE_P1D, -0x0101, "setfilepos", errno); TRACE_LOG("Loading %ld bytes.\n", (long int)(active_z_story->high_memory_end + 1 - z_mem)); if (fsi->readchars( z_mem, (size_t)(active_z_story->high_memory_end + 1 - z_mem), active_z_story->z_story_file) != (size_t)(active_z_story->high_memory_end + 1 - z_mem)) { i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FATAL_ERROR_READING_STORY_FILE, -1); } active_interface->reset_interface(); write_interpreter_info_into_header(); z_mem[0x11] &= 0xfc; z_mem[0x11] |= flags2; terminate_interpreter = INTERPRETER_QUIT_NONE; } } } else i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_NOT_YET_IMPLEMENTED, -0x010d); #ifdef ENABLE_DEBUGGER debugger_interpreter_stopped(); #endif // ENABLE_DEBUGGER if (active_sound_interface != NULL) active_sound_interface->close_sound(); // Close all streams, this will also close the active interface. close_streams(NULL); free_undo_memory(); free_hyphenation_memory(); free_i18n_memory(); #ifndef DISABLE_BLOCKBUFFER if (upper_window_buffer != NULL) destroy_blockbuffer(upper_window_buffer); upper_window_buffer = NULL; #endif // DISABLE_BLOCKBUFFER #ifndef DISABLE_OUTPUT_HISTORY destroy_outputhistory(outputhistory[0]); #endif // DISABLE_OUTPUT_HISTORY free_z_story(active_z_story); active_z_story = NULL; z_mem = NULL; #ifndef DISABLE_CONFIGFILES if (xdg_config_home != NULL) { free(xdg_config_home); xdg_config_home = NULL; } if (fizmo_config_dir_name != NULL) { free(fizmo_config_dir_name); fizmo_config_dir_name = NULL; } #endif // DISABLE_CONFIGFILES } #endif /* fizmo_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/fizmo.h000644 000765 000024 00000010475 12606024314 022127 0ustar00chrenderstaff000000 000000 /* fizmo.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef fizmo_h_INCLUDED #define fizmo_h_INCLUDED #include #include #include "../screen_interface/screen_interface.h" #include "../sound_interface/sound_interface.h" #include "../blorb_interface/blorb_interface.h" #include "blockbuf.h" #define FIZMO_VERSION "0.7.10" #define LIBFIZMO_VERSION "0.7.10" #define FIZMO_INTERPRETER_NUMBER 6 /* From: http://www.logicalshift.demon.co.uk/unix/zoom/manual/configXwin.html 1 - Infocom's internal debugging interpreter 2 - Applie IIe interpreter 3 - Macintosh 4 - Amiga (colour behaviour can change if you specify this) 5 - Atari ST 6 - IBM PC 7 - Commodore 128 8 - Commodore 64 9 - Apple IIc 10 - Apple IIgs 11 - Tandy Color */ #define FIZMO_INTERPRETER_REVISION 'b'; #define SCORE_MODE_UNKNOWN 0 #define SCORE_MODE_SCORE_AND_TURN 1 #define SCORE_MODE_TIME 2 #define OBEYS_SPEC_MAJOR_REVISION_NUMER 1 #define OBEYS_SPEC_MINOR_REVISION_NUMER 0 int fizmo_register_screen_interface( struct z_screen_interface *screen_interface); void fizmo_register_sound_interface( struct z_sound_interface *sound_interface); void fizmo_register_blorb_interface( struct z_blorb_interface *blorb_interface); #ifndef DISABLE_OUTPUT_HISTORY void fizmo_register_paragraph_attribute_function( void (*new_paragraph_attribute_function)(int *parameter1, int *parameter2)); void fizmo_register_paragraph_removal_function( void (*new_paragraph_removal_function)(int parameter1, int parameter2)); #endif // DISABLE_OUTPUT_HISTORY void fizmo_start(z_file* story_stream, z_file *blorb_stream, z_file *restore_on_start_file); void fizmo_new_screen_size(uint8_t width, uint8_t height); void write_interpreter_info_into_header(); int close_interface(z_ucs *error_message); void *fizmo_malloc(size_t size); void *fizmo_realloc(void *ptr, size_t size); char *fizmo_strdup(char *s1); int ensure_mem_size(char **ptr, int *current_size, int size); void ensure_dot_fizmo_dir_exists(); char *quote_special_chars(char *s); char *unquote_special_chars(char *s); #ifndef DISABLE_CONFIGFILES char *get_fizmo_config_dir_name(); int parse_fizmo_config_files(); #endif // DISABLE_CONFIGFILES #ifndef fizmo_c_INCLUDED extern struct commandline_parameter *interpreter_commandline_parameters[]; extern struct z_screen_interface *active_interface; extern struct z_sound_interface *active_sound_interface; extern struct z_story *active_z_story; extern uint8_t ver; extern uint8_t *header_extension_table; extern uint8_t header_extension_table_size; #ifndef DISABLE_BLOCKBUFFER extern BLOCKBUF *upper_window_buffer; #endif /* DISABLE_BLOCKBUFFER */ #ifndef DISABLE_OUTPUT_HISTORY extern void (*paragraph_attribute_function)(int *parameter1, int *parameter2); extern void (*paragraph_removal_function)(int parameter1, int parameter2); #endif // DISABLE_OUTPUT_HISTORY #endif /* fizmo_c_INCLUDED */ #endif /* fizmo_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/history.c000644 000765 000024 00000153232 12606024314 022476 0ustar00chrenderstaff000000 000000 /* history.c * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * This file implements a stream- or window-history which stores the output * of the Z-Machine for windows. It may be used to implement a scrollback * buffer, to refresh the contents of a screen or to redraw the screen as * a response on a window resize event. * * The history is implemented as a circular buffer. Once the hardcoded or * user-given buffer maximum size is reached, the oldest data is overwritten * with the newest. The buffer start is stored in "z_history_buffer_start", * the end at "z_history_buffer_end". "z_history_buffer_front_index" points * to the front of the buffer, meaning to the point where the next character * will be stored. "history_buffer_back_index_background" points to the oldest * stored character. "wrapped_around" indicates whether the buffer is in a * wrap-around situation -- meaning that the front- is behind the back-index. * In case front == back, the buffer is empty when "wrapped_around" is false, * or completely filled in case "wrapped_around" is true. * * Metadata -- font, style and colour attributes -- is directly written * into this buffer. In order to distinguish metadata from regular buffer * contents, metadata is prefixed with a HISTORY_METADATA_ESCAPE character * which is 0. Since 0 is used as a string-terminator, regular buffer contents * can never contain a plain 0. Thus, when writing output into the buffer, 0 * characters don't have to be explicitely escaped since these are never * written. * * In order to use the history one can create a *history_output using * "init_history_output" which will point to the current end of the history. * (... "output_rewind_paragraph", "output_repeat_paragraphs") * * For greater output flexibility, a repeated output's paragraph is never * followed by a newline char. This, however, introduces the ambiguity that * for the very last paragraph it's not known whether it has been * terminated with a newline or not, which is relevant when redrawing the * screen. To solve this, the "output_rewind_paragraph" will set the flag * "rewound_paragraph_was_newline_terminated" to false in case the very * last paragraph in the buffer is not yet followed by a newline char. * * Please note: The buffer size must have at least the size of the largest * metadata entry, which is 4 z_ucs-chars. */ #ifndef history_c_INCLUDED #define history_c_INCLUDED #include #include #include "../tools/tracelog.h" #include "../tools/types.h" #include "../tools/z_ucs.h" #include "../tools/i18n.h" #include "../locales/libfizmo_locales.h" #include "history.h" #include "fizmo.h" #include "config.h" #define REPEAT_PARAGRAPH_BUF_SIZE 1280 outputhistory_ptr outputhistory[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; OUTPUTHISTORY *create_outputhistory(int window_number, size_t maximum_buffer_size, size_t buffer_increment_size, z_colour foreground_colour, z_colour background_color, z_font font, z_style style) { OUTPUTHISTORY *result; if ((result = malloc(sizeof(OUTPUTHISTORY))) == NULL) return NULL; result->window_number = window_number; result->z_history_buffer_size = 0; result->z_history_maximum_buffer_size = maximum_buffer_size; result->z_history_buffer_increment_size = buffer_increment_size; result->z_history_buffer_start = NULL; result->z_history_buffer_end = NULL; result->z_history_buffer_front_index = NULL; result->z_history_buffer_back_index = NULL; result->nof_wraparounds = 0; result->last_metadata_block_index = 0; result->next_newline_after_buffer_back = NULL; result->history_buffer_back_index_font = font; result->history_buffer_back_index_style = style; result->history_buffer_back_index_foreground = foreground_colour; result->history_buffer_back_index_background = background_color; result->history_buffer_front_index_font = font; result->history_buffer_front_index_style = style; result->history_buffer_front_index_foreground = foreground_colour; result->history_buffer_front_index_background = background_color; return result; } void destroy_outputhistory(OUTPUTHISTORY *h) { free(h->z_history_buffer_start); free(h); } static size_t get_buffer_space_used(OUTPUTHISTORY *h) { if (h->z_history_buffer_size == 0) return 0; else if (h->nof_wraparounds == 0) return h->z_history_buffer_front_index - h->z_history_buffer_back_index + 1; else return h->z_history_buffer_size - (h->z_history_buffer_back_index - h->z_history_buffer_front_index); } static void process_buffer_back(OUTPUTHISTORY *h, long nof_zucs_chars) { z_ucs *current_index = h->z_history_buffer_front_index; z_ucs buf1, buf2; TRACE_LOG("Advancing buffer end from %p by %ld chars.\n", current_index, (long int)nof_zucs_chars); do { TRACE_LOG("current-index: %p.\n", current_index); // Check if we have caught up to the last processed paragraph-attribute // position. if (h->next_newline_after_buffer_back == current_index) { h->next_newline_after_buffer_back = NULL; } if (*current_index == HISTORY_METADATA_ESCAPE) { // We've found an escape code. Advance index to escape code type. current_index = current_index == h->z_history_buffer_end ? h->z_history_buffer_start : current_index + 1; nof_zucs_chars--; if (*current_index == HISTORY_METADATA_ESCAPE) { // All other cases (only 0 is legal) indicate normal data, thus we // can ignore it. } else if (*current_index == HISTORY_METADATA_TYPE_FONT) { // Font metadata found, advance to font data. current_index = current_index == h->z_history_buffer_end ? h->z_history_buffer_start : current_index + 1; nof_zucs_chars--; h->history_buffer_back_index_font = (z_font)*current_index; } else if (*current_index == HISTORY_METADATA_TYPE_STYLE) { // Style metadata found, advance to style data. current_index = current_index == h->z_history_buffer_end ? h->z_history_buffer_start : current_index + 1; nof_zucs_chars--; h->history_buffer_back_index_style = (z_style)*current_index; } else if (*current_index == HISTORY_METADATA_TYPE_COLOUR) { // Colour metadata found, advance to foreground data. current_index = current_index == h->z_history_buffer_end ? h->z_history_buffer_start : current_index + 1; nof_zucs_chars--; h->history_buffer_back_index_foreground = (z_colour)*current_index; // Advance to background data. current_index = current_index == h->z_history_buffer_end ? h->z_history_buffer_start : current_index + 1; nof_zucs_chars--; h->history_buffer_back_index_background = (z_colour)*current_index; } else if (*current_index == HISTORY_METADATA_TYPE_PARAGRAPHATTRIBUTE) { // do nothing but catch the case so we're not running into the // error-else below. current_index = current_index == h->z_history_buffer_end ? h->z_history_buffer_start : current_index + 1; nof_zucs_chars--; buf1 = *current_index; // Advance to second parameter current_index = current_index == h->z_history_buffer_end ? h->z_history_buffer_start : current_index + 1; nof_zucs_chars--; if ( (paragraph_removal_function != NULL) && (h->next_newline_after_buffer_back == NULL) ) { paragraph_removal_function( buf1 - HISTORY_METADATA_DATA_OFFSET, *current_index - HISTORY_METADATA_DATA_OFFSET); } } else { TRACE_LOG("Inconsistent history metadata.\n"); i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_INVALID_PARAMETER_TYPE_P0S, -1, "metadata"); } } // After processing, move to next z_ucs. current_index = current_index == h->z_history_buffer_end ? h->z_history_buffer_start : current_index + 1; nof_zucs_chars--; } while (nof_zucs_chars > 0); // It's possible that we're advancing more chars than requested, in case // a metadata sequence occupies the end of the processing range. Since the // history bugger is specified to have minimum buffer size of a complete // metadata entry though, this will work without problems. if ( (paragraph_removal_function != NULL) && (h->next_newline_after_buffer_back == NULL) ) { //printf("passed next_newline_after_buffer_back.\n"); // Either we have never run "process_buffer_back" before, or we have // passed the last evaluated paragraph-attribute position in the loop // above. Either way, we now have to look for the next paragraph in // order to keep the to keep a consistent paragraph attribute situation // (meaning: Only whole paragraphs in the history count). h->next_newline_after_buffer_back = current_index; while (*current_index != Z_UCS_NEWLINE) { if (current_index == h->z_history_buffer_front_index) { // Only a single block of text in the buffer? Well, okay. //printf("XXXX\n"); break; } // Advance 1 char. current_index = current_index == h->z_history_buffer_end ? h->z_history_buffer_start : current_index + 1; // In case there's some metadata at this point, process it. if (*current_index == HISTORY_METADATA_ESCAPE) { // Advance to metadata type. current_index = current_index == h->z_history_buffer_end ? h->z_history_buffer_start : current_index + 1; // Remember this in buf1. buf1 = *current_index; // Advance to first parameter. current_index = current_index == h->z_history_buffer_end ? h->z_history_buffer_start : current_index + 1; // Remember this in buf2. buf2 = *current_index; if ( (buf1 == HISTORY_METADATA_TYPE_PARAGRAPHATTRIBUTE) || (buf1 == HISTORY_METADATA_TYPE_COLOUR) ) { // Advance to second parameter. current_index = current_index == h->z_history_buffer_end ? h->z_history_buffer_start : current_index + 1; nof_zucs_chars--; if (buf1 == HISTORY_METADATA_TYPE_PARAGRAPHATTRIBUTE) { paragraph_removal_function( buf2 - HISTORY_METADATA_DATA_OFFSET, *current_index - HISTORY_METADATA_DATA_OFFSET); } } } } //printf("bufferback: next_newline_after_buffer_back %p.\n", // h->next_newline_after_buffer_back); h->next_newline_after_buffer_back = current_index; } //result->next_newline_after_buffer_back = NULL; TRACE_LOG("Processed chars up to before %p.\n", current_index); } static size_t get_buffer_space_available(OUTPUTHISTORY *h) { if (h->z_history_buffer_size == 0) return 0; else if (h->nof_wraparounds == 0) return h->z_history_buffer_end - h->z_history_buffer_front_index + 1; else return h->z_history_buffer_back_index - h->z_history_buffer_front_index; } static void try_to_enlarge_buffer(OUTPUTHISTORY *h, size_t desired_z_ucs_size) { z_ucs *ptr; TRACE_LOG("Trying to enlarge history buffer to %ld bytes.\n", (long int)(sizeof(z_ucs) * desired_z_ucs_size)); if ((ptr = realloc( h->z_history_buffer_start, sizeof(z_ucs) * (desired_z_ucs_size + 1))) != NULL) //sizeof(z_ucs) * desired_z_ucs_size)) != NULL) { h->z_history_buffer_size = desired_z_ucs_size; h->z_history_buffer_end = ptr + h->z_history_buffer_size - 1; *(h->z_history_buffer_end + 1) = 0; h->z_history_buffer_front_index = ptr + (h->z_history_buffer_front_index - h->z_history_buffer_start); h->z_history_buffer_back_index = ptr + (h->z_history_buffer_back_index - h->z_history_buffer_start); h->z_history_buffer_start = ptr; } } // This method helps to ensure that we have at least one entry for each // metadata type which is required to display on the screen (style, font // and color) every Z_HISTORY_METADATA_STATE_BLOCK_SIZE bytes. In case // we wouldn't be doing this, it would mean that games which never write a // certain metadata type (games without color support would for example never // write color metadata) we'd have to walk back the entire buffer to be able // to evaluate the color of the current char we're pointing at. static void write_metadata_state_block_if_necessary(OUTPUTHISTORY *h) { long int metadata_block_index; long int buffer_index = h->z_history_buffer_front_index - h->z_history_buffer_start; metadata_block_index = buffer_index - (buffer_index % (Z_HISTORY_METADATA_STATE_BLOCK_SIZE)); TRACE_LOG("block_index %ld(%ld), last block %ld.\n", metadata_block_index, buffer_index, h->last_metadata_block_index); if (metadata_block_index != h->last_metadata_block_index) { // We've now crossed a metadata block state boundary and thus we'll now // write the current state block. TRACE_LOG("Storing metadata state block %ld.\n", metadata_block_index); store_metadata_in_history(h, HISTORY_METADATA_TYPE_FONT, h->history_buffer_back_index_font); store_metadata_in_history(h, HISTORY_METADATA_TYPE_STYLE, h->history_buffer_back_index_style); store_metadata_in_history(h, HISTORY_METADATA_TYPE_COLOUR, h->history_buffer_back_index_foreground, h->history_buffer_back_index_background); } h->last_metadata_block_index = metadata_block_index; } void store_data_in_history(OUTPUTHISTORY *h, z_ucs *data, size_t len, bool evaluate_state_block) { size_t space_available, missing_space, nof_increments, new_size; size_t desired_size, len_to_write; if (data == NULL) return; TRACE_LOG("Trying to store %ld z_ucs-chars in history.\n", (long int)len); /* Not usable, since data doesn't have to be null-terminated. TRACE_LOG("store_history: \""); TRACE_LOG_Z_UCS(data); TRACE_LOG("\".\n"); */ if (len >= h->z_history_maximum_buffer_size) { // In this case the input to store is so large -- or our maximum buffer // size so tiny -- that the whole input will allocate all available // space. // Before we're trying to store any new data, we apply all metadata // changes to our buffer back-index. TRACE_LOG("buffer space used: %ld.\n", (long int)get_buffer_space_used(h)); process_buffer_back( h, get_buffer_space_used(h)); // In case the buffer has not yet been extended to it's full allowed // size, try to do so. if (h->z_history_buffer_size < h->z_history_maximum_buffer_size) try_to_enlarge_buffer(h, h->z_history_maximum_buffer_size); TRACE_LOG("Doing single-block-store to %p.\n", h->z_history_buffer_start); // The buffer is now as large as possible. We'll now copy as much into // it as will fit. memcpy( h->z_history_buffer_start, data, len - h->z_history_maximum_buffer_size); h->z_history_buffer_front_index = h->z_history_buffer_start; h->z_history_buffer_back_index = h->z_history_buffer_end; // At this point, we're already done. } else { // In case the input we've received is smaller than the maximum allowed // size of the history buffer, we can process the input in the regular // manner. if ((space_available = get_buffer_space_available(h)) < len) { // Currently there's not enough space available to store all of the // input, so we'll try to enlarge the buffer. missing_space = len - space_available; nof_increments = (missing_space / h->z_history_buffer_increment_size) + 1; new_size = h->z_history_buffer_size + (nof_increments * h->z_history_buffer_increment_size); TRACE_LOG("new calculated history size %ld z_ucs, max: %ld.\n", (long int)new_size, (long int)h->z_history_maximum_buffer_size); desired_size = new_size > h->z_history_maximum_buffer_size ? h->z_history_maximum_buffer_size : new_size; if (desired_size > h->z_history_buffer_size) try_to_enlarge_buffer(h, desired_size); } if (h->z_history_buffer_size < len) { // We couldn't allocate enough space to store the whole input. Thus, // we'll store as much as will currently fit. data += len - h->z_history_buffer_size; len = h->z_history_buffer_size; } TRACE_LOG("Adjusted len: %ld.\n", (long int)len); TRACE_LOG("Space in history: %ld z_ucs, buffer size: %ld z_ucs.\n", (long int)get_buffer_space_available(h), (long int)h->z_history_buffer_size); if (h->nof_wraparounds == 0) { TRACE_LOG("Not in wrap-around mode.\n"); // We're not in a wrap-around situation and thus have space until the // end of the buffer. space_available = h->z_history_buffer_end - h->z_history_buffer_front_index + 1; len_to_write = space_available > len ? len : space_available; if (len_to_write > 0) { TRACE_LOG("Writing %ld z_ucs chars to %p.\n", (long int)len_to_write, h->z_history_buffer_front_index); z_ucs_ncpy(h->z_history_buffer_front_index, data, len_to_write); h->z_history_buffer_front_index += len_to_write; } data += len_to_write; if (len_to_write == len) { /* TRACE_LOG("history:\n---\n"); TRACE_LOG_Z_UCS(h->z_history_buffer_start); TRACE_LOG("|\n---\nhistory end.\n"); */ TRACE_LOG("history-start: %p, end: %p.\n", h->z_history_buffer_start, h->z_history_buffer_end); TRACE_LOG("history-frontindex: %p, backindex: %p.\n", h->z_history_buffer_front_index, h->z_history_buffer_back_index); if (evaluate_state_block == true) write_metadata_state_block_if_necessary(h); return; } TRACE_LOG("Entering wrap-around mode.\n"); // We couldn't write everything into the buffer. Since we're not // in wrap-around yet, we'll start this now. if (++h->nof_wraparounds == 0) h->nof_wraparounds = 1; h->z_history_buffer_front_index = h->z_history_buffer_start; } // If we arrive at this point, it's either due to h->nof_wraparounds // was > 0 above, or since we were in h->nof_wraparounds == 0 // and len was still > 0 when writing up to the end of the buffer. // In both cases, we now are in wrap-around situation and have to // "throw away" chars at the back of the buffer to make room for more. while (len > 0) { if (h->z_history_buffer_front_index + len - 1 > h->z_history_buffer_end) len_to_write = (h->z_history_buffer_end - h->z_history_buffer_front_index) + 1; else len_to_write = len; process_buffer_back( h, len_to_write); TRACE_LOG("Writing %ld z_ucs chars from %p to %p.\n", (long int)len_to_write, data, h->z_history_buffer_front_index); z_ucs_ncpy(h->z_history_buffer_front_index, data, len_to_write); h->z_history_buffer_front_index += len_to_write; if (h->z_history_buffer_front_index == h->z_history_buffer_end + 1) h->z_history_buffer_front_index = h->z_history_buffer_start; len -= len_to_write; data += len_to_write; h->z_history_buffer_back_index = h->z_history_buffer_front_index; } /* TRACE_LOG("history:\n---\n"); TRACE_LOG_Z_UCS(h->z_history_buffer_start); TRACE_LOG("|\n---\nhistory end.\n"); */ } TRACE_LOG("history-start: %p, end: %p.\n", h->z_history_buffer_start, h->z_history_buffer_end); TRACE_LOG("history-frontindex: %p, backindex: %p.\n", h->z_history_buffer_front_index, h->z_history_buffer_back_index); if (evaluate_state_block == true) write_metadata_state_block_if_necessary(h); } void store_z_ucs_output_in_history(OUTPUTHISTORY *h, z_ucs *z_ucs_output) { size_t len; /* #ifdef ENABLE_TRACING z_ucs *cl; #endif // ENABLE_TRACING */ if (z_ucs_output == NULL) return; if ((len = z_ucs_len(z_ucs_output)) == 0) return; store_data_in_history(h, z_ucs_output, len, true); /* #ifdef ENABLE_TRACING cl = get_current_line(h); TRACE_LOG("currentline:|"); if (cl != NULL) { TRACE_LOG_Z_UCS(cl); free(cl); } TRACE_LOG("|line end.\n"); #endif // ENABLE_TRACING */ } // All "..." values must be int16_t. int store_metadata_in_history(OUTPUTHISTORY *h, int metadata_type, ...) { z_ucs output_buffer[4]; va_list ap; int16_t parameter; size_t len; if ( (metadata_type != HISTORY_METADATA_TYPE_FONT) && (metadata_type != HISTORY_METADATA_TYPE_STYLE) && (metadata_type != HISTORY_METADATA_TYPE_COLOUR) && (metadata_type != HISTORY_METADATA_TYPE_PARAGRAPHATTRIBUTE) ) return -1; TRACE_LOG("Storing metadata type %d.\n", metadata_type); output_buffer[0] = HISTORY_METADATA_ESCAPE; output_buffer[1] = metadata_type; va_start(ap, metadata_type); // Compiler warning: // warning: ‘int16_t’ is promoted to ‘int’ when passed through ‘...’ // (so you should pass ‘int’ not ‘int16_t’ to ‘va_arg’) parameter = va_arg(ap, int); // TODO: Add verifications for other metadata-types. if ( (metadata_type == HISTORY_METADATA_TYPE_COLOUR) && ( (parameter < -2) || (parameter > 15 ) ) ) { // -2 is the lowest allowed value for Z_COLOUR_UNDEFINED, 15 the maximum // for all combinations of Z_STYLE. TRACE_LOG("Parameter value %d outside valid range.\n", parameter); i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_INVALID_PARAMETER_TYPE_P0S, -1, "parameter"); } if (metadata_type == HISTORY_METADATA_TYPE_FONT) { h->history_buffer_front_index_font = parameter; TRACE_LOG("storing font.\n"); } else if (metadata_type == HISTORY_METADATA_TYPE_STYLE) { h->history_buffer_front_index_style = parameter; TRACE_LOG("storing style.\n"); } else if (metadata_type == HISTORY_METADATA_TYPE_COLOUR) { h->history_buffer_front_index_foreground = parameter; TRACE_LOG("storing colour.\n"); } else if (metadata_type == HISTORY_METADATA_TYPE_PARAGRAPHATTRIBUTE) { TRACE_LOG("storing paragraph attribute.\n"); } // All parameter values are offset by +13. This is necessary to avoid // having LF characters in the buffer, which makes searching for paragraph // starts much simpler. output_buffer[2] = (z_ucs)(parameter + HISTORY_METADATA_DATA_OFFSET); TRACE_LOG("param1: %d.\n", parameter); if ( (metadata_type == HISTORY_METADATA_TYPE_COLOUR) || (metadata_type == HISTORY_METADATA_TYPE_PARAGRAPHATTRIBUTE) ) { // Read second parameter for all metadatatypes which require it. parameter = va_arg(ap, int); TRACE_LOG("param2: %d.\n", parameter); if ( (metadata_type == HISTORY_METADATA_TYPE_COLOUR) && ( (parameter < -2) || (parameter > 15 ) ) ) { TRACE_LOG("Parameter value %d outside valid range.\n", parameter); i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_INVALID_PARAMETER_TYPE_P0S, -1, "parameter"); h->history_buffer_front_index_background = parameter; } output_buffer[3] = (z_ucs)(parameter + HISTORY_METADATA_DATA_OFFSET); len = 4; } else { len = 3; } va_end(ap); store_data_in_history(h, output_buffer, len, false); return 0; } /* void repeat_paragraphs_from_history(OUTPUTHISTORY *history, int start_paragraph_number, int end_paragraph_number, bool allow_adjust_start_paragraph, struct history_repetition_target *target) { } int get_paragraph_y_positions(OUTPUTHISTORY *history, int screen_width, int bottom_y, int *bottom_y_pos, int top_y, int *top_y_pos, int left_padding); */ // This function will really only decrement the pointer. "Only" means that // even after a successful decrement the pointer is not guaraneteed to // point at text, it may also point at the end of a metadata-entry. z_ucs *decrement_buffer_pointer(OUTPUTHISTORY *h, z_ucs *ptr, unsigned int *nof_wraparounds) { if ( (ptr == h->z_history_buffer_back_index) && (ptr == h->z_history_buffer_front_index) && (*nof_wraparounds > 0)) { TRACE_LOG("History index already at buffer back.\n"); return NULL; } ptr--; if (ptr < h->z_history_buffer_start) { if (h->nof_wraparounds == 0) { TRACE_LOG("History index at front of non-wrapped buffer.\n"); return NULL; } else { TRACE_LOG("History index at front, wrapping around.\n"); ptr = h->z_history_buffer_end; (*nof_wraparounds)--; } } return ptr; } // Used to remove preloaded input: int remove_chars_from_history(OUTPUTHISTORY *history, int nof_chars) { z_ucs *ptr = history->z_history_buffer_front_index; unsigned int nof_wraparounds = history->nof_wraparounds; z_ucs last_data = 0; TRACE_LOG("Removing %d chars from history at %p.\n", nof_chars, ptr); while (nof_chars > 0) { if ((ptr = decrement_buffer_pointer( history, ptr, &nof_wraparounds)) == NULL) // Can't rewind any more. Don't change current pointer. return -1; if ( (*ptr == HISTORY_METADATA_ESCAPE) && (last_data != 0) ) { nof_chars += ( (last_data == HISTORY_METADATA_TYPE_COLOUR) || (last_data == HISTORY_METADATA_TYPE_PARAGRAPHATTRIBUTE) ) ? 4 : 3; } else { last_data = *ptr; nof_chars --; } } history->z_history_buffer_front_index = ptr; history->nof_wraparounds = nof_wraparounds; TRACE_LOG("History went to %p.\n", ptr); return 0; } // Search from index in direction of the back index and return the position // of the next encountered newline char. static z_ucs* find_older_paragraph(OUTPUTHISTORY *h, z_ucs *index) { unsigned int nof_wraparounds = h->nof_wraparounds; if ( (h == NULL) || (h->z_history_buffer_size == 0) ) return NULL; while (*index != '\n') if ((index = decrement_buffer_pointer(h, index, &nof_wraparounds)) == NULL) return NULL; return index; } /* // The "get_current_line" function is deprecated. The problem is that the // conecpt of getting the current line/prompt in a single string cannot // work once metadata is encountered. // z_ucs *get_current_line(OUTPUTHISTORY *h) { z_ucs *last_stored_char_index, *last_newline_index, *result; size_t len, backlen=0, frontlen=0; bool wrap_encountered; unsigned int nof_wraparounds = 0; // Since the front_index points to the position where the next(!) character // should be written to, we've got to step back by one char position. if ((last_stored_char_index = decrement_buffer_pointer( h, h->z_history_buffer_front_index, &nof_wraparounds)) == NULL) { TRACE_LOG("no current line: can't dec ptr.\n"); return NULL; } last_newline_index = find_older_paragraph(h, last_stored_char_index); if (last_newline_index == NULL) { TRACE_LOG("already at last paragraph.\n"); return NULL; } wrap_encountered = last_newline_index > h->z_history_buffer_front_index ? true : false; if (wrap_encountered == false) len = h->z_history_buffer_front_index - last_newline_index; else { backlen = h->z_history_buffer_end - last_newline_index; frontlen = h->z_history_buffer_front_index - h->z_history_buffer_start + 1; len = backlen + frontlen; } TRACE_LOG("cl-len: %ld (%ld + %ld), wrap: %d\n", (long int)len, (long int)backlen, (long int)frontlen, wrap_encountered); result = fizmo_malloc(sizeof(z_ucs) * (len + 1)); if (wrap_encountered == false) { z_ucs_ncpy(result, last_newline_index, len); } else { z_ucs_ncpy(result, last_newline_index + 1, backlen); z_ucs_ncpy(result+backlen, h->z_history_buffer_start, frontlen); } result[len] = 0; return result; } */ void destroy_history_output(history_output *output) { free(output); } // The OUTPUTHISTORY object will ony be valid as long as nothing new is // stored in the history while using it. history_output *init_history_output(OUTPUTHISTORY *h, history_output_target *t, int output_init_flags) { history_output *result; if ( (h == NULL) || (h->z_history_buffer_size == 0) ) { return NULL; } result = fizmo_malloc(sizeof(history_output)); result->history = h; result->validity_wraparounds = h->nof_wraparounds; result->validity_frontindex = h->z_history_buffer_front_index; result->target = t; result->rewound_paragraph_was_newline_terminated = false; result->validation_disabled = (output_init_flags & Z_HISTORY_OUTPUT_WITHOUT_VALIDATION) == 0 ? false : true; result->last_rewinded_paragraphs_block_index = -1; result->last_used_metadata_state_font = -1; result->last_used_metadata_state_style = -1; result->last_used_metadata_state_foreground = Z_COLOUR_UNDEFINED; result->last_used_metadata_state_background = Z_COLOUR_UNDEFINED; result->last_paragraph_attribute_index = NULL; result->dont_skip_newline = false; if ((output_init_flags & Z_HISTORY_OUTPUT_FROM_BUFFERBACK) == 0) { TRACE_LOG("Init from buffer front.\n"); result->current_paragraph_index = h->z_history_buffer_front_index; result->font_at_index = h->history_buffer_front_index_font; result->style_at_index = h->history_buffer_front_index_style; result->foreground_at_index = h->history_buffer_front_index_foreground; result->background_at_index = h->history_buffer_front_index_background; result->found_end_of_buffer = false; result->nof_wraparounds = 0; result->first_iteration_done = false; // Since "z_history_buffer_front_index" always points to the place where // the next char will be stored, we actually have to go back one char // in order to find the last paragraph's stored char. if ((result->current_paragraph_index = decrement_buffer_pointer( result->history, result->current_paragraph_index, &result->nof_wraparounds)) == NULL) { free(result); return NULL; } } else { TRACE_LOG("Init from buffer back.\n"); result->current_paragraph_index = h->z_history_buffer_back_index; result->font_at_index = h->history_buffer_back_index_font; result->style_at_index = h->history_buffer_back_index_style; result->foreground_at_index = h->history_buffer_back_index_foreground; result->background_at_index = h->history_buffer_back_index_background; result->found_end_of_buffer = true; result->nof_wraparounds = h->nof_wraparounds > 0 ? h->nof_wraparounds - 1 : 0; result->first_iteration_done = true; } return result; } static void validate_outputhistory(history_output *output) { if ( (output != NULL) && (output->history->nof_wraparounds == output->validity_wraparounds) && (output->validity_frontindex == output->history->z_history_buffer_front_index) ) return; else i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_HISTORYOUTPUT_NO_LONGER_VALID, -1); } static void evaluate_metadata_for_paragraph(history_output *output) { OUTPUTHISTORY *h = output->history; long int metadata_block_index; unsigned int nof_wraparounds; long int buffer_index = output->current_paragraph_index - h->z_history_buffer_start; z_ucs *index = output->current_paragraph_index; z_ucs *i2 = NULL, *i3 = NULL, *i4 = NULL; int metadata_type, parameter; if (output->validation_disabled == false) { validate_outputhistory(output); } TRACE_LOG("Evaluating metadata for current paragraph from %p.\n", output->current_paragraph_index); if (output->metadata_at_index_evaluated == true) { TRACE_LOG("Already evaluated, returning.\n"); return; } metadata_block_index = buffer_index - (buffer_index % (Z_HISTORY_METADATA_STATE_BLOCK_SIZE)); TRACE_LOG("metadata_block_index: %ld.\n", metadata_block_index); if ( (output->last_rewinded_paragraphs_block_index == metadata_block_index) && (output->last_used_metadata_state_font != -1) && (output->last_used_metadata_state_style != -1) && (output->last_used_metadata_state_foreground != Z_COLOUR_UNDEFINED) && (output->last_used_metadata_state_background != -Z_COLOUR_UNDEFINED) ) { TRACE_LOG("Re-using metadata state block.\n"); output->font_at_index = output->last_used_metadata_state_font; output->style_at_index = output->last_used_metadata_state_style; TRACE_LOG("sai: #1\n"); output->foreground_at_index = output->last_used_metadata_state_foreground; output->background_at_index = output->last_used_metadata_state_background; } else { TRACE_LOG("Searching for metadata.\n"); output->font_at_index = -1; output->style_at_index = -1; TRACE_LOG("sai: #2\n"); output->foreground_at_index = Z_COLOUR_UNDEFINED; output->background_at_index = Z_COLOUR_UNDEFINED; nof_wraparounds = output->nof_wraparounds; while ( (output->font_at_index == -1) || (output->style_at_index == -1) || (output->foreground_at_index == Z_COLOUR_UNDEFINED) || (output->background_at_index == Z_COLOUR_UNDEFINED) ) { TRACE_LOG("search-ptr: %p (%d, %d, %d, %d).\n", index, output->font_at_index, output->style_at_index, output->foreground_at_index, output->background_at_index); i4 = i3; i3 = i2; i2 = index; if ((index = decrement_buffer_pointer( output->history, index, &nof_wraparounds)) == NULL) { TRACE_LOG("Hit end of buffer. Using back values to fill in.\n"); if (output->font_at_index == -1) { output->font_at_index = h->history_buffer_back_index_font; } if (output->style_at_index == -1) { output->style_at_index = h->history_buffer_back_index_style; TRACE_LOG("sai: #3\n"); } if (output->foreground_at_index == Z_COLOUR_UNDEFINED) { output->foreground_at_index=h->history_buffer_front_index_foreground; } if (output->background_at_index == Z_COLOUR_UNDEFINED) { output->background_at_index=h->history_buffer_front_index_background; } break; } else if (*index == HISTORY_METADATA_ESCAPE) { TRACE_LOG("Metadata found at %p.\n", index); metadata_type = *i2; parameter = (int)*i3 - HISTORY_METADATA_DATA_OFFSET; if ( (metadata_type == HISTORY_METADATA_TYPE_FONT) && (output->font_at_index == -1) ) output->font_at_index = parameter; else if ( (metadata_type == HISTORY_METADATA_TYPE_STYLE) && (output->style_at_index == -1) ) { output->style_at_index = parameter; TRACE_LOG("sai: #5\n"); } else if ( (metadata_type == HISTORY_METADATA_TYPE_COLOUR) && ( (output->foreground_at_index == Z_COLOUR_UNDEFINED) || (output->background_at_index == Z_COLOUR_UNDEFINED) ) ) { output->foreground_at_index = parameter; parameter = (int)*i4- HISTORY_METADATA_DATA_OFFSET; output->background_at_index = parameter; } } } } TRACE_LOG("Done: %d, %d, %d, %d.\n", output->font_at_index, output->style_at_index, output->foreground_at_index, output->background_at_index); output->metadata_at_index_evaluated = true; } // After executing this function, the current paragraph index should always // point to the first char of the last paragraph -- not the newline before -- // or the buffer start. In case a previous paragraph could be found the return // value is 0, in case the buffer back was encountered 1 and a negative value // in case of an error. In case char_count is non-null, the number of // non-metadata chars in this paragraph is stored at this reference. int output_rewind_paragraph(history_output *output, long *char_count, int *paragraph_attr1, int *paragraph_attr2) { z_ucs *index, *last_index, *last_index2, *last_index3; int nof_chars = 0; unsigned int nof_wraparounds, last_nof_wraparounds; TRACE_LOG("Rewinding output history by one paragraph from %p.\n", output->current_paragraph_index); if (output->validation_disabled == false) { validate_outputhistory(output); } if ( (output == NULL) || (output->history == NULL) || (output->history->z_history_buffer_size == 0) ) return -1; TRACE_LOG("found_end_of_buffer: %d.\n", output->found_end_of_buffer); if (output->found_end_of_buffer == true) return 1; // We're not changing the index directly in case we're hitting a non-full // paragraph at the front. Instead, we're working on local variables and // only modify the history index in case we can find a newline. index = output->current_paragraph_index; nof_wraparounds = output->nof_wraparounds; // Rewind to last paragraph's newline since the index should always // point to the first char of a paragraph. We only have to do this if // we're not at the buffer end and have already finished at least the // first rewind iteration. if (output->first_iteration_done == true) { TRACE_LOG("Skipping over last paragraph's newline.\n"); // In case we're not at the end of the history, paragraphs are // always newline-terminated. output->rewound_paragraph_was_newline_terminated = true; // It's possible that we're already on the newline in case the very // first paragraph didn't contain anything but a newline, so we'll // only rewind further in case we're not yet there. if (output->dont_skip_newline == false) { TRACE_LOG("Rewinding from %p.\n", index); if ((index = decrement_buffer_pointer( output->history, index, &nof_wraparounds)) == NULL) { TRACE_LOG("Couldn't execute initial index decrement.\n"); return -3; } } else { output->dont_skip_newline = false; } TRACE_LOG("Looking at %p.\n", index); if (*index != '\n') { TRACE_LOG("Internal error rewinding.\n"); return -4; } last_index = index; last_nof_wraparounds = nof_wraparounds; // Rewind to last paragraph's last content char. if ((index = decrement_buffer_pointer( output->history, index, &nof_wraparounds)) == NULL) { // Here we've hit the start of the buffer, so this empty paragraph // (since we've just skipped the newline above) will be the last // we can deliver. TRACE_LOG("Couldn't execute second stop of inital index decrement.\n"); output->found_end_of_buffer = true; TRACE_LOG("found_end_of_buffer: %d.\n", output->found_end_of_buffer); //output->current_paragraph_index = index; //output->nof_wraparounds = nof_wraparounds; output->current_paragraph_index = last_index; output->nof_wraparounds = last_nof_wraparounds; return 0; } else if (*index == '\n') { // In case the next paragraph is empty, quit right away. output->current_paragraph_index = last_index; output->nof_wraparounds = last_nof_wraparounds; return 0; } } else { if (*index == '\n') { output->dont_skip_newline = true; TRACE_LOG("Last output char is newline, returning from 1st iteration.\n"); output->first_iteration_done = true; output->metadata_at_index_evaluated = false; if (char_count != NULL) { *char_count = 0; } //evaluate_metadata_for_paragraph(output); output->rewound_paragraph_was_newline_terminated = true; return 0; } else { output->dont_skip_newline = false; output->rewound_paragraph_was_newline_terminated = false; } //last_index = index; } output->first_iteration_done = true; TRACE_LOG("Index pointing at '%c' / %p.\n", *index, index); // The index is now pointing at the last char of the paragraph we want // to rewind over. We're rewinding until we find the newline or the // buffer start. In the latter case we've got a non-full paragraph which // we won't return. last_index = NULL; last_index2 = NULL; do { // In this loop we're remembering the last index position for two // reasons: One to be able to read the last z_ucs we've iterated over // for easier metadata evaluation (see below), second to make // skipping the newline we might find a bit easier. We're also // remebering the second- and third-last-index for paragraph attribute // envaluation. last_index3 = last_index2; last_index2 = last_index; last_index = index; last_nof_wraparounds = nof_wraparounds; if ((index = decrement_buffer_pointer( output->history, index, &nof_wraparounds)) == NULL) { // In case we can't move back any more we've hit the buffer start. TRACE_LOG("Couldn't decrement history index.\n"); output->found_end_of_buffer = true; return 1; /* if (output->current_paragraph_index != last_index) { output->current_paragraph_index = last_index; output->metadata_at_index_evaluated = false; //output->found_end_of_buffer = true; //evaluate_metadata_for_paragraph(output); if (char_count != NULL) { *char_count = nof_chars; } return 0; } else return -1; */ } nof_chars++; if (*index == HISTORY_METADATA_ESCAPE) { if (*last_index == HISTORY_METADATA_TYPE_COLOUR) { nof_chars -= 4; } else if (*last_index == HISTORY_METADATA_TYPE_PARAGRAPHATTRIBUTE) { if (paragraph_attr1 != NULL) { *paragraph_attr1 = *last_index2 - HISTORY_METADATA_DATA_OFFSET; } if (paragraph_attr2 != NULL) { *paragraph_attr2 = *last_index3 - HISTORY_METADATA_DATA_OFFSET; } nof_chars -= 4; } else { nof_chars -= 3; } } TRACE_LOG("Index pointing at '%c' / %p.\n", *index, index); } while (*index != '\n'); output->current_paragraph_index = last_index; output->nof_wraparounds = last_nof_wraparounds; output->metadata_at_index_evaluated = false; evaluate_metadata_for_paragraph(output); if (char_count != NULL) { *char_count = nof_chars; } return 0; /* // We'll only consider "full" paragraphs when reading the history, which // means that in case the buffer front is not on a newline, we'll just // return 1. if (*index == '\n') { // paragraph found TRACE_LOG("Start of new paragraph found at %p.\n", last_index); output->current_paragraph_index = last_index; return 0; } else { // start of buffer found TRACE_LOG("Buffer front encountered at %p.\n", index); output->current_paragraph_index = index; output->found_end_of_buffer = true; return 1; } */ } int alter_last_paragraph_attributes(history_output *output, int paragraph_attr1, int paragraph_attr2) { z_ucs *index; validate_outputhistory(output); if (output->last_paragraph_attribute_index == NULL) { TRACE_LOG("Not altering paragraph attributes, pointer is NULL.\n"); return -1; } TRACE_LOG("Altering paragraph attributes to %d and %d.\n", paragraph_attr1, paragraph_attr2); index = output->last_paragraph_attribute_index; *index = (z_ucs)(paragraph_attr1 + HISTORY_METADATA_DATA_OFFSET); if (++index > output->history->z_history_buffer_end) { index = output->history->z_history_buffer_start; } *index = (z_ucs)(paragraph_attr2 + HISTORY_METADATA_DATA_OFFSET); return 0; } bool is_output_at_frontindex(history_output *output) { if (output->validation_disabled == false) { validate_outputhistory(output); } if (output->current_paragraph_index == output->history->z_history_buffer_front_index) { return true; } else { return false; } } int output_repeat_paragraphs(history_output *output, int n, bool include_metadata, bool advance_history_pointer) { z_ucs output_buf[REPEAT_PARAGRAPH_BUF_SIZE]; z_ucs *output_ptr = output->current_paragraph_index; int buf_index; int metadata_type = -1, parameter, parameter2; if (output->validation_disabled == false) { validate_outputhistory(output); } if (include_metadata == true) evaluate_metadata_for_paragraph(output); TRACE_LOG("Repeating output history from %p.\n", output_ptr); /* // If we're already at the front index, quit. if (output_ptr == output->history->z_history_buffer_front_index) return 0; */ output->target->set_font( output->font_at_index); output->target->set_text_style( output->style_at_index); output->target->set_colour( output->foreground_at_index, output->background_at_index, -1); if (advance_history_pointer == true) output->found_end_of_buffer = false; buf_index = 0; if (output_ptr == output->history->z_history_buffer_front_index) { TRACE_LOG("Already at buffer front.\n"); n = -1; } else { while (n > 0) { TRACE_LOG("Looking at %p.\n", output_ptr); if (*output_ptr == '\n') { n--; } if ( (buf_index == REPEAT_PARAGRAPH_BUF_SIZE - 1) || (n < 1) || (*output_ptr == HISTORY_METADATA_ESCAPE) || (output_ptr == output->history->z_history_buffer_front_index) ) { output_buf[buf_index] = 0; TRACE_LOG("Sending %d char(s) of output.\n", buf_index); output->target->z_ucs_output(output_buf); if (output_ptr == output->history->z_history_buffer_front_index) { TRACE_LOG("Buffer front encountered.\n"); break; } if (n < 1) { TRACE_LOG("n < 1.\n"); break; } buf_index = 0; if (*output_ptr == HISTORY_METADATA_ESCAPE) { TRACE_LOG("Metadata found at %p in output.\n", output_ptr); if (++output_ptr > output->history->z_history_buffer_end) output_ptr = output->history->z_history_buffer_start; metadata_type = *output_ptr; if (++output_ptr > output->history->z_history_buffer_end) output_ptr = output->history->z_history_buffer_start; parameter = (int)*output_ptr - HISTORY_METADATA_DATA_OFFSET; if (metadata_type == HISTORY_METADATA_TYPE_FONT) { output->font_at_index = parameter; if (include_metadata == true) output->target->set_font(parameter); } else if (metadata_type == HISTORY_METADATA_TYPE_STYLE) { output->style_at_index = parameter; if (include_metadata == true) output->target->set_text_style(parameter); } else if (metadata_type == HISTORY_METADATA_TYPE_COLOUR) { if (++output_ptr > output->history->z_history_buffer_end) output_ptr = output->history->z_history_buffer_start; parameter2 = (int)*output_ptr - HISTORY_METADATA_DATA_OFFSET; output->foreground_at_index = parameter; output->background_at_index = parameter2; if (include_metadata == true) output->target->set_colour(parameter, parameter2, -1); } else if (metadata_type == HISTORY_METADATA_TYPE_PARAGRAPHATTRIBUTE) { output->last_paragraph_attribute_index = output_ptr; // Don't do anything but catch the case in order that we're // not running into the error-else below. if (++output_ptr > output->history->z_history_buffer_end) output_ptr = output->history->z_history_buffer_start; //parameter2 = (int)*output_ptr - HISTORY_METADATA_DATA_OFFSET; } else { TRACE_LOG("Invalid metadata type %d\n", metadata_type); i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_INVALID_PARAMETER_TYPE_P0S, -1, "metadata"); } } } if (metadata_type == -1) { output_buf[buf_index++] = *output_ptr; } else { metadata_type = -1; } if ((++output_ptr) > output->history->z_history_buffer_end) output_ptr = output->history->z_history_buffer_start; } } TRACE_LOG("n: %d.\n", n); if (advance_history_pointer == true) { output->current_paragraph_index = output_ptr; if (output->current_paragraph_index != output->history->z_history_buffer_front_index) { output->current_paragraph_index += 1; } else { output->first_iteration_done = false; if (*(output->current_paragraph_index) == '\n') { output->rewound_paragraph_was_newline_terminated = true; } else { output->rewound_paragraph_was_newline_terminated = false; } output->first_iteration_done = false; TRACE_LOG("first_iteration_done: %d.\n", output->first_iteration_done); } // There might be more metadata blocks after this newline. These // also have to be evaluated if the metadata should be correct // after advancing the pointer. if (*output_ptr == HISTORY_METADATA_ESCAPE) { TRACE_LOG("Found metadata-escape.\n"); } } TRACE_LOG("Repeated output, last included output char: %p.\n", output_ptr); return n; } void remember_history_output_position(history_output *output) { if (output->validation_disabled == false) { validate_outputhistory(output); } output->saved_current_paragraph_index = output->current_paragraph_index; output->saved_nof_wraparounds = output->nof_wraparounds; output->saved_found_end_of_buffer = output->found_end_of_buffer; output->saved_first_iteration_done = output->first_iteration_done; output->saved_rewound_paragraph_was_newline_terminated = output->rewound_paragraph_was_newline_terminated; output->saved_metadata_at_index_evaluated = output->metadata_at_index_evaluated; output->saved_font_at_index = output->font_at_index; output->saved_style_at_index = output->style_at_index; output->saved_foreground_at_index = output->foreground_at_index; output->saved_background_at_index = output->background_at_index; output->saved_last_rewinded_paragraphs_block_index = output->last_rewinded_paragraphs_block_index; output->saved_last_used_metadata_state_font = output->last_used_metadata_state_font; output->saved_last_used_metadata_state_style = output->last_used_metadata_state_style; output->saved_last_used_metadata_state_foreground = output->last_used_metadata_state_foreground; output->saved_last_used_metadata_state_background = output->last_used_metadata_state_background; } void restore_history_output_position(history_output *output) { if (output->validation_disabled == false) { validate_outputhistory(output); } output->current_paragraph_index = output->saved_current_paragraph_index; output->nof_wraparounds = output->nof_wraparounds; output->found_end_of_buffer = output->saved_found_end_of_buffer; output->rewound_paragraph_was_newline_terminated = output->saved_rewound_paragraph_was_newline_terminated; output->first_iteration_done = output->saved_first_iteration_done; output->metadata_at_index_evaluated = output->saved_metadata_at_index_evaluated; output->font_at_index = output->saved_font_at_index; output->style_at_index = output->saved_style_at_index; TRACE_LOG("sai: #4\n"); output->foreground_at_index = output->saved_foreground_at_index; output->background_at_index = output->saved_background_at_index; output->last_rewinded_paragraphs_block_index = output->saved_last_rewinded_paragraphs_block_index; output->last_used_metadata_state_font = output->saved_last_used_metadata_state_font; output->last_used_metadata_state_style = output->saved_last_used_metadata_state_style; output->last_used_metadata_state_foreground = output->saved_last_used_metadata_state_foreground; output->last_used_metadata_state_background = output->saved_last_used_metadata_state_background; } size_t get_allocated_text_history_size(OUTPUTHISTORY *h) { return h->z_history_buffer_size; } #endif /* history_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/history.h000644 000765 000024 00000016512 12606024314 022502 0ustar00chrenderstaff000000 000000 /* history.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef history_h_INCLUDED #define history_h_INCLUDED #include "../tools/tracelog.h" #include "../tools/types.h" #include "../tools/z_ucs.h" #define HISTORY_METADATA_ESCAPE 0 #define HISTORY_METADATA_TYPE_FONT 1 #define HISTORY_METADATA_TYPE_STYLE 2 #define HISTORY_METADATA_TYPE_COLOUR 3 #define HISTORY_METADATA_TYPE_PARAGRAPHATTRIBUTE 4 #define HISTORY_METADATA_DATA_OFFSET 13 #define Z_HISTORY_INCREMENT_SIZE 8*1024 // given in units of z_ucs #define Z_HISTORY_MAXIMUM_SIZE 128*1024*1024 // given in units of z_ucs #define Z_HISTORY_METADATA_STATE_BLOCK_SIZE 16*1024 // given in units of z_ucs #define Z_HISTORY_OUTPUT_WITHOUT_EXTRAS 0 #define Z_HISTORY_OUTPUT_FROM_BUFFERBACK 1 #define Z_HISTORY_OUTPUT_WITHOUT_VALIDATION 2 typedef struct { int window_number; size_t z_history_buffer_size; size_t z_history_maximum_buffer_size; // unit is z_ucs. size_t z_history_buffer_increment_size; z_ucs *z_history_buffer_start; // this will be the result of malloc() z_ucs *z_history_buffer_end; unsigned int nof_wraparounds; // In general, z_history_buffer_front_index denotes the next write position. // In case z_history_buffer_front_index == z_history_buffer_back_index, // wrapped_around has to be checked to distinguish between an empty buffer // and a full, wrapped-around buffer. z_ucs *z_history_buffer_front_index; z_ucs *z_history_buffer_back_index; long int last_metadata_block_index; z_ucs *next_newline_after_buffer_back; // These four values are set when fizmo opens the interface (and when the // values are used in the current version). They keep the current state of // the back-end index of the history queue. This is necessary, since // for example the command to set colour to a given value has already // been overwritten in the history, but the text using the colour is still // in the buffer. z_font history_buffer_back_index_font; z_style history_buffer_back_index_style; z_colour history_buffer_back_index_foreground; z_colour history_buffer_back_index_background; z_font history_buffer_front_index_font; z_style history_buffer_front_index_style; z_colour history_buffer_front_index_foreground; z_colour history_buffer_front_index_background; } OUTPUTHISTORY; typedef struct { void (*set_text_style)(z_style text_style); void (*set_colour)(z_colour foreground, z_colour background, int16_t window); void (*set_font)(z_font font_type); void (*z_ucs_output)(z_ucs *z_ucs_output); } history_output_target; typedef struct { OUTPUTHISTORY *history; // The following two properties are used to ensure that no output has // been written to the history that this output-object is pointing to. unsigned int validity_wraparounds; z_ucs *validity_frontindex; history_output_target *target; z_ucs *current_paragraph_index; unsigned int nof_wraparounds; bool found_end_of_buffer; bool rewound_paragraph_was_newline_terminated; bool first_iteration_done; bool validation_disabled; bool dont_skip_newline; bool metadata_at_index_evaluated; z_font font_at_index; z_style style_at_index; z_colour foreground_at_index; z_colour background_at_index; // In case the last metadata-evaluation for the last paragraph had to use // the metadata-state-block for any metadata-element, these values are // stored in the "last_user_metadata_state_*" variables. In case some // values were not used, -1 should is stored for the current block. long int last_rewinded_paragraphs_block_index; z_font last_used_metadata_state_font; z_style last_used_metadata_state_style; z_colour last_used_metadata_state_foreground; z_colour last_used_metadata_state_background; // Storage for state-saving: z_ucs *saved_current_paragraph_index; unsigned int saved_nof_wraparounds; bool saved_found_end_of_buffer; bool saved_rewound_paragraph_was_newline_terminated; bool saved_first_iteration_done; bool saved_metadata_at_index_evaluated; z_font saved_font_at_index; z_style saved_style_at_index; z_colour saved_foreground_at_index; z_colour saved_background_at_index; long int saved_last_rewinded_paragraphs_block_index; z_font saved_last_used_metadata_state_font; z_style saved_last_used_metadata_state_style; z_colour saved_last_used_metadata_state_foreground; z_colour saved_last_used_metadata_state_background; z_ucs *last_paragraph_attribute_index; } history_output; typedef OUTPUTHISTORY *outputhistory_ptr; #ifndef history_c_INCLUDED extern outputhistory_ptr outputhistory[]; #endif OUTPUTHISTORY *create_outputhistory(int window_number, size_t maximum_buffer_size, size_t buffer_increment_size, z_colour foreground_colour, z_colour background_color, z_font font, z_style style); void destroy_outputhistory(OUTPUTHISTORY *history); void store_z_ucs_output_in_history(OUTPUTHISTORY *history, z_ucs *z_ucs_output); int store_metadata_in_history(OUTPUTHISTORY *history, int metadata_type, ...); void store_data_in_history(OUTPUTHISTORY *h, z_ucs *data, size_t len, bool evaluate_state_block); int remove_chars_from_history(OUTPUTHISTORY *history, int nof_chars); //z_ucs *get_current_line(OUTPUTHISTORY *history); history_output *init_history_output(OUTPUTHISTORY *h, history_output_target *t, int output_init_flags); int output_rewind_paragraph(history_output *output, long *char_count, int *paragraph_attr1, int *paragraph_attr2); int alter_last_paragraph_attributes(history_output *output, int paragraph_attr1, int paragraph_attr2); int output_repeat_paragraphs(history_output *output, int n, bool include_metadata, bool advance_history_pointer); void destroy_history_output(history_output *output); void remember_history_output_position(history_output *output); void restore_history_output_position(history_output *output); size_t get_allocated_text_history_size(OUTPUTHISTORY *h); bool is_output_at_frontindex(history_output *output); #endif /* history_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/hyphenation.c000644 000765 000024 00000034441 12606024314 023323 0ustar00chrenderstaff000000 000000 /* hyphenation.c * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Doing TeX hyphenation; see The TeXbook, Appendix H #ifndef hyphenation_c_INCLUDED #define hyphenation_c_INCLUDED #include #include #include #include "../tools/tracelog.h" #include "../tools/z_ucs.h" #include "../tools/list.h" #include "../tools/i18n.h" #include "../tools/filesys.h" #include "../locales/libfizmo_locales.h" #include "config.h" #include "fizmo.h" #include "hyphenation.h" static z_ucs *last_pattern_locale = NULL; static z_ucs *pattern_data; static z_ucs **patterns; static int nof_patterns = 0; static z_ucs *search_path = NULL; //static z_ucs *subword_buffer = NULL; //static int subword_buffer_size = 0; //static z_ucs *word_buf = NULL; //static int word_buf_len = 0; // From tools/i18n.c: extern char default_search_path[]; static z_ucs input_char(z_file *in) { z_ucs input; if ((input = parse_utf8_char_from_file(in)) == UEOF) { TRACE_LOG("Premature end of file.\n"); i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_ERROR_WHILE_READING_FILE_P0S, -1, ""); } return (z_ucs)input; } // Returns > 0 in case s1 > s2, 0 if equal and < 0 otherwise. static int cmp_pattern(z_ucs *s1, z_ucs *s2) { while ( (*s1 != 0) || (*s2 != 0) ) { if ( (*s1 != 0) && (isdigit(*s1) != 0) ) s1++; if ( (*s2 != 0) && (isdigit(*s2) != 0) ) s2++; if (*s1 != *s2) return *s2 - *s1; s1++; s2++; } return 0; } static int divide(int start, int end) { int i=start, j=end; z_ucs *pattern; z_ucs *pivot = patterns[end]; do { while ( (i < end) && (cmp_pattern(patterns[i], pivot) >= 0 ) ) { //TRACE_LOG("i: %d\n", i); i++; } while ( (j >= start) && (cmp_pattern(patterns[j], pivot) <= 0 ) ) { //TRACE_LOG("j: %d\n", j); j--; } if (i < j) { pattern = patterns[i]; patterns[i] = patterns[j]; patterns[j] = pattern; } } while (i < j); if (cmp_pattern(patterns[i], pivot) < 0) { pattern = patterns[i]; patterns[i] = patterns[end]; patterns[end] = pattern; } return i; } static void sort_patterndata(int start, int end) { int div; if (start < end) { div = divide(start, end); sort_patterndata(start, div - 1); sort_patterndata(div + 1, end); } } static int load_patterns() { list *lines; char *path_as_latin1; char *filename = "patterns.txt", *testfilename; z_ucs *colon_index, *current_locale; size_t bufsize = 0, len, filename_len, locale_len; z_ucs *zucs_buf = NULL, *filename_as_zucs; z_file *patternfile = NULL; size_t nof_zucs_chars; z_ucs *linestart; z_ucs input; char in_char; z_ucs *data; size_t nof_comments; #ifdef ENABLE_TRACING int i; #endif if (search_path == NULL) { if ((path_as_latin1 = get_configuration_value("i18n-search-path")) == NULL) { TRACE_LOG("Using default search path.\n"); path_as_latin1 = default_search_path; } if ((search_path=dup_latin1_string_to_zucs_string(path_as_latin1)) == NULL) return -2; } current_locale = get_current_locale_name(); if (last_pattern_locale != NULL) free(last_pattern_locale); last_pattern_locale = z_ucs_dup(current_locale); locale_len = z_ucs_len(current_locale); TRACE_LOG("pattern path: \""); TRACE_LOG_Z_UCS(search_path); TRACE_LOG("\".\n"); filename_len = strlen(filename); filename_as_zucs = fizmo_malloc(sizeof(z_ucs) * strlen(filename) + 1); utf8_string_to_zucs_string(filename_as_zucs, filename, filename_len + 1); while (*search_path != 0) { colon_index = z_ucs_chr(search_path, Z_UCS_COLON); len = colon_index == NULL ? z_ucs_len(search_path) : (size_t)(colon_index - search_path); TRACE_LOG("len: %ld\n", (long)len); if (len > 0) { if (bufsize < len + filename_len + locale_len + 3) { TRACE_LOG("realloc buf for %ld bytes.\n", (long)sizeof(z_ucs) * (len + filename_len + locale_len + 3)); // open-resource: if ((zucs_buf = realloc(zucs_buf, sizeof(z_ucs) * (len + filename_len + locale_len + 3))) == NULL) { // exit-point: TRACE_LOG("realloc() returned NULL.\n"); free(filename_as_zucs); free(zucs_buf); return -5; } bufsize = len + filename_len + locale_len + 3; } z_ucs_ncpy(zucs_buf, search_path, len); zucs_buf[len] = Z_UCS_SLASH; z_ucs_cpy(zucs_buf + len + 1, current_locale); *(zucs_buf + len + locale_len + 1) = Z_UCS_SLASH; z_ucs_cpy(zucs_buf + len + locale_len + 2, filename_as_zucs); if ((testfilename = dup_zucs_string_to_utf8_string(zucs_buf)) == NULL) { free(zucs_buf); free(filename_as_zucs); return -3; } TRACE_LOG("Trying pattern file: \"%s\".\n", testfilename); patternfile = fsi->openfile(testfilename, FILETYPE_DATA, FILEACCESS_READ); free(testfilename); if (patternfile != NULL) break; } search_path += len + (colon_index != NULL ? 1 : 0); } free(zucs_buf); free(filename_as_zucs); if (patternfile != NULL) { TRACE_LOG("File found.\n"); // We'll now measure the filesize in order to be able to allocate a // single block of memory before reading data. This is necessary, since // we're storing pattern indexes while reading and a realloc might // invalidate these. nof_zucs_chars = 0; for(;;) { // Parse line. input = parse_utf8_char_from_file(patternfile); if (input == UEOF) break; if (input == (z_ucs)'%') { do { input = parse_utf8_char_from_file(patternfile); } while (input != Z_UCS_NEWLINE); } else { nof_zucs_chars++; while (input != Z_UCS_NEWLINE) { nof_zucs_chars++; input = parse_utf8_char_from_file(patternfile); } } } if (fsi->setfilepos(patternfile, 0, SEEK_SET) == -1) { // exit-point: TRACE_LOG("setfilepos() returned -1.\n"); fsi->closefile(patternfile); return -6; } TRACE_LOG("Allocating space for %ld z_ucs chars.\n", nof_zucs_chars); // open-resource: if ((data = malloc(nof_zucs_chars * sizeof(z_ucs))) == NULL) { // exit-point: TRACE_LOG("malloc(%ld) returned NULL.\n", nof_zucs_chars * sizeof(z_ucs)); fsi->closefile(patternfile); return -7; } pattern_data = data; nof_comments = 0; lines = create_list(); //printf("new list created: %p\n", lines); in_char = fsi->readchar(patternfile); while (in_char != EOF) { if (in_char == '%') { TRACE_LOG("Start comment.\n"); do { input = input_char(patternfile); } while (input != Z_UCS_NEWLINE); nof_comments++; } else { // Found a new line. fsi->unreadchar(in_char, patternfile); linestart = data; TRACE_LOG("Start pattern.\n"); for (;;) { input = input_char(patternfile); if (input == Z_UCS_NEWLINE) { *data ++ = 0; TRACE_LOG("New line at %p.\n", linestart); add_list_element(lines, (void*)linestart); break; } else { // Here we've found some "normal" output. *data++ = (z_ucs)input; } } //messages_processed++; } in_char = fsi->readchar(patternfile); } fsi->closefile(patternfile); nof_patterns = get_list_size(lines); patterns = (z_ucs**)delete_list_and_get_ptrs(lines); TRACE_LOG("Read %d patterns, %ld comments.\n", nof_patterns, nof_comments); sort_patterndata(0, nof_patterns - 1); #ifdef ENABLE_TRACING TRACE_LOG("sorted:\n"); for (i=0; i= 0) { //TRACE_LOG("start: bottom: %d, top: %d.\n", bottom, top); index = bottom + ( (top - bottom) / 2 ); //TRACE_LOG("Compare (%d): \"", index); //TRACE_LOG_Z_UCS(patterns[index]); //TRACE_LOG("\".\n"); if ((cmp = cmp_pattern(subword, patterns[index])) == 0) return patterns[index]; else if (cmp > 0) top = index - 1; else bottom = index + 1; //TRACE_LOG("end : bottom: %d, top: %d.\n", bottom, top); } return NULL; } z_ucs *hyphenate(z_ucs *word_to_hyphenate) { int i, j, k, l, start_offset, end_offset; int word_len, process_index; z_ucs *ptr; int word_to_hyphenate_len, score, max_score; z_ucs buf; z_ucs *word_buf, *result_buf, *result_ptr; if ( (word_to_hyphenate == NULL) || ((word_to_hyphenate_len = z_ucs_len(word_to_hyphenate)) < 1) ) { TRACE_LOG("hyph input empty.\n"); return NULL; } if ( (last_pattern_locale == NULL) || (z_ucs_cmp(last_pattern_locale, get_current_locale_name()) != 0) ) { if (load_patterns() < 0) { TRACE_LOG("Couldn't load patterns.\n"); return NULL; } } if ((result_buf = malloc( sizeof(z_ucs) * (word_to_hyphenate_len * 2 + 1))) == NULL) return NULL; if (z_ucs_len(word_to_hyphenate) < 4) { z_ucs_cpy(result_buf, word_to_hyphenate); return result_buf; } if ((word_buf = malloc( sizeof(z_ucs) * (word_to_hyphenate_len + 3))) == NULL) { free(result_buf); return NULL; } *word_buf = '.'; z_ucs_cpy(word_buf + 1, word_to_hyphenate); word_buf[word_to_hyphenate_len+1] = '.'; word_buf[word_to_hyphenate_len+2] = 0; word_len = word_to_hyphenate_len + 2; TRACE_LOG("Hyphenate: \""); TRACE_LOG_Z_UCS(word_buf); TRACE_LOG("\".\n"); result_ptr = result_buf; *(result_ptr++) = *word_to_hyphenate; // Process all inter-letter positions. From the TeXbook, page 453: // "[...] except that plain TeX blocks hyphens after the very first // letter or before the last or second-last letter of a word." Thus, // we'll simply process entirely the same range here to avoid strange // hyphenations. for (i=1; i word_len - j) end_offset = word_len - j; TRACE_LOG("j: %d, start: %d, end: %d, pi: %d\n", j, start_offset, end_offset, process_index); for (k=start_offset; k<=end_offset; k++) { buf = word_buf[k + j]; word_buf[k + j] = 0; if ((ptr = get_pattern(word_buf + k)) != NULL) { TRACE_LOG("Found (%d): \"", k); TRACE_LOG_Z_UCS(ptr); TRACE_LOG("\".\n"); l = 0; while (l < process_index - (k - start_offset)) { TRACE_LOG("l: %d, process_index: %d.\n", l, process_index); if (isdigit(*ptr) == 0) l++; ptr++; } score = isdigit(*ptr) ? *ptr - '0' : 0; if (score > max_score) max_score = score; TRACE_LOG("score (max: %d): %d.\n", max_score, score); } word_buf[k + j] = buf; } if (start_offset != 0) start_offset--; if (process_index <= i) process_index++; } TRACE_LOG("Finished for position %d (%c).\n", i, word_buf[i]); if (i > 1) { *(result_ptr++) = word_buf[i]; if ((max_score & 1) != 0) { *(result_ptr++) = Z_UCS_SOFT_HYPEN; TRACE_LOG("Found hyph point.\n"); } } } *(result_ptr++) = word_buf[i]; *(result_ptr++) = word_buf[i+1]; *(result_ptr++) = word_buf[i+2]; *result_ptr = 0; TRACE_LOG("Result: \""); TRACE_LOG_Z_UCS(result_buf); TRACE_LOG("\".\n"); free(word_buf); return result_buf; } void free_hyphenation_memory(void) { if (last_pattern_locale != NULL) { free(last_pattern_locale); last_pattern_locale = NULL; } if (pattern_data != NULL) { free(pattern_data); pattern_data = NULL; } if (patterns != NULL) { free(patterns); patterns = NULL; } if (search_path == NULL) { free(search_path); search_path = NULL; } } #endif /* hyphenation_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/hyphenation.h000644 000765 000024 00000003261 12606024314 023324 0ustar00chrenderstaff000000 000000 /* hyphenation.h * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef hyphenation_h_INCLUDED #define hyphenation_h_INCLUDED z_ucs *hyphenate(z_ucs *word_to_hyphenate); void free_hyphenation_memory(void); #endif /* hyphenation_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/iff.c000644 000765 000024 00000020767 12606024314 021547 0ustar00chrenderstaff000000 000000 /* iff.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // iff.c provides a simple wrapper for managing IFF files. "Simple" meaning // that it has been tailored around the needs for the quetzal save file // format and thus will almost certainly not work with other iff related // data. #include #include #include #include #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "../tools/types.h" #include "../tools/filesys.h" #include "iff.h" #include "../locales/libfizmo_locales.h" static int current_mode; //static int current_form_length; static long current_chunk_offset; static char four_chars[5]; static int last_chunk_length; //static int filename_utf8_size = 0; static int read_four_chars(z_file *iff_file) { int data; int i; four_chars[4] = '\0'; for (i=0; i<4; i++) { data = fsi->readchar(iff_file); if (data == EOF) return -1; four_chars[i] = (char)data; } return 0; } bool detect_simple_iff_stream(z_file *iff_file) { if (fsi->setfilepos(iff_file, 0, SEEK_SET) == -1) return false; if (read_four_chars(iff_file) != 0) return false; if (strcmp(four_chars, "FORM") != 0) return false; if (read_chunk_length(iff_file) != 0) return false; if (read_four_chars(iff_file) != 0) return false; return true; } int init_empty_file_for_iff_write(z_file *file_to_init) { if ((fsi->writechars("FORM\0\0\0\0IFZS", 12, file_to_init)) != 12) return -1; else return 0; } z_file *open_simple_iff_file(char *filename, int mode) { z_file *iff_file; if (filename == NULL) return NULL; TRACE_LOG("Trying to open IFF file \"%s\".\n", filename); current_mode = mode; if ( (mode == IFF_MODE_READ) || (mode == IFF_MODE_READ_SAVEGAME) ) { iff_file = mode == IFF_MODE_READ_SAVEGAME ? fsi->openfile(filename, FILETYPE_SAVEGAME, FILEACCESS_READ) : fsi->openfile(filename, FILETYPE_DATA, FILEACCESS_READ); if (iff_file == NULL) return NULL; if (detect_simple_iff_stream(iff_file) == false) { (void)fsi->closefile(iff_file); return NULL; } } else if ( (mode == IFF_MODE_WRITE) || (mode == IFF_MODE_WRITE_SAVEGAME) ) { iff_file = mode == IFF_MODE_WRITE_SAVEGAME ? fsi->openfile(filename, FILETYPE_SAVEGAME, FILEACCESS_WRITE) : fsi->openfile(filename, FILETYPE_DATA, FILEACCESS_WRITE); if (iff_file == NULL) return NULL; if (init_empty_file_for_iff_write(iff_file) == -1) { (void)fsi->closefile(iff_file); return NULL; } } else { i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_INVALID_IFF_ACCESS_MODE_P0D, -1, (long int)mode); /*@-unreachable@*/ return NULL; // Will never be executed, just to put compiler at ease. /*@+unreachable@*/ } return iff_file; } int get_last_chunk_length() { return last_chunk_length; } int read_chunk_length(z_file *iff_file) { last_chunk_length = read_four_byte_number(iff_file); TRACE_LOG("last_chunk_length set to %d.\n", last_chunk_length); return 0; } int start_new_chunk(char *id, z_file *iff_file) { if (fsi->writechars(id, 4, iff_file) != 4) return -1; if (fsi->writechars("\0\0\0\0", 4, iff_file) != 4) return -1; if ((current_chunk_offset = fsi->getfilepos(iff_file)) == -1) return -1; return 0; } int write_four_byte_number(uint32_t number, z_file *iff_file) { if (fsi->writechar((int)(number >> 24), iff_file) == EOF) return -1; if (fsi->writechar((int)(number >> 16), iff_file) == EOF) return -1; if (fsi->writechar((int)(number >> 8), iff_file) == EOF) return -1; if (fsi->writechar((int)(number ), iff_file) == EOF) return -1; return 0; } int end_current_chunk(z_file *iff_file) { long current_offset; long chunk_length; uint32_t chunk_length_uint32_t; if ((current_offset = fsi->getfilepos(iff_file)) == -1) return -1; chunk_length = current_offset - current_chunk_offset; TRACE_LOG("Chunk length: %ld.\n", chunk_length); if ((uint32_t)chunk_length > UINT32_MAX) return -1; chunk_length_uint32_t = (uint32_t)chunk_length; if ((chunk_length_uint32_t & 1) != 0) { // 8.4.1: If length is odd, these are followed by a single zero // byte. This byte is *not* included in the chunk length ... if (fsi->writechar(0, iff_file) == EOF) return -1; TRACE_LOG("Padding with single zero byte.\n"); } TRACE_LOG("Seeking position %ld.\n", current_chunk_offset - 4); if (fsi->setfilepos(iff_file, current_chunk_offset - 4, SEEK_SET) == -1) return -1; TRACE_LOG("Writing chunk length %d.\n", chunk_length_uint32_t); if (write_four_byte_number(chunk_length_uint32_t, iff_file) == -1) return -1; TRACE_LOG("Seeking end of file.\n"); if (fsi->setfilepos(iff_file, 0, SEEK_END) != 0) return -1; TRACE_LOG("Chunk writing finished.\n"); return 0; } int close_simple_iff_file(z_file *iff_file) { long length; uint32_t length_uint32_t; if (fsi->setfilepos(iff_file, 0, SEEK_END) == -1) return -1; if ((length = fsi->getfilepos(iff_file)) == -1) return -1; if ((uint32_t)length > UINT32_MAX) return -1; length -= 8; length_uint32_t = (uint32_t)length; if (fsi->setfilepos(iff_file, 4, SEEK_SET) == -1) return -1; if (write_four_byte_number(length_uint32_t, iff_file) == -1) return -1; if (fsi->closefile(iff_file) == EOF) return -1; return 0; } int find_chunk(char *id, z_file *iff_file) { int chunk_length; TRACE_LOG("Looking for chunk \"%s\".\n", id); if (fsi->setfilepos(iff_file, 12L, SEEK_SET) == -1) { TRACE_LOG("%s\n", strerror(errno)); return -1; } for (;;) { if (read_four_chars(iff_file) != 0) { TRACE_LOG("%s\n", strerror(errno)); return -1; } if (strcmp(id, four_chars) == 0) { TRACE_LOG("Found chunk \"%s\".\n", four_chars); return 0; } else { TRACE_LOG("Skipping chunk \"%s\".\n", four_chars); } if (read_chunk_length(iff_file) != 0) return -1; chunk_length = last_chunk_length; if ((chunk_length & 1) != 0) chunk_length++; TRACE_LOG("Skipping %d bytes.\n", chunk_length); if (fsi->setfilepos(iff_file, chunk_length, SEEK_CUR) == -1) { TRACE_LOG("%s\n", strerror(errno)); return -1; } } } uint32_t read_four_byte_number(z_file *iff_file) { int data; int i; uint32_t result = 0; for (i=0; i<4; i++) { data = fsi->readchar(iff_file); if (data == EOF) { (void)fsi->closefile(iff_file); return -1; } result |= ((uint8_t)data) << /*@-shiftnegative@*/ 8*(3-i) /*@-shiftnegative@*/ ; } return result; } char *read_form_type(z_file *iff_file) { if (fsi->setfilepos(iff_file, 8L, SEEK_SET) == -1) { TRACE_LOG("%s\n", strerror(errno)); return NULL; } if (read_four_chars(iff_file) != 0) { TRACE_LOG("%s\n", strerror(errno)); return NULL; } return four_chars; } bool is_form_type(z_file *iff_file, char* form_type) { return strcmp(read_form_type(iff_file), form_type) == 0 ? true : false; } fizmo-0.7.10/libfizmo/src/interpreter/iff.h000644 000765 000024 00000004522 12606024314 021543 0ustar00chrenderstaff000000 000000 /* iff.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef iff_h_INCLUDED #define iff_h_INCLUDED #include #include "../tools/types.h" #define IFF_MODE_READ 0 #define IFF_MODE_READ_SAVEGAME 1 #define IFF_MODE_WRITE 2 #define IFF_MODE_WRITE_SAVEGAME 3 bool detect_simple_iff_stream(z_file *iff_file); int init_empty_file_for_iff_write(z_file *file_to_init); z_file *open_simple_iff_file(char *filename, int mode); int start_new_chunk(char *id, z_file *iff_file); int end_current_chunk(z_file *iff_file); int close_simple_iff_file(z_file *iff_file); int find_chunk(char *id, z_file *iff_file); int read_chunk_length(z_file *iff_file); int get_last_chunk_length(); int write_four_byte_number(uint32_t number, z_file *iff_file); uint32_t read_four_byte_number(z_file *iff_file); char *read_form_type(z_file *iff_file); bool is_form_type(z_file *iff_file, char* form_type); #endif /* iff_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/Makefile.am000644 000765 000024 00000006071 12606024314 022663 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AM_CFLAGS = AM_CPPFLAGS = LDADD = # Don't run ranlib directly, since in case OS X universal libraries are # built, files processed by ranlib cannot be any longer processed by ar # (which is required to assemble libfizmo later on). RANLIB = true noinst_LIBRARIES = libinterpreter.a libinterpreter_a_SOURCES = babel.c blorb.c config.c fizmo.c hyphenation.c \ iff.c mathemat.c misc.c mt19937ar.c object.c output.c property.c routine.c \ savegame.c sound.c stack.c streams.c table.c text.c undo.c variable.c \ wordwrap.c zpu.c if ENABLE_TRACING AM_CFLAGS += -DENABLE_TRACING= endif if FIZMO_DIST_VERSION AM_CFLAGS += -DFIZMO_DIST_VERSION=\"$(FIZMO_DIST_VERSION)\" endif if ENABLE_BABEL AM_CPPFLAGS += -DUSE_LIBXML2 AM_CFLAGS += $(libxml2_CFLAGS) LDADD += $(libxml2_LIBS) else AM_CFLAGS += -DDISABLE_BABEL= endif if ENABLE_STRICT_Z AM_CFLAGS += -DSTRICT_Z= endif if ENABLE_SEGFAULT_ON_ERROR AM_CFLAGS += -DTHROW_SIGFAULT_ON_ERROR= endif if ENABLE_FILELIST libinterpreter_a_SOURCES += filelist.c else AM_CFLAGS += -DDISABLE_FILELIST= endif if ENABLE_BLOCKBUFFER libinterpreter_a_SOURCES += blockbuf.c else AM_CFLAGS += -DDISABLE_BLOCKBUFFER= endif if ENABLE_COMMAND_HISTORY libinterpreter_a_SOURCES += cmd_hst.c else AM_CFLAGS += -DDISABLE_COMMAND_HISTORY= endif if ENABLE_OUTPUT_HISTORY libinterpreter_a_SOURCES += history.c else AM_CFLAGS += -DDISABLE_OUTPUT_HISTORY= endif if ENABLE_CONFIG_FILES else AM_CFLAGS += -DDISABLE_CONFIGFILES= endif if ENABLE_PREFIX_COMMANDS else AM_CFLAGS += -DDISABLE_PREFIX_COMMANDS= endif if ENABLE_DEBUGGER libinterpreter_a_SOURCES += debugger.c AM_CFLAGS += -DENABLE_DEBUGGER= endif fizmo-0.7.10/libfizmo/src/interpreter/Makefile.in000644 000765 000024 00000061455 12606024550 022705 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : @ENABLE_TRACING_TRUE@am__append_1 = -DENABLE_TRACING= @FIZMO_DIST_VERSION_TRUE@am__append_2 = -DFIZMO_DIST_VERSION=\"$(FIZMO_DIST_VERSION)\" @ENABLE_BABEL_TRUE@am__append_3 = -DUSE_LIBXML2 @ENABLE_BABEL_TRUE@am__append_4 = $(libxml2_CFLAGS) @ENABLE_BABEL_TRUE@am__append_5 = $(libxml2_LIBS) @ENABLE_BABEL_FALSE@am__append_6 = -DDISABLE_BABEL= @ENABLE_STRICT_Z_TRUE@am__append_7 = -DSTRICT_Z= @ENABLE_SEGFAULT_ON_ERROR_TRUE@am__append_8 = -DTHROW_SIGFAULT_ON_ERROR= @ENABLE_FILELIST_TRUE@am__append_9 = filelist.c @ENABLE_FILELIST_FALSE@am__append_10 = -DDISABLE_FILELIST= @ENABLE_BLOCKBUFFER_TRUE@am__append_11 = blockbuf.c @ENABLE_BLOCKBUFFER_FALSE@am__append_12 = -DDISABLE_BLOCKBUFFER= @ENABLE_COMMAND_HISTORY_TRUE@am__append_13 = cmd_hst.c @ENABLE_COMMAND_HISTORY_FALSE@am__append_14 = -DDISABLE_COMMAND_HISTORY= @ENABLE_OUTPUT_HISTORY_TRUE@am__append_15 = history.c @ENABLE_OUTPUT_HISTORY_FALSE@am__append_16 = -DDISABLE_OUTPUT_HISTORY= @ENABLE_CONFIG_FILES_FALSE@am__append_17 = -DDISABLE_CONFIGFILES= @ENABLE_PREFIX_COMMANDS_FALSE@am__append_18 = -DDISABLE_PREFIX_COMMANDS= @ENABLE_DEBUGGER_TRUE@am__append_19 = debugger.c @ENABLE_DEBUGGER_TRUE@am__append_20 = -DENABLE_DEBUGGER= subdir = libfizmo/src/interpreter ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libinterpreter_a_AR = $(AR) $(ARFLAGS) libinterpreter_a_LIBADD = am__libinterpreter_a_SOURCES_DIST = babel.c blorb.c config.c fizmo.c \ hyphenation.c iff.c mathemat.c misc.c mt19937ar.c object.c \ output.c property.c routine.c savegame.c sound.c stack.c \ streams.c table.c text.c undo.c variable.c wordwrap.c zpu.c \ filelist.c blockbuf.c cmd_hst.c history.c debugger.c @ENABLE_FILELIST_TRUE@am__objects_1 = filelist.$(OBJEXT) @ENABLE_BLOCKBUFFER_TRUE@am__objects_2 = blockbuf.$(OBJEXT) @ENABLE_COMMAND_HISTORY_TRUE@am__objects_3 = cmd_hst.$(OBJEXT) @ENABLE_OUTPUT_HISTORY_TRUE@am__objects_4 = history.$(OBJEXT) @ENABLE_DEBUGGER_TRUE@am__objects_5 = debugger.$(OBJEXT) am_libinterpreter_a_OBJECTS = babel.$(OBJEXT) blorb.$(OBJEXT) \ config.$(OBJEXT) fizmo.$(OBJEXT) hyphenation.$(OBJEXT) \ iff.$(OBJEXT) mathemat.$(OBJEXT) misc.$(OBJEXT) \ mt19937ar.$(OBJEXT) object.$(OBJEXT) output.$(OBJEXT) \ property.$(OBJEXT) routine.$(OBJEXT) savegame.$(OBJEXT) \ sound.$(OBJEXT) stack.$(OBJEXT) streams.$(OBJEXT) \ table.$(OBJEXT) text.$(OBJEXT) undo.$(OBJEXT) \ variable.$(OBJEXT) wordwrap.$(OBJEXT) zpu.$(OBJEXT) \ $(am__objects_1) $(am__objects_2) $(am__objects_3) \ $(am__objects_4) $(am__objects_5) libinterpreter_a_OBJECTS = $(am_libinterpreter_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libinterpreter_a_SOURCES) DIST_SOURCES = $(am__libinterpreter_a_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ # Don't run ranlib directly, since in case OS X universal libraries are # built, files processed by ranlib cannot be any longer processed by ar # (which is required to assemble libfizmo later on). RANLIB = true SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AM_CFLAGS = $(am__append_1) $(am__append_2) $(am__append_4) \ $(am__append_6) $(am__append_7) $(am__append_8) \ $(am__append_10) $(am__append_12) $(am__append_14) \ $(am__append_16) $(am__append_17) $(am__append_18) \ $(am__append_20) AM_CPPFLAGS = $(am__append_3) LDADD = $(am__append_5) noinst_LIBRARIES = libinterpreter.a libinterpreter_a_SOURCES = babel.c blorb.c config.c fizmo.c \ hyphenation.c iff.c mathemat.c misc.c mt19937ar.c object.c \ output.c property.c routine.c savegame.c sound.c stack.c \ streams.c table.c text.c undo.c variable.c wordwrap.c zpu.c \ $(am__append_9) $(am__append_11) $(am__append_13) \ $(am__append_15) $(am__append_19) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 libfizmo/src/interpreter/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libfizmo/src/interpreter/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libinterpreter.a: $(libinterpreter_a_OBJECTS) $(libinterpreter_a_DEPENDENCIES) $(EXTRA_libinterpreter_a_DEPENDENCIES) $(AM_V_at)-rm -f libinterpreter.a $(AM_V_AR)$(libinterpreter_a_AR) libinterpreter.a $(libinterpreter_a_OBJECTS) $(libinterpreter_a_LIBADD) $(AM_V_at)$(RANLIB) libinterpreter.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blockbuf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blorb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmd_hst.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debugger.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filelist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fizmo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/history.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hyphenation.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iff.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mathemat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mt19937ar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/object.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/output.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/property.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/routine.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/savegame.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/streams.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/table.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/undo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/variable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wordwrap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zpu.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 $(LIBRARIES) 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-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-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 -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic 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-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile # 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: fizmo-0.7.10/libfizmo/src/interpreter/mathemat.c000644 000765 000024 00000026212 12606024314 022572 0ustar00chrenderstaff000000 000000 /* mathemat.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * This file was named "math.h" before but renamed to "mathemat.h" to avoid * collisions with the standard math.h include. */ #ifndef mathemat_h_INCLUDED #define mathemat_h_INCLUDED #include #include #include #include // for rint (see above) #include // for [s]random on Mac OS X #include #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "math.h" #include "config.h" #include "mt19937ar.h" #include "variable.h" #include "zpu.h" #include "../locales/libfizmo_locales.h" static int16_t predictable_upper_border = 999; static int16_t last_predictable_random = 0; static unsigned uninitialized_unsigned; void opcode_and(void) { TRACE_LOG("Opcode: AND.\n"); read_z_result_variable(); TRACE_LOG("ANDing %x and %x to %x.\n", op[0], op[1], op[0] & op[1]); set_variable(z_res_var, op[0] & op[1], false); } void opcode_add(void) { TRACE_LOG("Opcode: ADD.\n"); read_z_result_variable(); TRACE_LOG("Adding %d and %d.\n", (int16_t)op[0], (int16_t)op[1]); set_variable(z_res_var, (uint16_t)(((int16_t)op[0]) + ((int16_t) op[1])), false); } void opcode_sub(void) { TRACE_LOG("Opcode: SUB.\n"); read_z_result_variable(); // (Updates / Clarifications): Opcode operands are always evaluated // from first to last -- this order is important when the stack // pointer appears as an argument. Thus "@sub sp sp" subtracts the // second-from-top stack item from the topmost stack item. TRACE_LOG("Subtracting %x from %x.\n", (int16_t)op[0], (int16_t)op[1]); set_variable(z_res_var, (uint16_t)(((int16_t)op[0]) - ((int16_t)op[1])), false); } void opcode_je(void) { uint8_t result = 0; uint8_t i; TRACE_LOG("Opcode: JE.\n"); // je can take between 2 and 4 operands. je with just 1 operand // is not permitted. if (number_of_operands == 1) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_OPCODE_JE_WITH_ONLY_1_OPERAND_IS_ILLEGAL, -1); TRACE_LOG("Number of operands for JE: %d.\n", number_of_operands); for (i=1; i ((int16_t)op[1]) ? (uint8_t)1 : (uint8_t)0); } void opcode_inc_chk(void) { int16_t value; // FIXME: Is all this signed? I hope so, because JG is singed. TRACE_LOG("Opcode: INC_CHK.\n"); //Indirect variable references // In the seven opcodes that take indirect variable references // (inc, dec, inc_chk, dec_chk, load, store, pull), an indirect // reference to the stack pointer does not push or pull the top // item of the stack -- it is read or written in place. value = (int16_t)get_variable(op[0], false); TRACE_LOG("Incrementing variable with code %d from %d to %d.\n", op[0], value, value+1); value++; set_variable(op[0], (uint16_t)value, false); TRACE_LOG("Checking whether %d > %d.\n", value, (int16_t)op[1]); evaluate_branch(value > ((int16_t)op[1]) ? (uint8_t)1 : (uint8_t)0); } void opcode_test(void) { TRACE_LOG("Opcode: TEST.\n"); TRACE_LOG("Testing if %x in %x is set.\n", op[0], op[1]); evaluate_branch(((op[0] & op[1]) == op[1]) ? (uint8_t)1 : (uint8_t)0); } void opcode_jl(void) { // Jump if a < b (using a signed 16-bit comparison). TRACE_LOG("Opcode: JL.\n"); TRACE_LOG("Testing if %i is smaller than %i.\n", (int16_t)op[0], (int16_t)op[1]); evaluate_branch( (((int16_t)op[0]) < ((int16_t)op[1])) ? (uint8_t)1: (uint8_t)0); } void opcode_dec_chk(void) { int16_t value; // FIXME: Is all this signed? I hope so, because JG is singed. TRACE_LOG("Opcode: DEC_CHK.\n"); value = (int16_t)get_variable(op[0], false); TRACE_LOG("Decrementing variable with code %d from %d to %d.\n", op[0], value, value-1); value--; set_variable(op[0], (uint16_t)value, false); TRACE_LOG("Checking whether %d < %d.\n", value, (int16_t)op[1]); evaluate_branch(value < ((int16_t)op[1]) ? (uint8_t)1 : (uint8_t)0); } void opcode_mul(void) { TRACE_LOG("Opcode: MUL.\n"); read_z_result_variable(); TRACE_LOG("Multiplying %d and %d.\n", (int16_t)op[0], (int16_t)op[1]); set_variable(z_res_var, (uint16_t)(((int16_t)op[0]) * ((int16_t) op[1])), false); } void seed_random_generator(void) { unsigned long init[RANDOM_SEED_SIZE]; time_t seconds; int i; if ((seconds = time(NULL)) == (time_t)-1) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_TIME_RETURNED_NEG_1, -1); srand(((unsigned)seconds) ^ uninitialized_unsigned); // Init parameters are alternately seeded with a pseudo-random value and // the uninitialzed stack memory. for (i=0; i= 1000) ) { TRACE_LOG("Result should be >= 1 and <= %d.\n", op[0]); random_number = genrand_int32(); TRACE_LOG("Random number drawn: %ld.\n", random_number); multiplier = (double)(op[0] - 1) / (double)GENRAND_INT32_MAX; // Subtract 1 from op[0] since we want to cover the range from 1 to op[0], // not 0 to op[0]. TRACE_LOG("Result: %d.\n", ((uint16_t)rint((double)random_number * multiplier)) + 1); set_variable( z_res_var, ((uint16_t)rint((double)random_number * multiplier)) + 1, false); } else { TRACE_LOG("Random generator in predictable mode.\n"); last_predictable_random++; if (last_predictable_random > predictable_upper_border) last_predictable_random = 1; TRACE_LOG("Returning random value %d\n", last_predictable_random); set_variable( z_res_var, (uint16_t)last_predictable_random, false); } } } void opcode_div(void) { TRACE_LOG("Opcode: DIV.\n"); read_z_result_variable(); if (op[1] == 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_CANNOT_DIVIDE_BY_ZERO, -1); TRACE_LOG("Dividing %d by %d.\n", (int16_t)op[0], (int16_t)op[1]); set_variable(z_res_var, (uint16_t)(((int16_t)op[0]) / ((int16_t)op[1])), false); } void opcode_or(void) { TRACE_LOG("Opcode: OR.\n"); read_z_result_variable(); TRACE_LOG("ORing %x and %x to %x.\n", op[0], op[1], op[0] | op[1]); set_variable(z_res_var, op[0] | op[1], false); } void opcode_mod(void) { TRACE_LOG("Opcode: MOD.\n"); if (op[1] == 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_CANNOT_DIVIDE_BY_ZERO, -1); read_z_result_variable(); TRACE_LOG("MODing %d and %d to %d.\n", (int16_t)op[0], (int16_t)op[1], (uint16_t)((int16_t)op[0] % (int16_t)op[1])); set_variable(z_res_var, (uint16_t)((int16_t)op[0] % (int16_t)op[1]), false); } void opcode_not(void) { TRACE_LOG("Opcode: NOT.\n"); read_z_result_variable(); TRACE_LOG("NOTing %x to %x.\n", op[0], ~op[0]); set_variable(z_res_var, ~op[0], false); } void opcode_art_shift(void) { int16_t result = (int16_t)op[0]; int16_t shift_places = (int16_t)op[1]; TRACE_LOG("Opcode: ART_SHIFT.\n"); read_z_result_variable(); /*@-shiftnegative@*/ /*@-shiftimplementation@*/ if (shift_places > 0) result <<= shift_places; else if (shift_places < 0) result >>= (-shift_places); /*@+shiftimplementation@*/ /*@+shiftnegative@*/ set_variable(z_res_var, (uint16_t)result, false); } void opcode_log_shift(void) { uint16_t result = (uint16_t)op[0]; int16_t shift_places = (int16_t)op[1]; read_z_result_variable(); if (shift_places > 0) result <<= shift_places; else if (shift_places < 0) result >>= (-shift_places); set_variable(z_res_var, result, false); } #endif /* mathemat_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/mathemat.h000644 000765 000024 00000004276 12606024314 022605 0ustar00chrenderstaff000000 000000 /* mathemat.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * This file was named "math.h" before but renamed to "mathemat.h" to avoid * collisions with the standard math.h include. */ #include #ifndef mathemat_h_INCLUDED #define mathemat_h_INCLUDED void opcode_and(void); void opcode_add(void); void opcode_sub(void); void opcode_je(void); void opcode_jz(void); void opcode_jg(void); void opcode_inc_chk(void); void opcode_test(void); void opcode_jl(void); void opcode_dec_chk(void); void opcode_mul(void); void opcode_random(void); void opcode_div(void); void opcode_or(void); void opcode_mod(void); void opcode_not(void); void opcode_art_shift(void); void opcode_log_shift(void); void seed_random_generator(void); #endif /* mathemat_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/misc.c000644 000765 000024 00000014202 12606024314 021721 0ustar00chrenderstaff000000 000000 /* misc.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "../tools/filesys.h" #include "misc.h" #include "fizmo.h" #include "streams.h" #include "stack.h" #include "zpu.h" #include "routine.h" #include "variable.h" #include "../locales/libfizmo_locales.h" #ifdef ENABLE_DEBUGGER #include "debugger.h" #endif // ENABLE_DEBUGGER #if !defined(__WIN32__) static struct sigaction fizmo_sigactions; #endif // defined(__WIN32__) void opcode_restart(void) { TRACE_LOG("Opcode: RESTART.\n"); terminate_interpreter = INTERPRETER_QUIT_RESTART; } void opcode_verify(void) { uint16_t file_length = (z_mem[0x1a] << 8) | z_mem[0x1b]; uint16_t header_checksum = (z_mem[0x1c] << 8) | z_mem[0x1d]; uint16_t calculated_checksum = 0; int i, input, scale; TRACE_LOG("Opcode: VERIFY.\n"); if ( (file_length == 0) && (header_checksum == 0) ) evaluate_branch((uint8_t)1); if (ver <= 3) scale = 2; else if (ver <= 5) scale = 4; else scale = 8; if (file_length * scale - 1 >= 0x40) { if (fsi->setfilepos( active_z_story->z_story_file, 0x40 + active_z_story->story_file_exec_offset, SEEK_SET) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FATAL_ERROR_READING_STORY_FILE, -1); i = 0x40; while (i < file_length * scale) { if ((input = fsi->readchar(active_z_story->z_story_file)) == EOF) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FATAL_ERROR_READING_STORY_FILE, -1); calculated_checksum += input; i++; } } evaluate_branch( calculated_checksum == header_checksum ? (uint8_t)1 : (uint8_t)0); } void opcode_piracy(void) { TRACE_LOG("Opcode: PIRACY.\n"); evaluate_branch(1); } void abort_interpreter(int exit_code, z_ucs *error_message) { #ifdef THROW_SIGFAULT_ON_ERROR int x; #endif // THROW_SIGFAULT_ON_ERROR deactivate_signal_handlers(); #ifdef ENABLE_DEBUGGER streams_latin1_output("\nAborting due to:\n"); streams_z_ucs_output(error_message); streams_latin1_output("\n"); debugger(); debugger_interpreter_stopped(); #endif // ENABLE_DEBUGGER TRACE_LOG("Aborting interpreter.\n"); if (error_message != NULL) { TRACE_LOG("Abort with exit message \""); TRACE_LOG_Z_UCS(error_message); TRACE_LOG("\"\n"); } if (active_sound_interface != NULL) { TRACE_LOG("Sound interface at %p.\n", active_sound_interface); TRACE_LOG("Closing sound interface.\n"); active_sound_interface->close_sound(); } TRACE_LOG("Closing streams.\n"); close_streams(error_message); // From the OpenGroup: The value of status may be 0, EXIT_SUCCESS, // EXIT_FAILURE, [CX] [Option Start] or any other value, though only // the least significant 8 bits (that is, status & 0377) shall be // available to a waiting parent process. [Option End] // -> Thus, we print the exit code seperately. TRACE_LOG("Output exit code.\n"); //fprintf(stderr, "Exit code: %d.\n", exit_code); //(void)signal(SIGSEGV, SIG_DFL); TRACE_LOG("Exit.\n"); #ifdef THROW_SIGFAULT_ON_ERROR x = *((int*)NULL); #endif #if defined(__WIN32__) exit_code = 0; #endif // !defined(__WIN32__) exit(exit_code); } #if !defined(__WIN32__) static void catch_signal_and_abort(int sig_num) { TRACE_LOG("Caught signal %d.\n", sig_num); i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_CAUGHT_SIGNAL_P0D_ABORTING_INTERPRETER, -1, (long)sig_num); } #endif // defined(__WIN32__) void init_signal_handlers(void) { #if !defined(__WIN32__) TRACE_LOG("Initialiazing signal handlers.\n"); sigemptyset(&fizmo_sigactions.sa_mask); fizmo_sigactions.sa_flags = 0; fizmo_sigactions.sa_handler = &catch_signal_and_abort; sigaction(SIGSEGV, &fizmo_sigactions, NULL); sigaction(SIGTERM, &fizmo_sigactions, NULL); sigaction(SIGINT, &fizmo_sigactions, NULL); sigaction(SIGQUIT, &fizmo_sigactions, NULL); sigaction(SIGBUS, &fizmo_sigactions, NULL); sigaction(SIGILL, &fizmo_sigactions, NULL); #endif // !defined(__WIN32__) } void deactivate_signal_handlers(void) { #if !defined(__WIN32__) TRACE_LOG("Deactivating signal handlers.\n"); sigemptyset(&fizmo_sigactions.sa_mask); fizmo_sigactions.sa_flags = 0; fizmo_sigactions.sa_handler = NULL; sigaction(SIGSEGV, &fizmo_sigactions, NULL); sigaction(SIGTERM, &fizmo_sigactions, NULL); sigaction(SIGINT, &fizmo_sigactions, NULL); sigaction(SIGQUIT, &fizmo_sigactions, NULL); sigaction(SIGBUS, &fizmo_sigactions, NULL); sigaction(SIGILL, &fizmo_sigactions, NULL); #endif // !defined(__WIN32__) } fizmo-0.7.10/libfizmo/src/interpreter/misc.h000644 000765 000024 00000003467 12606024314 021741 0ustar00chrenderstaff000000 000000 /* misc.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef misc_h_INCLUDED #define misc_h_INCLUDED #include "../tools/types.h" void opcode_restart(void); void opcode_verify(void); void opcode_piracy(void); void abort_interpreter(int exit_code, z_ucs *error_message); void init_signal_handlers(void); void deactivate_signal_handlers(void); #endif /* misc_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/mt19937ar.c000644 000765 000024 00000014611 12606024314 022352 0ustar00chrenderstaff000000 000000 /* mt19937ar.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /*@-predboolint@*/ /* A C-program for MT19937, with initialization improved 2002/1/26. Coded by Takuji Nishimura and Makoto Matsumoto. Before using, initialize the state by using init_genrand(seed) or init_by_array(init_key, key_length). Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The names of its contributors may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Any feedback is very welcome. http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) */ #include "mt19937ar.h" /* Period parameters */ #define N 624 #define M 397 #define MATRIX_A 0x9908b0dfUL /* constant vector a */ #define UPPER_MASK 0x80000000UL /* most significant w-r bits */ #define LOWER_MASK 0x7fffffffUL /* least significant r bits */ static unsigned long mt[N]; /* the array for the state vector */ static int mti=N+1; /* mti==N+1 means mt[N] is not initialized */ /* initializes mt[N] with a seed */ void init_genrand(unsigned long s) { mt[0]= s & 0xffffffffUL; for (mti=1; mti> 30)) + mti); /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ /* In the previous versions, MSBs of the seed affect */ /* only MSBs of the array mt[]. */ /* 2002/01/09 modified by Makoto Matsumoto */ mt[mti] &= 0xffffffffUL; /* for >32 bit machines */ } } /* initialize by an array with array-length */ /* init_key is the array for initializing keys */ /* key_length is its length */ /* slight change for C++, 2004/2/26 */ void init_by_array(unsigned long init_key[], int key_length) { int i, j, k; init_genrand(19650218UL); i=1; j=0; k = (N>key_length ? N : key_length); for (; k; k--) { mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525UL)) + init_key[j] + j; /* non linear */ mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ i++; j++; if (i>=N) { mt[0] = mt[N-1]; i=1; } if (j>=key_length) j=0; } for (k=N-1; k; k--) { mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941UL)) - i; /* non linear */ mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ i++; if (i>=N) { mt[0] = mt[N-1]; i=1; } } mt[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array */ } /* generates a random number on [0,0xffffffff]-interval */ unsigned long genrand_int32(void) { unsigned long y; static unsigned long mag01[2]={0x0UL, MATRIX_A}; /* mag01[x] = x * MATRIX_A for x=0,1 */ if (mti >= N) { /* generate N words at one time */ int kk; if (mti == N+1) /* if init_genrand() has not been called, */ init_genrand(5489UL); /* a default initial seed is used */ for (kk=0;kk> 1) ^ mag01[y & 0x1UL]; } for (;kk> 1) ^ mag01[y & 0x1UL]; } y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1UL]; mti = 0; } y = mt[mti++]; /* Tempering */ y ^= (y >> 11); y ^= (y << 7) & 0x9d2c5680UL; y ^= (y << 15) & 0xefc60000UL; y ^= (y >> 18); return y; } fizmo-0.7.10/libfizmo/src/interpreter/mt19937ar.h000644 000765 000024 00000004015 12606024314 022354 0ustar00chrenderstaff000000 000000 /* mt19937ar.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef mt19937ar_h_INCLUDED #define mt19937ar_h_INCLUDED #define GENRAND_INT32_MAX 0xffffffff /* initializes mt[N] with a seed */ void init_genrand(unsigned long s); /* initialize by an array with array-length */ /* init_key is the array for initializing keys */ /* key_length is its length */ /* slight change for C++, 2004/2/26 */ void init_by_array(unsigned long init_key[], int key_length); /* generates a random number on [0,0xffffffff]-interval */ unsigned long genrand_int32(void); #endif /* mt19937ar_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/object.c000644 000765 000024 00000073321 12606024314 022243 0ustar00chrenderstaff000000 000000 /* object.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "object.h" #include "fizmo.h" #include "variable.h" #include "zpu.h" #include "streams.h" #include "../locales/libfizmo_locales.h" /*@dependent@*/ static uint8_t *get_object_address(uint16_t object_number) { TRACE_LOG("Reading object address from object %d.\n", object_number); TRACE_LOG("Object tree at $%lx.\n", (unsigned long int)(active_z_story->object_tree - z_mem)); TRACE_LOG("Object size: %d bytes.\n", active_z_story->object_size); #ifdef STRICT_Z if (object_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_object_address", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return NULL; } if (object_number > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_object_address", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)object_number, (long int)ver); streams_latin1_output("\n"); return NULL; } #endif // STRICT_Z TRACE_LOG("Returning $%lx as object address.\n", (unsigned long int)(active_z_story->object_tree + (active_z_story->object_size * object_number) - z_mem)); return active_z_story->object_tree + (active_z_story->object_size * object_number); } static uint8_t get_object_attribute(uint16_t object_number, uint8_t attribute_number) { uint8_t *object_address = get_object_address(object_number); uint8_t byte_number; uint8_t attribute_byte_value; uint8_t attribute_bit_mask; TRACE_LOG("Reading attribute %d from object %d.\n", attribute_number, object_number); #ifdef STRICT_Z if (object_address == NULL) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_object_attribute", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_NULL_POINTER_RECEIVED); streams_latin1_output("\n"); return 0; } if (object_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_object_attribute", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return 0; } if (attribute_number > active_z_story->maximum_attribute_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_object_attribute", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_ATTRIBUTE_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)attribute_number, (long int)ver); streams_latin1_output("\n"); return 0; } #endif // STRICT_Z byte_number = attribute_number >> 3; TRACE_LOG("Accessing attribute byte number %d.\n", byte_number); attribute_byte_value = object_address[byte_number]; TRACE_LOG("Attribute byte value: $%x.\n", attribute_byte_value); attribute_bit_mask = (uint8_t)(0x80 >> (attribute_number & 0x7)); TRACE_LOG("Attribute bit mask: $%x.\n", attribute_bit_mask); if ((attribute_byte_value & attribute_bit_mask) != 0) return 1; else return 0; } static void set_object_attribute(uint16_t object_number, uint8_t attribute_number, uint8_t new_attribute_value) { uint8_t *object_address = get_object_address(object_number); uint8_t byte_number; uint8_t attribute_bit_mask; TRACE_LOG("Setting attribute %d from object %d to %d.\n", attribute_number, object_number, new_attribute_value); #ifdef STRICT_Z if (object_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "set_object_attribute", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return; } if (attribute_number > active_z_story->maximum_attribute_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "set_object_attribute", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_ATTRIBUTE_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)attribute_number, (long int)ver); streams_latin1_output("\n"); return; } if (object_address == NULL) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "set_object_attribute", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_NULL_POINTER_RECEIVED); streams_latin1_output("\n"); return; } #endif // STRICT_Z byte_number = attribute_number >> 3; TRACE_LOG("Accessing attribute byte number %d.\n", byte_number); TRACE_LOG("Previous attribute byte value: $%x.\n", object_address[byte_number]); attribute_bit_mask = (uint8_t)(0x80 >> (attribute_number & 0x7)); if (new_attribute_value == 0) { attribute_bit_mask = ~attribute_bit_mask; object_address[byte_number] &= attribute_bit_mask; } else object_address[byte_number] |= attribute_bit_mask; TRACE_LOG("Final attribute byte value: $%x.\n", object_address[byte_number]); } static uint16_t get_object_node_number(uint16_t object_number, uint8_t node_type) { uint8_t *object_address = get_object_address(object_number); #ifdef STRICT_Z if (object_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_object_node_number", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return 0; } if (object_number > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_object_node_number", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)object_number, (long int)ver); streams_latin1_output("\n"); return 0; } if (object_address == NULL) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_object_node_number", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_NULL_POINTER_RECEIVED); streams_latin1_output("\n"); return 0; } if ((node_type != OBJECT_NODE_PARENT) && (node_type != OBJECT_NODE_SIBLING) && (node_type != OBJECT_NODE_CHILD)) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_object_node_number", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_INVALID_NODE_TYPE_P0D, (long int)node_type); streams_latin1_output("\n"); return 0; } #endif // STRICT_Z if (ver <= 3) return *(object_address + active_z_story->object_node_number_index + node_type); else return load_word(object_address + active_z_story->object_node_number_index + node_type*2); } static void set_object_node_number(uint16_t object_number, uint8_t node_type, uint16_t new_node_number) { uint8_t *object_address = get_object_address(object_number); #ifdef STRICT_Z if (object_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "set_object_node_number", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return; } if ((object_number > active_z_story->maximum_object_number) || (new_node_number > active_z_story->maximum_object_number)) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "set_object_node_number", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)object_number, (long int)ver); streams_latin1_output("\n"); return; } if ((node_type != OBJECT_NODE_PARENT) && (node_type != OBJECT_NODE_SIBLING) && (node_type != OBJECT_NODE_CHILD)) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "set_object_node_number", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_INVALID_NODE_TYPE_P0D, (long int)node_type); streams_latin1_output("\n"); return; } if (object_address == NULL) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "set_object_node_number", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_NULL_POINTER_RECEIVED); streams_latin1_output("\n"); return; } #endif // STRICT_Z if (ver <= 3) *(object_address + active_z_story->object_node_number_index + node_type) = new_node_number; else store_word (object_address + active_z_story->object_node_number_index + node_type*2, new_node_number); } /*@dependent@*/ uint8_t *get_objects_property_table(uint16_t object_number) { uint8_t *object_address = get_object_address(object_number); #ifdef STRICT_Z if (object_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_objects_property_table", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return NULL; } if (object_number > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_objects_property_table", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)object_number, (long int)ver); streams_latin1_output("\n"); return NULL; } if (object_address == NULL) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "set_object_node_number", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_NULL_POINTER_RECEIVED); streams_latin1_output("\n"); return 0; } #endif // STRICT_Z TRACE_LOG("Property table of object %d is at $%x.\n", object_number, load_word(object_address + active_z_story->object_property_index)); return z_mem + load_word(object_address + active_z_story->object_property_index); } static void unlink_object(uint16_t object_number) { uint16_t parent_node; uint16_t sibling_node; uint16_t next_sibling_node; #ifdef STRICT_Z if (object_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "unlink_object", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return; } if (object_number > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "unlink_object", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)object_number, (long int)ver); streams_latin1_output("\n"); return; } #endif // STRICT_Z TRACE_LOG("Unlinking object %d.\n", object_number); // In order to unlink an object we have to check if it is the direct // child of it's parent. If so, we have to delete this reference and // substitute it with the reference to the next sibling (if it exists). // We also have to remove the sibling's reference to this object and // replace it with this object's sibling reference. // In case the object is already unlinked, there's nothing to be done. TRACE_LOG("Current parent of %d is %d.\n", object_number, get_object_node_number(object_number, OBJECT_NODE_PARENT)); parent_node = get_object_node_number(object_number, OBJECT_NODE_PARENT); if (parent_node == 0) return; // Check if this object is the first child of it's parent. if (get_object_node_number(parent_node, OBJECT_NODE_CHILD) == object_number) { // If it is, we replace our reference with reference to the next // sibling. That's everything we'll have to do, since we're the first // child, no other sibling can have a reference to this object. TRACE_LOG("New child of %d is %d.\n", parent_node, get_object_node_number(object_number, OBJECT_NODE_SIBLING)); set_object_node_number(parent_node, OBJECT_NODE_CHILD, get_object_node_number(object_number, OBJECT_NODE_SIBLING)); } else { // In case we're not the first child, we'll have to find the sibling // that contains the reference to our node. TRACE_LOG("Looking for node with sibling == %d.\n", object_number); next_sibling_node = get_object_node_number(parent_node, OBJECT_NODE_CHILD); do { sibling_node = next_sibling_node; next_sibling_node = get_object_node_number(sibling_node, OBJECT_NODE_SIBLING); } while ((next_sibling_node != object_number) && (next_sibling_node != 0)); if (next_sibling_node == 0) { TRACE_LOG("Warning: Parent has no sibling with reference to node."); } else { TRACE_LOG("New sibling of %d is %d.\n", sibling_node, get_object_node_number(object_number, OBJECT_NODE_SIBLING)); set_object_node_number( sibling_node, OBJECT_NODE_SIBLING, get_object_node_number(object_number, OBJECT_NODE_SIBLING)); } } TRACE_LOG("Seeting parent and sibling of %d to 0.\n", object_number); set_object_node_number(object_number, OBJECT_NODE_SIBLING, 0); set_object_node_number(object_number, OBJECT_NODE_PARENT, 0); } void opcode_get_sibling(void) { uint16_t sibling_number; TRACE_LOG("Opcode: GET_SIBLING.\n"); read_z_result_variable(); #ifdef STRICT_Z if (op[0]== 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_sibling", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); evaluate_branch(0); return; } if (op[0] > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_sibling", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[0], (long int)ver); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); evaluate_branch(0); return; } #endif // STRICT_Z sibling_number = get_object_node_number(op[0], OBJECT_NODE_SIBLING); TRACE_LOG("Checking if sibling of object %d (which is %d) is not 0.\n", op[0], sibling_number); set_variable(z_res_var, sibling_number, false); evaluate_branch(sibling_number != 0 ? (uint8_t)1 : (uint8_t)0); } void opcode_get_child(void) { uint16_t child_number; TRACE_LOG("Opcode: GET_CHILD.\n"); read_z_result_variable(); #ifdef STRICT_Z if (op[0]== 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_child", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); evaluate_branch(0); return; } if (op[0] > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_child", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[0], (long int)ver); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); evaluate_branch(0); return; } #endif // STRICT_Z child_number = get_object_node_number(op[0], OBJECT_NODE_CHILD); TRACE_LOG("Checking if child of object %d (which is %d) is not 0.\n", op[0], child_number); set_variable(z_res_var, child_number, false); evaluate_branch(child_number != 0 ? (uint8_t)1 : (uint8_t)0); } void opcode_get_parent(void) { uint16_t parent_number; TRACE_LOG("Opcode: GET_PARENT.\n"); read_z_result_variable(); #ifdef STRICT_Z if (op[0]== 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_parent", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); return; } if (op[0] > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_parent", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[0], (long int)ver); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); return; } #endif // STRICT_Z parent_number = get_object_node_number(op[0], OBJECT_NODE_PARENT); TRACE_LOG("Checking if parent of object %d (which is %d) is not 0.\n", op[0], parent_number); set_variable(z_res_var, parent_number, false); } void opcode_jin(void) { TRACE_LOG("Opcode: JIN.\n"); TRACE_LOG("Checking if parent of object %d is %d.\n", op[0], op[1]); #ifdef STRICT_Z if ((op[0] == 0) || (op[1] == 0)) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_jin", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); evaluate_branch(op[0] == op[1] ? 1 : 0); return; } if (op[0] > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_jin", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[0], (long int)ver); streams_latin1_output("\n"); evaluate_branch(0); return; } if (op[1] > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_jin", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[1], (long int)ver); streams_latin1_output("\n"); evaluate_branch(0); return; } #endif // STRICT_Z evaluate_branch( get_object_node_number( op[0], OBJECT_NODE_PARENT) == op[1] ? (uint8_t)1 : (uint8_t)0); } void opcode_set_attr(void) { TRACE_LOG("Opcode: SET_ATTR.\n"); TRACE_LOG("Setting attribute %d in object %d.\n", op[1], op[0]); #ifdef STRICT_Z if (op[0] == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_set_attr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return; } if (op[0] > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_set_attr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[0], (long int)ver); streams_latin1_output("\n"); return; } if (op[1] > active_z_story->maximum_attribute_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_set_attr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_ATTRIBUTE_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[1], (long int)ver); streams_latin1_output("\n"); return; } #endif // STRICT_Z set_object_attribute(op[0], op[1], 1); } void opcode_test_attr(void) { TRACE_LOG("Opcode: TEST_ATTR.\n"); TRACE_LOG("Testing object %d for attribute %d.\n", op[0], op[1]); #ifdef STRICT_Z if (op[0] == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_test_attr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); evaluate_branch(0); return; } if (op[0] > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_test_attr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[0], (long int)ver); streams_latin1_output("\n"); evaluate_branch(0); return; } if (op[1] > active_z_story->maximum_attribute_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_test_attr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_ATTRIBUTE_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[1], (long int)ver); streams_latin1_output("\n"); evaluate_branch(0); return; } #endif // STRICT_Z evaluate_branch(get_object_attribute(op[0], op[1])); } void opcode_insert_obj(void) { TRACE_LOG("Opcode: INSERT_OBJ.\n"); TRACE_LOG("Inserting object %d as first child in object %d.\n",op[0],op[1]); #ifdef STRICT_Z if ((op[0] == 0) || (op[1] == 0)) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_remove_attr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return; } #endif // STRICT_Z unlink_object(op[0]); TRACE_LOG("New sibling of %d is %d.\n", op[0], get_object_node_number(op[1], OBJECT_NODE_CHILD)); set_object_node_number( op[0], OBJECT_NODE_SIBLING, get_object_node_number(op[1], OBJECT_NODE_CHILD)); TRACE_LOG("New child of %d is %d.\n", op[1], op[0]); set_object_node_number(op[1], OBJECT_NODE_CHILD, op[0]); TRACE_LOG("New parent of %d is %d.\n", op[0], op[1]); set_object_node_number(op[0], OBJECT_NODE_PARENT, op[1]); } void opcode_clear_attr(void) { TRACE_LOG("Opcode: CLEAR_ATTR.\n"); TRACE_LOG("Clearing attribute %d of object %d.\n", op[1], op[0]); #ifdef STRICT_Z if (op[0] == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_clear_attr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return; } if (op[0] > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_clear_attr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[0], (long int)ver); streams_latin1_output("\n"); return; } if (op[1] > active_z_story->maximum_attribute_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_clear_attr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_ATTRIBUTE_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[1], (long int)ver); streams_latin1_output("\n"); return; } #endif // STRICT_Z set_object_attribute(op[0], op[1], 0); } void opcode_remove_obj(void) { TRACE_LOG("Opcode: REMOVE_OBJ.\n"); TRACE_LOG("Removing object %d.\n", op[0]); #ifdef STRICT_Z if (op[0] == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_remove_attr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return; } #endif // STRICT_Z unlink_object(op[0]); } fizmo-0.7.10/libfizmo/src/interpreter/object.h000644 000765 000024 00000004016 12606024314 022243 0ustar00chrenderstaff000000 000000 /* object.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef object_h_INCLUDED #define object_h_INCLUDED #include #define OBJECT_NODE_PARENT 0 #define OBJECT_NODE_SIBLING 1 #define OBJECT_NODE_CHILD 2 /*@dependent@*/ uint8_t *get_objects_property_table(uint16_t object_number); void opcode_get_sibling(void); void opcode_get_parent(void); void opcode_get_child(void); void opcode_jin(void); void opcode_set_attr(void); void opcode_test_attr(void); void opcode_insert_obj(void); void opcode_clear_attr(void); void opcode_remove_obj(void); #endif /* object_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/output.c000644 000765 000024 00000030171 12606024314 022331 0ustar00chrenderstaff000000 000000 /* output.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef output_c_INCLUDED #define output_c_INCLUDED #include "../tools/tracelog.h" #include "../tools/types.h" #include "../tools/i18n.h" #include "output.h" #include "fizmo.h" #include "zpu.h" #include "variable.h" #include "config.h" #ifndef DISABLE_BLOCKBUFFER #include "blockbuf.h" #endif //DISABLE_BLOCKBUFFER #ifndef DISABLE_OUTPUT_HISTORY #include "history.h" #endif //DISABLE_OUTPUT_HISTORY bool lower_window_buffering_active = true; z_style current_style = Z_STYLE_ROMAN; z_style upper_window_style = Z_STYLE_ROMAN; //z_style lower_window_style = Z_STYLE_ROMAN; z_colour current_foreground_colour; z_colour current_background_colour; z_colour default_foreground_colour = Z_COLOUR_WHITE; z_colour default_background_colour = Z_COLOUR_BLACK; z_colour upper_window_foreground_colour; z_colour upper_window_background_colour; z_colour lower_window_foreground_colour; z_colour lower_window_background_colour; // The lower two values are initalized by the init in "fizmo.c". int16_t active_window_number; z_font current_font = Z_FONT_NORMAL; z_font current_resulting_font = Z_FONT_NORMAL; z_font lower_window_font = Z_FONT_NORMAL; static int upper_window_height = 0; void opcode_split_window(void) { TRACE_LOG("Opcode: SPLIT_WINDOW\n"); TRACE_LOG("Number of upper window lines: %d.\n", op[0]); upper_window_height = (int)op[0]; #ifndef DISABLE_BLOCKBUFFER if ((ver >= 3) && (ver != 6)) { blockbuf_resize( upper_window_buffer, (int)active_interface->get_screen_width_in_characters(), (int)op[0]); } #endif // DISABLE_BLOCKBUFFER active_interface->split_window((int16_t)op[0]); } void opcode_set_window(void) { TRACE_LOG("Opcode: SET_WINDOW\n"); TRACE_LOG("New window number: %d.\n", op[0]); if (op[0] == 1) { if ( (upper_window_height == 0) && (bool_equal(auto_open_upper_window, true)) ) { // Zokoban.z5 does set_window(1) without splitting the screen. //height = (int)(active_interface->get_screen_height() / 2); // -> If the height is larger than 1 or 2, the code above gives // a wrong cursor position after restoring "Lost Pig". TRACE_LOG("Opening upper window with 1 line for set_window.\n"); #ifndef DISABLE_BLOCKBUFFER blockbuf_resize( upper_window_buffer, (int)active_interface->get_screen_width_in_characters(), 1); #endif // DISABLE_BLOCKBUFFER active_interface->split_window((int16_t)1); upper_window_height = 1; } #ifndef DISABLE_BLOCKBUFFER if (active_window_number != 1) { set_blockbuf_cursor(upper_window_buffer, 0, 0); } #endif // DISABLE_BLOCKBUFFER } active_window_number = (int16_t)op[0]; active_interface->set_window((int16_t)op[0]); } void opcode_erase_window(void) { int window_id = (int16_t)op[0]; TRACE_LOG("Opcode: ERASE_WINDOW\n"); TRACE_LOG("Window to erase: %d.\n", (int16_t)op[0]); // //FIXME: Implement -2 if (window_id == -1) { active_interface->split_window(0); active_window_number = 0; active_interface->set_window(0); active_interface->erase_window(0); upper_window_height = 0; } else active_interface->erase_window((int16_t)op[0]); } void opcode_erase_line_value(void) { TRACE_LOG("Opcode: ERASE_LINE_VALUE\n"); active_interface->erase_line_value(op[0]); } void opcode_erase_line_pixels(void) { TRACE_LOG("Opcode: ERASE_LINE_PIXELS\n"); active_interface->erase_line_pixels(op[0]); } void process_set_cursor(int16_t y, int16_t x, int16_t window) { /* * From zmach06e.ps: * Flush the buffer and set the cursor for the given window (i.e., window * properties 4 and 5) at position (s, x). It is an error in V4-5 to use * this instruction when window 0 is selected. [Question: Is the window * operand optional or not?] Exception: The first argument can be negative. * If it is − 2 (and the second argument is 0), the screen cursor is turned * on. If it is − 1, it is turned off; the second argument is ignored in * that case. */ TRACE_LOG("Processing set cursor to %d, %d, %d.\n", y, x, window); if (ver == 6) { active_interface->set_cursor(x, y, window); } else { if (active_window_number == 1) { #ifndef DISABLE_BLOCKBUFFER if ( (ver >= 3) && (upper_window_buffer != NULL) && (x >= 1) && (y >= 1) ) set_blockbuf_cursor(upper_window_buffer, x-1, y-1); #endif // DISABLE_BLOCKBUFFER if ( (y >= upper_window_height) && (bool_equal(auto_adapt_upper_window, true)) ) { TRACE_LOG("Resizing upper window to %d lines for cursor movement.\n",y); #ifndef DISABLE_BLOCKBUFFER blockbuf_resize( upper_window_buffer, (int)active_interface->get_screen_width_in_characters(), (int)y); #endif // DISABLE_BLOCKBUFFER active_interface->split_window(y); upper_window_height = (int)y; } } active_interface->set_cursor(y, x, window); } } void opcode_set_cursor(void) { int16_t y = (int16_t)op[0]; int16_t x = (int16_t)op[1]; // These two adjustments make "painter.z5" work. if (y == 0) y = 1; if (x == 0) x = 1; if (ver == 6) { TRACE_LOG("Opcode: SET_CURSOR_LCW\n"); process_set_cursor(x, y, op[2]); } else { TRACE_LOG("Opcode: SET_CURSOR_LC\n"); process_set_cursor(y, x, active_window_number); } } void opcode_get_cursor_array(void) { TRACE_LOG("Opcode: GET_CURSOR\n"); store_word(z_mem + op[0] , active_interface->get_cursor_row()); store_word(z_mem + op[0] + 1, active_interface->get_cursor_column()); } void opcode_set_text_style(void) { z_style new_z_style; TRACE_LOG("Opcode: SET_TEXT_STYLE\n"); if (ver >= 4) { TRACE_LOG("Setting text style to %d.\n", op[0]); new_z_style = (int16_t)op[0]; // REVISIT: Implement warning. if ( (new_z_style < 0) || (new_z_style > 15) ) return; if (current_style != new_z_style) { // Since it's possible to have combinations of styles we'll handle // storing metadata and interface updates right here. store_metadata_in_history( outputhistory[0], HISTORY_METADATA_TYPE_STYLE, new_z_style); //lower_window_style = current_style; active_interface->set_text_style(new_z_style); current_style = new_z_style; } } } void opcode_buffer_mode(void) { TRACE_LOG("Opcode: BUFFER_MODE.\n"); lower_window_buffering_active = ((int16_t)op[0] != 0 ? true : false); active_interface->set_buffer_mode(op[0]); } static void process_set_colour_opcode(uint16_t op0, uint16_t op1, uint16_t op2) { z_colour new_foreground_colour; z_colour new_background_colour; int16_t window_number; if (active_interface->is_colour_available() == false) return; new_foreground_colour = (int16_t)op0; new_background_colour = (int16_t)op1; window_number = (int16_t)op2; // REVISIT: Implement warning if ( (new_foreground_colour < -1) || (new_foreground_colour > 12) ) new_foreground_colour = 0; // REVISIT: Implement warning if ( (new_background_colour < -1) || (new_background_colour > 12) ) new_background_colour = 0; if (ver == 6) { if ( (new_foreground_colour < -1) || (new_foreground_colour > 12) ) return; if ( (new_background_colour < -1) || (new_background_colour > 12) ) return; } else { if ( (new_foreground_colour < 0) || (new_foreground_colour > 9) ) return; if ( (new_background_colour < 0) || (new_background_colour > 9) ) return; } if (new_foreground_colour == Z_COLOUR_CURRENT) new_foreground_colour = current_foreground_colour; else if (new_foreground_colour == Z_COLOUR_DEFAULT) new_foreground_colour = default_foreground_colour; if (new_background_colour == Z_COLOUR_CURRENT) new_background_colour = current_background_colour; else if (new_background_colour == Z_COLOUR_DEFAULT) new_background_colour = default_background_colour; current_foreground_colour = new_foreground_colour; current_background_colour = new_background_colour; TRACE_LOG("evaluated new foreground col: %d.\n", new_foreground_colour); TRACE_LOG("evaluated new background col: %d.\n", new_background_colour); active_interface->set_colour( new_foreground_colour, new_background_colour, window_number); } void opcode_set_colour_fb(void) { TRACE_LOG("Opcode: SET_COLOUR_FB\n"); TRACE_LOG("fg:%d, bg:%d.\n", op[0], op[1]); process_set_colour_opcode(op[0], op[1], (uint16_t)-1); } void opcode_set_colour_fbw(void) { TRACE_LOG("Opcode: SET_COLOUR_FBW\n"); process_set_colour_opcode(op[0], op[1], op[2]); } void opcode_set_font(void) { z_font new_z_font; // If the requested font is available, then it is chosen for the // current window, and the store value is the font ID of the previous // font (which is always positive). If the font is unavailable, // nothing will happen and the store value is 0. // Please note: I consider the "normal" -- code 1 -- and the courier, // fixed font -- code 4 -- to be always available. For simple interfaces, // these are probably the same. The availability of the character graphics // and picture font are read from interface definition. TRACE_LOG("Opcode: SET_FONT\n"); read_z_result_variable(); new_z_font = (int16_t)op[0]; // REVISIT: Implement warning. if ( ( (new_z_font < 0) || (new_z_font > 4) ) || ( (new_z_font == Z_FONT_PICTURE) && (active_interface->is_picture_font_availiable() != true) ) || ( (new_z_font == Z_FONT_CHARACTER_GRAPHICS) && (active_interface->is_character_graphics_font_availiable() != true) ) ) { set_variable(z_res_var, 0, false); return; } /* // REVISIT: Is it correct to not double-set fonts? if (new_z_font != current_font) { if (active_window_number == 0) { #ifndef DISABLE_OUTPUT_HISTORY store_metadata_in_history( outputhistory[0], HISTORY_METADATA_TYPE_FONT, new_z_font); #endif // DISABLE_OUTPUT_HISTORY } else if (active_window_number == 1) { #ifndef DISABLE_BLOCKBUFFER if (ver >= 5) { set_blockbuf_font(upper_window_buffer, new_z_font); } #endif // DISABLE_BLOCKBUFFER } active_interface->set_font(new_z_font); set_variable(z_res_var, (uint16_t)current_font, false); current_font = new_z_font; TRACE_LOG("New font is: %d\n", current_font); } else { set_variable(z_res_var, (uint16_t)current_font, false); } */ current_font = new_z_font; set_variable(z_res_var, (uint16_t)current_font, false); } #endif /* output_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/output.h000644 000765 000024 00000005567 12606024314 022351 0ustar00chrenderstaff000000 000000 /* output.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef output_h_INCLUDED #define output_h_INCLUDED #define STYLE_ROMAN 0 #define STYLE_REVERSE_VIDEO 1 #define STYLE_BOLD 2 #define STYLE_ITALIC 4 #define STYLE_FIXED_PITCH 8 #ifndef output_c_INCLUDED extern int16_t active_window_number; extern z_font current_font; extern z_font current_resulting_font; // current_font plus 0x11&2-evluation extern z_style lower_window_font; extern bool lower_window_buffering_active; extern z_style current_style; extern z_style upper_window_style; extern z_style lower_window_style; extern z_colour current_foreground_colour; extern z_colour current_background_colour; extern z_colour default_foreground_colour; extern z_colour default_background_colour; extern z_colour upper_window_foreground_colour; extern z_colour upper_window_background_colour; extern z_colour lower_window_foreground_colour; extern z_colour lower_window_background_colour; #endif /* output_c_INCLUDED */ void opcode_split_window(void); void opcode_set_window(void); void opcode_erase_window(void); void opcode_erase_line_value(void); void opcode_erase_line_pixels(void); void opcode_set_cursor(void); void opcode_get_cursor_array(void); void opcode_set_text_style(void); void opcode_buffer_mode(void); void opcode_set_colour_fb(void); void opcode_set_colour_fbw(void); void opcode_set_font(void); void process_set_cursor(int16_t y, int16_t x, int16_t window); #endif /* output_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/property.c000644 000765 000024 00000072335 12606024314 022665 0ustar00chrenderstaff000000 000000 /* property.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "property.h" #include "fizmo.h" #include "variable.h" #include "object.h" #include "zpu.h" #include "streams.h" #include "config.h" // for IGNORE_TOO_LONG_PROPERTIES_ERROR #include "../locales/libfizmo_locales.h" static uint8_t get_property_length(uint8_t *property) { uint8_t length_and_number; uint8_t length; #ifdef STRICT_Z if (property == NULL) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_property_length", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_NULL_POINTER_RECEIVED); streams_latin1_output("\n"); return 0; } #endif // STRICT_Z if (ver <= 3) { return (*property >> 5) + 1; } else { length_and_number = *property; TRACE_LOG("Property-byte: %x.\n", *property); if ((length_and_number & 0x80) != 0) { TRACE_LOG("Property-byte: %x.\n", *(property+1)); // 12.4.2.1 If the top bit (bit 7) of the first size byte is set, // then there are two size-and-number bytes as follows. In the // first byte, bits 0 to 5 contain the property number; bit 6 is // undetermined (it is clear in all Infocom or Inform story files); // bit 7 is set. In the second byte, bits 0 to 5 contain the property // data length, counting in bytes; bit 6 is undetermined (it is set // in Infocom story files, but clear in Inform ones); bit 7 is always // set. length = *(++property) & 0x3f; // 12.4.2.1.1 A value of 0 as property data length (in the // second byte) should be interpreted as a length of 64. (Inform // can compile such properties.) if (length == 0) length = 64; } else { // 12.4.2.2 If the top bit (bit 7) of the first size byte is clear, // then there is only one size-and-number byte. Bits 0 to 5 contain // the property number; bit 6 is either clear to indicate a property // data length of 1, or set to indicate a length of 2; bit 7 is clear. length = (length_and_number & 0x40) != 0 ? (uint8_t)2 : (uint8_t)1; } return length; } } static inline uint8_t get_property_length_code_size(uint8_t *property) { #ifdef STRICT_Z if (property == NULL) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_property_length_code_size", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_NULL_POINTER_RECEIVED); streams_latin1_output("\n"); return 0; } #endif // STRICT_Z // 12.4.2.1 If the top bit (bit 7) of the first size byte is set, // then there are two size-and-number bytes [...] if ((ver >= 4) && ((*property & 0x80) != 0)) return 2; else return 1; } static uint16_t get_default_property_value(uint16_t property_number) { #ifdef STRICT_Z if (property_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_default_property_value", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return 0; } if (property_number > active_z_story->maximum_property_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_default_property_value", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)property_number, (long int)ver); streams_latin1_output("\n"); return 0; } #endif // STRICT_Z return load_word(active_z_story->property_defaults + property_number*2); } /*@dependent@*/ /*@null@*/ static uint8_t *get_objects_first_property( uint16_t object_number) { uint8_t *property_table_index = get_objects_property_table(object_number); uint8_t length_and_number; #ifdef STRICT_Z if (object_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_objects_first_property", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return NULL; } if (object_number > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_objects_first_property", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)object_number, (long int)ver); streams_latin1_output("\n"); return NULL; } if (property_table_index == NULL) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_objects_first_property", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_NULL_POINTER_RECEIVED); streams_latin1_output("\n"); return NULL; } #endif // STRICT_Z TRACE_LOG("Property table located at $%lx.\n", (unsigned long int)(property_table_index - z_mem)); TRACE_LOG("Skipping property name (%d+1 bytes).\n", (*property_table_index)*2); property_table_index += (*property_table_index)*2 + 1; length_and_number = *property_table_index; if (length_and_number == 0) { TRACE_LOG("Object %d has no properties.\n", object_number); return NULL; } else { #ifdef ENABLE_TRACING if (ver <= 3) { TRACE_LOG("Found property %d.\n", length_and_number & 0x1f); } else { TRACE_LOG("Found property %d.\n", length_and_number & 0x3f); } #endif return property_table_index; } } /*@null@*/ /*@dependent@*/ static uint8_t *get_objects_next_property( /*@dependent@*/ uint8_t *property_index) { uint8_t length_code_size; uint8_t length; uint8_t length_and_number; #ifdef STRICT_Z if (property_index == NULL) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_objects_next_property", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_NULL_POINTER_RECEIVED); streams_latin1_output("\n"); return NULL; } #endif // STRICT_Z TRACE_LOG("Looking for next property behind property %d.\n", *property_index & 0x1f); if (*property_index == 0) return NULL; length_code_size = get_property_length_code_size(property_index); length = get_property_length(property_index); TRACE_LOG("Property %d has a length of %d and a length-code-size of %d.\n", *property_index & 0x1f, length, length_code_size); property_index += length + length_code_size; length_and_number = *property_index; if (length_and_number == 0) { TRACE_LOG("No property behind current property.\n"); return NULL; } else { #ifdef ENABLE_TRACING if (ver <= 3) { TRACE_LOG("Returning address of property %d.\n", *property_index & 0x1f); } else { TRACE_LOG("Returning address of property %d.\n", *property_index & 0x3f); } #endif return property_index; } } /*@null@*/ /*@dependent@*/ static uint8_t *get_object_property( uint16_t object_number, uint16_t property_number) { uint8_t *property_index; int current_prop_number; #ifdef STRICT_Z if (object_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_object_property", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return NULL; } if (object_number > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_object_property", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)object_number, (long int)ver); streams_latin1_output("\n"); return NULL; } if (property_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_object_property", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return NULL; } if (property_number > active_z_story->maximum_property_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_object_property", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)property_number, (long int)ver); streams_latin1_output("\n"); return NULL; } #endif // STRICT_Z property_index = get_objects_first_property(object_number); if (property_index != NULL) { if (ver >= 4) current_prop_number = (int)(*property_index & 0x3f); else current_prop_number = (int)(*property_index & 0x1f); TRACE_LOG("Processing property %d.\n", current_prop_number); } while ( (property_index != NULL) && // current_prop_number is defined, since property_index != NULL. (/*@-usedef@*/ current_prop_number /*@+usedef@*/ != (int)property_number) ) { property_index = get_objects_next_property(property_index); if (property_index != NULL) { if (ver >= 4) current_prop_number = (int)(*property_index & 0x3f); else current_prop_number = (int)(*property_index & 0x1f); TRACE_LOG("Processing property %d.\n", current_prop_number); } } return property_index; } static uint16_t get_property_value(uint16_t object_number, uint8_t property_number) { uint8_t *property_table_index; uint8_t length; uint8_t length_code_size; TRACE_LOG("Reading property %d from object %d.\n", property_number, object_number); #ifdef STRICT_Z if (object_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_property_value", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return 0; } if (object_number > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_property_value", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)object_number, (long int)ver); streams_latin1_output("\n"); return 0; } if (property_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_property_value", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return 0; } if (property_number > active_z_story->maximum_property_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_property_value", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)property_number, (long int)ver); streams_latin1_output("\n"); return 0; } #endif // STRICT_Z property_table_index = get_object_property(object_number, property_number); if (property_table_index == NULL) { #ifdef STRICT_Z i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_property_value", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_NO_PROPERTY_P0D_FOR_OBJECT_P1D); streams_latin1_output("\n"); #endif // STRICT_Z return 0; } length = get_property_length(property_table_index); length_code_size = get_property_length_code_size(property_table_index); TRACE_LOG("Property length: %d\n", length); if (length == 1) return *(property_table_index + length_code_size); else if (length == 2) return load_word(property_table_index + length_code_size); else { #ifdef IGNORE_TOO_LONG_PROPERTIES_ERROR return load_word(property_table_index + length_code_size); #else i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_CANNOT_READ_PROPERTIES_WITH_A_LENGTH_GREATER_THAN_2, -1); /*@-unreachable@*/ return 0; // To make compiler happy /*@+unreachable@*/ #endif // IGNORE_TOO_LONG_PROPERTIES_ERROR } } static void set_property_value(uint16_t object_number, uint8_t property_number, uint16_t new_value) { uint8_t *property_table_index; uint8_t length; uint8_t length_code_size; TRACE_LOG("Setting property %d from object %d to $%x.\n", property_number, object_number, new_value); #ifdef STRICT_Z if (object_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_property_value", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return; } if (object_number > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_property_value", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)object_number, (long int)ver); streams_latin1_output("\n"); return; } if (property_number == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_property_value", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return; } if (property_number > active_z_story->maximum_property_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "get_property_value", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)property_number, (long int)ver); streams_latin1_output("\n"); return; } #endif // STRICT_Z property_table_index = get_object_property(object_number, property_number); if (property_table_index == NULL) { #ifdef STRICT_Z i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "set_property_value", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_NO_PROPERTY_P0D_FOR_OBJECT_P1D, (long int)property_number, (long int)object_number); streams_latin1_output("\n"); #endif // STRICT_Z return; } length = get_property_length(property_table_index); length_code_size = get_property_length_code_size(property_table_index); if (length == 1) *(property_table_index + length_code_size) = new_value & 0xff; else if (length == 2) store_word(property_table_index + length_code_size, new_value); else i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_CANNOT_READ_PROPERTIES_WITH_A_LENGTH_GREATER_THAN_2, -1); return; } void opcode_get_prop(void) { TRACE_LOG("Opcode: GET_PROP.\n"); read_z_result_variable(); TRACE_LOG("Reading property #%x of object %x.\n", op[1], op[0]); #ifdef STRICT_Z if (op[0] == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_prop", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); return; } if (op[0] > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_prop", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[0], (long int)ver); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); return; } if (op[1] == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_prop", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); return; } if (op[1] > active_z_story->maximum_property_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_prop", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[1], (long int)ver); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); return; } #endif // STRICT_Z // Verify if the object has the requested property. if (get_object_property(op[0], op[1]) != NULL) { set_variable(z_res_var, get_property_value(op[0], op[1]), false); } else { TRACE_LOG("Property %d not found, returning default value %d.\n", op[1], get_default_property_value(op[1])); set_variable(z_res_var, get_default_property_value(op[1]), false); } } void opcode_put_prop(void) { TRACE_LOG("Opcode: PUT_PROP.\n"); TRACE_LOG("Putting %x into property %d of object %d.\n",op[2],op[1],op[0]); #ifdef STRICT_Z if (op[0] == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_put_prop", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return; } if (op[0] > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_put_prop", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[0], (long int)ver); streams_latin1_output("\n"); return; } if (op[1] == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_put_prop", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return; } if (op[1] > active_z_story->maximum_property_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_put_prop", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[1], (long int)ver); streams_latin1_output("\n"); return; } #endif // STRICT_Z (void)set_property_value(op[0], op[1], op[2]); } void opcode_get_prop_addr(void) { uint8_t *property_address; TRACE_LOG("Opcode: GET_PROP_ADDR.\n"); TRACE_LOG("Retrieving address of property %d in object %d.\n", op[1], op[0]); read_z_result_variable(); #ifdef STRICT_Z if (op[0] == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_prop_addr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); return; } if (op[0] > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_prop_addr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[0], (long int)ver); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); return; } if (op[1] == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_prop_addr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); return; } if (op[1] > active_z_story->maximum_property_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_prop_addr", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[1], (long int)ver); streams_latin1_output("\n"); set_variable(z_res_var, 0, false); return; } #endif // STRICT_Z property_address = get_object_property(op[0], op[1]); if (property_address == NULL) set_variable(z_res_var, 0, false); else { if ( (ver >= 4) && ((*property_address & 0x80) != 0) ) property_address += 2; else property_address += 1; TRACE_LOG("Returning %lx.\n", (long unsigned int)(property_address - z_mem)); set_variable(z_res_var, (uint16_t)(property_address - z_mem), false); } } void opcode_get_prop_len(void) { uint8_t *property_address; uint16_t result; TRACE_LOG("Opcode: GET_PROP_LEN.\n"); TRACE_LOG("Reading length of property at address $%x.\n", op[0]); read_z_result_variable(); if (op[0] == 0) { // From the 1.1 standard: @get_prop_len 0 must return 0. This is // required by some Infocom games and files generated by old // versions of Inform. result = 0; } else { property_address = z_mem + op[0] - 1; if ( (ver >= 4) && ((*property_address & 0x80) != 0) ) property_address--; result = get_property_length(property_address); TRACE_LOG("Setting variable with code %d to %d.\n", z_res_var, result); } set_variable(z_res_var, result, false); } void opcode_get_next_prop(void) { uint8_t *property_index; TRACE_LOG("Opcode: GET_NEXT_PROP\n"); read_z_result_variable(); #ifdef STRICT_Z if (op[0] == 0) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_next_prop", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_0_IS_NOT_VALID); streams_latin1_output("\n"); return; } if (op[0] > active_z_story->maximum_object_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_next_prop", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_OBJECT_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[0], (long int)ver); streams_latin1_output("\n"); return; } if (op[1] > active_z_story->maximum_property_number) { i18n_translate( libfizmo_module_name, i18n_libfizmo_WARNING_FOR_P0S_AT_P0X, "opcode_get_next_prop", (unsigned int)(current_instruction_location - z_mem)); streams_latin1_output(" "); i18n_translate( libfizmo_module_name, i18n_libfizmo_PROPERTY_NUMBER_P0D_NOT_ALLOWED_IN_STORY_VERSION_P1D, (long int)op[1], (long int)ver); streams_latin1_output("\n"); return; } #endif // STRICT_Z if (op[1] == 0) { TRACE_LOG("Looking for first property of object %d.\n", op[0]); // Retrieve object's first property property_index = get_objects_first_property(op[0]); if (property_index == NULL) { TRACE_LOG("Empty property list, returning 0.\n"); set_variable(z_res_var, 0, false); } else { TRACE_LOG("First property of object %d is %d.\n", op[0], *property_index & 0x1f); set_variable(z_res_var, *property_index & 0x1f, false); } } else { property_index = get_object_property(op[0], op[1]); if (property_index == NULL) { set_variable(z_res_var, 0, false); } else { property_index = get_objects_next_property(property_index); TRACE_LOG("Looking for property behind property %d.\n", op[1]); if (property_index == NULL) { TRACE_LOG("No more properties in object %d, returning 0.\n", op[0]); set_variable(z_res_var, 0, false); } else { TRACE_LOG("Returning %d od resulting property number.\n", *property_index & 0x1f); set_variable(z_res_var, *property_index & 0x1f, false); } } } } fizmo-0.7.10/libfizmo/src/interpreter/property.h000644 000765 000024 00000003406 12606024314 022663 0ustar00chrenderstaff000000 000000 /* property.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef property_h_INCLUDED #define property_h_INCLUDED #include void opcode_get_prop(void); void opcode_put_prop(void); void opcode_get_prop_addr(void); void opcode_get_prop_len(void); void opcode_get_next_prop(void); #endif /* property_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/routine.c000644 000765 000024 00000024015 12606024314 022456 0ustar00chrenderstaff000000 000000 /* routine.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef routine_c_INCLUDED #define routine_c_INCLUDED #include #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "routine.h" #include "stack.h" #include "variable.h" #include "zpu.h" #include "fizmo.h" #include "../locales/libfizmo_locales.h" int16_t number_of_stack_frames = 0; static int last_result_var; static void unwind_stack_frame(int16_t result_value, bool force_discard_result) { uint16_t stack_word; bool discard_result; uint8_t argument_mask; TRACE_LOG("Stack pointer: %ld.\n", (long int)(z_stack_index - z_stack)); TRACE_LOG("Dropping stack (%d words) and locals (%d words).\n", (unsigned)stack_words_from_active_routine, (unsigned)number_of_locals_active); // First, we drop the active routine's stack contents and the local // variables. drop_z_stack_words( (int)(stack_words_from_active_routine + number_of_locals_active)); number_of_stack_frames--; TRACE_LOG("Number of stack frames: %d.\n", number_of_stack_frames); stack_word = z_stack_pull_word(); last_result_var = stack_word & 0xff; pc = (z_mem + ((z_stack_pull_word() << 8) | (stack_word >> 8))); stack_words_from_active_routine = (int)z_stack_pull_word(); TRACE_LOG("Stack word in this routine: %d.\n", (int)stack_words_from_active_routine); stack_word = z_stack_pull_word(); number_of_locals_active = stack_word & 0xf; discard_result = ((stack_word & 0x10) != 0 ? true : false); argument_mask = (stack_word >> 8); number_of_locals_from_function_call = 0; while (argument_mask != 0) { number_of_locals_from_function_call++; argument_mask >>= 1; } TRACE_LOG("Locals active in this routine: %d.\n", number_of_locals_active); local_variable_storage_index = z_stack_index - stack_words_from_active_routine - number_of_locals_active; TRACE_LOG("Locals from function call: %d.\n", number_of_locals_from_function_call); TRACE_LOG("Returning to %lx.\n", (unsigned long int)(pc - z_mem)); if ( (bool_equal(discard_result, false)) && (bool_equal(force_discard_result, false)) ) { TRACE_LOG("Storing routine call result %x in variable code %x.\n", result_value, last_result_var); set_variable(last_result_var, (uint16_t)result_value, false); } } void return_from_routine(int16_t result_value) { unwind_stack_frame(result_value, false); } void call_routine( uint32_t target_routine_address, uint8_t result_variable_number, bool discard_result, uint8_t number_of_arguments) { uint8_t i; #ifdef ENABLE_TRACING TRACE_LOG("Calling routine at %x.\n", (unsigned)target_routine_address); if (discard_result != 0) { TRACE_LOG("Result will be discarded.\n"); } else TRACE_LOG("Result will be stored in variable code %x.\n", result_variable_number); #endif /* ENABLE_TRACING */ if (target_routine_address == 0) { // When the address 0 is called as a routine, nothing happens and // the return value is false // 6.4.5: The return value of a routine can be any Z-machine number. // Returning 'false' means returning 0; returning 'true' means // returning 1. TRACE_LOG("Target address is 0, returning false(0).\n"); if (discard_result == 0) set_variable(result_variable_number, 0, false); return; } TRACE_LOG("Return address: %lx.\n", (unsigned long int)(pc - z_mem)); store_followup_stack_frame_header( number_of_locals_active, discard_result, number_of_locals_from_function_call, stack_words_from_active_routine, pc - z_mem, result_variable_number); pc = z_mem + target_routine_address; number_of_locals_active = *(pc++); if (number_of_locals_active > 15) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_MORE_THAN_15_LOCALS_ARE_NOT_ALLOWED, -1); TRACE_LOG("Routine has %d locals.\n", number_of_locals_active); local_variable_storage_index = allocate_z_stack_words(number_of_locals_active); // For Z-Machines version <= 4, the contens of the local variables are // defined by the following bytes which can be copied over directly. // For version >= 5, the initial values are all set to zero. if (ver <= 4) { // memcpy usage poses certain problem when used on a little endian // machine (i386 and the like). Thus, in order to avoid all the // fuss with little/big-endian detection, i'll not use memcpy // but copy stuff by hand. //memcpy((uint8_t*)local_variable_storage_index, pc, //number_of_locals_active*2); for (i=0; i number_of_stack_frames) || (dest_stack_frame < 1) ) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_INVALID_THROW_DESTINATION_STACK_INDEX_P0D, -1, (long)dest_stack_frame); while (number_of_stack_frames > dest_stack_frame) unwind_stack_frame(0, true); set_variable(last_result_var, op[0], false); } void opcode_catch(void) { TRACE_LOG("Opcode: CATCH.\n"); read_z_result_variable(); set_variable(z_res_var, (uint16_t)number_of_stack_frames, false); } void opcode_call_vs2(void) { TRACE_LOG("Opcode: CALL_VS2.\n"); read_z_result_variable(); call_routine( get_packed_routinecall_address(op[0]), z_res_var, false, number_of_operands - 1); } void opcode_call_vn2(void) { TRACE_LOG("Opcode: CALL_VN2.\n"); call_routine( get_packed_routinecall_address(op[0]), 0, true, number_of_operands - 1); } #endif /* routine_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/routine.h000644 000765 000024 00000004507 12606024314 022467 0ustar00chrenderstaff000000 000000 /* routine.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef routine_h_INCLUDED #define routine_h_INCLUDED #include "../tools/types.h" #ifndef routine_c_INCLUDED extern int16_t number_of_stack_frames; #endif /* routine_c_INCLUDED */ void return_from_routine(int16_t result_value); void call_routine(uint32_t target_routine_address, uint8_t result_variable_number, bool discard_result, uint8_t number_of_arguments); void opcode_call(void); void opcode_ret(void); void opcode_rfalse(void); void opcode_rtrue(void); void opcode_jump(void); void opcode_ret_popped(void); void opcode_quit(void); void opcode_call_2s(void); void opcode_call_2n(void); void opcode_call_1s(void); void opcode_call_1n(void); void opcode_nop(void); void opcode_call_vn(void); void opcode_throw(void); void opcode_catch(void); void opcode_call_vs2(void); void opcode_call_vn2(void); #endif /* routine_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/savegame.c000644 000765 000024 00000143755 12606024314 022576 0ustar00chrenderstaff000000 000000 /* savegame.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef savegame_c_INCLUDED #define savegame_c_INCLUDED #include #include #include #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "../tools/z_ucs.h" #include "../tools/filesys.h" #include "savegame.h" #include "streams.h" #include "fizmo.h" #include "iff.h" #include "stack.h" #include "zpu.h" #include "variable.h" #include "text.h" #include "routine.h" #include "filelist.h" #include "history.h" #include "output.h" #include "config.h" #include "../locales/libfizmo_locales.h" #define HISTORY_BUFFER_INPUT_SIZE 1024 z_ucs last_savegame_filename[MAXIMUM_SAVEGAME_NAME_LENGTH + 1]; static zscii current_savegame_filename_buffer[MAXIMUM_SAVEGAME_NAME_LENGTH + 1]; //static z_ucs savegame_output_buffer[MAXIMUM_SAVEGAME_NAME_LENGTH + 1]; static int save_stack_frame(uint16_t *current_frame_index, uint16_t current_frame_stack_usage, uint8_t current_frame_number_of_locals, z_file *out_file) { uint8_t previous_result_var; uint32_t previous_pc; uint16_t previous_stack_words_used; uint8_t previous_number_of_locals; bool previous_result_discard; uint8_t previous_argument_mask; uint8_t flags; uint16_t *data_index = current_frame_index; uint8_t i; TRACE_LOG("Saving stack frame.\n"); TRACE_LOG("Z-Stack at %p.\n", z_stack); TRACE_LOG("Z-Stack-Index: %ld.\n", (long int)(current_frame_index - z_stack)); TRACE_LOG("Data-Index: %ld.\n", (long int)(data_index - z_stack)); TRACE_LOG("Current frame index: %p.\n", current_frame_index); TRACE_LOG("Current frame stack usage: %d.\n", current_frame_stack_usage); TRACE_LOG("Current frame number of locals: %d.\n", current_frame_number_of_locals); current_frame_index--; previous_result_var = (*current_frame_index & 0xff); previous_pc = (*current_frame_index >> 8); current_frame_index--; previous_pc |= ((*current_frame_index) << 8); current_frame_index--; previous_stack_words_used = *current_frame_index; current_frame_index--; previous_number_of_locals = (*current_frame_index & 0xf); previous_result_discard = ((*(current_frame_index) & 0x10) != 0 ? true : false); previous_argument_mask = (*(current_frame_index) >> 8); TRACE_LOG("Previous result var: %d.\n", previous_result_var); TRACE_LOG("Previous PC: %x.\n", previous_pc); TRACE_LOG("Previous stack words used: %d.\n", previous_stack_words_used); TRACE_LOG("Previous number of locales: %d.\n", previous_number_of_locals); // Save lower stack level first so serialized stack on disk starts // with index 0. if (current_frame_index != z_stack) { if (save_stack_frame( current_frame_index - previous_stack_words_used - previous_number_of_locals, previous_stack_words_used, previous_number_of_locals, out_file) != 0) return -1; } flags = (bool_equal(previous_result_discard, true) ? 0x10 : 0) | current_frame_number_of_locals; TRACE_LOG("Flags: %x.\n", flags); if (fsi->writechar((int)(previous_pc >> 16), out_file) == EOF) return -1; if (fsi->writechar((int)(previous_pc >> 8), out_file) == EOF) return -1; if (fsi->writechar((int)(previous_pc ), out_file) == EOF) return -1; if (fsi->writechar((int)flags, out_file) == EOF) return -1; if (fsi->writechar((int)previous_result_var, out_file) == EOF) return -1; if (fsi->writechar((int)previous_argument_mask, out_file) == EOF) return -1; if (fsi->writechar((int)(current_frame_stack_usage >> 8), out_file) == EOF) return -1; if (fsi->writechar((int)(current_frame_stack_usage & 0xff), out_file) == EOF) return -1; TRACE_LOG("Data: ("); for (i=0; iwritechar((int)(data_index[i] >> 8), out_file) == EOF) return -1; if (fsi->writechar((int)(data_index[i] ), out_file) == EOF) return -1; } TRACE_LOG(")\n"); TRACE_LOG("Final stack index: %ld.\n", (long int)(data_index - z_stack)); return 0; } int ask_user_for_file(zscii *filename_buffer, int buffer_len, int preload_len, int filetype_or_mode, int fileaccess, z_file **result_file, char *directory) { int input_length; z_ucs filename[buffer_len + 1]; char *filename_utf8, *prefixed_filename; int i; input_length = active_interface->read_line( (uint8_t*)filename_buffer, buffer_len, 0, 0, preload_len, NULL, true, true); if (input_length == 0) *result_file = NULL; if (input_length < 1) return input_length; for (i=0; i<(int)input_length; i++) filename[i] = zscii_input_char_to_z_ucs(filename_buffer[i]); filename[i] = 0; filename_utf8 = dup_zucs_string_to_utf8_string(filename); if (directory != NULL) { prefixed_filename = fizmo_malloc(strlen(filename_utf8) + strlen(directory) + 2); strcpy(prefixed_filename, directory); strcat(prefixed_filename, "/"); strcat(prefixed_filename, filename_utf8); } else prefixed_filename = filename_utf8; TRACE_LOG("prefixed filename: \"%s\"\n.", prefixed_filename); *result_file = fsi->openfile(prefixed_filename, filetype_or_mode, fileaccess); if (directory != NULL) free(prefixed_filename); free(filename_utf8); return input_length; } static int ask_for_filename(char *filename_suggestion, z_file **result_file, char *directory, int filetype_or_mode, int fileaccess) { int16_t input_length; int length = 0; bool stream_1_active_buf; char *filename_utf8; int i; int return_code; return_code = active_interface->prompt_for_filename( filename_suggestion, result_file, directory, filetype_or_mode, fileaccess); // If return_code is == -3, this function is not implemented in the current // screen interface. if (return_code != -3) return return_code; /* There was no prompt_for_file, so the interpreter will have to ask for * a filename directly. */ TRACE_LOG("last:\""); TRACE_LOG_Z_UCS(last_savegame_filename); TRACE_LOG("\"\n"); if (filename_suggestion != NULL) { TRACE_LOG("suggestion: '%s'.\n", filename_suggestion); } if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); if (filename_suggestion != NULL) { TRACE_LOG("filename suggestion: %s.\n", filename_suggestion); length = strlen(filename_suggestion); i = 0; while ( (i < length) && (i + 1 < MAXIMUM_SAVEGAME_NAME_LENGTH) ) { current_savegame_filename_buffer[i] = latin1_char_to_zucs_char(filename_suggestion[i]); i++; } current_savegame_filename_buffer[i] = 0; length = i; } else { TRACE_LOG("No filename suggestion.\n"); length = z_ucs_len(last_savegame_filename); i = 0; while ( (i < length) && (i + 1 < MAXIMUM_SAVEGAME_NAME_LENGTH) ) { current_savegame_filename_buffer[i] = unicode_char_to_zscii_input_char(last_savegame_filename[i]); i++; } current_savegame_filename_buffer[i] = 0; } if (i18n_translate( libfizmo_module_name, i18n_libfizmo_PLEASE_ENTER_SAVEGAME_FILENAME) == (size_t)-1) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "i18n_translate"); if (streams_latin1_output("\n>") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); if (streams_latin1_output((char*)current_savegame_filename_buffer) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); TRACE_LOG("Removing %d chars from history.\n", length); stream_2_remove_chars(length); #ifndef DISABLE_COMMAND_HISTORY remove_chars_from_history(outputhistory[active_window_number], length); #endif /* DISABLE_COMMAND_HISTORY */ TRACE_LOG("Prompting for filename.\n"); // Prompt for filename input_length = ask_user_for_file( (uint8_t*)current_savegame_filename_buffer, MAXIMUM_SAVEGAME_NAME_LENGTH, length, filetype_or_mode, fileaccess, result_file, directory); if (input_length == -2) { // User pressed ESC if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); return -2; } else if (input_length == 0) { if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); if (i18n_translate( libfizmo_module_name, i18n_libfizmo_FILENAME_MUST_NOT_BE_EMPTY) == (size_t)-1) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "i18n_translate"); if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); return -1; } current_savegame_filename_buffer[input_length] = 0; i = 0; while (i <= (int)input_length) { last_savegame_filename[i] = zscii_output_char_to_z_ucs(current_savegame_filename_buffer[i]); i++; } last_savegame_filename[i] = 0; TRACE_LOG("From ZSCII translated filename: \""); TRACE_LOG_Z_UCS(last_savegame_filename); TRACE_LOG("\".\n"); stream_1_active_buf = stream_1_active; stream_1_active = active_interface->input_must_be_repeated_by_story(); (void)streams_z_ucs_output_user_input(last_savegame_filename); (void)streams_z_ucs_output_user_input(z_ucs_newline_string); stream_1_active = stream_1_active_buf; if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); if (*result_file == NULL) { filename_utf8 = dup_zucs_string_to_utf8_string(last_savegame_filename); if (i18n_translate( libfizmo_module_name, i18n_libfizmo_COULD_NOT_OPEN_FILE_NAMED_P0S, filename_utf8) == (size_t)-1) { free(filename_utf8); i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "i18n_translate"); } free(filename_utf8); if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); return -1; } return input_length; } // Returns the supplied result code. static int _store_save_or_restore_result(uint16_t result_code) { if (ver < 4) { evaluate_branch(result_code != 0 ? (uint8_t)1 : (uint8_t)0); } else { read_z_result_variable(); set_variable(z_res_var, result_code, false); } return result_code; } // Handle an error in the save or restore process. This always returns 0, // indicating failure. // If evaluate_result is true, this does a Z-machine store of 0. // If close_stream is true, this closes the file. static int _handle_save_or_restore_failure(bool evaluate_result, int i18n_message_code, z_file *iff_file, bool close_stream) { if (i18n_message_code >= 1) if (i18n_translate(libfizmo_module_name, i18n_message_code) == (size_t)-1) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "i18n_translate"); if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); if (close_stream == true) if (fsi->closefile(iff_file) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "closefile"); if (bool_equal(evaluate_result, true)) _store_save_or_restore_result(0); return 0; } int get_paragraph_save_amount() { char *nof_paragraphs_as_string = get_configuration_value("save-text-history-paragraphs"); if (nof_paragraphs_as_string == NULL) return -1; else return strtol(nof_paragraphs_as_string, NULL, 10); } void save_game(uint16_t address, uint16_t length, char *filename, bool skip_asking_for_filename, bool evaluate_result, char *directory) { z_file *save_file; char *system_filename; char *str; TRACE_LOG("Save %d bytes from address %d.\n", length, address); if (filename != NULL) { if (bool_equal(skip_asking_for_filename, true)) { system_filename = filename; if (directory != NULL) { str = fizmo_malloc(strlen(system_filename) + strlen(directory) + 2); strcpy(str, directory); strcat(str, "/"); strcat(str, system_filename); } else str = system_filename; TRACE_LOG("Filename to save to: \"%s\".\n", str); save_file = fsi->openfile(str, FILETYPE_SAVEGAME, FILEACCESS_WRITE); if (directory != NULL) free(str); free(system_filename); } else { if ( ((ask_for_filename(filename, &save_file, directory, FILETYPE_SAVEGAME, FILEACCESS_WRITE)) < 0) || (save_file == NULL) ) { if (bool_equal(evaluate_result, true)) _store_save_or_restore_result(0); return; } str = save_file->filename; TRACE_LOG("filename from ask_for_filename: \"%s\".\n", str); } } else { if ( ((ask_for_filename(NULL, &save_file, directory, FILETYPE_SAVEGAME, FILEACCESS_WRITE)) < 0) || (save_file == NULL) ) { if (bool_equal(evaluate_result, true)) _store_save_or_restore_result(0); return; } str = save_file->filename; TRACE_LOG("filename from ask_for_filename: \"%s\".\n", str); } save_game_to_stream(address, length, save_file, evaluate_result); } /* Returns 0 for failure, 1 for success. This closes the save_file. */ int save_game_to_stream(uint16_t address, uint16_t length, z_file *save_file, bool evaluate_result) { uint32_t pc_on_restore = (uint32_t)(pc - z_mem); uint8_t *dynamic_index; uint16_t consecutive_zeros; int data; uint8_t *ptr; #ifndef DISABLE_OUTPUT_HISTORY z_ucs *hst_ptr; int nof_paragraphs_to_save; history_output *history; int return_code; #endif // DISABLE_OUTPUT_HISTORY TRACE_LOG("PC at: %x.\n", pc_on_restore); if (address != 0) { if ((fsi->writechars(z_mem + address, length, save_file)) != length) { return _handle_save_or_restore_failure( evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if ((fsi->closefile(save_file)) != 0) { return _handle_save_or_restore_failure( evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } } else { init_empty_file_for_iff_write(save_file); if (start_new_chunk("IFhd", save_file) != 0) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } // Save release number if ((fsi->writechar((int)z_mem[0x2], save_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if ((fsi->writechar((int)z_mem[0x3], save_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } // Save serial number if ((fsi->writechar((int)z_mem[0x12], save_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if ((fsi->writechar((int)z_mem[0x13], save_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if ((fsi->writechar((int)z_mem[0x14], save_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if ((fsi->writechar((int)z_mem[0x15], save_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if ((fsi->writechar((int)z_mem[0x16], save_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if ((fsi->writechar((int)z_mem[0x17], save_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } // Save checksum if ((fsi->writechar((int)z_mem[0x1c], save_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if ((fsi->writechar((int)z_mem[0x1d], save_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } // Save initial PC on restore if ((fsi->writechar((int)(pc_on_restore >> 16), save_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if ((fsi->writechar((int)(pc_on_restore >> 8), save_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if ((fsi->writechar((int)(pc_on_restore ), save_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if (end_current_chunk(save_file) != 0) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } dynamic_index = z_mem + address; if ( (active_z_story->z_story_file != NULL) && ((fsi->setfilepos( active_z_story->z_story_file, active_z_story->story_file_exec_offset, SEEK_SET)) == 0) && (strcmp(get_configuration_value("quetzal-umem"), "true") != 0) ) { // The original story file is availiable, use CMem. TRACE_LOG("Compressing memory from byte %d ...\n", address); if (start_new_chunk("CMem", save_file) != 0) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } ptr = z_mem + address + length; consecutive_zeros = 0; while (dynamic_index != ptr) { if ((data = fsi->readchar(active_z_story->z_story_file)) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } data ^= *dynamic_index; if (data == 0) { consecutive_zeros++; } else { TRACE_LOG("Altered byte at offset %ld.\n", (long int)(dynamic_index - z_mem)); TRACE_LOG("Memory-Data: %x.\n", *dynamic_index); //TRACE_LOG("Skipping %d equal bytes.\n", consecutive_zeros); while (consecutive_zeros != 0) { if (fsi->writechar(0, save_file) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if (consecutive_zeros > 256) { if (fsi->writechar(0xff, save_file) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } consecutive_zeros -= 256; } else { if (fsi->writechar((int)(consecutive_zeros - 1),save_file) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } consecutive_zeros = 0; } } if (fsi->writechar(data, save_file) == EOF) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } } dynamic_index++; } TRACE_LOG("... to byte %ld.\n", (long int)(ptr - z_mem)); if (end_current_chunk(save_file) != 0) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } } else { if (start_new_chunk("UMem", save_file) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "start_new_chunk"); while (dynamic_index != active_z_story->static_memory) { if ((fsi->writechar((int)(*dynamic_index), save_file)) == EOF) { return _handle_save_or_restore_failure( evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } dynamic_index++; } if (end_current_chunk(save_file) != 0) { return _handle_save_or_restore_failure( evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } } if (start_new_chunk("Stks", save_file) != 0) { return _handle_save_or_restore_failure( evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } #ifdef ENABLE_TRACING dump_stack_to_tracelog(); dump_dynamic_memory_to_tracelog(); #endif // ENABLE_TRACING // Save stack frames if (save_stack_frame( z_stack_index-stack_words_from_active_routine-number_of_locals_active, (uint16_t)stack_words_from_active_routine, number_of_locals_active, save_file) != 0) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if (end_current_chunk(save_file) != 0) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } if (start_new_chunk("ANNO", save_file) != 0) { return _handle_save_or_restore_failure( evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } fsi->fileprintf(save_file, "Interpreter: fizmo, version: %s.\n", FIZMO_VERSION); if (end_current_chunk(save_file) != 0) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } #ifndef DISABLE_OUTPUT_HISTORY nof_paragraphs_to_save = get_paragraph_save_amount(); if ( (nof_paragraphs_to_save > 0) && (outputhistory[0] != NULL) && (outputhistory[0]->z_history_buffer_size > 0) ) { history = init_history_output( outputhistory[0], NULL, Z_HISTORY_OUTPUT_WITHOUT_EXTRAS); do { return_code = output_rewind_paragraph(history, NULL, NULL, NULL); nof_paragraphs_to_save--; } while ( (nof_paragraphs_to_save > 0) && (return_code == 0) ); if (start_new_chunk("TxHs", save_file) != 0) { return _handle_save_or_restore_failure( evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } hst_ptr = history->current_paragraph_index; if (hst_ptr < outputhistory[0]->z_history_buffer_back_index) { while (hst_ptr != outputhistory[0]->z_history_buffer_end) { if (write_four_byte_number(*hst_ptr, save_file) != 0) { return _handle_save_or_restore_failure( evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } hst_ptr++; } hst_ptr = outputhistory[0]->z_history_buffer_start; } while (hst_ptr != outputhistory[0]->z_history_buffer_front_index) { if (write_four_byte_number(*hst_ptr, save_file) != 0) { return _handle_save_or_restore_failure( evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } hst_ptr++; } if (end_current_chunk(save_file) != 0) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } } #endif // DISABLE_OUTPUT_HISTORY if (close_simple_iff_file(save_file) != -0) { return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_WRITING_SAVE_FILE, save_file, true); } } if (bool_equal(evaluate_result, true)) _store_save_or_restore_result(1); return 1; } void opcode_save_0op(void) { TRACE_LOG("Opcode: SAVE.\n"); if (strcmp(get_configuration_value("disable-save"), "true") == 0) _store_save_or_restore_result(0); else save_game( 0, (uint16_t)(active_z_story->dynamic_memory_end - z_mem + 1), NULL, false, true, get_configuration_value("savegame-path")); } void opcode_save_ext(void) { uint16_t address; uint16_t length; char *filename = NULL; long memsize; uint8_t *ptr; int i; TRACE_LOG("Opcode: SAVE_EXT.\n"); TRACE_LOG("Operands provided: %d.\n", number_of_operands); if (strcmp(get_configuration_value("disable-save"), "true") == 0) { _store_save_or_restore_result(0); return; } if (number_of_operands >= 2) { address = op[0]; length = op[1]; if (number_of_operands >= 3) { ptr = z_mem + (uint16_t)op[2]; memsize = (*ptr) + 1; filename = (char*)fizmo_malloc(memsize); for (i=0; i<*ptr; i++) filename[i] = ptr[i+1]; filename[i] = 0; } } else { address = 0; length = (uint16_t)(active_z_story->dynamic_memory_end - z_mem + 1); } save_game( address, length, filename, false, true, get_configuration_value("savegame-path")); if (filename != NULL) free(filename); } /* Returns 0 for failure, 2 for successful restore. (These values match the Z-machine @save result codes.) This closes the iff_file. */ int restore_game_from_stream(uint16_t address, uint16_t length, z_file *iff_file, bool evaluate_result) { uint8_t release_number[2]; uint8_t serial_number[6]; uint8_t checksum[2]; uint8_t pc_on_restore_data[3]; uint32_t pc_on_restore; uint8_t *dynamic_index; int bytes_read; int chunk_length; uint16_t stack_word; int data, data2; int copylength; uint8_t *restored_story_mem; uint8_t *ptr; struct z_stack_container *saved_stack; uint32_t stack_frame_return_pc; bool stack_frame_discard_result; uint8_t stack_frame_result_var; uint8_t stack_frame_argument_mask; uint8_t stack_frame_arguments_supplied; // The following four variables are set to 0 to avoid compiler warnings. uint8_t current_stack_frame_nof_locals = 0; uint8_t last_stack_frame_nof_locals = 0; uint16_t current_stack_frame_nof_functions_stack_words = 0; uint16_t last_stack_frame_nof_functions_stack_words = 0; uint8_t flags2; int i; #ifndef DISABLE_OUTPUT_HISTORY z_ucs history_buffer[HISTORY_BUFFER_INPUT_SIZE]; int history_input_index; int nof_paragraphs_to_save; #ifdef ENABLE_TRACING z_ucs zucs_char_buffer[2]; #endif // ENABLE_TRACING #endif // DISABLE_OUTPUT_HISTORY if (find_chunk("IFhd", iff_file) == -1) return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_CANT_FIND_CHUNK_IFHD, iff_file, false); // Skip length code if (fsi->setfilepos(iff_file, 4, SEEK_CUR) != 0) return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); if (fsi->readchars(release_number, 2, iff_file) != 2) return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_COULD_NOT_READ_RELEASE_NUMBER, iff_file, false); if (fsi->readchars(serial_number, 6, iff_file) != 6) return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_COULD_NOT_READ_SERIAL_NUMBER, iff_file, false); if (fsi->readchars(checksum, 2, iff_file) != 2) return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_COULD_NOT_READ_CHECKSUM, iff_file, false); //TRACE_LOG("release_number: %x\n", release_number[0]<<8 | release_number[1]); //TRACE_LOG("serial_number: \"%6s\"\n", serial_number); //TRACE_LOG("checksum: %x\n", checksum[0]<<8 | checksum[1]); //TRACE_LOG("mem-release_number: %x\n", (*(z_mem+2)<<8)|*(z_mem+3)); //TRACE_LOG("mem-serial_number: \"%6s\"\n", z_mem+0x12); //TRACE_LOG("mem-checksum: %x\n", (*(z_mem+0x1c)<<8)|(*(z_mem+0x1d))) if ( (memcmp(release_number, z_mem+2, 2) != 0) || (memcmp(serial_number, z_mem+0x12, 6) != 0) || (memcmp(checksum, z_mem+0x1c, 2) != 0) ) return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_RELEASE_NR_SERIAL_NR_OR_CHECKSUM_DOESNT_MATCH, iff_file, false); if (fsi->readchars(pc_on_restore_data, 3, iff_file) != 3) return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_COULD_NOT_READ_RESTORE_PC, iff_file, false); pc_on_restore = 0; pc_on_restore |= pc_on_restore_data[0] << 16; pc_on_restore |= pc_on_restore_data[1] << 8; pc_on_restore |= pc_on_restore_data[2]; TRACE_LOG("PC on restore: $%x.\n", (unsigned)pc_on_restore); pc = z_mem + pc_on_restore; TRACE_LOG("Allocating %d bytes for restored dynamic memory.\n", length); restored_story_mem = (uint8_t*)fizmo_malloc(length); dynamic_index = restored_story_mem; if (find_chunk("CMem", iff_file) == 0) { if (read_chunk_length(iff_file) == -1) { free(restored_story_mem); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_CANT_READ_CHUNK_LENGTH, iff_file, false); } chunk_length = get_last_chunk_length(); TRACE_LOG("CMem has chunk length %d.\n", chunk_length); if ( (active_z_story->z_story_file == NULL) || (fsi->setfilepos( active_z_story->z_story_file, active_z_story->story_file_exec_offset, SEEK_SET) != 0) ) { if (i18n_translate( libfizmo_module_name, i18n_libfizmo_COULD_NOT_FIND_ORIGINAL_STORY_FILE_P0S, active_z_story->absolute_file_name) == (size_t)-1) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "i18n_translate"); if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); free(restored_story_mem); return _handle_save_or_restore_failure(evaluate_result, -1, iff_file, false); } bytes_read = 0; while (bytes_read < chunk_length) { // Read data from CMem chunk. data = fsi->readchar(iff_file); bytes_read++; if (data == EOF) { free(restored_story_mem); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); } if (data != 0) { data2 = fsi->readchar(active_z_story->z_story_file); // Found content difference to original story file. if (data2 == EOF) { free(restored_story_mem); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_FATAL_ERROR_READING_STORY_FILE, iff_file, false); } TRACE_LOG("Altered byte at offset %ld.\n", (long int)(dynamic_index - restored_story_mem)); TRACE_LOG("CMem-Data: %x, Story-Data: %x.\n", data, data2); *dynamic_index = (uint8_t)(data2 ^ data); dynamic_index++; } else { // Found block identical to story file. data = fsi->readchar(iff_file); bytes_read++; if (data == EOF) { free(restored_story_mem); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); } copylength = data + 1; //TRACE_LOG("Skipping %d equal bytes.\n", copylength); for (i=0; ireadchar(active_z_story->z_story_file); if (data2 == EOF) { free(restored_story_mem); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_FATAL_ERROR_READING_STORY_FILE, iff_file, false); } *dynamic_index = (uint8_t)data2; dynamic_index++; } } } TRACE_LOG("Successfully read %d bytes, uncompressed: %ld.\n", bytes_read, (long int)(dynamic_index - restored_story_mem + 1)); ptr = restored_story_mem + length; while (dynamic_index != ptr) { data = fsi->readchar(active_z_story->z_story_file); if (data == EOF) { free(restored_story_mem); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_FATAL_ERROR_READING_STORY_FILE, iff_file, false); } *dynamic_index = (uint8_t)data; dynamic_index++; } TRACE_LOG("Filled undefined memory with source file up to byte: %ld.\n", (long int)(dynamic_index - restored_story_mem)); } else if (find_chunk("UMem", iff_file) == 0) { if (read_chunk_length(iff_file) == -1) { free(restored_story_mem); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_CANT_READ_CHUNK_LENGTH, iff_file, false); } chunk_length = get_last_chunk_length(); if (chunk_length < length) { // Not enough bytes saved. free(restored_story_mem); return _handle_save_or_restore_failure( evaluate_result, -1, iff_file, false); } TRACE_LOG("Chunk length: %d, length-to-read: %d.\n", chunk_length, length); ptr = restored_story_mem + length; while (dynamic_index != ptr) { data = fsi->readchar(iff_file); if (data == EOF) { free(restored_story_mem); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); } *dynamic_index = (uint8_t)data; dynamic_index++; } } else { //FIXME: Rename error. free(restored_story_mem); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_CANT_FIND_CMEM_OR_UMEM_CHUNK, iff_file, false); } if (find_chunk("Stks", iff_file) == -1) { free(restored_story_mem); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_CANT_FIND_CHUNK_STKS, iff_file, false); } if (read_chunk_length(iff_file) == -1) { free(restored_story_mem); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_CANT_READ_CHUNK_LENGTH, iff_file, false); } chunk_length = get_last_chunk_length(); // We create a new stack to store the now incoming data, but keep a // reference to the saved stack in "saved_stack", which allows us to // re-use it in case somwthing goes wrong during restore. saved_stack = create_new_stack(); bytes_read = 0; number_of_stack_frames = 0; while (bytes_read < chunk_length) { // Each while iteration processes a single stack frame. // PC Bits 16-23 data = fsi->readchar(iff_file); if (data == EOF) { free(restored_story_mem); restore_old_stack(saved_stack); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); } stack_frame_return_pc = (data & 0xff) << 16; // PC Bits 8-15 data = fsi->readchar(iff_file); if (data == EOF) { free(restored_story_mem); restore_old_stack(saved_stack); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); } stack_frame_return_pc |= (data & 0xff) << 8; // PC Bits 0-7 data = fsi->readchar(iff_file); if (data == EOF) { free(restored_story_mem); restore_old_stack(saved_stack); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); } stack_frame_return_pc |= (data & 0xff); data = fsi->readchar(iff_file); if (data == EOF) { free(restored_story_mem); restore_old_stack(saved_stack); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); } stack_frame_discard_result = ((data & 0x10) != 0 ? true : false); current_stack_frame_nof_locals = (data & 0xf); data = fsi->readchar(iff_file); if (data == EOF) { free(restored_story_mem); restore_old_stack(saved_stack); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); } stack_frame_result_var = (data & 0xff); data = fsi->readchar(iff_file); if (data == EOF) { free(restored_story_mem); restore_old_stack(saved_stack); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); } stack_frame_argument_mask = (data & 0xff); data = fsi->readchar(iff_file); if (data == EOF) { free(restored_story_mem); restore_old_stack(saved_stack); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); } current_stack_frame_nof_functions_stack_words = ((data & 0xff) << 8); data = fsi->readchar(iff_file); if (data == EOF) { free(restored_story_mem); restore_old_stack(saved_stack); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); } current_stack_frame_nof_functions_stack_words |= (data & 0xff); bytes_read += 8; stack_frame_arguments_supplied = 0; while (stack_frame_argument_mask != 0) { stack_frame_arguments_supplied++; stack_frame_argument_mask >>= 1; } if (number_of_stack_frames == 0) store_first_stack_frame(); else store_followup_stack_frame_header( last_stack_frame_nof_locals, stack_frame_discard_result, stack_frame_arguments_supplied, last_stack_frame_nof_functions_stack_words, stack_frame_return_pc, stack_frame_result_var); i = 0; // write locals and stack while (i < current_stack_frame_nof_locals + current_stack_frame_nof_functions_stack_words) { data = fsi->readchar(iff_file); if (data == EOF) { free(restored_story_mem); restore_old_stack(saved_stack); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); } stack_word = (data & 0xff) << 8; data = fsi->readchar(iff_file); if (data == EOF) { free(restored_story_mem); restore_old_stack(saved_stack); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_ERROR_READING_SAVE_FILE, iff_file, false); } stack_word |= (data & 0xff); z_stack_push_word(stack_word); i++; } bytes_read += i * 2; last_stack_frame_nof_locals = current_stack_frame_nof_locals; last_stack_frame_nof_functions_stack_words = current_stack_frame_nof_functions_stack_words; number_of_stack_frames++; } TRACE_LOG("Number of stack frames: %d.\n", number_of_stack_frames); #ifndef DISABLE_OUTPUT_HISTORY nof_paragraphs_to_save = get_paragraph_save_amount(); if ( (nof_paragraphs_to_save > 0) && (outputhistory[0] != NULL) && (find_chunk("TxHs", iff_file) == 0) ) { if (read_chunk_length(iff_file) == -1) { free(restored_story_mem); return _handle_save_or_restore_failure(evaluate_result, i18n_libfizmo_CANT_READ_CHUNK_LENGTH, iff_file, false); } chunk_length = get_last_chunk_length(); TRACE_LOG("saved history size: %d bytes.\n", chunk_length); #ifdef ENABLE_TRACING zucs_char_buffer[1] = 0; i = 0; #endif // ENABLE_TRACING if (chunk_length > 0) { history_input_index = 0; while (chunk_length != 0) { history_buffer[history_input_index] = (z_ucs)read_four_byte_number(iff_file); #ifdef ENABLE_TRACING zucs_char_buffer[0] = history_buffer[history_input_index]; TRACE_LOG("read char %d: \"", i); TRACE_LOG_Z_UCS(zucs_char_buffer); TRACE_LOG("\"\n"); i++; #endif // ENABLE_TRACING chunk_length -= 4; history_input_index++; if ( (history_input_index == HISTORY_BUFFER_INPUT_SIZE - 1) || (chunk_length == 0) ) { store_data_in_history( outputhistory[0], history_buffer, history_input_index, true); history_input_index = 0; } } active_interface->game_was_restored_and_history_modified(); } } #endif // DISABLE_OUTPUT_HISTORY if (fsi->closefile(iff_file) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "closefile"); number_of_locals_active = current_stack_frame_nof_locals; stack_words_from_active_routine = current_stack_frame_nof_functions_stack_words; local_variable_storage_index = z_stack_index - current_stack_frame_nof_locals - current_stack_frame_nof_functions_stack_words; TRACE_LOG( "Restored stack: %d locals active, %d, words from active routine.\n", number_of_locals_active, stack_words_from_active_routine); if (saved_stack != NULL) delete_stack_container(saved_stack); // restored_story_mem has been filled via dynamix_index above so inhibit // warning is okay. // As with restart, the transcription and fixed font bits survive. flags2 = z_mem[0x11] & 0x3; /*@-compdef@*/ memcpy( z_mem + address, restored_story_mem, length); /*@+compdef@*/ z_mem[0x11] &= 0xfc; z_mem[0x11] |= flags2; free(restored_story_mem); fizmo_new_screen_size( active_interface->get_screen_width_in_characters(), active_interface->get_screen_height_in_lines()); #ifdef ENABLE_TRACING dump_stack_to_tracelog(); dump_dynamic_memory_to_tracelog(); #endif // ENABLE_TRACING if (bool_equal(evaluate_result, true)) _store_save_or_restore_result(2); return 2; } int restore_game(uint16_t address, uint16_t length, char *filename, bool skip_asking_for_filename, bool evaluate_result, char *directory) { z_file *save_file; char *str; char *system_filename; TRACE_LOG("Restore %d bytes to address %d.\n", length, address); if (filename != NULL) { if (bool_equal(skip_asking_for_filename, true)) { system_filename = filename; if (directory != NULL) { str = fizmo_malloc(strlen(directory) + strlen(system_filename) + 2); strcpy(str, directory); strcat(str, "/"); strcat(str, system_filename); } else str = system_filename; save_file = open_simple_iff_file( str, IFF_MODE_READ_SAVEGAME); if (directory != NULL) free(str); free(system_filename); } else { if ( ((ask_for_filename(NULL, &save_file, directory, FILETYPE_SAVEGAME, FILEACCESS_READ)) < 0) || (save_file == NULL) ) { if (bool_equal(evaluate_result, true)) _store_save_or_restore_result(0); return -1; } str = save_file->filename; TRACE_LOG("filename from ask_for_filename: \"%s\".\n", str); } } else { if ( ((ask_for_filename(NULL, &save_file, directory, FILETYPE_SAVEGAME, FILEACCESS_READ)) < 0) || (save_file == NULL) ) { if (bool_equal(evaluate_result, true)) _store_save_or_restore_result(0); return -1; } str = save_file->filename; TRACE_LOG("filename from ask_for_filename: \"%s\".\n", str); } return restore_game_from_stream(address, length, save_file, evaluate_result); } void opcode_restore_0op(void) { TRACE_LOG("Opcode: RESTORE.\n"); if (strcmp(get_configuration_value("disable-restore"), "true") == 0) _store_save_or_restore_result(0); else restore_game( 0, (uint16_t)(active_z_story->dynamic_memory_end - z_mem + 1), NULL, false, true, get_configuration_value("savegame-path")); } void opcode_restore_ext(void) { uint16_t address; uint16_t length; uint8_t *ptr; char *filename = NULL; long memsize; int i; TRACE_LOG("Opcode: RESTORE_EXT.\n"); if (strcmp(get_configuration_value("disable-restore"), "true") == 0) { _store_save_or_restore_result(0); return; } if (number_of_operands >= 2) { address = op[0]; length = op[1]; if (number_of_operands >= 3) { ptr = z_mem + (uint16_t)op[2]; memsize = *ptr + 1; filename = (char*)fizmo_malloc(memsize); for (i=0; i<*ptr; i++) filename[i] = ptr[i+1]; filename[i] = 0; } } else { address = 0; length = (uint16_t)(active_z_story->dynamic_memory_end - z_mem + 1); } restore_game( address, length, filename, false, true, get_configuration_value("savegame-path")); if (filename != NULL) free(filename); } #ifndef DISABLE_FILELIST bool detect_saved_game(char *file_to_check, char **story_file_to_load) { z_file *iff_file; uint8_t release_number_buf[2]; uint16_t release_number; char serial_number[7]; uint8_t checksum_buf[2]; uint16_t checksum; struct z_story_list_entry *story_entry; iff_file = open_simple_iff_file(file_to_check, IFF_MODE_READ_SAVEGAME); if (iff_file == NULL) { return false; } else if (find_chunk("RIdx", iff_file) == 0) { // We have an Blorb-IFF-file, no savegame. fsi->closefile(iff_file); return false; } else { if (find_chunk("IFhd", iff_file) == -1) { fsi->closefile(iff_file); return false; } // Skip length code if (fsi->setfilepos(iff_file, 4, SEEK_CUR) != 0) { fsi->closefile(iff_file); return false; } if (fsi->readchars(release_number_buf, 2, iff_file) != 2) { fsi->closefile(iff_file); return false; } if (fsi->readchars(serial_number, 6, iff_file) != 6) { fsi->closefile(iff_file); return false; } if (fsi->readchars(checksum_buf, 2, iff_file) != 2) { fsi->closefile(iff_file); return false; } fsi->closefile(iff_file); release_number = (release_number_buf[0] << 8) | release_number_buf[1]; serial_number[6] = 0; checksum = (checksum_buf[0] << 8) | checksum_buf[1]; if ((story_entry = get_z_story_entry_from_list( serial_number, release_number, checksum)) != NULL) { *story_file_to_load = fizmo_strdup(story_entry->filename); free_z_story_list_entry(story_entry); } return true; } } #endif // DISABLE_FILELIST #endif /* savegame_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/savegame.h000644 000765 000024 00000005031 12606024314 022563 0ustar00chrenderstaff000000 000000 /* savegame.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef savegame_h_INCLUDED #define savegame_h_INCLUDED #include "../tools/types.h" #define LAST_SAVEGAME_FILENAME_BYTE_LENGTH (MAXIMUM_SAVEGAME_NAME_LENGTH * MB_LEN_MAX + 1) #ifndef savegame_c_INCLUDED extern z_ucs last_savegame_filename[]; #endif /* savegame_c_INCLUDED */ int save_game_to_stream(uint16_t address, uint16_t length, z_file *save_file, bool evaluate_result); void save_game(uint16_t address, uint16_t length, char *filename, bool skip_asking_for_filename, bool evaluate_result, char *directory); int restore_game_from_stream(uint16_t address, uint16_t length, z_file *iff_file, bool evaluate_result); int restore_game(uint16_t address, uint16_t length, char *filename, bool skip_asking_for_filename, bool evaluate_result, char *directory); #ifndef DISABLE_FILELIST bool detect_saved_game(char *file_to_check, char **story_file_to_load); #endif // DISABLE_FILELIST void opcode_save_0op(void); void opcode_save_ext(void); void opcode_restore_0op(void); void opcode_restore_ext(void); #endif /* savegame_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/sound.c000644 000765 000024 00000006377 12606024314 022134 0ustar00chrenderstaff000000 000000 /* sound.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "../tools/i18n.h" #include "../tools/tracelog.h" #include "sound.h" #include "fizmo.h" #include "zpu.h" void opcode_sound_effect(void) { int effect_number=1, effect=2, volume=8, repeats=255; uint16_t routine = 0; // VAR:245 15 5/3 sound_effect number effect volume routine TRACE_LOG("Opcode: SOUND_EFFECT\n"); if (active_sound_interface != NULL) { if (number_of_operands >= 1) { effect_number = (int16_t)op[0]; if (effect_number < 1) effect_number = 1; if (number_of_operands >= 2) { effect = (int16_t)op[1]; if ( (effect < 1) || (effect > 4) ) return; if (number_of_operands >= 3) { TRACE_LOG("op[2]: %d.\n", op[2]); volume = op[2] & 0xff; repeats = op[2] >> 8; if ( (volume < 1) || (volume > 8) ) volume = 8; if (ver >= 5) { if (repeats < 1) // 255 loop forever. repeats = 255; else if (repeats > 255) repeats = 254; } else // -1 means take from file (repeat is also stored there). repeats = -1; if (number_of_operands >= 4) routine = op[3]; } } } TRACE_LOG("Nr: %d, Effect: %d, Volume: %d, Repeats: %d, Routine: %d.\n", effect_number, effect, volume, repeats, routine); if (effect == 1) active_sound_interface->prepare_sound(effect_number, volume, repeats); else if (effect == 2) active_sound_interface->play_sound(effect_number,volume,repeats,routine); else if (effect == 3) active_sound_interface->stop_sound(effect_number); else if (effect == 4) active_sound_interface->finish_sound(effect_number); } } fizmo-0.7.10/libfizmo/src/interpreter/sound.h000644 000765 000024 00000003151 12606024314 022124 0ustar00chrenderstaff000000 000000 /* sound.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef sound_h_INCLUDED #define sound_h_INCLUDED void opcode_sound_effect(void); #endif /* sound_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/stack.c000644 000765 000024 00000025740 12606024314 022104 0ustar00chrenderstaff000000 000000 /* stack.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef stack_c_INCLUDED #define stack_c_INCLUDED #include #include #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "stack.h" #include "config.h" #include "routine.h" #include "variable.h" #include "fizmo.h" #include "../locales/libfizmo_locales.h" size_t current_z_stack_size = 0; /*@null@*/ /*@owned@*/ uint16_t *z_stack = NULL; /*@null@*/ /*@dependent@*/ uint16_t *z_stack_index = NULL; /*@null@*/ /*@dependent@*/ uint16_t *behind_z_stack = NULL; int stack_words_from_active_routine = 0; // This function is called by the z_stack_push_word function and the // "allocate_z_stack_words" function in case the capacity of the // current stack is too small to hold additional data. This function // will enlarge the current stack by a number of uint16_t words given // in the "added_capacity" parameter. static void resize_z_stack(int32_t added_capacity) { int index_position; size_t offset; if (added_capacity == 0) return; TRACE_LOG("Enlarging stack capacity by %d entries.\n", (int)added_capacity); // We'll have to remember the count of elements currently on the stack. // This is required since a call to realloc might move the stack to // some other place in memory. Keeping the current index number in mind // will allow us to create a corrent pointer to a possibly new location. index_position = z_stack_index - z_stack; TRACE_LOG("current stack size: %d.\n", current_z_stack_size); current_z_stack_size += added_capacity; offset = local_variable_storage_index - z_stack; TRACE_LOG("z_stack: %p, z_stack_index: %p, behind_z_stack: %p.\n", z_stack, z_stack_index, behind_z_stack); // Initially, z_stack is NULL. If realloc() is called with a pointer to // null it works like malloc() which suits just fine. z_stack = (uint16_t*)fizmo_realloc( z_stack, current_z_stack_size * sizeof(uint16_t)); behind_z_stack = z_stack + current_z_stack_size; local_variable_storage_index = z_stack + offset; if ((z_stack_index = z_stack + index_position) >= behind_z_stack) { // In case the stack has been shrunk the index may have to be re-adjusted. z_stack_index = behind_z_stack - 1; } TRACE_LOG("Z-Stack now at %p (element behind: %p, z_stack_index: %p).\n", z_stack, behind_z_stack, z_stack_index); TRACE_LOG("new stack size: %d.\n", current_z_stack_size); } // This function will push the given 16-bit-word on the Z-Stack. In case the // current stack is too small, it is enlarged by the size of the constant // Z_STACK_INCREMENT_SIZE which is defined in config.h void z_stack_push_word(uint16_t data) { TRACE_LOG("Pushing %x on stack.\n", data); TRACE_LOG("Stack pointer before operation: %ld.\n", (long int)(z_stack_index - z_stack)); if (z_stack_index == behind_z_stack) resize_z_stack(Z_STACK_INCREMENT_SIZE); *(z_stack_index++) = data; TRACE_LOG("Stack pointer after operation: %ld.\n", (long int)(z_stack_index - z_stack)); } // The "z_stack_pull_word" function will return the current topmost word // from the stack. In case the stack is empty, it will quit via a call to // "i18n_translate_and_exit". uint16_t z_stack_pull_word() { uint16_t result; if (z_stack_index == z_stack) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_CANNOT_PULL_FROM_EMPTY_STACK, -1); TRACE_LOG("Pulling %x from stack.\n", *(z_stack_index-1)); TRACE_LOG("Stack pointer before operation: %ld.\n", (long int)(z_stack_index - z_stack)); result = *(--z_stack_index); TRACE_LOG("Stack pointer after operation: %ld.\n", (long int)(z_stack_index - z_stack)); return result; } // The "z_stack_peek_word" function will return the topmost stack entry // without altering the stack contents. In case the stack is empty, it // will quit via a call to "i18n_translate_and_exit". uint16_t z_stack_peek_word() { if (z_stack_index == z_stack) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_CANNOT_PULL_FROM_EMPTY_STACK, -1); return *(z_stack_index - 1); } // This function is used by the restart-opcode and the save-game // functionality. It simply decreases the stack by a number of words // given in the "word_counter" and calls the "i18n_translate_and_exit" // function in case there are not enough words on the stack. void drop_z_stack_words(int word_counter) { if (z_stack_index - z_stack < word_counter) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_CANNOT_DROP_P0D_WORDS_FROM_STACK_NOT_ENOUGH_WORDS_STORED, -1, (long int)word_counter); z_stack_index -= word_counter; } // This function is used when a new routine is started and space should // be reserved for new locals. It returns a pointer to the reserved // space on the stack. /*@dependent@*/ uint16_t *allocate_z_stack_words(uint32_t word_counter) { uint16_t *result; TRACE_LOG("Allocating %d stack words.\n", word_counter); while (z_stack_index + word_counter >= behind_z_stack) { TRACE_LOG("Space on stack: %d.\n", behind_z_stack - z_stack_index); resize_z_stack(Z_STACK_INCREMENT_SIZE); } TRACE_LOG("Space on stack: %d.\n", behind_z_stack - z_stack_index); // z_stack_index can't be null, if it was the resize_z_stac would have // quit, so -nullpass and -nullret are okay. /*@-nullpass@*/ result = z_stack_index; /*@+nullpass@*/ z_stack_index += word_counter; /*@-nullret@*/ return result; /*@+nullret@*/ } /*@only@*/ struct z_stack_container *create_new_stack() { struct z_stack_container *current_z_stack_data; current_z_stack_data = (struct z_stack_container*)fizmo_malloc( sizeof(struct z_stack_container)); current_z_stack_data->current_z_stack_size = current_z_stack_size; current_z_stack_data->z_stack = z_stack; current_z_stack_data->z_stack_index = z_stack_index; current_z_stack_data->behind_z_stack = behind_z_stack; current_z_stack_data->stack_words_from_active_routine = stack_words_from_active_routine; current_z_stack_size = 0; z_stack = NULL; z_stack_index = NULL; behind_z_stack = NULL; stack_words_from_active_routine = 0; return current_z_stack_data; } void delete_stack_container(struct z_stack_container *stack_data) { if (stack_data == NULL) return; if (stack_data->z_stack != NULL) free(stack_data->z_stack); free(stack_data); } void restore_old_stack(/*@only@*/ struct z_stack_container *old_z_stack_data) { free(z_stack); current_z_stack_size = old_z_stack_data->current_z_stack_size; z_stack = old_z_stack_data->z_stack; z_stack_index = old_z_stack_data->z_stack_index; behind_z_stack = old_z_stack_data->behind_z_stack; stack_words_from_active_routine = old_z_stack_data->stack_words_from_active_routine; free(old_z_stack_data); } /* void store_first_stack_frame(bool discard_result, uint8_t nof_arguments_supplied, uint32_t return_pc, uint8_t result_var_number) { memset((uint8_t*)allocate_z_stack_words(4), 0, 8); number_of_stack_frames++; } */ void store_first_stack_frame() { memset((uint8_t*)allocate_z_stack_words(4), 0, 8); number_of_stack_frames++; } // It's not possible to use a stack in the quetzal format in memory // directly since we cannot back-step a step-frame without knowing // how much stack/variable-space was used by the last routine. Thus, // the following stack format is used: // -------------------------------------------------- // localvar0 ( <- *local_variable_storage_index before call) // ... // localvarn // stackword0 // ... // stackwordn // (routine call, new stack frame starts) // word1: bits 0-3 : number of local variables in use by last routine // bit 4 : discard result // bits 8-14 : args to last function call, quetzal-encoded // word2: bits 0-15 : number of stack words used by last routine // word3: bits 0-15 : return-PC bits 8-23 // word4: bits 8-15 : return-PC bits 0-7 // bist 0-7 : result variable number // localvar0 ( <- *local_variable_storage_index after call) // ... // localvarn // stackword0 // ... // stackwordn void store_followup_stack_frame_header(uint8_t number_of_locals, bool discard_result, uint8_t nof_arguments_supplied, uint16_t stack_words_from_routine, uint32_t return_pc, uint8_t result_var_number) { uint8_t argument_mask = 0; int i; for (i=0; i> 8) & 0xffff); z_stack_push_word( ((return_pc & 0xff) << 8) | ((bool_equal(discard_result, true) ? 0 : result_var_number) & 0xff) ); } void ensure_z_stack_size(uint32_t minimum_size) { while (current_z_stack_size < minimum_size) resize_z_stack(Z_STACK_INCREMENT_SIZE); } #ifdef ENABLE_TRACING void dump_stack_to_tracelog() { int i = 0; while (i != z_stack_index - z_stack) { TRACE_LOG("Stack-Dump [%03d]: %x\n", i, z_stack[i]); i++; } } #endif // ENABLE_TRACING #endif /* stack_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/stack.h000644 000765 000024 00000005754 12606024314 022114 0ustar00chrenderstaff000000 000000 /* stack.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef stack_h_INCLUDED #define stack_h_INCLUDED #include #include #define MAXIMUM_STACK_ENTRIES_PER_ROUTINE 65535 #ifndef stack_c_INCLUDED /*@null@*/ /*@owned@*/ extern uint16_t *z_stack; extern size_t current_z_stack_size; /*@null@*/ /*@dependent@*/ extern uint16_t *z_stack_index; /*@null@*/ /*@dependent@*/ extern uint16_t *behind_z_stack; extern int stack_words_from_active_routine; #endif /* stack_c_INCLUDED */ #ifdef ENABLE_TRACING void dump_stack_to_tracelog(); #endif // ENABLE_TRACING struct z_stack_container { size_t current_z_stack_size; /*@owned@*/ /*@null@*/ uint16_t *z_stack; /*@dependent@*/ /*@null@*/ uint16_t *z_stack_index; /*@dependent@*/ /*@null@*/ uint16_t *behind_z_stack; int stack_words_from_active_routine; }; void z_stack_push_word(uint16_t data); uint16_t z_stack_pull_word(); uint16_t z_stack_peek_word(); void drop_z_stack_words(int byte_counter); /*@only@*/ struct z_stack_container *create_new_stack(); void delete_stack_container(struct z_stack_container *stack_data); /*@dependent@*/ uint16_t *allocate_z_stack_words(uint32_t byte_counter); void restore_old_stack(/*@only@*/ struct z_stack_container *old_stack_data); void store_first_stack_frame(); void store_followup_stack_frame_header(uint8_t number_of_locals, bool discard_result, uint8_t nof_arguments_supplied, uint16_t stack_words_from_routine, uint32_t return_pc, uint8_t result_var_number); void ensure_z_stack_size(uint32_t minimum_size); #endif /* stack_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/streams.c000644 000765 000024 00000135471 12606024314 022460 0ustar00chrenderstaff000000 000000 /* streams.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef streams_c_INCLUDED #define streams_c_INCLUDED #include #include "../screen_interface/screen_interface.h" #include "../tools/types.h" #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "../tools/z_ucs.h" #include "../tools/unused.h" #include "../tools/filesys.h" #include "streams.h" #include "config.h" #include "fizmo.h" #include "wordwrap.h" #include "text.h" #include "zpu.h" #include "output.h" #include "../locales/libfizmo_locales.h" #ifndef DISABLE_BLOCKBUFFER #include "blockbuf.h" #endif /* DISABLE_BLOCKBUFFER */ #ifndef DISABLE_OUTPUT_HISTORY #include "history.h" #endif /* DISABLE_OUTPUT_HISTORY */ #define ASCII_TO_Z_UCS_BUFFER_SIZE 64 #define FONT3_CONVERSION_BUF_SIZE 128 //int stream_active[5] = { 0, 1, 0, 0, 0 }; bool stream_1_active = true; bool stream_2_filename_stored = false; // stream2 is stored in dynamic memory at z_mem[0x11]. // stream3 is active when stream_3_current_depth >= -1 bool stream_4_active = false; /*@dependent@*/ /*@null@*/ static z_file *stream_2 = NULL; /*@only@*/ char *stream_2_filename = NULL; static size_t stream_2_filename_size = 0; /*@only@*/ static WORDWRAP *stream_2_wrapper = NULL; static zscii current_filename_buffer[MAXIMUM_SCRIPT_FILE_NAME_LENGTH+1]; z_ucs last_script_filename[MAXIMUM_SCRIPT_FILE_NAME_LENGTH + 1]; static bool script_wrapper_active = true; static uint8_t *stream_3_start[MAXIMUM_STREAM_3_DEPTH]; static uint8_t *stream_3_index[MAXIMUM_STREAM_3_DEPTH]; static int stream_3_current_depth = -1; z_file *stream_4 = NULL; /*@only@*/ static char *stream_4_filename; static size_t stream_4_filename_size = 0; z_ucs last_stream_4_filename[MAXIMUM_SCRIPT_FILE_NAME_LENGTH + 1]; z_ucs last_input_stream_filename[MAXIMUM_SCRIPT_FILE_NAME_LENGTH + 1]; static bool stream_4_init_underway = false; char *input_stream_1_filename = NULL; size_t input_stream_1_filename_size = 0; z_file *input_stream_1 = NULL; static bool input_stream_init_underway = false; bool input_stream_1_active = false; bool input_stream_1_was_already_active = false; static z_ucs stream_2_preload_buffer[STREAM_2_PRELOAD_BUFFER_SIZE]; static z_ucs *stream_2_preload_buffer_index = stream_2_preload_buffer; static z_ucs *stream_2_preload_output_start = stream_2_preload_buffer; static z_ucs *stream_2_preload_buffer_last_index = ( stream_2_preload_buffer + STREAM_2_PRELOAD_BUFFER_SIZE - 1); // This flag is used for the timed input. Since the verification routine // may print some text to the screen, the interpreter must be able to // restore the input line once it resumes input. bool stream_output_has_occured = false; static bool stream_2_init_underway = false; static bool stream_4_was_already_active = false; static bool stream_2_wrapping_disabled; static int stream2margin; void open_streams() { #ifdef ENABLE_TRACING turn_on_trace(); #endif /* ENABLE_TRACING */ } static void stream_2_output_destination(z_ucs *z_ucs_output, void *UNUSED(dummy)) { if (*z_ucs_output != 0) { fsi->writeucsstring(z_ucs_output, stream_2); if (strcmp(get_configuration_value("sync-transcript"), "true") == 0) fsi->flushfile(stream_2); } } static void flush_stream_2_buffer_output() { z_ucs *index; z_ucs *newline_index = NULL; z_ucs buf; TRACE_LOG("stream_2_preload_flush:\n"); index = stream_2_preload_buffer_index == stream_2_preload_buffer ? stream_2_preload_buffer_last_index - 1 : stream_2_preload_buffer_index -1; while (index != stream_2_preload_output_start) { if (*index == '\n') { newline_index = index; break; } if (index == stream_2_preload_buffer) { index = stream_2_preload_buffer_last_index; } index--; } if (newline_index == NULL) { index = stream_2_preload_output_start + (STREAM_2_PRELOAD_BUFFER_SIZE / 2); if (index >= stream_2_preload_buffer_last_index) { index = stream_2_preload_buffer + (index - stream_2_preload_buffer_last_index); } } else { if ((index = newline_index + 1) == stream_2_preload_buffer_last_index) { index = stream_2_preload_buffer; } } if (stream_2_preload_output_start > index) { TRACE_LOG("stream_2_preload in wrap-around.\n"); TRACE_LOG("flushs2: \""); TRACE_LOG_Z_UCS(stream_2_preload_output_start); TRACE_LOG("\".\n"); // In wrap-around stream_2_output_destination(stream_2_preload_output_start, NULL); stream_2_preload_output_start = stream_2_preload_buffer; } buf = *index; *index = 0; TRACE_LOG("flushs2:\""); TRACE_LOG_Z_UCS(stream_2_preload_output_start); TRACE_LOG("\".\n"); stream_2_output_destination(stream_2_preload_output_start, NULL); *index = buf; stream_2_preload_output_start = index; } static void stream_2_buffer_output(z_ucs *z_ucs_output) { //z_ucs buf; while (*z_ucs_output != 0) { TRACE_LOG("stream_2_preload_buffer_index: %x\n", stream_2_preload_buffer_index); TRACE_LOG("stream_2_preload_buffer_last_index: %x\n", stream_2_preload_buffer_last_index); TRACE_LOG("stream_2_preload_output_start: %x\n", stream_2_preload_output_start); if (stream_2_preload_buffer_index == stream_2_preload_buffer_last_index) { // output-start following buffer_index in wrap-around: if (stream_2_preload_output_start == stream_2_preload_buffer) { flush_stream_2_buffer_output(); } stream_2_preload_buffer_index = stream_2_preload_buffer; } // output-start following buffer_index as non-wrap-around: if (stream_2_preload_buffer_index + 1 == stream_2_preload_output_start) { flush_stream_2_buffer_output(); } TRACE_LOG("Writing %c to %x.\n", *z_ucs_output, stream_2_preload_buffer_index); *stream_2_preload_buffer_index = *z_ucs_output; stream_2_preload_buffer_index++; z_ucs_output++; } } int stream_2_buffer_remove_chars(size_t nof_chars_to_remove) { while (nof_chars_to_remove > 0) { if (stream_2_preload_buffer_index == stream_2_preload_output_start) { TRACE_LOG("remove-s2 hit output start.\n"); return -1; } if (stream_2_preload_buffer_index == stream_2_preload_buffer) { stream_2_preload_buffer_index = stream_2_preload_buffer_last_index - 1; } else { stream_2_preload_buffer_index--; } TRACE_LOG("Removing %c.\n", *stream_2_preload_buffer_index); TRACE_LOG("stream_2_preload_buffer_index: %x\n", stream_2_preload_buffer_index); TRACE_LOG("stream_2_preload_buffer_last_index: %x\n", stream_2_preload_buffer_last_index); TRACE_LOG("stream_2_preload_output_start: %x\n", stream_2_preload_output_start); nof_chars_to_remove--; } return 0; } void init_streams() { char *src; size_t bytes_required; char *stream_2_line_width = get_configuration_value("stream-2-line-width"); char *stream_2_left_margin = get_configuration_value("stream-2-left-margin"); stream_2_wrapping_disabled = (strcmp(get_configuration_value("disable-stream-2-wrap"), "true") == 0); int stream2width; stream2width = stream_2_line_width != NULL ? atoi(stream_2_line_width) : DEFAULT_STREAM_2_LINE_WIDTH; stream2margin = stream_2_left_margin != NULL ? atoi(stream_2_left_margin) : DEFAULT_STREAM_2_LEFT_PADDING; if (stream_2_wrapping_disabled == false) stream_2_wrapper = wordwrap_new_wrapper( stream2width, &stream_2_output_destination, NULL, true, stream2margin, (strcmp(get_configuration_value("sync-transcript"), "true") == 0 ? true : false), (strcmp(get_configuration_value("disable-stream-2-hyphenation") ,"true") == 0 ? false : true)); *stream_2_preload_buffer_last_index = 0; if (strcmp(get_configuration_value("start-script-when-story-starts"), "true") == 0) z_mem[0x11] |= 1; if (strcmp(get_configuration_value( "start-command-recording-when-story-starts"), "true") == 0) stream_4_active = true; if ((src = get_configuration_value("transcript-filename")) != NULL) { bytes_required = strlen(src) + 1; if ((stream_2_filename == NULL) || (bytes_required>stream_2_filename_size)) { stream_2_filename = (char*)fizmo_realloc(stream_2_filename, bytes_required); stream_2_filename_size = bytes_required; } strcpy(stream_2_filename, src); stream_2_filename_stored = true; } else src = DEFAULT_TRANSCRIPT_FILE_NAME; (void)latin1_string_to_zucs_string( last_script_filename, src, strlen(src) + 1); TRACE_LOG("Converted script default filename: '"); TRACE_LOG_Z_UCS(last_script_filename); TRACE_LOG("'.\n"); if ((src = get_configuration_value("input-command-filename")) != NULL) { bytes_required = strlen(src) + 1; if ((input_stream_1_filename == NULL) || (bytes_required > input_stream_1_filename_size)) { input_stream_1_filename = (char*)fizmo_realloc(input_stream_1_filename, bytes_required); input_stream_1_filename_size = bytes_required; } strcpy(input_stream_1_filename, src); input_stream_1_was_already_active = true; } else src = DEFAULT_INPUT_COMMAND_FILE_NAME; (void)latin1_string_to_zucs_string( last_input_stream_filename, src, strlen(src) + 1); if ((src = get_configuration_value("record-command-filename")) != NULL) { bytes_required = strlen(src) + 1; if ((stream_4_filename == NULL) || (bytes_required>stream_4_filename_size)) { stream_4_filename = (char*)fizmo_realloc(stream_4_filename, bytes_required); stream_4_filename_size = bytes_required; } strcpy(stream_4_filename, src); stream_4_was_already_active = true; } else src = DEFAULT_RECORD_COMMAND_FILE_NAME; (void)latin1_string_to_zucs_string( last_stream_4_filename, src, strlen(src) + 1); if (strcmp(get_configuration_value( "start-file-input-when-story-starts"), "true") == 0) input_stream_1_active = true; } z_file *get_stream_2(void) { return stream_2; } /* Accept a new open stream as the current stream_2. The previous stream_2 is closed. Pass in NULL to just close the previous stream_2. The interpreter's transcript bit is set appropriately. */ void restore_stream_2(z_file *str) { if (stream_2) { (void)fsi->closefile(stream_2); stream_2 = NULL; z_mem[0x11] &= 0xfe; } if (str) { stream_2 = str; z_mem[0x11] |= 1; } } void ask_for_input_stream_filename(void) { bool stream_1_active_buf; int16_t input_length; int16_t i; size_t bytes_required; z_ucs *ptr; int len; input_stream_init_underway = true; stream_1_active_buf = stream_1_active; stream_1_active = true; (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_PLEASE_ENTER_NAME_FOR_COMMANDFILE); (void)streams_latin1_output("\n>"); (void)streams_z_ucs_output(last_input_stream_filename); len = z_ucs_len(last_input_stream_filename); stream_2_remove_chars(len); #ifndef DISABLE_OUTPUT_HISTORY remove_chars_from_history(outputhistory[active_window_number], len); #endif /* DISABLE_OUTPUT_HISTORY */ for (i=0; iread_line( (zscii*)current_filename_buffer, MAXIMUM_SCRIPT_FILE_NAME_LENGTH, 0, 0, len, NULL, true, false); if (input_length == 0) { if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); if (i18n_translate( libfizmo_module_name, i18n_libfizmo_FILENAME_MUST_NOT_BE_EMPTY) == (size_t)-1) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "i18n_translate"); if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); } } while (input_length == 0); for (i=0; iinput_must_be_repeated_by_story(); (void)streams_z_ucs_output_user_input(last_script_filename); (void)streams_z_ucs_output_user_input(z_ucs_newline_string); stream_1_active = stream_1_active_buf; TRACE_LOG("From ZSCII translated filename: \""); TRACE_LOG_Z_UCS(last_script_filename); TRACE_LOG("\".\n"); ptr = last_script_filename; bytes_required = (size_t)zucs_string_to_utf8_string(NULL, &ptr, 0); if ( (input_stream_1_filename == NULL) || (bytes_required > input_stream_1_filename_size) ) { TRACE_LOG("(Re-)allocating %zd bytes.\n", bytes_required); input_stream_1_filename = (char*)fizmo_realloc(input_stream_1_filename, bytes_required); input_stream_1_filename_size = bytes_required; } ptr = last_script_filename; TRACE_LOG("From ZSCII translated filename: \""); TRACE_LOG_Z_UCS(ptr); TRACE_LOG("\".\n"); // FIXME: Charsets may differ on operating systems. (void)zucs_string_to_utf8_string( input_stream_1_filename, &ptr, bytes_required); TRACE_LOG("Converted filename: '%s'.\n", stream_2_filename); input_stream_init_underway = false; } void ask_for_stream2_filename() { bool stream_1_active_buf; int16_t input_length; int16_t i; size_t bytes_required; z_ucs *ptr; int len; stream_2_init_underway = true; stream_1_active_buf = stream_1_active; stream_1_active = true; (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_PLEASE_ENTER_SCRIPT_FILENAME); (void)streams_latin1_output("\n>"); if (streams_z_ucs_output(last_script_filename) != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_z_ucs_output"); len = z_ucs_len(last_script_filename); stream_2_remove_chars(len); #ifndef DISABLE_OUTPUT_HISTORY remove_chars_from_history(outputhistory[active_window_number], len); #endif /* DISABLE_OUTPUT_HISTORY */ for (i=0; iread_line( (zscii*)current_filename_buffer, MAXIMUM_SCRIPT_FILE_NAME_LENGTH, 0, 0, len, NULL, true, false); if (input_length == 0) { if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); if (i18n_translate( libfizmo_module_name, i18n_libfizmo_FILENAME_MUST_NOT_BE_EMPTY) == (size_t)-1) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "i18n_translate"); if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); } } while (input_length == 0); for (i=0; iinput_must_be_repeated_by_story(); (void)streams_z_ucs_output_user_input(last_script_filename); (void)streams_z_ucs_output_user_input(z_ucs_newline_string); stream_1_active = stream_1_active_buf; TRACE_LOG("From ZSCII translated filename: \""); TRACE_LOG_Z_UCS(last_script_filename); TRACE_LOG("\".\n"); ptr = last_script_filename; bytes_required = (size_t)zucs_string_to_utf8_string(NULL, &ptr, 0); if ( (stream_2_filename == NULL) || (bytes_required > stream_2_filename_size) ) { TRACE_LOG("(Re-)allocating %zd bytes.\n", bytes_required); stream_2_filename = (char*)fizmo_realloc(stream_2_filename, bytes_required); stream_2_filename_size = bytes_required; } ptr = last_script_filename; TRACE_LOG("From ZSCII translated filename: \""); TRACE_LOG_Z_UCS(ptr); TRACE_LOG("\".\n"); // FIXME: Charsets may differ on operating systems. (void)zucs_string_to_utf8_string( stream_2_filename, &ptr, bytes_required); TRACE_LOG("Converted filename: '%s'.\n", stream_2_filename); stream_2_filename_stored = true; stream_2_init_underway = false; } static void stream_2_output_write(z_ucs *z_ucs_output) { if (stream_2_wrapping_disabled == true) stream_2_buffer_output(z_ucs_output); else wordwrap_wrap_z_ucs(stream_2_wrapper, z_ucs_output); } static void stream_2_print_header() { z_ucs dashes[] = { '-', '-', '-', '\n', '\n', 0 }; stream_2_output_write(z_ucs_newline_string); stream_2_output_write(dashes); } void stream_2_remove_chars(size_t nof_chars_to_remove) { if (stream_2 != NULL) { if (stream_2_wrapping_disabled == true) { stream_2_buffer_remove_chars(nof_chars_to_remove); } else { wordwrap_remove_chars(stream_2_wrapper, nof_chars_to_remove); } } } static void stream_2_output(z_ucs *z_ucs_output) { int return_code; z_file *transcript_stream = NULL; if ( (active_interface == NULL) || (active_window_number != 0) || (stream_2_init_underway == true) ) return ; if (stream_2 == NULL) { if (stream_2_filename_stored == false) { return_code = active_interface->prompt_for_filename( "transcript", &transcript_stream, NULL, FILETYPE_TRANSCRIPT, FILEACCESS_APPEND); if (return_code == -3) { // No support for "prompt_for_filename" in screen_interface, default // to built-in method. ask_for_stream2_filename(); // This method will not open a file, but instead store the filename in //"stream_2_filename". TRACE_LOG("Opening script-file '%s' for writing.\n", stream_2_filename); stream_2 = fsi->openfile( stream_2_filename, FILETYPE_TRANSCRIPT, FILEACCESS_APPEND); } else if (return_code < 0) { /* The user cancelled out. We'll have to silently turn off stream 2. Not the best option, but the best option I can see how to do. */ z_mem[0x11] &= 0xfe; return; } else { stream_2 = transcript_stream; } } else { stream_2 = fsi->openfile( stream_2_filename, FILETYPE_TRANSCRIPT, FILEACCESS_APPEND); } stream_2_print_header(); } if (bool_equal(lower_window_buffering_active, true)) { if (script_wrapper_active == false) { flush_stream_2_buffer_output(); script_wrapper_active = true; } stream_2_output_write(z_ucs_output); } else { if (bool_equal(script_wrapper_active, true)) { if (stream_2_wrapping_disabled == false) wordwrap_flush_output(stream_2_wrapper); script_wrapper_active = false; } stream_2_buffer_output(z_ucs_output); } } void ask_for_stream4_filename_if_required(void) { bool stream_1_active_buf; int16_t input_length; int16_t i; size_t bytes_required; z_ucs *ptr; int len; int return_code; if ( (bool_equal(stream_4_active, true)) && (stream_4_was_already_active == false) && (stream_4_init_underway == false) ) { stream_4_init_underway = true; return_code = active_interface->prompt_for_filename( "transcript", &stream_4, NULL, FILETYPE_INPUTRECORD, FILEACCESS_APPEND); if (return_code >= 0) { // Success. stream_4_was_already_active = true; stream_4_init_underway = false; } else if ( (return_code == -1) || (return_code == -2) ) { stream_4_active = false; } else if (return_code == -3) { // No support for UI-specific filename prompt. stream_1_active_buf = stream_1_active; stream_1_active = true; do { (void)streams_latin1_output("\n"); (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_PLEASE_ENTER_NAME_FOR_COMMANDFILE); (void)streams_latin1_output("\n>"); (void)streams_z_ucs_output(last_stream_4_filename); len = z_ucs_len(last_stream_4_filename); stream_2_remove_chars(len); #ifndef DISABLE_OUTPUT_HISTORY remove_chars_from_history(outputhistory[active_window_number], len); #endif /* DISABLE_OUTPUT_HISTORY */ for (i=0; iread_line( (zscii*)current_filename_buffer, MAXIMUM_SCRIPT_FILE_NAME_LENGTH, 0, 0, len, NULL, true, false); if (input_length == 0) { if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); if (i18n_translate( libfizmo_module_name, i18n_libfizmo_FILENAME_MUST_NOT_BE_EMPTY) == (size_t)-1) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "i18n_translate"); if (streams_latin1_output("\n") != 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "streams_latin1_output"); } } while (input_length == 0); stream_1_active = stream_1_active_buf; for (i=0; i stream_4_filename_size) ) { TRACE_LOG("(Re-)allocating %zd bytes.\n", bytes_required); stream_4_filename = (char*)fizmo_realloc(stream_4_filename, bytes_required); stream_4_filename_size = bytes_required; } // FIXME: Charsets may differ on operating systems. ptr = last_stream_4_filename; (void)zucs_string_to_utf8_string( stream_4_filename, &ptr, bytes_required); stream_4_was_already_active = true; stream_4_init_underway = false; } } } void stream_4_latin1_output(char *latin1_output) { if ( (active_interface == NULL) || (active_window_number != 0) ) return ; // We'll ask at this point for the filename, since asking directly when // the OUTPUT_STREAM opcode is processed might garble then screen output. // So we'll just wait until the user has finished with the input and ask // for the filename to save to once he's finished. ask_for_stream4_filename_if_required(); if (stream_4_init_underway == false) { if (stream_4 == NULL) { TRACE_LOG("Opening script-file '%s' for writing.\n", stream_4_filename); stream_4 = fsi->openfile(stream_4_filename, FILETYPE_INPUTRECORD, FILEACCESS_APPEND); } fsi->writechars(latin1_output, strlen(latin1_output), stream_4); } } void stream_4_z_ucs_output(z_ucs *z_ucs_output) { char buf[128]; while (*z_ucs_output != 0) { zucs_string_to_utf8_string(buf, &z_ucs_output, 128); stream_4_latin1_output(buf); } } static void close_script_file() { if (stream_2 != NULL) { TRACE_LOG("Closing script-file.\n"); if (stream_2_wrapping_disabled == false) wordwrap_flush_output(stream_2_wrapper); else flush_stream_2_buffer_output(); fsi->writechar('\n', stream_2); (void)fsi->closefile(stream_2); stream_2 = NULL; } } static void send_to_stream1_targets(z_ucs *z_ucs_output) { #ifndef DISABLE_OUTPUT_HISTORY if ((active_window_number == 0) && (outputhistory[0] != NULL) ) { store_z_ucs_output_in_history( outputhistory[0], z_ucs_output); } #endif /* DISABLE_OUTPUT_HISTORY */ #ifndef DISABLE_BLOCKBUFFER if (active_window_number == 1) { store_z_ucs_output_in_blockbuffer( upper_window_buffer, z_ucs_output); } #endif /* DISABLE_BLOCKBUFFER */ if (active_interface != NULL) { active_interface->z_ucs_output(z_ucs_output); } } static int _streams_z_ucs_output(z_ucs *z_ucs_output, bool is_user_input) { int16_t conversion_result; zscii zscii_char; z_ucs *src; uint16_t len; z_ucs font3_conversion_buf[FONT3_CONVERSION_BUF_SIZE]; z_ucs char_to_convert, converted_char; int font3_buf_index; z_ucs *processed_output, *output_pos, *processed_output_pos, *next_newline_pos; //int size; int parameter1, parameter2; bool font_conversion_active = ( (current_font == Z_FONT_CHARACTER_GRAPHICS) && (strcmp(get_configuration_value("enable-font3-conversion"),"true") == 0) ) ? true : false; TRACE_LOG("Streams-output of \""); TRACE_LOG_Z_UCS(z_ucs_output); TRACE_LOG("\".\n"); if ( (stream_3_current_depth != -1) && (bool_equal(is_user_input, false)) ) { src = z_ucs_output; while (*src != 0) { conversion_result = (int16_t)unicode_char_to_zscii_input_char(*src); if (conversion_result == 10) zscii_char = (zscii)13; else if (conversion_result == -1) zscii_char = (zscii)'?'; else zscii_char = (zscii)conversion_result; *(stream_3_index[stream_3_current_depth]++) = zscii_char; TRACE_LOG("Writing ZSCII '%c' / %d to %ld.\n", zscii_char, zscii_char, (long int)(stream_3_index[stream_3_current_depth] - z_mem)); src++; } len = load_word(stream_3_start[stream_3_current_depth]); TRACE_LOG("Loaded current stream-3-length %d.\n", len); len += (src - z_ucs_output); store_word(stream_3_start[stream_3_current_depth], len); TRACE_LOG("Stored current stream-3-length %d.\n", len); } else { if (bool_equal(is_user_input, false)) stream_output_has_occured = true; if ( (active_z_story != NULL) && ((z_mem[0x11] & 0x1) != 0) && (ver != 6) && (strcasecmp(get_configuration_value( "disable-external-streams"), "true") != 0) ) { stream_2_output(z_ucs_output); } else if (stream_2 != NULL) { close_script_file(); } output_pos = z_ucs_output; processed_output = font_conversion_active == true ? font3_conversion_buf : z_ucs_output; while (*output_pos != 0) { if (font_conversion_active == true) { TRACE_LOG("Converting to font 3.\n"); // In case we're converting we'll process a maximum of // (FONT3_CONVERSION_BUF_SIZE) chars in one iteration. font3_buf_index = 0; char_to_convert = *output_pos; while ( (char_to_convert != 0) && (font3_buf_index < FONT3_CONVERSION_BUF_SIZE) ) { if ( (char_to_convert == 32) || (char_to_convert == 37) ) // empty converted_char = ' '; if (char_to_convert == 33) // arrow left converted_char = 0x2190; else if (char_to_convert == 34) // arrow right converted_char = 0x2192; else if (char_to_convert == 35) // diagonal //converted_char = 0x2571; converted_char = '/'; else if (char_to_convert == 36) // diagonal //converted_char = 0x2572; converted_char = '\\'; else if (char_to_convert == 38) // horizontal converted_char = 0x2500; else if (char_to_convert == 39) // horizontal converted_char = 0x2500; else if (char_to_convert == 40) converted_char = 0x2502; else if (char_to_convert == 41) converted_char = 0x2502; else if (char_to_convert == 42) converted_char = 0x2534; else if (char_to_convert == 43) converted_char = 0x252C; else if (char_to_convert == 44) converted_char = 0x251C; else if (char_to_convert == 45) converted_char = 0x2524; else if (char_to_convert == 46) converted_char = 0x230A; else if (char_to_convert == 47) converted_char = 0x2308; else if (char_to_convert == 48) converted_char = 0x2309; else if (char_to_convert == 49) converted_char = 0x230B; else if (char_to_convert == 50) // FIXME: Better symbol converted_char = 0x2534; else if (char_to_convert == 51) // FIXME: Better symbol converted_char = 0x252C; else if (char_to_convert == 52) // FIXME: Better symbol converted_char = 0x251C; else if (char_to_convert == 53) // FIXME: Better symbol converted_char = 0x2524; else if (char_to_convert == 54) // full block converted_char = 0x2588; else if (char_to_convert == 55) // upper half block converted_char = 0x2580; else if (char_to_convert == 56) // lower half block converted_char = 0x2584; else if (char_to_convert == 57) // left half block converted_char = 0x258C; else if (char_to_convert == 58) // right half block converted_char = 0x2590; else if (char_to_convert == 59) // FIXME: Better symbol converted_char = 0x2584; else if (char_to_convert == 60) // FIXME: Better symbol converted_char = 0x2580; else if (char_to_convert == 61) // FIXME: Better symbol converted_char = 0x258C; else if (char_to_convert == 62) // FIXME: Better symbol converted_char = 0x2590; else if (char_to_convert == 63) // upper right block converted_char = 0x259D; else if (char_to_convert == 64) // lower right block converted_char = 0x2597; else if (char_to_convert == 65) // lower left block converted_char = 0x2596; else if (char_to_convert == 66) // upper left block converted_char = 0x2598; else if (char_to_convert == 67) // FIXME: Better symbol converted_char = 0x259D; else if (char_to_convert == 68) // FIXME: Better symbol converted_char = 0x2597; else if (char_to_convert == 69) // FIXME: Better symbol converted_char = 0x2596; else if (char_to_convert == 70) // FIXME: Better symbol converted_char = 0x2598; else if (char_to_convert == 71) // dot upper right, FIXME: Better symbol converted_char = '+'; else if (char_to_convert == 72) // dot lower right, FIXME: Better symbol converted_char = '+'; else if (char_to_convert == 73) // dot lower left, FIXME: Better symbol converted_char = '+'; else if (char_to_convert == 74) // dot upper left, FIXME: Better symbol converted_char = '+'; else if (char_to_convert == 75) // line top converted_char = 0x2594; else if (char_to_convert == 76) // line bottom converted_char = '_'; else if (char_to_convert == 77) // line left converted_char = 0x23B9; else if (char_to_convert == 78) // line right converted_char = 0x2595; else if (char_to_convert == 79) // status bar, filled 0/8 converted_char = ' '; else if (char_to_convert == 80) // status bar, filled 1/8 converted_char = 0x258F; else if (char_to_convert == 81) // status bar, filled 2/8 converted_char = 0x258E; else if (char_to_convert == 82) // status bar, filled 3/8 converted_char = 0x258D; else if (char_to_convert == 83) // status bar, filled 4/8 converted_char = 0x258C; else if (char_to_convert == 84) // status bar, filled 5/8 converted_char = 0x258B; else if (char_to_convert == 85) // status bar, filled 6/8 converted_char = 0x258A; else if (char_to_convert == 86) // status bar, filled 7/8 converted_char = 0x2589; else if (char_to_convert == 87) // status bar, filled 8/8 converted_char = 0x2588; else if (char_to_convert == 88) // status bar, padding right converted_char = 0x2595; else if (char_to_convert == 89) // status bar, padding left converted_char = 0x258F; else if (char_to_convert == 90) // diagonal cross converted_char = 0x2573; else if (char_to_convert == 91) // vertical / horizontal cross converted_char = 0x253C; else if (char_to_convert == 92) // arrow up converted_char = 0x2191; else if (char_to_convert == 93) // arrow down converted_char = 0x2193; else if (char_to_convert == 94) // arrow up-down converted_char = 0x2195; else if (char_to_convert == 95) // square char_to_convert =0x25A2; else if (char_to_convert == 96) // question mark converted_char = '?'; // runic else if (char_to_convert == 97) converted_char = 0x16aa; else if (char_to_convert == 98) converted_char = 0x16d2; else if (char_to_convert == 99) converted_char = 0x16c7; else if (char_to_convert == 100) converted_char = 0x16de; else if (char_to_convert == 101) converted_char = 0x16d6; else if (char_to_convert == 102) converted_char = 0x16a0; else if (char_to_convert == 103) converted_char = 0x16b7; else if (char_to_convert == 104) converted_char = 0x16bb; else if (char_to_convert == 105) converted_char = 0x16c1; else if (char_to_convert == 106) converted_char = 0x16e8; else if (char_to_convert == 107) converted_char = 0x16e6; else if (char_to_convert == 108) converted_char = 0x16da; else if (char_to_convert == 109) converted_char = 0x16d7; else if (char_to_convert == 110) converted_char = 0x16be; else if (char_to_convert == 111) converted_char = 0x16a9; else if (char_to_convert == 112) // FIXME: better symbol? converted_char = 0x16b3; else if (char_to_convert == 113) converted_char = 'h'; // FIXME: better symbol?; else if (char_to_convert == 114) converted_char = 0x16b1; else if (char_to_convert == 115) converted_char = 0x16cb; else if (char_to_convert == 116) converted_char = 0x16cf; else if (char_to_convert == 117) converted_char = 0x16a2; else if (char_to_convert == 118) converted_char = 0x16e0; else if (char_to_convert == 119) converted_char = 0x16b9; else if (char_to_convert == 120) converted_char = 0x16c9; else if (char_to_convert == 121) converted_char = 0x16a5; else if (char_to_convert == 122) converted_char = 0x16df; // inverted else if (char_to_convert == 123) // inverted arrow up, FIXME: symbol converted_char = 0x2191; else if (char_to_convert == 124) // inverted arrow down, FIXME: symbol converted_char = 0x2193; else if (char_to_convert == 125) // inverted arrow up-down, FIXME: symbol converted_char = 0x2195; else if (char_to_convert == 126) // inverted question mark, FIXME: symbol converted_char = '?'; // no match else converted_char = char_to_convert; font3_conversion_buf[font3_buf_index] = converted_char; font3_buf_index++; output_pos++; char_to_convert = *output_pos; } font3_conversion_buf[font3_buf_index] = 0; } if (bool_equal(stream_1_active, true)) { #ifndef DISABLE_OUTPUT_HISTORY if (active_window_number == 0) { // outputhistory[0] is always defined if DISABLE_OUTPUT_HISTORY is not // defined (see fizmo.c). if ( (lower_window_foreground_colour != current_foreground_colour) || (lower_window_background_colour != current_background_colour) ) { store_metadata_in_history( outputhistory[0], HISTORY_METADATA_TYPE_COLOUR, current_foreground_colour, current_background_colour); lower_window_foreground_colour = current_foreground_colour; lower_window_background_colour = current_background_colour; } } if ( (active_z_story != NULL) && (z_mem[0x11] & 2) ) { current_resulting_font = Z_FONT_COURIER_FIXED_PITCH; //printf("force fixed on: %d\n", current_resulting_font); } else { current_resulting_font = current_font; //printf("force fixed off: %d\n", current_resulting_font); } if (lower_window_font != current_resulting_font) { store_metadata_in_history( outputhistory[0], HISTORY_METADATA_TYPE_FONT, current_resulting_font); lower_window_font = current_resulting_font; active_interface->set_font(current_resulting_font); } #endif /* DISABLE_OUTPUT_HISTORY */ #ifndef DISABLE_BLOCKBUFFER if ((active_window_number == 1) && (upper_window_buffer != NULL)) { if (upper_window_style != current_style) { set_blockbuf_style(upper_window_buffer, current_style); upper_window_style = current_style; } if (upper_window_foreground_colour != current_foreground_colour) { set_blockbuf_foreground_colour( upper_window_buffer, current_foreground_colour); upper_window_foreground_colour = current_foreground_colour; } if (upper_window_background_colour != current_background_colour) { set_blockbuf_background_colour( upper_window_buffer, current_background_colour); upper_window_background_colour = current_background_colour; } } #endif /* DISABLE_BLOCKBUFFER */ if (strcasecmp(get_configuration_value("flush-output-on-newline"), "true") != 0) { // No split required, process all at once. send_to_stream1_targets(processed_output); } else { // Split output in newlines and process one by one. processed_output_pos = processed_output; next_newline_pos = NULL; // We'll try to find a newline in the current string. In case this // is the first iteration, next_newline_pos == NULL and we'll start // looking from the front. In case we've already found a newline // we'll start at the char behind it. This helps to ensure that // the newline is actually included in the next output. while ((next_newline_pos = z_ucs_chr( processed_output_pos + (next_newline_pos == NULL ? 0 : 1), Z_UCS_NEWLINE)) != NULL) { *next_newline_pos = 0; send_to_stream1_targets(processed_output_pos); *next_newline_pos = Z_UCS_NEWLINE; processed_output_pos = next_newline_pos; #ifndef DISABLE_OUTPUT_HISTORY if (paragraph_attribute_function != NULL) { paragraph_attribute_function(¶meter1, ¶meter2); store_metadata_in_history( outputhistory[0], HISTORY_METADATA_TYPE_PARAGRAPHATTRIBUTE, parameter1, parameter2); } #endif /* DISABLE_OUTPUT_HISTORY */ } send_to_stream1_targets(processed_output_pos); } } // In case we're not converting and input == output we know that // once we arrive here the entire output has been processed, so // we can quit right away. if (font_conversion_active == false) break; } if (bool_equal(is_user_input, true)) { if ( (bool_equal(stream_4_active, true)) && (strcasecmp(get_configuration_value("disable-external-streams"), "true") != 0) ) stream_4_z_ucs_output(z_ucs_output); else { if (stream_4 != NULL) { (void)fsi->closefile(stream_4); stream_4 = NULL; } } } } /*@-globstate@*/ return 0; /*@+globstate@*/ // For some reason splint thinks that comparison with NULL might set // active_z_story or active_interface to NULL. The "globstate" annotations // above inhibit these warnings. } int streams_z_ucs_output(z_ucs *z_ucs_output) { return _streams_z_ucs_output(z_ucs_output, false); } int streams_z_ucs_output_user_input(z_ucs *z_ucs_output) { return _streams_z_ucs_output(z_ucs_output, true); } int streams_latin1_output(/*@in@*/ char *latin1_output) { z_ucs output_buffer_z_ucs[ASCII_TO_Z_UCS_BUFFER_SIZE]; //FIXME: latin1 != utf8 while (latin1_output != NULL) { latin1_output = utf8_string_to_zucs_string( output_buffer_z_ucs, latin1_output, ASCII_TO_Z_UCS_BUFFER_SIZE); if (streams_z_ucs_output(output_buffer_z_ucs) != 0) return -1; } return 0; } void opcode_output_stream(void) { int16_t stream_number =(int16_t) op[0]; TRACE_LOG("Opcode: OUTPUT_STREAM.\n"); if (stream_number == 0) return; #ifdef ENABLE_TRACING if (((int16_t)op[0]) < 0) { TRACE_LOG("Closing stream "); } else { TRACE_LOG("Opening stream "); } TRACE_LOG("%d.\n", (((int16_t)op[0]) < 0 ? -((int16_t)op[0]) : op[0])); #endif if ((stream_number < -4) || (stream_number > 4)) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_INVALID_OUTPUT_STREAM_NUMBER_P0D, -1, (long int)stream_number); if (stream_number == 1) stream_1_active = true; else if (stream_number == -1) stream_1_active = false; else if (stream_number == 2) z_mem[0x11] |= 1; else if (stream_number == -2) z_mem[0x11] &= 0xfe; else if (stream_number == 3) { if (++stream_3_current_depth == MAXIMUM_STREAM_3_DEPTH) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_MAXIMUM_STREAM_3_DEPTH_P0D_EXCEEDED, -1, MAXIMUM_STREAM_3_DEPTH); stream_3_start[stream_3_current_depth] = z_mem + op[1]; stream_3_index[stream_3_current_depth] = z_mem + op[1] + 2; store_word(stream_3_start[stream_3_current_depth], 0); TRACE_LOG("stream-3 depth: %d.\n", stream_3_current_depth); TRACE_LOG("Current stream-3 dest is %p.\n", stream_3_start[stream_3_current_depth]); } else if (stream_number == -3) { if (stream_3_current_depth >= 0) { TRACE_LOG("stream-3 depth: %d.\n", stream_3_current_depth); stream_3_current_depth--; } } else if (stream_number == 4) stream_4_active = true; else if (stream_number == -4) stream_4_active = false; } void close_streams(z_ucs *error_message) { TRACE_LOG("Closing all streams.\n"); // Close the interface first. This will allow stream 2 to capture // any pending output. (void)close_interface(error_message); if (stream_2 != NULL) close_script_file(); if (stream_2_wrapper != NULL) { wordwrap_destroy_wrapper(stream_2_wrapper); stream_2_wrapper = NULL; } if (stream_4 != NULL) { (void)fsi->closefile(stream_4); stream_4 = NULL; } } void open_input_stream_1(void) { if (strcasecmp(get_configuration_value("disable-external-streams"), "true") != 0) { input_stream_1_active = true; } else { (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_THIS_FUNCTION_HAS_BEEN_DISABLED); (void)streams_latin1_output("\n"); } } void close_input_stream_1(void) { if (input_stream_1 != NULL) { fsi->closefile(input_stream_1); input_stream_1 = NULL; } } void opcode_input_stream(void) { TRACE_LOG("Opcode: INPUT_STREAM.\n"); if (((int16_t)op[0]) == 1) { open_input_stream_1(); } else { close_input_stream_1(); } } #endif // streams_c_INCLUDED fizmo-0.7.10/libfizmo/src/interpreter/streams.h000644 000765 000024 00000005500 12606024314 022452 0ustar00chrenderstaff000000 000000 /* streams.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef streams_h_INCLUDED #define streams_h_INCLUDED #include "../tools/types.h" void init_streams(); void open_input_stream_1(void); void close_input_stream_1(void); int streams_z_ucs_output(z_ucs *z_ucs_output); int streams_z_ucs_output_user_input(z_ucs *z_ucs_output); int streams_latin1_output(char *latin1_output); void opcode_output_stream(void); void open_streams(void); void close_streams(/*@null@*/ z_ucs *error_message); void opcode_input_stream(void); z_file *get_stream_2(void); void restore_stream_2(z_file *str); void stream_2_remove_chars(size_t nof_chars_to_remove); void ask_for_stream2_filename(void); void ask_for_stream4_filename_if_required(void); void stream_4_latin1_output(char *latin1_output); void stream_4_z_ucs_output(z_ucs *z_ucs_output); void ask_for_input_stream_filename(void); #ifndef streams_c_INCLUDED extern bool stream_1_active; extern bool stream_4_active; extern bool input_stream_1_active; extern bool input_stream_1_was_already_active; extern z_file *input_stream_1; extern size_t input_stream_1_filename_size; extern char *input_stream_1_filename; extern z_ucs last_script_filename[]; /*@-exportlocal@*/ extern bool stream_output_has_occured; /*@+exportlocal@*/ // Since this flag is used by the screen interface, splint can not now about // it. #endif // streams_c_INCLUDED #endif // streams_h_INCLUDED fizmo-0.7.10/libfizmo/src/interpreter/table.c000644 000765 000024 00000010007 12606024314 022054 0ustar00chrenderstaff000000 000000 /* table.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "table.h" #include "zpu.h" #include "variable.h" void opcode_scan_table(void) { // scan_table [form] uint16_t entry_size; uint16_t index; bool scan_words; bool entry_found = false; TRACE_LOG("Opcode: SCAN_TABLE.\n"); if (number_of_operands != 4) { entry_size = 2; scan_words = true; } else { entry_size = ((uint16_t)op[3]) & 0x7f; scan_words = ((op[3] & 0x80) != 0) ? true : false; } TRACE_LOG("Scanning table at %d/%d for %d in mode %d with entry size %d.\n", (uint16_t)op[1], (uint16_t)op[2], (uint16_t)op[0], scan_words, entry_size); index = op[1]; while (index < op[1] + ((uint16_t)op[2]*entry_size)) { if (bool_equal(scan_words, true)) { TRACE_LOG("Found %d at %d.\n", load_word(z_mem + index), index); if (load_word(z_mem + index) == (uint16_t)op[0]) { entry_found = true; break; } } else { if (z_mem[index] == (uint16_t)op[0]) { entry_found = true; break; } } index += entry_size; } TRACE_LOG("Scan result: %d.\n", entry_found); read_z_result_variable(); if (bool_equal(entry_found, true)) { set_variable(z_res_var, index, false); evaluate_branch(1); } else { set_variable(z_res_var, 0, false); evaluate_branch(0); } } void opcode_copy_table(void) { int size =(int16_t)op[2]; uint8_t *src, *dest, *last; TRACE_LOG("Opcode: COPY_TABLE.\n"); if (op[1] == 0) { if (size > 0) { TRACE_LOG("Zeroing first %d bytes from %ud.\n", size, op[0]); memset(z_mem + op[0], 0, size); } } else { src = z_mem + op[0]; dest = z_mem + op[1]; if ( (size < 0) || (op[0] > op[1]) ) { size = abs(size); TRACE_LOG("Forward-copying %u bytes from %u to %u.\n", size, op[0], op[1]); last = src + size - 1; while (src <= last) { //TRACE_LOG("%c from %d to %d.\n", *src, src-z_mem, dest-z_mem); *dest = *src; src++; dest++; } } else { TRACE_LOG("Backward-copying %u bytes from %u to %u.\n", size, op[0], op[1]); last = src; src += (size - 1); dest += (size - 1); while (src >= last) { //TRACE_LOG("%c from %d to %d.\n", *src, src-z_mem, dest-z_mem); *dest = *src; src--; dest--; } } } } fizmo-0.7.10/libfizmo/src/interpreter/table.h000644 000765 000024 00000003235 12606024314 022066 0ustar00chrenderstaff000000 000000 /* table.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef table_h_INCLUDED #define table_h_INCLUDED #include void opcode_scan_table(void); void opcode_copy_table(void); #endif /* table_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/text.c000644 000765 000024 00000223640 12606024314 021762 0ustar00chrenderstaff000000 000000 /* text.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef text_c_INCLUDED #define text_c_INCLUDED #include #include #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "../tools/types.h" #include "../tools/z_ucs.h" #include "../tools/filesys.h" #include "text.h" #include "fizmo.h" #include "routine.h" #include "object.h" #include "zpu.h" #include "variable.h" #include "misc.h" #include "streams.h" #include "history.h" #include "fizmo.h" #include "mathemat.h" #include "stack.h" #include "config.h" #include "output.h" #include "savegame.h" #include "streams.h" #include "undo.h" #include "../locales/libfizmo_locales.h" #ifdef ENABLE_DEBUGGER #include "debugger.h" #endif // ENABLE_DEBUGGER #ifndef DISABLE_COMMAND_HISTORY #include "cmd_hst.h" #endif /* DISABLE_COMMAND_HISTORY */ static uint16_t zchar_storage_word = 0; static uint16_t zchar_storage_symbols_stored = 0; static uint8_t *zchar_storage_output = NULL; static uint8_t *zchar_storage_output_index = NULL; static uint8_t *zchar_storage_index_behind = NULL; static uint8_t zchar_storage_word_index = 0; static size_t interpreter_command_buffer_size = 0; z_ucs *interpreter_command_buffer = NULL; // The following two variables will keep track of the src pointer in // the various abbreviation depths. In case we return from processing // an abbreviation the last src pointer may be fetched here, or in case // the output buffer was full while decoding a Z-Char-encoded string, // we can continue decoding by using this data. static uint8_t *zchar_to_z_ucs_src_index[MAX_ABBREVIATION_DEPTH + 1]; static uint8_t zchar_to_z_ucs_current_alphabet[MAX_ABBREVIATION_DEPTH + 1]; static uint8_t zchar_to_z_ucs_current_z_char[MAX_ABBREVIATION_DEPTH + 1]; static uint8_t zchar_to_z_ucs_multibyte_stage[MAX_ABBREVIATION_DEPTH + 1]; static uint8_t zchar_to_z_ucs_multi_z_char[MAX_ABBREVIATION_DEPTH + 1]; static int zchar_to_z_ucs_abbreviation_level; static uint32_t number_of_commands = 0; static uint8_t first_word_found; static z_ucs z_ucs_output_buffer[Z_UCS_OUTPUT_BUFFER_SIZE]; z_ucs z_ucs_newline_string[] = { Z_UCS_NEWLINE, 0 }; #ifndef DISABLE_PREFIX_COMMANDS static char fizmo_command_prefix_string[] = { FIZMO_COMMAND_PREFIX, '\0' }; #endif // DISABLE_PREFIX_COMMANDS uint8_t alphabet_table_v1[] = { // A0: 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, // A1: 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, // A2: 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2e, 0x2c, 0x21, 0x3f, 0x5f, 0x23, 0x27, 0x22, 0x2f, 0x5c, 0x3c, 0x2d, 0x3a, 0x28, 0x29 }; uint8_t alphabet_table_after_v1[] = { // A0: 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, // A1: 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, // A2: 0x00, 0x0d, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2e, 0x2c, 0x21, 0x3f, 0x5f, 0x23, 0x27, 0x22, 0x2f, 0x5c, 0x2d, 0x3a, 0x28, 0x29 }; static uint8_t default_extra_char_to_unicode_table[] = { 69, 0x00, 0xe4, 0x00, 0xf6, 0x00, 0xfc, 0x00, 0xc4, 0x00, 0xd6, 0x00, 0xdc, 0x00, 0xdf, 0x00, 0xbb, 0x00, 0xab, 0x00, 0xeb, 0x00, 0xef, 0x00, 0xff, 0x00, 0xcb, 0x00, 0xcf, 0x00, 0xe1, 0x00, 0xe9, 0x00, 0xed, 0x00, 0xf3, 0x00, 0xfa, 0x00, 0xfd, 0x00, 0xc1, 0x00, 0xc9, 0x00, 0xcd, 0x00, 0xd3, 0x00, 0xda, 0x00, 0xdd, 0x00, 0xe0, 0x00, 0xe8, 0x00, 0xec, 0x00, 0xf2, 0x00, 0xf9, 0x00, 0xc0, 0x00, 0xc8, 0x00, 0xcc, 0x00, 0xd2, 0x00, 0xd9, 0x00, 0xe2, 0x00, 0xea, 0x00, 0xee, 0x00, 0xf4, 0x00, 0xfb, 0x00, 0xc2, 0x00, 0xca, 0x00, 0xce, 0x00, 0xd4, 0x00, 0xdb, 0x00, 0xe5, 0x00, 0xc5, 0x00, 0xf8, 0x00, 0xd8, 0x00, 0xe3, 0x00, 0xf1, 0x00, 0xf5, 0x00, 0xc3, 0x00, 0xd1, 0x00, 0xd5, 0x00, 0xe6, 0x00, 0xc6, 0x00, 0xe7, 0x00, 0xc7, 0x00, 0xfe, 0x00, 0xf0, 0x00, 0xde, 0x00, 0xd0, 0x00, 0xa3, 0x01, 0x53, 0x01, 0x52, 0x00, 0xa1, 0x00, 0xbf }; // This function must be called prior to zchar_storage_write calls. // - uint8_t *output: The output buffer that's supposed to hold the result. // The maximum supported output buffer size is 2^16 = 65536 bytes. // - uint16_t output_buffer_size: The maximum size that the output buffer // can hold. The size should be a multiple of 2 (we have to store words), // in case it's not, the last byte of the output buffer won't be used. static void zchar_storage_start(uint8_t *output, uint16_t output_buffer_size) { zchar_storage_word = 0; zchar_storage_output = output; zchar_storage_output_index = output; zchar_storage_index_behind = output + (output_buffer_size & 0xfffe); zchar_storage_word_index = 0; zchar_storage_symbols_stored = 0; } // This method will accept input for the zchar_storage. // - unsigned int five_bits: Ths input bits are expected to be stored in the // lower five bits of this parameter. // - Return value: // * 0 in case there is at least space for one more zchar in the buffer. // * 1 in case no more zchars may be written to the current buffer. In // this case, the output should be read, stored away, and after that // the zchar_storage_reset method should be called. // * -1 in case the given five_bits could not be stored. These will be lost. static int zchar_storage_write(unsigned int five_bits) { if (zchar_storage_output_index >= zchar_storage_index_behind) { TRACE_LOG("zchar_storage_write ran out of space.\n"); return -1; } five_bits &= 0x1f; TRACE_LOG("zchar: Storing five bits %x.\n", five_bits); if (zchar_storage_word_index == 0) zchar_storage_word |= (five_bits << 10); else if (zchar_storage_word_index == 1) zchar_storage_word |= (five_bits << 5); else zchar_storage_word |= five_bits; zchar_storage_symbols_stored++; if (++zchar_storage_word_index == 3) { TRACE_LOG("zchar: storing word %x at %p, end at %p.\n", zchar_storage_word, zchar_storage_output_index, zchar_storage_index_behind); store_word(zchar_storage_output_index, zchar_storage_word); zchar_storage_output_index += 2; zchar_storage_word = 0; zchar_storage_word_index = 0; } if (zchar_storage_output_index >= zchar_storage_index_behind) { TRACE_LOG("No more space remains for zchar-storage.\n"); return 1; } else { TRACE_LOG("Space remains for zchar-storage.\n"); return 0; } } // This function will throw away the contents of the Z-Char output buffer // and empty the word that's currently assembled. This is used in case // the output buffer is full (zchar_storage_write returns 1). In this case // the buffer may be emptied and storage may continue by calling this // function. // PLEASE NOTE: In case the output is supposed to be finished directly // after filling up the buffer, the zchar_storage_finish has to be // called directly after the last write call. If you receive a 1 from the // zchar_storage_write function, empty and reset the output buffer and // call the zchar_storage_finish function after that, the output will // contain an extra empty padding word. Technically it should be okay though, // the spec says that an "indefinite sequence of shift and shift lock // characters is legal" (section 3.2.4). void zchar_storage_reset() { zchar_storage_output_index = zchar_storage_output; zchar_storage_word = 0; zchar_storage_word_index = 0; zchar_storage_symbols_stored = 0; } static void zchar_storage_clear() { zchar_storage_word = 0; zchar_storage_output = NULL; zchar_storage_output_index = NULL; zchar_storage_index_behind = NULL; zchar_storage_word_index = 0; zchar_storage_symbols_stored = 0; } // This function will finish the current Z-Char-String in production by // setting bit 15 on the last word, padding it with 5s if required and // storing it in the output buffer. // Return value: // -0 In case there was still enough space and string finalization succeeded. // -1 in case there was not enough buffer storage to write the string. static int zchar_storage_finish() { TRACE_LOG("zchar_storage_word_index: %d.\n", zchar_storage_word_index); if (zchar_storage_word_index == 0) { // In case we arrive here, there's no output in the current word. We'll // check if there's any output already stored in the output buffer. if (zchar_storage_output_index != zchar_storage_output) { // In case there's some output, write the string termination to the // last word of the output. TRACE_LOG("Successfully finalized full word.\n"); *(zchar_storage_output_index-2) |= 0x80; } else { // In case the buffer is completely empty, write an empty word // padded with 5s and terminated with bit 15 set. if (zchar_storage_output_index >= zchar_storage_index_behind) { TRACE_LOG("zchar_storage_finish ran out of space.\n"); return -1; } TRACE_LOG("zchar: storing word %x at %x.\n", zchar_storage_word, 0x94a5); store_word(zchar_storage_output, 0x94a5); } } else { // In case the current word has some content, we'll just have pad it // up with 5s and store it. if (zchar_storage_output_index >= zchar_storage_index_behind) { TRACE_LOG("zchar_storage_finish ran out of space.\n"); return -1; } if (zchar_storage_word_index == 1) zchar_storage_word |= (5 << 5); zchar_storage_word |= 0x8005; TRACE_LOG("zchar: storing word %x at %x.\n", zchar_storage_word, zchar_storage_output_index); store_word(zchar_storage_output_index, zchar_storage_word); } return 0; } static void store_ZSCII_as_zchar(zscii zscii_char) { uint8_t i; if (active_z_story == NULL) return; if (zscii_char == 32) { (void)zchar_storage_write(0); return; } for (i=0; i<78; i++) if (active_z_story->alphabet_table[i] == zscii_char) break; if (i < 26) (void)zchar_storage_write((unsigned)(i + 6)); else if (i < 52) { (void)zchar_storage_write(4); (void)zchar_storage_write((unsigned)(i - 20)); } else if (i < 78) { (void)zchar_storage_write(5); (void)zchar_storage_write((unsigned)(i - 46)); } else { /* 1-7 ---- 8 delete Input 9 tab (V6) Output 10 ---- 11 sentence space (V6) Output 12 ---- 13 newline Input/Output 14-26 ---- 27 escape Input 28-31 ---- 32-126 standard ASCII Input/Output 127-128 ---- 129-132 cursor u/d/l/r Input 133-144 function keys f1 to f12 Input 145-154 keypad 0 to 9 Input 155-251 extra characters Input/Output 252 menu click (V6) Input 253 double-click (V6) Input 254 single-click Input 255-1023 ---- */ if ( (zscii_char == 8) || // delete //(zscii_char == 13) || // newline (?) (zscii_char == 27) || // escape // 32 has already been handeled at the start of this function. ((zscii_char >= 33) && (zscii_char <= 126)) || //standard ASCII //((zscii_char >= 129) && (zscii_char <= 132)) || //crsr u/d/l/r //((zscii_char >= 133) && (zscii_char <= 144)) || //f1-f12 //((zscii_char >= 145) && (zscii_char <= 154)) || //keypad 0-9 ((zscii_char >= 155) && (zscii_char <= 251)) // || //extra chars //(zscii_char == 252) // menu click(V6) //(zscii_char == 253) // double click(V6) //(zscii_char == 254) // single click(V6) ) { //store_z_char(active_z_story->alphabet_table[52]); //store_z_char((zscii_char & 0xe0) >> 5); //store_z_char(zscii_char & 0x1f); // Wrong: never used. //zchar_storage_write(active_z_story->alphabet_table[52]); (void)zchar_storage_write(5); (void)zchar_storage_write(6); (void)zchar_storage_write((unsigned)((zscii_char & 0xe0) >> 5)); (void)zchar_storage_write((unsigned)(zscii_char & 0x1f)); } else i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_UNKNOWN_CHAR_CODE_P0D, -1, (long int)zscii_char); } } /*@dependent@*/ static uint8_t *get_current_unicode_table_address() { // 3.8.5.2: In Version 5 or later, if Word 3 of the header extension // table is present and non-zero then it is interpreted as the byte // address of the Unicode translation table. // if ( (ver < 5) || (header_extension_table_size < 3) || (load_word(header_extension_table + 0x6) == 0) ) { return default_extra_char_to_unicode_table; } else { return z_mem + load_word(header_extension_table + 0x6); } } static z_ucs zscii_extra_char_to_unicode(zscii zscii_extra_char) { uint8_t *unicode_table = get_current_unicode_table_address(); uint8_t table_index = zscii_extra_char - 155; TRACE_LOG("Extra-char-translation: %d, %p, %d.\n", *unicode_table - 1, unicode_table, table_index); if (table_index > *unicode_table - 1) { TRACE_LOG("too large\n"); return latin1_char_to_zucs_char('?'); } else return (z_ucs)load_word(unicode_table + 1 + (table_index * 2)); } static zscii find_zscii_extra_char_in_unicode_table(uint16_t unicode_char) { uint8_t *unicode_table = get_current_unicode_table_address(); uint8_t *unicode_data = unicode_table + 1; int number_of_table_entries = (int)(*unicode_table - 1); int table_index = 0; TRACE_LOG("Looking for extra-char %d in unicode table.\n", unicode_char); while (table_index <= number_of_table_entries) { if (load_word(unicode_data + (table_index * 2)) == unicode_char) return (zscii)(table_index + 155); table_index++; } return 0xff; } zscii unicode_char_to_zscii_input_char(z_ucs unicode_char) { zscii result; if (unicode_char == 8) result = 8; else if (unicode_char == 10) result = 13; else if (unicode_char == 13) result = 13; else if (unicode_char == 27) result = 27; else if ((unicode_char >= 32) && (unicode_char <= 126)) result = (uint8_t)unicode_char; else { // In case we haven't found out input yet, there's still a change that // this unicode character has been defined in the translation table, thus // we try to look it up there. result = find_zscii_extra_char_in_unicode_table(unicode_char); } return result; } // This will write into(!) the provided textbuffer! static uint8_t locate_dictionary_entry( uint8_t *text_buffer, uint8_t **parse_position, uint8_t word_position, uint8_t token_length, uint8_t *dictionary_start, int16_t number_of_dictionary_entries, uint8_t dictionary_entry_length, bool dictionary_is_unsorted, bool dont_write_unrecognized_words_to_parse_buffer) { uint8_t *dictionary_index = dictionary_start; uint16_t i,j; uint16_t word_length; int16_t word_found_at_index = -1; int search_mid_index, search_end_index; // "Dictionarize" entry. if (ver >= 4) { word_length = 6; if ((text_buffer[0] & 0x80) != 0) { text_buffer[0] &= 0x7f; store_word(text_buffer + 2, 0x14a5); store_word(text_buffer + 4, 0x94a5); } else if ((text_buffer[2] & 0x80) != 0) { text_buffer[2] &= 0x7f; store_word(text_buffer + 4, 0x94a5); } else if ((text_buffer[4] & 0x80) == 0) { text_buffer[4] |= 0x80; } } else { word_length = 4; if ((text_buffer[0] & 0x80) != 0) { text_buffer[0] &= 0x7f; store_word(text_buffer + 2, 0x94a5); } else if ((text_buffer[2] & 0x80) == 0) { text_buffer[2] |= 0x80; } } TRACE_LOG("dict-start: %x\n", dictionary_start - z_mem); if (dictionary_is_unsorted == true) { for (i=0; i= 4 ? 9 : 6; uint8_t tokenize_buffer_length = ver >= 4 ? 6 : 4; uint8_t tokenize_buffer[tokenize_buffer_length]; // The number and values of non-space-seperating input codes: uint8_t number_of_input_codes; uint8_t *input_codes; uint8_t dictionary_entry_length; int16_t number_of_dictionary_entries; bool dictionary_is_unsorted; uint8_t *dictionary_start; uint8_t current_char; uint8_t space_found = 0; uint8_t non_space_seperator_found = 0; uint8_t end_of_line_found; uint8_t maximum_words; uint8_t number_of_words_found = 0; uint8_t current_word_start = z_text_buffer_offset; uint8_t *parse_buffer_index = z_parse_buffer + 2; uint8_t i; TRACE_LOG("Parse buffer at %lx, %d bytes for tokenize_buffer at %x.\n", (unsigned long int)(z_parse_buffer - z_mem), tokenize_buffer_length, &tokenize_buffer); maximum_words = *z_parse_buffer; parse_buffer_index = z_parse_buffer + 2; TRACE_LOG("Maximum number of parsed words: %d.\n", maximum_words); number_of_input_codes = *(dictionary++); input_codes = dictionary; dictionary += number_of_input_codes; dictionary_entry_length = *(dictionary++); number_of_dictionary_entries = (int16_t)load_word(dictionary); TRACE_LOG("Number of dictionary entries: %d.\n", number_of_dictionary_entries); if (number_of_dictionary_entries < 0) { dictionary_is_unsorted = true; number_of_dictionary_entries = -number_of_dictionary_entries; } else { dictionary_is_unsorted = false; } dictionary_start = dictionary + 2; #ifdef ENABLE_TRACING TRACE_LOG("Number of input codes: %d.\n", number_of_input_codes); for (i=0; i= 5) && (z_text_buffer_offset -2 == input_length) ) ) end_of_line_found = 1; else if (current_char == 32) space_found = 1; else for (i=0; i 0) { zchar_storage_finish(); number_of_words_found++; locate_dictionary_entry( tokenize_buffer, &parse_buffer_index, current_word_start, z_text_buffer_offset - current_word_start, dictionary_start, number_of_dictionary_entries, dictionary_entry_length, dictionary_is_unsorted, dont_write_unrecognized_words_to_parse_buffer); zchar_storage_start(tokenize_buffer, tokenize_buffer_length); } space_found = 0; current_word_start = z_text_buffer_offset + 1; } else if (non_space_seperator_found == 1) { // Non-space-seperator are a bit more work, since they also count // as a single word. So we stop the current word and after that, // initiate a new one containing only the current char. //if (z_symbols_stored > 0) if (zchar_storage_symbols_stored > 0) { zchar_storage_finish(); if (++number_of_words_found == maximum_words) break; locate_dictionary_entry(tokenize_buffer, &parse_buffer_index, current_word_start, z_text_buffer_offset - current_word_start, dictionary_start, number_of_dictionary_entries, dictionary_entry_length, dictionary_is_unsorted, dont_write_unrecognized_words_to_parse_buffer); zchar_storage_start(tokenize_buffer, tokenize_buffer_length); } // No length check for dictionary_word_length required, since we // either just started a new zchar_storage above, or otherwise // zchar_storage_symbols_stored == 0 due to if above. store_ZSCII_as_zchar(current_char); zchar_storage_finish(); number_of_words_found++; locate_dictionary_entry( tokenize_buffer, &parse_buffer_index, z_text_buffer_offset, 1, dictionary_start, number_of_dictionary_entries, dictionary_entry_length, dictionary_is_unsorted, dont_write_unrecognized_words_to_parse_buffer); zchar_storage_start(tokenize_buffer, tokenize_buffer_length); non_space_seperator_found = 0; current_word_start = z_text_buffer_offset + 1; } else if (end_of_line_found == 1) { zchar_storage_finish(); if (zchar_storage_symbols_stored != 0) { TRACE_LOG("%x / %x / %d / %d\n", tokenize_buffer, parse_buffer_index, current_word_start, z_text_buffer_offset); number_of_words_found++; locate_dictionary_entry( tokenize_buffer, &parse_buffer_index, current_word_start, z_text_buffer_offset - current_word_start, dictionary_start, number_of_dictionary_entries, dictionary_entry_length, dictionary_is_unsorted, dont_write_unrecognized_words_to_parse_buffer); } } else { TRACE_LOG("Symbols stored: %d.\n", zchar_storage_symbols_stored); if (zchar_storage_symbols_stored < dictionary_word_length) store_ZSCII_as_zchar(current_char); else { TRACE_LOG("Maximum word length %d reached.\n", dictionary_word_length); } } z_text_buffer_offset++; } zchar_storage_clear(); TRACE_LOG("Found %d word(s), storing %d to %lx.\n", number_of_words_found, number_of_words_found, (unsigned long int)(z_parse_buffer + 1 - z_mem)); z_parse_buffer[1] = number_of_words_found; } // - z_ucs *z_ucs_dest: A pointer to the output buffer. // - uint16_t z_ucs_dest_length: The size of the output buffer. // - uint8_t *zscii_src: Pointer to source data. In case it is NULL, // it means continue processing where we left off last time because // if buffer size constraints (see below). // - Return value: // * The pointer to the byte behind the zscii_src, in case there was // enough space in z_ucs_dest to write everthing into that buffer, // * NULL in case the string could not be decoded completely due to // buffer size constraints. In this case, simply call zchar_to_z_ucs // again with zscii_src == NULL after clearing the buffer to continue // decoding. /*@temp@*/ /*@null@*/ static uint8_t *zchar_to_z_ucs( z_ucs *z_ucs_dest, uint16_t z_ucs_dest_length, uint8_t *zchar_src) { z_ucs *z_ucs_dest_index = z_ucs_dest; z_ucs *z_ucs_dest_last_valid_index = z_ucs_dest + z_ucs_dest_length - 1; uint16_t current_three_zchars; uint8_t current_zchar; uint8_t current_alphabet; uint8_t next_char_alphabet = 0; uint8_t abbreviation_block = 0xff; uint8_t *abbreviation_entry; uint8_t i; uint16_t output_data = 0; // init to inhibit compiler warning int output_data_ready = 0; // zchar-processing is not possible with a z-story for the abbreviation // decoding. if (active_z_story == NULL) return NULL; // In case we continue processing an old string which was interrupted // due to a full output buffer, we keep the current source-indices. // Else, we initialize the source information. if (zchar_src == NULL) { zchar_src = zchar_to_z_ucs_src_index[zchar_to_z_ucs_abbreviation_level]; current_alphabet = zchar_to_z_ucs_current_alphabet[zchar_to_z_ucs_abbreviation_level]; i = zchar_to_z_ucs_current_z_char[zchar_to_z_ucs_abbreviation_level]; } else { zchar_to_z_ucs_abbreviation_level = 0; zchar_to_z_ucs_multibyte_stage[0] = 0; current_alphabet = 0; i = 0; } TRACE_LOG("Starting conversion at %p, abbrlevel:%d, char[%d/3].\n", zchar_src, zchar_to_z_ucs_abbreviation_level, i); current_three_zchars = load_word(zchar_src); while ( ((current_three_zchars & 0x8000) == 0) || (zchar_to_z_ucs_abbreviation_level > 0) || (i != 3)) { TRACE_LOG("%p / %p / %p.\n", z_ucs_dest, z_ucs_dest_index, z_ucs_dest_last_valid_index); // Check if we're at a position in the output buffer that will accept // at least one more character. if (z_ucs_dest_index == z_ucs_dest_last_valid_index) { // If there is no more space in the output buffer, we'll store all // current source-index information and return NULL as an indication // that there's more input waiting to be processed. zchar_to_z_ucs_src_index[zchar_to_z_ucs_abbreviation_level] = zchar_src; zchar_to_z_ucs_current_alphabet[zchar_to_z_ucs_abbreviation_level] = current_alphabet; TRACE_LOG("(1:%d)\n", zchar_to_z_ucs_current_z_char[zchar_to_z_ucs_abbreviation_level]); zchar_to_z_ucs_current_z_char[zchar_to_z_ucs_abbreviation_level] = i; TRACE_LOG("(2:%d)\n", zchar_to_z_ucs_current_z_char[zchar_to_z_ucs_abbreviation_level]); TRACE_LOG("dest-index: %p / czc: %p/%p\n", z_ucs_dest_index, &(zchar_to_z_ucs_current_z_char[0]), &(zchar_to_z_ucs_current_z_char[1])); *z_ucs_dest_index = 0; TRACE_LOG("(3:%d)\n", zchar_to_z_ucs_current_z_char[zchar_to_z_ucs_abbreviation_level]); TRACE_LOG("Interrupted conversion at %p, abbrlevel %d, [%d->%d/3].\n", zchar_src, zchar_to_z_ucs_abbreviation_level, i, zchar_to_z_ucs_current_z_char[zchar_to_z_ucs_abbreviation_level]); return NULL; } if (((current_three_zchars & 0x8000) != 0) && (i == 3)) { // Here we're finishing an abbreviation (since the complete end-of-string // case is handeled in the loop's while condition) zchar_to_z_ucs_abbreviation_level--; zchar_src = zchar_to_z_ucs_src_index[zchar_to_z_ucs_abbreviation_level]; current_alphabet =zchar_to_z_ucs_current_alphabet[zchar_to_z_ucs_abbreviation_level]; current_three_zchars = load_word(zchar_src); i = zchar_to_z_ucs_current_z_char[zchar_to_z_ucs_abbreviation_level] + 1; next_char_alphabet = 0; // Re-start to check if we're already at the end of the string. continue; } if (i == 3) { // Read the next three Z-Chars from the input. zchar_src += 2; current_three_zchars = load_word(zchar_src); i = 0; } current_zchar = (current_three_zchars & (0x7c00 >> (i*5))) >> ((2-i)*5); TRACE_LOG("Current Z-Char: %d.\n", current_zchar); TRACE_LOG("Abbreviation-level: %d.\n", zchar_to_z_ucs_abbreviation_level); TRACE_LOG("%d/%d/%d/%d\n", ver, current_zchar, current_alphabet, current_zchar); if (abbreviation_block != 0xff) { if (zchar_to_z_ucs_abbreviation_level + 1 > MAX_ABBREVIATION_DEPTH) (void)i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_MAXIMUM_ABBREVIATION_DEPTH_IS_P0D, -1, (long int)MAX_ABBREVIATION_DEPTH); zchar_to_z_ucs_src_index[zchar_to_z_ucs_abbreviation_level] = zchar_src; zchar_to_z_ucs_current_z_char[zchar_to_z_ucs_abbreviation_level] = i; // Remember that the current position has been processed. zchar_to_z_ucs_current_alphabet[zchar_to_z_ucs_abbreviation_level] = current_alphabet; // In case we're processing an abbreviation, calculate the location // of the abbreviation address in the abbreviation table. abbreviation_entry = active_z_story->abbreviations_table + (((abbreviation_block << 5) + current_zchar) << 1); current_alphabet = 0; zchar_src = z_mem + load_word(abbreviation_entry) * 2; current_three_zchars = load_word(zchar_src); i = 0; zchar_to_z_ucs_abbreviation_level++; zchar_to_z_ucs_multibyte_stage[zchar_to_z_ucs_abbreviation_level] = 0; abbreviation_block = 0xff; } else if ( zchar_to_z_ucs_multibyte_stage[zchar_to_z_ucs_abbreviation_level] == 1) { // If we arrive here, we have to read the first part, the higher // five bits of the final ten-bit-code. zchar_to_z_ucs_multi_z_char[zchar_to_z_ucs_abbreviation_level] = (current_zchar << 5); // After reading, we'll store the information that in the next // iteration we'll have to process the lower five bits. zchar_to_z_ucs_multibyte_stage[zchar_to_z_ucs_abbreviation_level] = 2; i++; } else if ( zchar_to_z_ucs_multibyte_stage[zchar_to_z_ucs_abbreviation_level] == 2) { // In case we're in stage 2, we read the lower five bits. output_data = zchar_to_z_ucs_multi_z_char[zchar_to_z_ucs_abbreviation_level] | current_zchar; //TRACE_LOG("Multibyte-output-data: %x '%c'.\n",output_data,output_data); // After that, we'll reset the multibyte-processing-stage to 0. zchar_to_z_ucs_multibyte_stage[zchar_to_z_ucs_abbreviation_level] = 0; output_data_ready = 1; i++; } else if ((next_char_alphabet == 2) && (current_zchar == 6)) { zchar_to_z_ucs_multibyte_stage[zchar_to_z_ucs_abbreviation_level] = 1; i++; } else if (current_zchar == 0) { output_data_ready = 1; output_data = 32; i++; } else if ( ((ver == 1) && (current_zchar == 1)) || ( ( (current_zchar == 7) && ( ( (zchar_to_z_ucs_multibyte_stage[zchar_to_z_ucs_abbreviation_level] != 0) && (current_alphabet == 2) ) || ( (zchar_to_z_ucs_multibyte_stage[zchar_to_z_ucs_abbreviation_level] ==0) && (next_char_alphabet == 2) ) ) ) ) ) { // The upper line is for version 1, the lower for custom alphabets // (see 3.5.5.1). output_data_ready = 1; output_data = 13; i++; } else if ((ver <= 2) && (current_zchar == 4)) { if (++current_alphabet == 3) current_alphabet = 0; next_char_alphabet = current_alphabet; i++; } else if ((ver <= 2) && (current_zchar == 5)) { if (--current_alphabet == 255) current_alphabet = 2; next_char_alphabet = current_alphabet; i++; } else if (((ver <= 2) && (current_zchar == 2)) || ((ver > 2) && (current_zchar == 4))) { if (++next_char_alphabet == 3) next_char_alphabet = 0; i++; } else if (((ver <= 2) && (current_zchar == 3)) || ((ver > 2) && (current_zchar == 5))) { if (--next_char_alphabet == 255) next_char_alphabet = 2; i++; } else if (((ver >= 3) && ((current_zchar==1)||(current_zchar==2)||(current_zchar==3))) || ((ver == 2) && ((current_zchar == 1)))) { abbreviation_block = current_zchar - 1; i++; } else if (current_zchar >= 6) { output_data_ready = 1; output_data = (active_z_story->alphabet_table + (next_char_alphabet * 26))[current_zchar - 6]; i++; } else i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_UNKNOWN_ERROR_CASE, -1); if (output_data_ready != 0) { /*@-usedef@*/ *z_ucs_dest_index = zscii_output_char_to_z_ucs(output_data); /*@+usedef@*/ z_ucs_dest_index++; //TRACE_LOG("output-data: %d.\n", output_data); //TRACE_LOG("output-ptr: %x.\n", z_ucs_dest_index); //zscii_char_to_z_ucs(&z_ucs_dest_index, output_data); //TRACE_LOG("output-ptr: %x.\n", z_ucs_dest_index); output_data_ready = 0; if (next_char_alphabet != current_alphabet) next_char_alphabet = current_alphabet; } } *z_ucs_dest_index = 0; TRACE_LOG("Finished conversion at %p.\n", zchar_src); return zchar_src + 2; } /*@dependent@*/ static uint8_t *output_zchar_to_streams(uint8_t *zchar_src) { TRACE_LOG("Converting zchars from %lx.\n", (unsigned long int)(zchar_src - z_mem)); do { zchar_src = zchar_to_z_ucs( z_ucs_output_buffer, Z_UCS_OUTPUT_BUFFER_SIZE, zchar_src); TRACE_LOG("zchar-src %p, mbstage: %d, currentchar: %d, abbrlevel %d\n", zchar_to_z_ucs_src_index[zchar_to_z_ucs_abbreviation_level], zchar_to_z_ucs_multibyte_stage[zchar_to_z_ucs_abbreviation_level], zchar_to_z_ucs_current_z_char[zchar_to_z_ucs_abbreviation_level], zchar_to_z_ucs_abbreviation_level); (void)streams_z_ucs_output(z_ucs_output_buffer); } while (zchar_src == NULL); return zchar_src; } void opcode_tokenise(void) { uint8_t *dictionary_table = active_z_story->dictionary_table; bool dont_write_unrecognized_words_to_parse_buffer = false; int offset = (ver >= 5 ? 2 : 1); size_t string_length; TRACE_LOG("Opcode: TOKENISE.\n"); if (number_of_operands > 2) { if (op[2] != 0) dictionary_table = z_mem + op[2]; if ((number_of_operands > 3) && (op[3] != 0)) { dont_write_unrecognized_words_to_parse_buffer = true; } } if (ver < 5) string_length = strlen((char*)(z_mem + op[0] + offset)); else string_length = *(z_mem + op[0] + 1); TRACE_LOG("Offset: %d.\n", offset); TRACE_LOG("dont_write_unrecognized_words_to_parse_buffer: %d.\n", dont_write_unrecognized_words_to_parse_buffer); TRACE_LOG("Offset: %d.\n", offset); TRACE_LOG("String length: %d.\n", (int)string_length); tokenise( z_mem + op[0], (uint8_t)offset, string_length, z_mem + op[1], dictionary_table, dont_write_unrecognized_words_to_parse_buffer); } void display_status_line(void) { uint16_t current_room_object; if (active_interface->is_status_line_available() == false) return; current_room_object = get_variable(0x10, false); if (current_room_object != 0) (void)zchar_to_z_ucs( z_ucs_output_buffer, Z_UCS_OUTPUT_BUFFER_SIZE, (get_objects_property_table(get_variable(0x10, false))) + 1); else *z_ucs_output_buffer = 0; active_interface->show_status( z_ucs_output_buffer, (int)active_z_story->score_mode, get_variable(0x11, false), get_variable(0x12, false)); } z_ucs zscii_input_char_to_z_ucs(zscii zscii_input) { // The result will fit into a 16 bit-wide space, since the Z-Spec 1.0 // only defines 16-bit unicode characters. z_ucs result = -1; // init to inhibit compiler warning TRACE_LOG("Converting ZSCII-Input(!)-Char %d to UCS-4.\n", zscii_input); if (zscii_input == 0) result = (z_ucs)0; else if (zscii_input == 8) result = (z_ucs)8; // Delete else if (zscii_input == 13) result = Z_UCS_NEWLINE; else if (zscii_input == 27) result = (z_ucs)27; // Escape else if ((zscii_input >= 32) && (zscii_input <= 126)) result = (z_ucs)zscii_input; // Identical to ASCII in this range. else if ((zscii_input >= 129) && (zscii_input <= 154)) result = (z_ucs)zscii_input; // cursor, f1-f12, keypad else if ((zscii_input >= 155) && (zscii_input <= 251)) result = zscii_extra_char_to_unicode(zscii_input); else if ((zscii_input >= 252) && (zscii_input <= 254)) result = (z_ucs)zscii_input; // mouse-clicks else i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_INVALID_ZSCII_INPUT_CODE_P0D, -1, (long)zscii_input); TRACE_LOG("Result: %d.\n", (unsigned)result); return result; } bool is_valid_zscii_output_char(zscii zscii_output) { if ( (zscii_output == 0) || (zscii_output == 9) || (zscii_output == 11) || (zscii_output == 13) || ( (zscii_output >= 32) && (zscii_output <= 126) ) || ( (zscii_output >= 155) && (zscii_output <= 251) ) ) return true; else return false; } z_ucs zscii_output_char_to_z_ucs(zscii zscii_output) { z_ucs result = -1; // init for compiler warning TRACE_LOG("Converting ZSCII-Output(!)-Char %d to UCS-4.\n", zscii_output); if (zscii_output == 0) result = 0; else if (zscii_output == 9) result = latin1_char_to_zucs_char('\t'); else if (zscii_output == 11) result = latin1_char_to_zucs_char('.'); else if (zscii_output == 13) result = Z_UCS_NEWLINE; else if ((zscii_output >= 32) && (zscii_output <= 126)) result = (z_ucs)zscii_output; // Identical to ASCII in this range. else if ((zscii_output >= 155) && (zscii_output <= 251)) result = zscii_extra_char_to_unicode(zscii_output); else i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_INVALID_ZSCII_OUTPUT_CODE_P0D, -1, (long)zscii_output); TRACE_LOG("Result: %d.\n", (unsigned)result); return result; } void opcode_print_paddr(void) { uint32_t unpacked_address = get_packed_string_address(op[0]); TRACE_LOG("Opcode: PRINT_PADDR.\n"); TRACE_LOG("Printing string at %x.\n", (unsigned)unpacked_address); (void)output_zchar_to_streams(z_mem + unpacked_address); } void opcode_print_num(void) { char number[7]; // '-' + 32768 + '\0', 7 chars are okay. TRACE_LOG("Opcode: PRINT_NUM.\n"); /*@-bufferoverflowhigh@*/ sprintf(number, "%d", (int16_t)op[0]); /*@+bufferoverflowhigh@*/ (void)streams_latin1_output(number); } void opcode_print_char(void) { z_ucs *output_buffer_index = z_ucs_output_buffer; TRACE_LOG("Opcode: PRINT_CHAR.\n"); // FIXME: Workaround for Beyond Zork if (is_valid_zscii_output_char(op[0]) == false) return; *output_buffer_index = zscii_output_char_to_z_ucs(op[0]); output_buffer_index++; *output_buffer_index = 0; (void)streams_z_ucs_output(z_ucs_output_buffer); } void opcode_print(void) { TRACE_LOG("Opcode: PRINT.\n"); pc = output_zchar_to_streams(pc); } void opcode_new_line(void) { TRACE_LOG("Opcode: NEW_LINE.\n"); (void)streams_latin1_output("\n"); } #ifndef DISABLE_PREFIX_COMMANDS static bool process_interpreter_command() { z_ucs *prefixed_command; char *ptr; int i; char **interface_options; TRACE_LOG("Checking for interpreter-command '"); TRACE_LOG_Z_UCS(interpreter_command_buffer); TRACE_LOG("'.\n"); if (*interpreter_command_buffer != latin1_char_to_zucs_char( FIZMO_COMMAND_PREFIX)) return false; prefixed_command = interpreter_command_buffer + 1; if (z_ucs_cmp_latin1(prefixed_command, "help") == 0) { (void)streams_latin1_output("\n"); (void)i18n_translate(libfizmo_module_name,i18n_libfizmo_VALID_COMMANDS_ARE); (void)streams_latin1_output("\n"); (void)streams_latin1_output(fizmo_command_prefix_string); (void)streams_latin1_output("help\n"); (void)streams_latin1_output(fizmo_command_prefix_string); (void)streams_latin1_output("info\n"); (void)streams_latin1_output(fizmo_command_prefix_string); (void)streams_latin1_output("predictable\n"); (void)streams_latin1_output(fizmo_command_prefix_string); (void)streams_latin1_output("recstart\n"); (void)streams_latin1_output(fizmo_command_prefix_string); (void)streams_latin1_output("recstop\n"); (void)streams_latin1_output(fizmo_command_prefix_string); (void)streams_latin1_output("fileinput\n"); (void)streams_latin1_output(fizmo_command_prefix_string); (void)streams_latin1_output("config\n"); #ifdef ENABLE_DEBUGGER (void)streams_latin1_output(fizmo_command_prefix_string); (void)streams_latin1_output("debug\n"); #endif // ENABLE_DEBUGGER (void)streams_latin1_output("\n"); return true; } else if (z_ucs_cmp_latin1(prefixed_command, "predictable") == 0) { ptr = get_configuration_value("random-mode"); if ( (ptr == NULL) || (strcmp(ptr, "predictable") != 0) ) { set_configuration_value("random-mode", "predictable"); (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_RANDOM_GENERATOR_IS_NOW_IN_PREDICTABLE_MODE); } else { set_configuration_value("random-mode", "random"); (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_RANDOM_GENERATOR_IS_NOW_IN_RANDOM_MODE); } (void)streams_latin1_output("\n\n"); return true; } else if (z_ucs_cmp_latin1(prefixed_command, "info") == 0) { active_interface->output_interface_info(); #ifdef FIZMO_DIST_VERSION i18n_translate( libfizmo_module_name, i18n_libfizmo_FIZMO_VERSION_P0S, FIZMO_DIST_VERSION); streams_latin1_output("\n"); #endif // FIZMO_DIST_VERSION (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_LIBFIZMO_VERSION_P0S, LIBFIZMO_VERSION); (void)streams_latin1_output("\n"); if (active_sound_interface != NULL) { streams_latin1_output(active_sound_interface->get_interface_name()); streams_latin1_output(" "); streams_latin1_output("version "); streams_latin1_output(active_sound_interface->get_interface_version()); streams_latin1_output("\n"); } i18n_translate( libfizmo_module_name, i18n_libfizmo_STORY_HAS_Z_VERSION_NUMBER_P0D, (long int)active_z_story->version); streams_latin1_output("\n"); i18n_translate( libfizmo_module_name, i18n_libfizmo_STORY_RELEASE_NUMBER, (long int)active_z_story->release_code); streams_latin1_output("\n"); i18n_translate( libfizmo_module_name, i18n_libfizmo_STORY_SERIAL_NUMBER, active_z_story->serial_code); streams_latin1_output("\n"); (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_CURRENT_Z_STACK_SIZE_P0D_ENTRIES, current_z_stack_size); (void)streams_latin1_output("\n"); (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_CURRENT_Z_STACK_ENTRIES_IN_USE_P0D, z_stack_index - z_stack); (void)streams_latin1_output("\n"); if (bool_equal(skip_active_routines_stack_check_warning, true)) { (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_HACK_01__ROUTINE_STACK_UNDERFLOW_CHECK_DISABLED); (void)streams_latin1_output("\n"); } (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_P0D_BYTES_USED_FOR_UNDO, (long)get_allocated_undo_memory_size()); (void)streams_latin1_output("\n"); #ifndef DISABLE_OUTPUT_HISTORY (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_P0D_BYTES_USED_BY_TEXT_HISTORY, (long)get_allocated_text_history_size(outputhistory[0])); (void)streams_latin1_output("\n"); #endif // DISABLE_OUTPUT_HISTORY ptr = get_configuration_value("random-mode"); if (ptr != NULL) { if (strcmp(ptr, "predictable") == 0) (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_RANDOM_GENERATOR_IS_NOW_IN_PREDICTABLE_MODE); else (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_RANDOM_GENERATOR_IS_NOW_IN_RANDOM_MODE); (void)streams_latin1_output("\n"); } /* #ifndef DISABLE_OUTPUT_HISTORY (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_P0D_BYTES_USED_BY_TEXT_HISTORY, outputhistory[0]->z_history_buffer_size + 1); (void)streams_latin1_output("\n"); (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_P0D_BYTES_USED_BY_TEXT_HISTORY_METADATA, outputhistory[0]->history_buffer_metadata_size * sizeof(struct history_metadata)); (void)streams_latin1_output("\n"); (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_P0D_BYTES_USED_BY_PARAGRAPH_CACHE, outputhistory[0]->pos_cache_size * sizeof(z_ucs*)); (void)streams_latin1_output("\n"); #endif */ #ifndef DISABLE_BLOCKBUFFER if (upper_window_buffer != NULL) { (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_P0D_BYTES_USED_BY_BLOCK_BUFFER, count_allocated_blockbuf_memory(upper_window_buffer)); (void)streams_latin1_output("\n"); } #endif //(void)streams_latin1_output("\n"); streams_latin1_output("\n"); return true; } else if (z_ucs_cmp_latin1(prefixed_command, "recstart") == 0) { ptr = get_configuration_value("disable-external-streams"); if ( (ptr == NULL) || (strcasecmp(ptr, "true") != 0) ) { stream_4_active = true; ask_for_stream4_filename_if_required(); (void)streams_latin1_output("Recording started.\n\n"); } else { (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_THIS_FUNCTION_HAS_BEEN_DISABLED); (void)streams_latin1_output("\n"); } return true; } else if (z_ucs_cmp_latin1(prefixed_command, "recstop") == 0) { ptr = get_configuration_value("disable-external-streams"); if ( (ptr == NULL) || (strcasecmp(ptr, "true") != 0) ) { stream_4_active = false; (void)streams_latin1_output("Recording stopped.\n\n"); } else { (void)i18n_translate( libfizmo_module_name, i18n_libfizmo_THIS_FUNCTION_HAS_BEEN_DISABLED); (void)streams_latin1_output("\n"); } return true; } else if (z_ucs_cmp_latin1(prefixed_command, "fileinput") == 0) { open_input_stream_1(); return true; } else if (z_ucs_cmp_latin1(prefixed_command, "config") == 0) { i = 0; while (configuration_options[i].name != NULL) { streams_latin1_output(configuration_options[i].name); streams_latin1_output(" = "); if (strcmp(configuration_options[i].name, "background-color") == 0) { streams_latin1_output( get_configuration_value("background-color-name")); } else if (strcmp(configuration_options[i].name, "foreground-color") == 0) { streams_latin1_output( get_configuration_value("foreground-color-name")); } else { streams_latin1_output( get_configuration_value(configuration_options[i].name)); } streams_latin1_output("\n"); i++; } if ((interface_options = active_interface->get_config_option_names()) != NULL) { i = 0; while (interface_options[i] != NULL) { streams_latin1_output(interface_options[i]); streams_latin1_output(" = "); streams_latin1_output( active_interface->get_config_value(interface_options[i])); streams_latin1_output("\n"); i++; } } if (active_sound_interface != NULL) { if ((interface_options = active_sound_interface->get_config_option_names()) != NULL) { i = 0; while (interface_options[i] != NULL) { streams_latin1_output(interface_options[i]); streams_latin1_output(" = "); streams_latin1_output( active_sound_interface->get_config_value(interface_options[i])); streams_latin1_output("\n"); i++; } } } streams_latin1_output("\n"); return true; } #ifdef ENABLE_DEBUGGER else if (z_ucs_cmp_latin1(prefixed_command, "debug") == 0) { debugger(); return true; } #endif // ENABLE_DEBUGGER else { return false; } } #endif // DISABLE_PREFIX_COMMANDS int save_and_quit_if_required(bool force_save) { char *filename; char *save_and_quit_file; char *autosave_filename; uint8_t *pc_buf; if (active_interface->do_autosave) { return active_interface->do_autosave(); } autosave_filename = get_configuration_value("autosave-filename"); TRACE_LOG("autosave_filename: %s.\n", autosave_filename); if ( (autosave_filename != NULL) && ( (zpu_step_number != 1) || (bool_equal(force_save, true)) ) ) { pc_buf = pc; pc = current_instruction_location; TRACE_LOG("current_instruction_location: %lx\n", (unsigned long int)(current_instruction_location - z_mem)); filename = fizmo_strdup(autosave_filename); save_game( 0, (uint16_t)(active_z_story->dynamic_memory_end - z_mem + 1), filename, true, false, NULL); pc = pc_buf; save_and_quit_file = get_configuration_value("save-and-quit-file-before-read"); if ( (save_and_quit_file != NULL) && (strcmp(save_and_quit_file, "true") == 0)) { terminate_interpreter = INTERPRETER_QUIT_SAVE_BEFORE_READ; return 1; } else { return 0; } } else return 0; } int read_command_from_file(zscii *input_buffer, int input_buffer_size, int *input_delay_tenth_seconds) { int c; int input_length = 0; long filepos; int milliseconds; int res; int return_code; z_ucs unicode_input; if (input_stream_1 == NULL) { return_code = active_interface->prompt_for_filename( "transcript", &input_stream_1, NULL, FILETYPE_TRANSCRIPT, FILEACCESS_READ); if (return_code == -3) { // If return_code is == -3, this function is not implemented in the // current screen interface. if (input_stream_1_was_already_active == false) { ask_for_input_stream_filename(); } TRACE_LOG("Trying to open \"%s\"\n", input_stream_1_filename); if ((input_stream_1 = fsi->openfile(input_stream_1_filename, FILETYPE_INPUTRECORD, FILEACCESS_READ)) == NULL) { TRACE_LOG("Could not open input file for stream 1.\n"); input_stream_1_active = false; input_stream_1_filename_size = 0; free(input_stream_1_filename); return -1; } } else if (return_code < 0) { return -1; } } filepos = fsi->getfilepos(input_stream_1); // Parse "(Waited for ms)". res = fsi->filescanf(input_stream_1, "(Waited for %d ms)\n", &milliseconds); if (res == 1) { if (input_delay_tenth_seconds != NULL) *input_delay_tenth_seconds = milliseconds / 100; } else if (res == 0) { if (input_delay_tenth_seconds != NULL) *input_delay_tenth_seconds = 0; fsi->setfilepos(input_stream_1, filepos, SEEK_SET); } while (input_length != input_buffer_size) { unicode_input = parse_utf8_char_from_file(input_stream_1); if (unicode_input == '\n') break; else if (unicode_input != '\r') { *(input_buffer++) = unicode_char_to_zscii_input_char(unicode_input); input_length++; } } if (unicode_input != UEOF) { // Seek next '\n'. while (unicode_input != '\n') if ((unicode_input = parse_utf8_char_from_file(input_stream_1)) == UEOF) break; } TRACE_LOG("Read %d input chars.\n", input_length); // At EOF? If so, close stream and return last length. if (unicode_input == UEOF) { fsi->closefile(input_stream_1); input_stream_1_active = false; input_stream_1 = NULL; return input_length; } // Check if there's something behind the '\n'. c = fsi->readchar(input_stream_1); if (c == EOF) { input_stream_1_active = false; fsi->closefile(input_stream_1); input_stream_1 = NULL; } else fsi->unreadchar(c, input_stream_1); return input_length; } void opcode_read(void) { uint16_t maximum_length; int16_t input_length = -1; // init to inhibit compiler warning zscii *z_text_buffer = z_mem + op[0]; uint16_t parsebuffer_offset = op[1]; uint16_t tenth_seconds = op[2]; uint16_t timed_routine_offset = op[3]; zscii nof_preloaded_chars; bool interpreter_command_found; int i; bool stream_1_active_buf; int offset; size_t bytes_required; int tenth_seconds_elapsed = -1; char *time_output; int tenth_seconds_to_delay = 0; char *value; int timed_routine_retval; #ifndef DISABLE_COMMAND_HISTORY uint8_t buf; #endif /* DISABLE_COMMAND_HISTORY */ TRACE_LOG("Opcode: READ.\n"); if (save_and_quit_if_required(false) != 0) return; TRACE_LOG("Reading input (%x, %x).\n", op[0], parsebuffer_offset); if (ver >= 5) read_z_result_variable(); do { interpreter_command_found = false; if (ver <= 3) display_status_line(); value = get_configuration_value("disable-external-streams"); if (ver <= 4) { maximum_length = (*z_text_buffer) + 1; // FIXME: Verify minimum text buffer length. TRACE_LOG("Maximum length: %d.\n", maximum_length); input_length = -1; if ( (input_stream_1_active == true) && ( (value == NULL) || (strcasecmp(value, "true") != 0) ) ) input_length = read_command_from_file(z_text_buffer+1, maximum_length, NULL); if (input_length == -1) input_length = active_interface->read_line( (z_text_buffer+1), maximum_length, 0, 0, 0, NULL, false, false); TRACE_LOG("Resulting input length: %d.\n", input_length); // Since version 4 games don't have a timeout (tenth_seconds and // verification_routine are set to a fixed 0 in the call above) // the result stored in input_length is always >= 0. z_text_buffer[input_length + 1] = 0; #ifndef DISABLE_COMMAND_HISTORY if (input_length > 0) { // Now we'll store the last command in the command history. store_command_in_history(z_text_buffer + 1); } #endif /* DISABLE_COMMAND_HISTORY */ for (i=1; i<(int)(input_length+2); i++) TRACE_LOG("zscii-input[%d] = %d.\n", i, z_text_buffer[i]); } else if (ver >= 5) { maximum_length = *z_text_buffer; TRACE_LOG("Maximum length: %d.\n", maximum_length); // FIXME: Verify minimum text buffer length. #ifdef ENABLE_TRACING TRACE_LOG("Characters left over from previous input: %d.\n", z_text_buffer[1]); #endif // ENABLE_TRACING // Preloaded input is only availiable in version 5. nof_preloaded_chars = z_text_buffer[1]; if (nof_preloaded_chars > 0) { if (active_interface->is_preloaded_input_available() == false) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_PRELOADED_INPUT_NOT_AVAILIABLE_IN_INTERFACE_P0S, -1, active_interface->get_interface_name()); TRACE_LOG("Removing %d chars from history.\n", nof_preloaded_chars); stream_2_remove_chars(nof_preloaded_chars); #ifndef DISABLE_OUTPUT_HISTORY remove_chars_from_history(outputhistory[0], nof_preloaded_chars); #endif // DISABLE_OUTPUT_HISTORY } if ( (number_of_operands >= 4) && (tenth_seconds != 0) && (timed_routine_offset != 0) ) { TRACE_LOG("Timed input requested: %d/10s, routine at %x.\n", tenth_seconds, timed_routine_offset); // In this case a time-intervall and routine to call for // timed input are given. input_length = -1; if ( (input_stream_1_active == true) && ( (value == NULL) || (strcasecmp(value, "true") != 0) ) ) { if ((input_length = read_command_from_file(z_text_buffer+2, maximum_length, &tenth_seconds_to_delay)) != -1) { TRACE_LOG("1/10s to wait: %d\n", tenth_seconds_to_delay); stream_output_has_occured = false; while ((tenth_seconds_to_delay -= tenth_seconds) >= 0) { TRACE_LOG( "Invoking verification routine, 1/10s counter: %d(%d).\n", tenth_seconds_to_delay , tenth_seconds); if ((timed_routine_retval=interpret_from_call( get_packed_routinecall_address(timed_routine_offset)))!=0) { TRACE_LOG("verification routine returned != 0.\n"); input_length = -1; break; } } } } if (input_length == -1) { if (active_interface->is_timed_keyboard_input_available() == false) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_TIMED_INPUT_NOT_IMPLEMENTED_IN_INTERFACE_P0S, -1, active_interface->get_interface_name()); else input_length = active_interface->read_line( z_text_buffer + 2, maximum_length, tenth_seconds, get_packed_routinecall_address(timed_routine_offset), z_text_buffer[1], &tenth_seconds_elapsed, false, false); } if (terminate_interpreter != INTERPRETER_QUIT_NONE) { return; } // input_length always defined, since "i18n_translate_and_exit" does // not return. /*@-usedef@*/ if (input_length >= 0) /*@+usedef@*/ { set_variable(z_res_var, (zscii)10, false); z_text_buffer[1] = (zscii)input_length; } else { set_variable(z_res_var, 0, false); z_text_buffer[1] = 0; } } else { input_length = -1; if ( (input_stream_1_active == true) && ( (value == NULL) || (strcasecmp(value, "true") != 0) ) ) input_length = read_command_from_file(z_text_buffer+2, maximum_length, NULL); if (input_length == -1) input_length = active_interface->read_line( z_text_buffer + 2, maximum_length, 0, 0, z_text_buffer[1], NULL, false, false); TRACE_LOG("Resulting input length: %d.\n", input_length); z_text_buffer[1] = (zscii)input_length; set_variable(z_res_var, Z_UCS_NEWLINE, false); } #ifndef DISABLE_COMMAND_HISTORY if (input_length >= 0) { buf = z_text_buffer[input_length + 2]; z_text_buffer[input_length + 2] = (zscii)0; store_command_in_history(z_text_buffer + 2); z_text_buffer[input_length + 2] = buf; } #endif /* DISABLE_COMMAND_HISTORY */ } bytes_required = (input_length + 1) * sizeof(z_ucs); if (bytes_required > (size_t)interpreter_command_buffer_size) { interpreter_command_buffer = (z_ucs*)fizmo_realloc(interpreter_command_buffer, bytes_required); interpreter_command_buffer_size = bytes_required; } offset = (ver >= 5 ? 2 : 1); for (i=0; iinput_must_be_repeated_by_story(); if (bool_equal(stream_4_active, true)) { if (tenth_seconds_elapsed > 0) { time_output = fizmo_malloc(40); snprintf(time_output, 40, "(Waited for %d ms)\n", tenth_seconds_elapsed * 100); stream_4_latin1_output(time_output); free(time_output); } if (input_length == -1) stream_4_latin1_output("(Interrupted input)"); } if (input_length >= 0) { (void)streams_z_ucs_output_user_input(interpreter_command_buffer); // Reduce to lower case. This appears to be also required in v5 // games, although it's not explicitely stated in the Z-Spec (see // Beyond Zork, character name: "frank booth" becomes "Frank Booth"). // ToDo: Respect other (non-ASCII) languages? for (i=0; i= 0x41) && (z_text_buffer[offset + i] <= 0x5a)) z_text_buffer[offset + i] += 0x20; } (void)streams_z_ucs_output_user_input(z_ucs_newline_string); stream_1_active = stream_1_active_buf; TRACE_LOG("input length:%d\n", input_length); if (input_length >= 0) { /* for (i=offset; i<(int)(input_length+offset); i++) // Test for isupper to avoid converting non-regular chars (tilde-a). if (isupper(z_text_buffer[i]) != 0) z_text_buffer[i] = tolower(z_text_buffer[i]); */ first_word_found = 0; // Next, lexical analysis is performed on the text (except that in // Versions 5 and later, if parse-buffer is zero then this is omitted). if ((ver < 5) || (parsebuffer_offset != 0)) { TRACE_LOG("Peforming lexical analysis.\n"); tokenise( z_text_buffer, (uint8_t)(ver >= 5 ? 2 : 1), (uint16_t)input_length, z_mem + parsebuffer_offset, active_z_story->dictionary_table, false); } #ifndef DISABLE_PREFIX_COMMANDS if (first_word_found == 0) { interpreter_command_found = process_interpreter_command(); if (bool_equal(interpreter_command_found, true)) { (void)streams_latin1_output(">"); z_text_buffer[1] = 0; if (save_and_quit_if_required(true) != 0) return; } } #endif // DISABLE_PREFIX_COMMANDS // In case no lexical analysis is required and we've found no interpreter // command, we can quite the loop. if ( (ver >=5) && (parsebuffer_offset == 0) && (interpreter_command_found == false)) break; if (active_sound_interface != NULL) active_sound_interface->keyboard_input_has_occurred(); } else break; } // If we just had a command that was processed internally by the // interpreter, not the story, we'll continue with the input. while (interpreter_command_found != false); number_of_commands++; } void opcode_print_obj(void) { uint8_t *object_property_table = get_objects_property_table(op[0]); TRACE_LOG("Opcode: PRINT_OBJ.\n"); (void)output_zchar_to_streams(object_property_table + 1); } void opcode_print_ret(void) { TRACE_LOG("Opcode: PRINT_RET.\n"); (void)output_zchar_to_streams(pc); pc = *zchar_to_z_ucs_src_index; (void)streams_latin1_output("\n"); return_from_routine(1); } void opcode_print_addr(void) { TRACE_LOG("Opcode: PRINT_ADDR.\n"); TRACE_LOG("Printing string at %x.\n", op[0]); (void)output_zchar_to_streams(z_mem + op[0]); } void opcode_show_status(void) { TRACE_LOG("Opcode: SHOW_STATUS.\n"); display_status_line(); } void opcode_read_char(void) { //static z_ucs buf[] = { 0, 0 }; static zscii command_input; char *time_output; int tenth_seconds_elapsed = -1; int input_char; int input_delay_tenth_seconds = 0; int input_length; char *value = get_configuration_value("disable-external-streams"); int timed_routine_retval; TRACE_LOG("Opcode: READ_CHAR.\n"); read_z_result_variable(); // FIXME: Check for first parameter which must be 1. // FIXME: Convert to ZSCII. if (ver <= 3) display_status_line(); if ((number_of_operands >= 3) && (ver >= 4)) { TRACE_LOG("Starting reading character via timed input.\n"); input_length = -1; if ( (input_stream_1_active == true) && ( (value == NULL) || (strcasecmp(value, "true") != 0) ) ) input_length = read_command_from_file(&command_input, 1, &input_delay_tenth_seconds); input_char = (input_length == -1) ? active_interface->read_char( op[1], get_packed_routinecall_address(op[2]), &tenth_seconds_elapsed) : command_input; if (terminate_interpreter != INTERPRETER_QUIT_NONE) return; if (bool_equal(stream_4_active, true)) { if (tenth_seconds_elapsed > 0) { time_output = fizmo_malloc(40); snprintf(time_output, 40, "(Waited for %d ms)\n", tenth_seconds_elapsed * 100); stream_4_latin1_output(time_output); free(time_output); } if (input_char == -1) stream_4_latin1_output("(Interrupted input)"); } if (input_char == -1) input_char = 0; /* // No output of input in case of read_char. else { *buf = input_char; (void)streams_z_ucs_output_user_input(buf); } (void)streams_z_ucs_output_user_input(z_ucs_newline_string); */ set_variable(z_res_var, input_char, false); TRACE_LOG("Reading character via timed input done.\n"); } else { TRACE_LOG("Starting reading single character.\n"); input_length = -1; if ( (input_stream_1_active == true) && ( (value == NULL) || (strcasecmp(value, "true") != 0) ) ) input_length = read_command_from_file(&command_input, 1, &input_delay_tenth_seconds); input_char = (input_length == -1) ? active_interface->read_char(0, 0, NULL) : command_input; if (input_delay_tenth_seconds > 0) { TRACE_LOG("1/10s to wait: %d\n", input_delay_tenth_seconds); while ((input_delay_tenth_seconds -= op[1]) >= 0) { TRACE_LOG( "Invoking verification routine, 1/10s counter: %d(%d).\n", input_delay_tenth_seconds , op[1]); if ((timed_routine_retval = interpret_from_call( get_packed_routinecall_address(op[2]))) != 0) { TRACE_LOG("verification routine returned != 0.\n"); input_length = -1; break; } } } /* *buf = input_char; // No output of input in case of read_char. (void)streams_z_ucs_output_user_input(buf); (void)streams_z_ucs_output_user_input(z_ucs_newline_string); */ set_variable(z_res_var, input_char, false); TRACE_LOG("Reading single character done.\n"); } if (tenth_seconds_elapsed != -1) { TRACE_LOG("Time elapsed: (%d/10)s.\n", tenth_seconds_elapsed); } if (active_sound_interface != NULL) active_sound_interface->keyboard_input_has_occurred(); } void opcode_print_table(void) { uint8_t *src= z_mem + (uint16_t)op[0]; uint16_t width = (uint16_t)op[1]; uint16_t height = 1; uint16_t skip = 0; int x,y; int buffer_index; int cursor_y = active_interface->get_cursor_row(); int cursor_x = active_interface->get_cursor_column(); bool no_cursor_placement; TRACE_LOG("Opcode: PRINT_TABLE.\n"); if ( (ver != 6) && (active_window_number != 1) ) { // The Z-Spec from 2014-06-07 declares that "Version 5 games must only // ue print_table in the upper window. Its behaviour in the lower window // is undefined". Unfortunately, this prevents sherlock from displaying // error messages of the kind "[You can play the game from start to // finish, solve all the puzzles, get all the points, and STILL never // need to use the word "(print_table)"]". In order to work around this, // print_table in the lower windows just print the command's zscii // text without any formatting. height = 1; skip = 0; no_cursor_placement = true; } else { no_cursor_placement = false; if (number_of_operands >= 3) { height = (uint16_t)op[2]; if (number_of_operands >= 4) skip = (uint16_t)op[3]; } } for (y=0; y= 5, so the length of the // buffer must always be fixed at 6 bytes. zchar_storage_start(dest, 6); TRACE_LOG("Encoding to %x / %p.\n", (uint16_t)op[3], dest); while ( (*src != 0) && (chars_written < length) ) { TRACE_LOG("Encoding char '%c'.\n", *src); store_ZSCII_as_zchar(*src); src++; chars_written++; } while (chars_written < 9) { // Since we're always working in version >= 5, we always have to pad // to a fixed size of 9 z-chars. TRACE_LOG("Storing padding char 5.\n"); (void)zchar_storage_write(5); chars_written++; } zchar_storage_finish(); zchar_storage_clear(); } void opcode_print_unicode(void) { z_ucs_output_buffer[0] = (uint16_t)op[0]; z_ucs_output_buffer[1] = 0; (void)streams_z_ucs_output(z_ucs_output_buffer); } void opcode_check_unicode(void) { uint16_t result = 0; read_z_result_variable(); // FIXME: Check for output charset. if (unicode_char_to_zscii_input_char((uint16_t)op[0]) != 0xff) result = 3; else result = 1; set_variable(z_res_var, result, false); } #endif /* text_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/text.h000644 000765 000024 00000005246 12606024314 021767 0ustar00chrenderstaff000000 000000 /* text.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef text_h_INCLUDED #define text_h_INCLUDED #include "../tools/types.h" #define Z_UCS_OUTPUT_BUFFER_SIZE 128 // According to Z-Spec 1.0, abbreviations may not continue further // abbreviations. #define MAX_ABBREVIATION_DEPTH 1 #ifndef text_c_INCLUDED extern uint8_t alphabet_table_v1[]; extern uint8_t alphabet_table_after_v1[]; extern z_ucs z_ucs_newline_string[]; #endif /* text_c_INCLUDED */ z_ucs zscii_input_char_to_z_ucs(zscii zscii_input); z_ucs zscii_output_char_to_z_ucs(zscii zscii_output); zscii unicode_char_to_zscii_input_char(z_ucs unicode_char); void opcode_print_paddr(void); void opcode_read(void); void opcode_print(void); void opcode_print_num(void); void opcode_print_char(void); void opcode_new_line(void); void opcode_print_obj(void); void opcode_print_ret(void); void opcode_print_addr(void); void opcode_show_status(void); void opcode_read_char(void); void opcode_tokenise(void); void opcode_print_table(void); void opcode_encode_text(void); void opcode_print_unicode(void); void opcode_check_unicode(void); // This is used by the interface code outside the module: /*@-exportlocal@*/ void display_status_line(void); /*@+exportlocal@*/ #endif /* text_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/undo.c000644 000765 000024 00000017524 12606024314 021745 0ustar00chrenderstaff000000 000000 /* undo.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef undo_c_INCLUDED #define undo_c_INCLUDED #include #include "../tools/tracelog.h" #include "../tools/types.h" #include "undo.h" #include "zpu.h" #include "variable.h" #include "fizmo.h" #include "stack.h" #include "config.h" struct undo_frame { uint8_t *dynamic_memory; uint8_t *pc; uint16_t *stack; int z_stack_size; int stack_words_from_active_routine; uint8_t number_of_locals_active; uint8_t number_of_locals_from_function_call; }; static int max_undo_steps = DEFAULT_MAX_UNDO_STEPS; static struct undo_frame** undo_frames = NULL; static int undo_index = 0; static void delete_undo_frame(struct undo_frame *frame) { if (frame != NULL) { if (frame->dynamic_memory != NULL) free(frame->dynamic_memory); if (frame->stack != NULL) free(frame->stack); free(frame); } } int set_max_undo_steps(int new_max_steps) { int ix; struct undo_frame** realloced_undo_frames; /* Free any existing frames beyond the new limit */ if (undo_index > new_max_steps) { for (ix=new_max_steps; ixdynamic_memory = NULL; result->stack = NULL; return result; } void opcode_save_undo(void) { size_t dynamic_memory_size; struct undo_frame *new_undo_frame; int result; size_t nof_stack_bytes_in_use; TRACE_LOG("Opcode: SAVE_UNDO.\n"); if (max_undo_steps <= 0) { result = 0; } else { if ( (undo_frames == NULL) && (set_max_undo_steps(max_undo_steps) != 0) ) { result = 0; } else { if ((new_undo_frame = create_new_undo_frame()) == NULL) { result = 0; } else { dynamic_memory_size = (size_t)( active_z_story->dynamic_memory_end - z_mem + 1 ); if ( (new_undo_frame->dynamic_memory = malloc(dynamic_memory_size)) == NULL) { delete_undo_frame(new_undo_frame); result = 0; } else { nof_stack_bytes_in_use = (z_stack_index - z_stack) * sizeof(uint16_t); if ((new_undo_frame->stack = (uint16_t*)malloc(nof_stack_bytes_in_use)) == NULL) { delete_undo_frame(new_undo_frame); result = 0; } else { if (undo_index == max_undo_steps) { delete_undo_frame(undo_frames[0]); memmove( undo_frames, undo_frames + 1, sizeof(struct undo_frame*) * (max_undo_steps - 1)); undo_index--; } memcpy( new_undo_frame->stack, z_stack, // non-null when size > 0 nof_stack_bytes_in_use); memcpy( new_undo_frame->dynamic_memory, z_mem, dynamic_memory_size); // new_undo_frame->pc is not allocated, no free required. new_undo_frame->pc = pc; new_undo_frame->z_stack_size = z_stack_index - z_stack; new_undo_frame->stack_words_from_active_routine = stack_words_from_active_routine; new_undo_frame->number_of_locals_active = number_of_locals_active; new_undo_frame->number_of_locals_from_function_call = number_of_locals_from_function_call; undo_frames[undo_index++] = new_undo_frame; result = 1; } } } } } read_z_result_variable(); set_variable(z_res_var, (uint16_t)result, false); } void opcode_restore_undo(void) { int result; size_t dynamic_memory_size; struct undo_frame *frame_to_restore; TRACE_LOG("Opcode: RESTORE_UNDO.\n"); if (undo_index > 0) { undo_index--; frame_to_restore = undo_frames[undo_index]; dynamic_memory_size = (size_t)( active_z_story->dynamic_memory_end - z_mem + 1 ); ensure_z_stack_size(frame_to_restore->z_stack_size); pc = frame_to_restore->pc; //current_z_stack_size = frame_to_restore->z_stack_size; //behind_z_stack = z_stack + current_z_stack_size; z_stack_index = z_stack + frame_to_restore->z_stack_size; stack_words_from_active_routine = frame_to_restore->stack_words_from_active_routine; number_of_locals_active = frame_to_restore->number_of_locals_active; number_of_locals_from_function_call = frame_to_restore->number_of_locals_from_function_call; local_variable_storage_index = z_stack_index - stack_words_from_active_routine - number_of_locals_active; memcpy( z_stack, // non-null when size > 0 frame_to_restore->stack, frame_to_restore->z_stack_size * sizeof(uint16_t)); //current_z_stack_size * sizeof(uint16_t)); memcpy( z_mem, frame_to_restore->dynamic_memory, dynamic_memory_size); delete_undo_frame(frame_to_restore); write_interpreter_info_into_header(); result = 2; } else { result = 0; } read_z_result_variable(); set_variable(z_res_var, (uint16_t)result, false); } size_t get_allocated_undo_memory_size(void) { int i = 0; size_t dynamic_memory_size = (size_t)( active_z_story->dynamic_memory_end - z_mem + 1 ); size_t result = ( sizeof(struct undo_frame*) * max_undo_steps ) + ( undo_index * (sizeof(struct undo_frame) + dynamic_memory_size) ); while (i < undo_index) result += undo_frames[i++]->z_stack_size * sizeof(uint16_t); return result; } void free_undo_memory(void) { if (undo_frames != NULL) { while (undo_index > 0) { undo_index--; delete_undo_frame(undo_frames[undo_index]); } free(undo_frames); undo_frames = NULL; } max_undo_steps = 0; } #endif /* undo_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/undo.h000644 000765 000024 00000003424 12606024314 021744 0ustar00chrenderstaff000000 000000 /* undo.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef undo_h_INCLUDED #define undo_h_INCLUDED #include "../tools/types.h" int set_max_undo_steps(int new_max_steps); void opcode_save_undo(void); void opcode_restore_undo(void); size_t get_allocated_undo_memory_size(void); void free_undo_memory(void); #endif /* undo_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/variable.c000644 000765 000024 00000023405 12606024314 022560 0ustar00chrenderstaff000000 000000 /* variable.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef variable_c_INCLUDED #define variable_c_INCLUDED #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "fizmo.h" #include "stack.h" #include "zpu.h" #include "config.h" #include "../locales/libfizmo_locales.h" /*@dependent@*/ uint16_t *local_variable_storage_index; uint8_t number_of_locals_active; void set_variable(uint8_t variable_number, uint16_t data, bool keep_stack_index) { if (variable_number == 0) { if (stack_words_from_active_routine == MAXIMUM_STACK_ENTRIES_PER_ROUTINE) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_MAXIMUM_NUMBER_OF_STACK_ENTRIES_PER_ROUTINE_P0D_EXCEEDED, -1, (long int)MAXIMUM_STACK_ENTRIES_PER_ROUTINE); if (bool_equal(keep_stack_index, true)) { z_stack_pull_word(); z_stack_push_word(data); } else { z_stack_push_word(data); stack_words_from_active_routine++; } } else if (variable_number < 0x10) { if (variable_number > number_of_locals_active) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_TRYING_TO_STORE_VARIABLE_L_P0D_BUT_ONLY_P1D_VARIABLES_ACTIVE, -1, (long int)variable_number-1, (long int)number_of_locals_active); variable_number--; TRACE_LOG("Storing %x in L0%x.\n", data, variable_number); local_variable_storage_index[variable_number] = data; } else { variable_number -= 0x10; TRACE_LOG("Setting global variable G%02x to %x.\n", variable_number, data); store_word( /*@-nullderef@*/ active_z_story->global_variables /*@-nullderef@*/ +(variable_number*2), data); } } uint16_t get_variable(uint8_t variable_number, bool keep_stack_index) { uint16_t result; if (variable_number == 0) { if (stack_words_from_active_routine == 0) { if (bool_equal(skip_active_routines_stack_check_warning, false)) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_NOT_ENOUGH_STACK_WORDS_FROM_LOCAL_ROUTINE_ON_STACK, -1); else return 0; } if (bool_equal(keep_stack_index, true)) result = z_stack_peek_word(); else { result = z_stack_pull_word(); stack_words_from_active_routine--; } return result; } else if (variable_number < 0x10) { if (variable_number > number_of_locals_active) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_TRYING_TO_STORE_VARIABLE_L_P0D_BUT_ONLY_P1D_VARIABLES_ACTIVE, -1, (long int)variable_number-1, (long int)number_of_locals_active); variable_number--; result = local_variable_storage_index[variable_number]; TRACE_LOG("Reading %x from L0%x.\n", result, variable_number); return result; } else { variable_number -= 0x10; result = load_word(active_z_story->global_variables+(variable_number*2)); TRACE_LOG("Reading %x from global variable G%02x.\n", result, variable_number); return result; } } void opcode_pull(void) { uint16_t value = 0; uint16_t spare_slots; uint8_t *user_stack; TRACE_LOG("Opcode: PULL.\n"); if (ver == 6) (void)read_z_result_variable(); if ( (ver != 6) || (number_of_operands < 1) ) { if ( (stack_words_from_active_routine == 0) && (bool_equal(skip_active_routines_stack_check_warning, false)) ) { i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_NOT_ENOUGH_STACK_WORDS_FROM_LOCAL_ROUTINE_ON_STACK, -1); } else { TRACE_LOG("Pulling to variable %x.\n", op[0]); value = z_stack_pull_word(); stack_words_from_active_routine--; } } else { user_stack = z_mem + (uint16_t)op[0]; spare_slots = load_word(user_stack); spare_slots++; value = load_word(user_stack + spare_slots); store_word(user_stack, spare_slots); } if (ver == 6) set_variable(z_res_var, value, true); else set_variable(op[0], value, true); } void opcode_push(void) { TRACE_LOG("Opcode: PUSH.\n"); TRACE_LOG("Pushing %x to stack.\n", op[0]); if (stack_words_from_active_routine == MAXIMUM_STACK_ENTRIES_PER_ROUTINE) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_MAXIMUM_NUMBER_OF_STACK_ENTRIES_PER_ROUTINE_P0D_EXCEEDED, -1, (long int)MAXIMUM_STACK_ENTRIES_PER_ROUTINE); z_stack_push_word(op[0]); stack_words_from_active_routine++; } void opcode_push_user_stack(void) { uint16_t spare_slots; uint8_t *user_stack; TRACE_LOG("Opcode: PUSH_USER_STACK.\n"); (void)read_z_result_variable(); user_stack = z_mem + (uint16_t)op[1]; if ((spare_slots = load_word(user_stack)) > 0) { store_word(user_stack + spare_slots, (uint16_t)op[0]); spare_slots--; store_word(user_stack, spare_slots); evaluate_branch((uint8_t)1); } else { evaluate_branch((uint8_t)0); } } void opcode_store(void) { TRACE_LOG("Opcode: STORE.\n"); TRACE_LOG("Writing %x to variable %x.\n", op[1], op[0]); set_variable(op[0], op[1], true); } void opcode_storew(void) { uint8_t *address = z_mem + (uint16_t)(op[0] + ((int16_t)op[1])*2); TRACE_LOG("Opcode: STOREW.\n"); if (address > active_z_story->dynamic_memory_end) { TRACE_LOG("Trying to storew to %x which is above dynamic memory.\n", address); } else { TRACE_LOG("Storing %x to %x.\n", op[2], address); store_word(z_mem + (uint16_t)(op[0] + ((int16_t)op[1])*2), op[2]); } } void opcode_loadw(void) { uint16_t value; uint8_t *address = z_mem + (uint16_t)(op[0] + ((int16_t)op[1])*2); TRACE_LOG("Opcode: LOADW.\n"); read_z_result_variable(); if (address > active_z_story->static_memory_end) { TRACE_LOG("ERROR: Trying to loadw from %x which is above static memory.\n", address); set_variable(z_res_var, 0, false); } else { value = load_word(address); TRACE_LOG("Loading %x from %x var %x.\n", value, address, z_res_var); set_variable(z_res_var, value, false); } } void opcode_storeb(void) { uint8_t *address = z_mem + (uint16_t)(op[0] + ((int16_t)op[1])); TRACE_LOG("Opcode: STOREB.\n"); if (address > active_z_story->dynamic_memory_end) { TRACE_LOG("Trying to storeb to %x which is above dynamic memory.", address); } else { TRACE_LOG("Storing %x to %x.\n", op[2], address); *(z_mem + (uint16_t)(op[0] + (int16_t)op[1])) = op[2]; } } void opcode_loadb(void) { uint8_t *address = z_mem + (uint16_t)(op[0] + (int16_t)op[1]); TRACE_LOG("Opcode: LOADB.\n"); read_z_result_variable(); if (address > active_z_story->static_memory_end) { TRACE_LOG("Static memory end: %x.\n", active_z_story->static_memory_end); TRACE_LOG("Trying to loadb from %x which is above static memory.\n", address); set_variable(z_res_var, 0, false); } else { TRACE_LOG("Loading from %x to var %x.\n", *address, z_res_var); set_variable(z_res_var, *address, false); } } void opcode_inc(void) { int16_t value; TRACE_LOG("Opcode: INC.\n"); value = (int16_t)get_variable(op[0], false); TRACE_LOG("Incrementing variable %d from %d to %d.\n", op[0], value, value+1); set_variable(op[0], (uint16_t)(value + 1), false); } void opcode_dec(void) { int16_t value; TRACE_LOG("Opcode: DEC.\n"); value = (int16_t)get_variable(op[0], false); TRACE_LOG("Decrementing variable %d from %d to %d.\n", op[0], value, value-1); set_variable(op[0], (uint16_t)(value - 1), false); } void opcode_load(void) { TRACE_LOG("Opcode: LOAD.\n"); read_z_result_variable(); TRACE_LOG("Loading variable with code %d to variable with code %d.\n", op[0], z_res_var); set_variable(z_res_var, get_variable(op[0], true), false); } void opcode_pop(void) { TRACE_LOG("Opcode: POP.\n"); if (stack_words_from_active_routine == 0) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_NOT_ENOUGH_STACK_WORDS_FROM_LOCAL_ROUTINE_ON_STACK, -1); (void)z_stack_pull_word(); stack_words_from_active_routine--; } void opcode_check_arg_count(void) { TRACE_LOG("Opcode: CHECK_ARG_COUNT.\n"); evaluate_branch( (uint8_t) ( ((int16_t)op[0]) <= ((int16_t)number_of_locals_from_function_call) ? 1 : 0) ); } #endif /* variable_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/variable.h000644 000765 000024 00000004402 12606024314 022561 0ustar00chrenderstaff000000 000000 /* variable.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef variable_h_INCLUDED #define variable_h_INCLUDED #include #ifndef variable_c_INCLUDED /*@dependent@*/ extern uint16_t *local_variable_storage_index; extern uint8_t number_of_locals_active; #endif /* variable_c_INCLUDED */ void set_variable(uint8_t variable_number, uint16_t data, bool keep_stack_index); uint16_t get_variable(uint8_t variable_number, bool keep_stack_index); void opcode_pull(void); void opcode_push(void); void opcode_push_user_stack(void); void opcode_loadb(void); void opcode_loadw(void); void opcode_storew(void); void opcode_store(void); void opcode_inc(void); void opcode_storeb(void); void opcode_dec(void); void opcode_load(void); void opcode_pop(void); void opcode_check_arg_count(void); #endif /* variable_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/wordwrap.c000644 000765 000024 00000053360 12606024314 022643 0ustar00chrenderstaff000000 000000 /* wordwrap.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef wordwrap_c_INCLUDED #define wordwrap_c_INCLUDED // The wordwrapper wraps words by using a space character as seperator only. // The details of word-wrapping are not specified in the Z-Machine // specification, so I'll not designate other characters than the space // as seperators. #include #include #include "../tools/tracelog.h" #include "../tools/types.h" #include "../tools/i18n.h" #include "../tools/z_ucs.h" #include "../locales/libfizmo_locales.h" #include "wordwrap.h" #include "fizmo.h" #include "hyphenation.h" // static z_ucs word_split_chars[] = { // Z_UCS_SPACE, Z_UCS_MINUS, Z_UCS_NEWLINE, Z_UCS_DOT, (z_ucs)',', // (z_ucs)'"', 0 }; // The "word_split_chars" will cause a word to be split, even if no // additional space is present. For example "foo bar", "foo-bar", // "foo--bar", "foo\nbar", "foo.bar", "foo,bar", and foo"bar are // all split before "bar". //static z_ucs word_split_chars[] = { // Z_UCS_SPACE, Z_UCS_MINUS, Z_UCS_NEWLINE, Z_UCS_DOT, (z_ucs)',', // (z_ucs)'"', 0 }; // The "word_interpunctation_chars" designate chars which may be // repeatatedly end a word. For example "foo--bar", "foo---bar" // and "foo...bar" are all split before "bar". //static z_ucs word_interpunctation_chars[] = { // Z_UCS_MINUS, Z_UCS_DOT, 0 }; static z_ucs word_split_chars[] = { Z_UCS_SPACE, Z_UCS_NEWLINE, 0 }; WORDWRAP *wordwrap_new_wrapper(size_t line_length, void (*wrapped_text_output_destination)(z_ucs *output, void *parameter), void *destination_parameter, bool add_newline_after_full_line, int left_side_padding, bool flush_after_newline, bool enable_hyphenation) { WORDWRAP *result = fizmo_malloc(sizeof(WORDWRAP)); int i; result->line_length = line_length; result->wrapped_text_output_destination = wrapped_text_output_destination; result->destination_parameter = destination_parameter; result->add_newline_after_full_line = add_newline_after_full_line; result->left_side_padding = left_side_padding; if (left_side_padding > 0) { result->padding_buffer = fizmo_malloc((left_side_padding + 1) * sizeof(z_ucs)); for (i=0; ipadding_buffer[i] = Z_UCS_SPACE; result->padding_buffer[i] = 0; } else result->padding_buffer = NULL; result->flush_after_newline = flush_after_newline; result->enable_hyphenation = enable_hyphenation; result->input_buffer_size = line_length * 4; result->input_buffer = fizmo_malloc(sizeof(z_ucs)*result->input_buffer_size); result->input_index = 0; result->chars_already_on_line = 0; result->metadata = NULL; result->metadata_size = 0; result->metadata_index = 0; return result; } void wordwrap_destroy_wrapper(WORDWRAP *wrapper_to_destroy) { free(wrapper_to_destroy->input_buffer); if (wrapper_to_destroy->padding_buffer != NULL) free(wrapper_to_destroy->padding_buffer); if (wrapper_to_destroy->metadata != NULL) free(wrapper_to_destroy->metadata); free(wrapper_to_destroy); } static void output_buffer(WORDWRAP *wrapper, z_ucs *buffer_start, int *metadata_offset) { long index, end_index, next_index; struct wordwrap_metadata *metadata_entry; z_ucs buf; TRACE_LOG("Output buffer: \""); TRACE_LOG_Z_UCS(buffer_start); TRACE_LOG("\""); if (*metadata_offset == wrapper->metadata_index) { wrapper->wrapped_text_output_destination( buffer_start, wrapper->destination_parameter); } else { index = buffer_start - wrapper->input_buffer; end_index = index + z_ucs_len(buffer_start); while (index < end_index) { TRACE_LOG("index: %ld, end_index: %ld.\n", index, end_index); TRACE_LOG("metadata-offset: %d.\n", *metadata_offset); if (*metadata_offset < wrapper->metadata_index) { TRACE_LOG("next metadata-index: %ld.\n", wrapper->metadata[*metadata_offset].output_index); while ( (*metadata_offset < wrapper->metadata_index) && (wrapper->metadata[*metadata_offset].output_index == index) ) { metadata_entry = &wrapper->metadata[*metadata_offset]; TRACE_LOG("Output metadata prm %d at %ld.\n", metadata_entry->int_parameter, index); metadata_entry->metadata_output_function( metadata_entry->ptr_parameter, metadata_entry->int_parameter); (*metadata_offset)++; } } next_index = ( (*metadata_offset < wrapper->metadata_index) && (wrapper->metadata[*metadata_offset].output_index < end_index) ) ? wrapper->metadata[*metadata_offset].output_index : end_index; TRACE_LOG("next-index: %ld.\n", next_index); buf = wrapper->input_buffer[next_index]; wrapper->input_buffer[next_index] = 0; wrapper->wrapped_text_output_destination( wrapper->input_buffer + index, wrapper->destination_parameter); wrapper->input_buffer[next_index] = buf; index = next_index; } } } static void flush_input_buffer(WORDWRAP *wrapper, bool force_flush) { z_ucs *index = NULL, *ptr, *hyphenated_word, *last_hyphen, *word_start; z_ucs *word_end, *input = wrapper->input_buffer, *first_space_or_newline; z_ucs buf=0, buf2; // buf initialized to avoid compiler warning z_ucs buf3 = '-'; // buf3 initialized to avoid compiler warning long len, chars_sent = 0; int metadata_offset = 0, i, chars_left_on_line; struct wordwrap_metadata *metadata_entry; int current_line_length = wrapper->line_length - wrapper->chars_already_on_line; input[wrapper->input_index] = 0; TRACE_LOG("input-index: %ld\n", wrapper->input_index); TRACE_LOG("metadata stored: %d.\n", wrapper->metadata_index); for (;;) { TRACE_LOG("Processing flush for line-length %d, already in line: %d.\n", current_line_length, wrapper->chars_already_on_line); if (*input != 0) { TRACE_LOG("flush wordwrap-buffer at %p: \"", input); TRACE_LOG_Z_UCS(input); TRACE_LOG("\".\n"); } if ((index = z_ucs_chr(input, Z_UCS_NEWLINE)) != NULL) { len = index - input; } else { len = z_ucs_len(input); TRACE_LOG("len:%ld, force:%d.\n", len, force_flush); if (len == 0) { if (force_flush == true) { // Force flush metadata behind end of output. while (metadata_offset < wrapper->metadata_index) { TRACE_LOG("flush post-output metadata at: %ld.\n", wrapper->metadata[metadata_offset].output_index); metadata_entry = &wrapper->metadata[metadata_offset]; TRACE_LOG("Output metadata prm %d.\n", metadata_entry->int_parameter); metadata_entry->metadata_output_function( metadata_entry->ptr_parameter, metadata_entry->int_parameter); metadata_offset++; } } wrapper->chars_already_on_line = 0; break; } if (len <= current_line_length) { if (force_flush == false) { // We're quitting on len == current_line_length since we can only // determine wether we can break cleanly is if a space follows // immediately after the last char. wrapper->chars_already_on_line = 0; break; } wrapper->chars_already_on_line = len; } // FIXME: Add break in case hyph is enabled and a word longer than // the line is not terminated with a space. } TRACE_LOG("wordwrap-flush-len: %ld.\n", len); if (len <= current_line_length) { // Line fits on screen. TRACE_LOG("Line fits on screen.\n"); if (index != NULL) { index++; len++; buf = *index; *index = 0; } chars_sent += len; output_buffer(wrapper, input, &metadata_offset); if (wrapper->left_side_padding != 0) wrapper->wrapped_text_output_destination( wrapper->padding_buffer, wrapper->destination_parameter); if (index != NULL) *index = buf; else { //wrapper->input_index = 0; break; } } else if (wrapper->enable_hyphenation == true) { // Line does not fit on screen and hyphenation is enabled, so we'll // try to hyphenate. // In this section we'll set "index" to the point where the line // should be split and "last_hyphen" to the word position where // hyphenation should take place -- if possible, otherwise NULL. // In case hyphenation is active we're looking at the word overruning // the line end. It has to be completed in order to make hyphenation // work. TRACE_LOG("to wrap/hyphenate (force:%d) to length %d : \"", force_flush, current_line_length); TRACE_LOG_Z_UCS(input); TRACE_LOG("\".\n"); // Get the char at the current line end. if (input[current_line_length] == Z_UCS_SPACE) { // Fine, we can wrap right here at this space. index = input + current_line_length; last_hyphen = NULL; } else { if ( ((first_space_or_newline = z_ucs_chrs( input + current_line_length, word_split_chars)) == NULL) && (force_flush == false) ) { // In case we can't find any space the word may not have been // completely written to the buffer. Wait until we've got more // input. TRACE_LOG("No word end found.\n"); break; } else { if (first_space_or_newline == NULL) { word_end = input + current_line_length; while (*(word_end + 1) != 0) { word_end++; } } else { // We've found a space behind the overrunning word so we're // able to correctly split the current line. word_end = first_space_or_newline - 1; } // Before hyphentation, check for dashes inside the last word. // Example: "first-class car", where the word end we've now // found is between "first-class" and "car". word_start = word_end - 1; while (word_start > input) { TRACE_LOG("examining word end: \"%c\".\n", *word_start); if (*word_start == Z_UCS_MINUS) { if (input + current_line_length > word_start) { // Found a dash to break on word_start++; break; } } else if (*word_start == Z_UCS_SPACE) { // We just passed the word-start. word_start++; break; } word_start--; } // FIXME: Do we need a space left from here? TRACE_LOG("word-start: %c\n", *word_start); TRACE_LOG("word-end: %c\n", *word_end); last_hyphen = NULL; if (word_end >= input + current_line_length) { // We only have to hyphenate in case the line is still too long. buf = *(word_end+ 1); *(word_end+ 1) = 0; TRACE_LOG("buffer terminated at word end: \""); TRACE_LOG_Z_UCS(input); TRACE_LOG("\".\n"); index = word_start; if ((hyphenated_word = hyphenate(index)) == NULL) { TRACE_LOG("Error hyphenating.\n"); i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_UNKNOWN_ERROR_CASE, -1); } TRACE_LOG("hyphenated word: \""); TRACE_LOG_Z_UCS(hyphenated_word); TRACE_LOG("\".\n"); *(word_end + 1) = buf; chars_left_on_line = current_line_length - (index - input); TRACE_LOG("chars left on line: %d\n", chars_left_on_line); ptr = hyphenated_word; while ((chars_left_on_line > 0) && (*ptr != 0)) { TRACE_LOG("Testing %c for soft-hyphen.\n", *ptr); if (*ptr == Z_UCS_SOFT_HYPEN) { last_hyphen = input + (current_line_length - chars_left_on_line); } else { chars_left_on_line--; } ptr++; } free(hyphenated_word); if (last_hyphen != NULL) { TRACE_LOG("Last hyphen at %ld.\n", last_hyphen - input); buf3 = *last_hyphen; *last_hyphen = '-'; index = last_hyphen + 1; } else { // We couldn't find a possibility to hyphenate the last // word in the line. TRACE_LOG("No hyphen found.\n"); if (index > input) { if (*(index-1) != Z_UCS_MINUS) { // In case the char before the last word is not a dash, // we'll skip the space before this word by moving back // the index by one. index--; } } else { // In case the current word is so long that it doesn't fit // on the line -- this may be the case if we're supposed // to display ASCII art and the linesize is to short -- we // have to advance the index to the line end. TRACE_LOG("This is the first word in the line, hard break.\n"); index = input + current_line_length; } } } else { index = word_end; last_hyphen = NULL; } } } // Output everything before *index and a newline after. TRACE_LOG("Input (%p, %p): \"", input, index); TRACE_LOG_Z_UCS(input); TRACE_LOG("\".\n"); buf2 = *index; *index = Z_UCS_NEWLINE; buf = *(index + 1); *(index + 1) = 0; output_buffer(wrapper, input, &metadata_offset); if (wrapper->left_side_padding != 0) wrapper->wrapped_text_output_destination( wrapper->padding_buffer, wrapper->destination_parameter); *(index + 1) = buf; *index = buf2; if (last_hyphen != NULL) { *last_hyphen = buf3; index--; } // if (*index == Z_UCS_SPACE) { while (*index == Z_UCS_SPACE) { index++; } len = index - input; chars_sent += len; TRACE_LOG("Processed %ld chars in hyphenated wordwrap.\n", len); } else { // Line won't fit completely and hyphenation is disabled. // Find the end of the last word or dash in it before the end of line // (opposed to looking at the word overring the line end in case of // hyphentation). TRACE_LOG("linelength: %d.\n", current_line_length); ptr = input + current_line_length - 1; while (ptr > input) { if (*ptr == Z_UCS_SPACE) { index = ptr; break; } else if (*ptr == Z_UCS_MINUS) { index = ptr + 1; break; } ptr--; } if (ptr == input) { // We couldn't find any space or dash in the whole line, so we're // forced to flush everything. index = input + current_line_length; } buf = *index; *index = Z_UCS_NEWLINE; buf2 = *(index+1); *(index+1) = 0; TRACE_LOG("Output from %p.\n", input); output_buffer(wrapper, input, &metadata_offset); if (wrapper->left_side_padding != 0) wrapper->wrapped_text_output_destination( wrapper->padding_buffer, wrapper->destination_parameter); *(index+1) = buf2; *index = buf; //if (*index == Z_UCS_SPACE) { while (*index == Z_UCS_SPACE) { index++; } len = index - input; chars_sent += len; } TRACE_LOG("len-after: %ld.\n", len); if (index != NULL) { TRACE_LOG("index: \""); TRACE_LOG_Z_UCS(index); TRACE_LOG("\".\n"); } input += len; current_line_length = wrapper->line_length; } TRACE_LOG("chars sent: %ld, moving: %ld.\n", chars_sent, wrapper->input_index - chars_sent + 1); TRACE_LOG("chars_already_on_line: %d\n", wrapper->chars_already_on_line); index = z_ucs_rchr(wrapper->input_buffer, Z_UCS_NEWLINE); memmove( wrapper->input_buffer, input, sizeof(z_ucs) * (wrapper->input_index - chars_sent + 1)); wrapper->input_index -= chars_sent; if (metadata_offset > 0) { memmove( wrapper->metadata, wrapper->metadata + metadata_offset, sizeof(struct wordwrap_metadata) * (wrapper->metadata_index - metadata_offset)); wrapper->metadata_index -= metadata_offset; TRACE_LOG("metadata stored: %d.\n", wrapper->metadata_index); } for (i=0; imetadata_index; i++) wrapper->metadata[i].output_index -= chars_sent; } void wordwrap_wrap_z_ucs(WORDWRAP *wrapper, z_ucs *input) { size_t len, chars_to_copy, space_in_buffer; len = z_ucs_len(input); while (len > 0) { space_in_buffer = wrapper->input_buffer_size - 1 - wrapper->input_index; chars_to_copy = len > space_in_buffer ? space_in_buffer : len; TRACE_LOG("chars_to_copy: %d, len:%d, space_in_buffer:%d.\n", chars_to_copy, len, space_in_buffer); z_ucs_ncpy( wrapper->input_buffer + wrapper->input_index, input, chars_to_copy); wrapper->input_index += chars_to_copy; wrapper->input_buffer[wrapper->input_index] = 0; input += chars_to_copy; len -= chars_to_copy; TRACE_LOG("chars copied: %d, chars left: %ld.\n",chars_to_copy,(long)len); if ( (wrapper->input_index == wrapper->input_buffer_size - 1) || ( (wrapper->flush_after_newline == true) && ( (wrapper->input_index + wrapper->chars_already_on_line > wrapper->line_length) || (z_ucs_chr(wrapper->input_buffer, Z_UCS_NEWLINE) != NULL) ) ) ) { flush_input_buffer(wrapper, false); //FIXME: Increase buffer size in case flush not possible. } } } void wordwrap_flush_output(WORDWRAP *wrapper) { flush_input_buffer(wrapper, true); } void wordwrap_insert_metadata(WORDWRAP *wrapper, void (*metadata_output)(void *ptr_parameter, uint32_t int_parameter), void *ptr_parameter, uint32_t int_parameter) { size_t bytes_to_allocate; // Before adding new metadata, check if we need to allocate more space. if (wrapper->metadata_index == wrapper->metadata_size) { bytes_to_allocate = (size_t)( (wrapper->metadata_size + 32) * sizeof(struct wordwrap_metadata)); TRACE_LOG("Allocating %d bytes for wordwrap-metadata.\n", (int)bytes_to_allocate); wrapper->metadata = (struct wordwrap_metadata*)fizmo_realloc( wrapper->metadata, bytes_to_allocate); wrapper->metadata_size += 32; TRACE_LOG("Wordwrap-metadata at %p.\n", wrapper->metadata); } TRACE_LOG("Current wordwrap-metadata-index is %d.\n", wrapper->metadata_index); TRACE_LOG("Current wordwrap-metadata-entry at %p.\n", &(wrapper->metadata[wrapper->metadata_index])); wrapper->metadata[wrapper->metadata_index].output_index = wrapper->input_index; wrapper->metadata[wrapper->metadata_index].metadata_output_function = metadata_output; wrapper->metadata[wrapper->metadata_index].ptr_parameter = ptr_parameter; wrapper->metadata[wrapper->metadata_index].int_parameter = int_parameter; TRACE_LOG("Added new metadata entry at %ld with int-parameter %ld, ptr:%p.\n", wrapper->input_index, (long int)int_parameter, ptr_parameter); wrapper->metadata_index++; } void wordwrap_adjust_line_length(WORDWRAP *wrapper, size_t new_line_length) { wrapper->line_length = new_line_length; } void wordwrap_remove_chars(WORDWRAP *wrapper, size_t num_chars_to_remove) { if ((long)num_chars_to_remove > wrapper->input_index) { wrapper->input_index = 0; } else { wrapper->input_index -= num_chars_to_remove; } while ( (wrapper->metadata_index > 0) && (wrapper->metadata[wrapper->metadata_index].output_index >= wrapper->input_index) ) { wrapper->metadata_index--; } } void wordwrap_set_line_index(WORDWRAP *wrapper, int new_line_index) { TRACE_LOG("Setting chars on line to %d.\n", new_line_index); wrapper->chars_already_on_line = new_line_index; } #endif /* wordwrap_c_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/wordwrap.h000644 000765 000024 00000007015 12606024314 022644 0ustar00chrenderstaff000000 000000 /* wordwrap.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef wordwrap_h_INCLUDED #define wordwrap_h_INCLUDED #include "../tools/types.h" struct wordwrap_metadata { long output_index; void (*metadata_output_function)(void *ptr_parameter, uint32_t int_parameter); void *ptr_parameter; uint32_t int_parameter; }; typedef struct { int line_length; void (*wrapped_text_output_destination)(z_ucs *output, void *parameter); void *destination_parameter; bool add_newline_after_full_line; int left_side_padding; bool flush_after_newline; bool enable_hyphenation; z_ucs *input_buffer; long input_buffer_size; long input_index; long chars_already_on_line; struct wordwrap_metadata *metadata; int metadata_size; int metadata_index; z_ucs *padding_buffer; /* void (*padding_starts)(); void (*padding_ends)(); void *destination_parameter; z_ucs *output_buffer; z_ucs *output_buffer_index; size_t output_buffer_size; bool add_newline_after_full_line; int left_side_padding; bool newline_was_inserted; bool last_line_was_completely_filled; bool flush_after_newline; */ } WORDWRAP; WORDWRAP *wordwrap_new_wrapper(size_t line_length, void (*wrapped_text_output_destination)(z_ucs *output, void *parameter), void *destination_parameter, bool add_newline_after_full_line, int left_side_padding, bool flush_after_newline, bool enable_hyphenation); void wordwrap_destroy_wrapper(WORDWRAP *wrapper_to_destroy); void wordwrap_wrap_z_ucs(WORDWRAP *wrapper, z_ucs *input); void wordwrap_flush_output(WORDWRAP *wrapper); void wordwrap_insert_metadata(WORDWRAP *wrapper, void (*metadata_output)(void *ptr_parameter, uint32_t int_parameter), void *ptr_parameter, uint32_t int_parameter); void wordwrap_set_line_index(WORDWRAP *wrapper, int new_line_index); //void wordwrap_output_left_padding(WORDWRAP *wrapper); void wordwrap_adjust_line_length(WORDWRAP *wrapper, size_t new_line_length); // To remove chars from the end of the current(!) line: void wordwrap_remove_chars(WORDWRAP *wrapper, size_t num_chars_to_remove); #endif /* wordwrap_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/interpreter/zpu.c000644 000765 000024 00000066417 12606024314 021623 0ustar00chrenderstaff000000 000000 /* zpu.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef zpu_c_INCLUDED #define zpu_c_INCLUDED #include "../tools/tracelog.h" #include "../tools/i18n.h" #include "zpu.h" #include "fizmo.h" #include "savegame.h" #include "misc.h" #include "routine.h" #include "variable.h" #include "property.h" #include "object.h" #include "mathemat.h" #include "text.h" #include "streams.h" #include "output.h" #include "sound.h" #include "stack.h" #include "table.h" #include "undo.h" #include "../locales/libfizmo_locales.h" #ifdef ENABLE_DEBUGGER #include "debugger.h" #endif // ENABLE_DEBUGGER uint8_t *z_mem; /*@dependent@*/ uint8_t *pc; static uint8_t z_instr; static uint8_t z_instr_form; uint8_t number_of_operands; uint16_t op[8]; uint8_t z_res_var; int terminate_interpreter; uint8_t number_of_locals_from_function_call; uint8_t *current_instruction_location; int zpu_step_number = 0; //uint16_t start_interrupt_routine = 0; typedef void /*@null@*/ (*z_opcode_function)(void); static z_opcode_function z_opcode_functions[0x7d]; void dump_locals() { uint8_t i; TRACE_LOG("Locals"); if (number_of_locals_active != 0) { TRACE_LOG(" (at stack index %ld): ", (long int)(local_variable_storage_index - z_stack)); for (i=0; iversion >= 5)) { TRACE_LOG("Instruction has extended form.\n"); *z_instr_form = INSTRUCTION_EXT; *z_instr = *((*instr_ptr)++); operand_types = (*((*instr_ptr)++) << 24) | 0xffffff; } else { TRACE_LOG("Instruction has short form.\n"); *z_instr = instrbyte0 & 0xf; if ((instrbyte0 & 0x30) == 0x30) { *z_instr_form = INSTRUCTION_0OP; operand_types = 0xffffffff; } else { *z_instr_form = INSTRUCTION_1OP; operand_types = (uint32_t)(0x3fffffff | ((instrbyte0 & 0x30) << 26)); } } } else { TRACE_LOG("Instruction has long form.\n"); // 4.3.2 In long form the operand count is always 2OP. The opcode // number is given in the bottom 5 bits. *z_instr_form = INSTRUCTION_2OP; *z_instr = instrbyte0 & 0x1f; // 4.4.2 In long form, bit 6 of the opcode gives the type of the // first operand, bit 5 of the second. A value of 0 means a small // constant and 1 means a variable. (If a 2OP instruction needs a // large constant as operand, then it should be assembled in // variable rather than long form.) if ((instrbyte0 & 0x40) != 0) operand_types = 0x8fffffff; else operand_types = 0x4fffffff; if ((instrbyte0 & 0x20) != 0) operand_types |= 0x20000000; else operand_types |= 0x10000000; } // Now, somewhere in the if/else lines above, the instruction_form might // not have been set. Just to be sure, we check that here. if (*z_instr_form == INSTRUCTION_UNDEF) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_INSTRUCTION_FORM_NOT_INITIALIZED, -1); // 4.4.3: Example: $$00101111 means large constant followed by // variable (and no third or fourth opcode). TRACE_LOG("Parsing Operands by code %x.\n", (unsigned)operand_types); operand_index = 0; while ((current_operand_type = (operand_types &0xc0000000) >> 30) != 0x3) { TRACE_LOG("Current Operand code: %x.\n", current_operand_type); //current_instruction.operand_type[operand_index] = current_operand; if (current_operand_type == OPERAND_TYPE_LARGE_CONSTANT) { TRACE_LOG("Reading large constant.\n"); current_operand_value = (**instr_ptr << 8); current_operand_value |= *(++(*instr_ptr)); } else if (current_operand_type == OPERAND_TYPE_SMALL_CONSTANT) { TRACE_LOG("Reading small constant.\n"); current_operand_value = **instr_ptr; } else if (current_operand_type == OPERAND_TYPE_VARIABLE) { variable_number = **instr_ptr; TRACE_LOG("Reading variable with code %x.\n", variable_number); current_operand_value = get_variable(variable_number, false); } else i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_UNKNOWN_OPERAND_TYPE_P0D, -1, (long int)current_operand_type); (*instr_ptr)++; TRACE_LOG("op[%d] = %x.\n", operand_index, current_operand_value); op[operand_index++] = current_operand_value; operand_types <<= 2; } TRACE_LOG("Opcode code: %x.\n", *z_instr); *result_number_of_operands = operand_index; } // This function is not called directly, but invoked from a call // to "interpret_from_address", "interpret_from_call" or from // "interpret_from_call_without_result". static void interpret(/*@null@*/ int frame_index_to_quit_on) { z_opcode_function current_z_opcode_function; uint16_t start_interrupt_routine; //uint16_t start_interrupt_routine_buf; //int i; /* // The lower four "old.*" variables are used to store the state of the // interpreter before entering this function. This state is restored when // the function ends in order to allow the "parent interpreter level" to // continue correctly. uint8_t old_number_of_operands; uint16_t old_op[7]; uint8_t old_z_instr; uint8_t old_z_instr_form; // Store the current interpreter's status. old_z_instr = z_instr; old_z_instr_form = z_instr_form; for (i=0; i<7; i++) old_op[i] = op[i]; old_number_of_operands = number_of_operands; number_of_operands = 0; */ if (active_z_story == NULL) return; TRACE_LOG("Starting interpreting at %lx.\n", (unsigned long int)(pc - z_mem)); if ((frame_index_to_quit_on != -1) && (frame_index_to_quit_on >= number_of_stack_frames)) terminate_interpreter = INTERPRETER_QUIT_ALL; while (terminate_interpreter == INTERPRETER_QUIT_NONE) { /* if (start_interrupt_routine != 0) { TRACE_LOG("\nInvoking sound interrupt routine at %x.\n", get_packed_routinecall_address(start_interrupt_routine)); start_interrupt_routine_buf = start_interrupt_routine; start_interrupt_routine = 0; interpret_from_call_without_result( get_packed_routinecall_address(start_interrupt_routine_buf)); } */ if (active_sound_interface != NULL) { if ((start_interrupt_routine = active_sound_interface->get_next_sound_end_routine()) != 0) { TRACE_LOG("\nInvoking sound interrupt routine at %x.\n", get_packed_routinecall_address(start_interrupt_routine)); interpret_from_call_without_result( get_packed_routinecall_address(start_interrupt_routine)); } } TRACE_LOG("\nPC: %lx.\n", (unsigned long int)(pc - z_mem)); #ifdef ENABLE_DEBUGGER do_breakpoint_actions(); #endif // ENABLE_DEBUGGER #ifdef ENABLE_TRACING TRACE_LOG("Step #%d.\n", zpu_step_number); dump_locals(); dump_stack(); //dump_stack_to_tracelog(); #endif /* ENABLE_TRACING */ zpu_step_number++; // Remember PC for output of warnings and save-on-read. current_instruction_location = pc; parse_opcode( &z_instr, &z_instr_form, &number_of_operands, &pc); current_z_opcode_function = z_opcode_functions[z_instr_form + z_instr]; if (current_z_opcode_function == NULL) i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_OPCODE_P0D_IN_FORM_P1D_NOT_IMPLEMENTED, -1, (long int)z_instr, (long int)z_instr_form); current_z_opcode_function(); if ((frame_index_to_quit_on != -1) && (frame_index_to_quit_on >= number_of_stack_frames)) terminate_interpreter = INTERPRETER_QUIT_ROUTINE; } TRACE_LOG("End of interpreting, PC now at %lx.\n", (unsigned long int)(pc - z_mem)); /* // Restore the interpreter's state as it was before this function was // called. number_of_operands = old_number_of_operands; z_instr = old_z_instr; z_instr_form = old_z_instr_form; for (i=0; i<7; i++) op[i] = old_op[i]; */ // In case we quit because of a return to the routine the interpreter // has called, we don't have to quit the whole program. Thus, we set // the flag to "no-quit" if we "only" quit because of a routine-return. if (terminate_interpreter == INTERPRETER_QUIT_ROUTINE) terminate_interpreter = INTERPRETER_QUIT_NONE; } void interpret_from_address(uint32_t start_address) { store_first_stack_frame(); number_of_stack_frames = 1; pc = z_mem + start_address; interpret(-1); } void interpret_resume() { // Used for restore-on-start. interpret(-1); } void interpret_from_call_without_result(uint32_t routine_address) { call_routine(routine_address, 0, true, 0); interpret(number_of_stack_frames - 1); } uint16_t interpret_from_call(uint32_t routine_address) { call_routine(routine_address, 0, false, 0); interpret(number_of_stack_frames - 1); return get_variable(0, false); } void read_z_result_variable(void) { TRACE_LOG("Reading z_result var from %lx.\n", (unsigned long int)((pc - z_mem))); z_res_var = *(pc++); TRACE_LOG("Current result variable code is %x.\n", z_res_var); } // This function is called with the result of a test and evaluates the // results according to 4.7: Instructions which test a condition are called // "branch" instructions. The branch information is stored in one or two // bytes, indicating what to do with the result of the test. If bit 7 of // the first byte is 0, a branch occurs when the condition was false; if 1, // then branch is on true. If bit 6 is set, then the branch occupies 1 byte // only, and the "offset" is in the range 0 to 63, given in the bottom 6 // bits. If bit 6 is clear, then the offset is a signed 14-bit number // given in bits 0 to 5 of the first byte followed by all 8 of the second. // An offset of 0 means "return false from the current routine", and 1 // means "return true from the current routine". // Otherwise, a branch moves execution to the instruction at address // Address after branch data + Offset - 2. void evaluate_branch(uint8_t test_result) { uint8_t branchbyte0 = *(pc++); int16_t branch_offset; if ((branchbyte0 & 0x40) != 0) { branch_offset = (int16_t)(branchbyte0 & 0x3f); } else { branch_offset = (int16_t)(branchbyte0 & 0x1f); TRACE_LOG("Branch offset is: $%x.\n", branch_offset); /*@-shiftimplementation@*/ branch_offset <<= 8; /*@+shiftimplementation@*/ TRACE_LOG("Branch offset is: $%x.\n", branch_offset); branch_offset |= *(pc++); TRACE_LOG("Branch offset is: $%x.\n", branch_offset); if ((branchbyte0 & 0x20) != 0) { branch_offset |= 0xe000; TRACE_LOG("Branch offset is: $%x.\n", branch_offset); } } TRACE_LOG("Test result is: %d.\n", test_result); TRACE_LOG("Branch offset is: %d.\n", branch_offset); if ((((branchbyte0 & 0x80) != 0) && (test_result == 1)) || (((branchbyte0 & 0x80) == 0) && (test_result == 0))) { // 4.7.1 An offset of 0 means "return false from the current routine", // and 1 means "return true from the current routine". if ((branch_offset & 0xfffe) == 0) { TRACE_LOG("Returning from routine with result: %x\n", branch_offset); return_from_routine(branch_offset); } else { TRACE_LOG("Branching to: %lx.\n", (unsigned long int)(pc + branch_offset - 2 - z_mem)); pc += branch_offset - 2; } } else { TRACE_LOG("Not branching.\n"); } } uint32_t get_packed_routinecall_address(uint16_t packed_address) { // 1.2.3 A packed address specifies where a routine or string begins // in high memory. Given a packed address P, the formula to obtain // the corresponding byte address B is: // 2P Versions 1, 2 and 3 // 4P Versions 4 and 5 // 4P + 8R_O Versions 6 and 7, for routine calls // 4P + 8S_O Versions 6 and 7, for print_paddr // 8P Version 8 if (ver <= 3) return ((uint32_t)packed_address) * 2; else if (ver <= 5) return ((uint32_t)packed_address) * 4; else if (ver <= 7) { // We'll assume "get_packed_routinecall_address" is only called when // active_z_story != NULL. /*@-nullderef@*/ return ((uint32_t)packed_address) * 4 + active_z_story->routine_offset; /*@+nullderef@*/ } else if (ver <= 8) return ((uint32_t)packed_address) * 8; i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_UNKNOWN_STORY_VERSION_P0D, -1, ver); // To make compiler happy. /*@-unreachable@*/ return 0; /*@+unreachable@*/ } uint32_t get_packed_string_address(uint16_t packed_address) { // 1.2.3 A packed address specifies [...] (see get_packed_routine_address()). if (ver <= 3) { TRACE_LOG("Decoded address: %ui.\n", ((unsigned)packed_address) * 2); } else if (ver <= 5) { TRACE_LOG("Decoded address: %ui.\n", ((unsigned)packed_address) * 4); } else if (ver <= 7) { // We'll assume "get_packed_string_address" is only called when // active_z_story != NULL. /*@-nullderef@*/ TRACE_LOG("Decoded address: %ui.\n", (unsigned)((packed_address) * 4 + active_z_story->string_offset)); /*@+nullderef@*/ } else if (ver <= 8) { TRACE_LOG("Decoded address: %ui.\n", ((unsigned)packed_address) * 8); } if (ver <= 3) return ((uint32_t)packed_address) * 2; else if (ver <= 5) return ((uint32_t)packed_address) * 4; else if (ver <= 7) { // We'll assume "get_packed_string_address" is only called when // active_z_story != NULL. /*@-nullderef@*/ return ((uint32_t)packed_address) * 4 + active_z_story->string_offset; /*@+nullderef@*/ } else if (ver <= 8) return ((uint32_t)packed_address) * 8; i18n_translate_and_exit( libfizmo_module_name, i18n_libfizmo_UNKNOWN_STORY_VERSION_P0D, -1, ver); // To make compiler happy. /*@-unreachable@*/ return 0; /*@+unreachable@*/ } uint16_t load_word(uint8_t *ptr) { return (*ptr << 8) | (*(ptr + 1)); } void store_word(uint8_t *dest, uint16_t data) { *dest = data >> 8; *(dest + 1) = data & 0xff; } #ifdef ENABLE_TRACING void dump_dynamic_memory_to_tracelog() { int i = 0; while (i != active_z_story->dynamic_memory_end - z_mem) { TRACE_LOG("Dynamic-Memory-Dump [%05d]: %x\n", i, z_mem[i]); i++; } } #endif // ENABLE_TRACING void init_opcode_functions(void) { z_opcode_functions[INSTRUCTION_2OP + 0x00] = NULL; z_opcode_functions[INSTRUCTION_2OP + 0x01] = &opcode_je; z_opcode_functions[INSTRUCTION_2OP + 0x02] = &opcode_jl; z_opcode_functions[INSTRUCTION_2OP + 0x03] = &opcode_jg; z_opcode_functions[INSTRUCTION_2OP + 0x04] = &opcode_dec_chk; z_opcode_functions[INSTRUCTION_2OP + 0x05] = &opcode_inc_chk; z_opcode_functions[INSTRUCTION_2OP + 0x06] = &opcode_jin; z_opcode_functions[INSTRUCTION_2OP + 0x07] = &opcode_test; z_opcode_functions[INSTRUCTION_2OP + 0x08] = &opcode_or; z_opcode_functions[INSTRUCTION_2OP + 0x09] = &opcode_and; z_opcode_functions[INSTRUCTION_2OP + 0x0a] = &opcode_test_attr; z_opcode_functions[INSTRUCTION_2OP + 0x0b] = &opcode_set_attr; z_opcode_functions[INSTRUCTION_2OP + 0x0c] = &opcode_clear_attr; z_opcode_functions[INSTRUCTION_2OP + 0x0d] = &opcode_store; z_opcode_functions[INSTRUCTION_2OP + 0x0e] = &opcode_insert_obj; z_opcode_functions[INSTRUCTION_2OP + 0x0f] = &opcode_loadw; z_opcode_functions[INSTRUCTION_2OP + 0x10] = &opcode_loadb; z_opcode_functions[INSTRUCTION_2OP + 0x11] = &opcode_get_prop; z_opcode_functions[INSTRUCTION_2OP + 0x12] = &opcode_get_prop_addr; z_opcode_functions[INSTRUCTION_2OP + 0x13] = &opcode_get_next_prop; z_opcode_functions[INSTRUCTION_2OP + 0x14] = &opcode_add; z_opcode_functions[INSTRUCTION_2OP + 0x15] = &opcode_sub; z_opcode_functions[INSTRUCTION_2OP + 0x16] = &opcode_mul; z_opcode_functions[INSTRUCTION_2OP + 0x17] = &opcode_div; z_opcode_functions[INSTRUCTION_2OP + 0x18] = &opcode_mod; z_opcode_functions[INSTRUCTION_2OP + 0x19] = ver >= 4 ? &opcode_call_2s : NULL; z_opcode_functions[INSTRUCTION_2OP + 0x1a] = ver >= 5 ? &opcode_call_2n : NULL; z_opcode_functions[INSTRUCTION_2OP + 0x1b] = ver >= 5 ? ver == 6 ? &opcode_set_colour_fbw : &opcode_set_colour_fb : NULL; z_opcode_functions[INSTRUCTION_2OP + 0x1c] = ver >= 5 ? &opcode_throw: NULL; z_opcode_functions[INSTRUCTION_2OP + 0x1d] = NULL; z_opcode_functions[INSTRUCTION_2OP + 0x1e] = NULL; z_opcode_functions[INSTRUCTION_2OP + 0x1f] = NULL; z_opcode_functions[INSTRUCTION_1OP + 0x00] = &opcode_jz; z_opcode_functions[INSTRUCTION_1OP + 0x01] = &opcode_get_sibling; z_opcode_functions[INSTRUCTION_1OP + 0x02] = &opcode_get_child; z_opcode_functions[INSTRUCTION_1OP + 0x03] = &opcode_get_parent; z_opcode_functions[INSTRUCTION_1OP + 0x04] = &opcode_get_prop_len; z_opcode_functions[INSTRUCTION_1OP + 0x05] = &opcode_inc; z_opcode_functions[INSTRUCTION_1OP + 0x06] = &opcode_dec; z_opcode_functions[INSTRUCTION_1OP + 0x07] = &opcode_print_addr; z_opcode_functions[INSTRUCTION_1OP + 0x08] = ver >= 4 ? &opcode_call_1s : NULL; z_opcode_functions[INSTRUCTION_1OP + 0x09] = &opcode_remove_obj; z_opcode_functions[INSTRUCTION_1OP + 0x0a] = &opcode_print_obj; z_opcode_functions[INSTRUCTION_1OP + 0x0b] = &opcode_ret; z_opcode_functions[INSTRUCTION_1OP + 0x0c] = &opcode_jump; z_opcode_functions[INSTRUCTION_1OP + 0x0d] = &opcode_print_paddr; z_opcode_functions[INSTRUCTION_1OP + 0x0e] = &opcode_load; z_opcode_functions[INSTRUCTION_1OP + 0x0f] = ver >= 5 ? &opcode_call_1n : &opcode_not; z_opcode_functions[INSTRUCTION_0OP + 0x00] = &opcode_rtrue; z_opcode_functions[INSTRUCTION_0OP + 0x01] = &opcode_rfalse; z_opcode_functions[INSTRUCTION_0OP + 0x02] = &opcode_print; z_opcode_functions[INSTRUCTION_0OP + 0x03] = &opcode_print_ret; z_opcode_functions[INSTRUCTION_0OP + 0x04] = &opcode_nop; z_opcode_functions[INSTRUCTION_0OP + 0x05] = (ver <= 4) ? &opcode_save_0op : NULL; z_opcode_functions[INSTRUCTION_0OP + 0x06] = (ver <= 4) ? &opcode_restore_0op : NULL; z_opcode_functions[INSTRUCTION_0OP + 0x07] = &opcode_restart; z_opcode_functions[INSTRUCTION_0OP + 0x08] = &opcode_ret_popped; z_opcode_functions[INSTRUCTION_0OP + 0x09] = ver >= 5 ? &opcode_catch : opcode_pop; z_opcode_functions[INSTRUCTION_0OP + 0x0a] = &opcode_quit; z_opcode_functions[INSTRUCTION_0OP + 0x0b] = &opcode_new_line; z_opcode_functions[INSTRUCTION_0OP + 0x0c] = ver == 3 ? &opcode_show_status : NULL; z_opcode_functions[INSTRUCTION_0OP + 0x0d] = ver >= 3 ? &opcode_verify : NULL; z_opcode_functions[INSTRUCTION_0OP + 0x0e] = NULL; // (Extended opcode) z_opcode_functions[INSTRUCTION_0OP + 0x0f] = ver >= 5 ? &opcode_piracy : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x00] = &opcode_call; z_opcode_functions[INSTRUCTION_VAR + 0x01] = &opcode_storew; z_opcode_functions[INSTRUCTION_VAR + 0x02] = &opcode_storeb; z_opcode_functions[INSTRUCTION_VAR + 0x03] = &opcode_put_prop; z_opcode_functions[INSTRUCTION_VAR + 0x04] = &opcode_read; z_opcode_functions[INSTRUCTION_VAR + 0x05] = &opcode_print_char; z_opcode_functions[INSTRUCTION_VAR + 0x06] = &opcode_print_num; z_opcode_functions[INSTRUCTION_VAR + 0x07] = &opcode_random; z_opcode_functions[INSTRUCTION_VAR + 0x08] = &opcode_push; z_opcode_functions[INSTRUCTION_VAR + 0x09] = &opcode_pull; z_opcode_functions[INSTRUCTION_VAR + 0x0a] = ver >= 3 ? &opcode_split_window : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x0b] = ver >= 3 ? &opcode_set_window : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x0c] = ver >= 4 ? &opcode_call_vs2 : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x0d] = ver >= 4 ? &opcode_erase_window : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x0e] = ver >= 4 ? ver == 6 ? &opcode_erase_line_pixels : &opcode_erase_line_value : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x0f] = ver >= 4 ? &opcode_set_cursor : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x10] = ver >= 4 ? &opcode_get_cursor_array : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x11] = ver >= 4 ? &opcode_set_text_style : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x12] = &opcode_buffer_mode; z_opcode_functions[INSTRUCTION_VAR + 0x13] = &opcode_output_stream; z_opcode_functions[INSTRUCTION_VAR + 0x14] = ver >= 3 ? &opcode_input_stream : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x15] = ver >= 3 ? &opcode_sound_effect : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x16] = &opcode_read_char; z_opcode_functions[INSTRUCTION_VAR + 0x17] = &opcode_scan_table; z_opcode_functions[INSTRUCTION_VAR + 0x18] = ver >= 5 ? &opcode_not : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x19] = &opcode_call_vn; z_opcode_functions[INSTRUCTION_VAR + 0x1a] = ver >= 5 ? &opcode_call_vn2 : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x1b] = ver >= 5 ? &opcode_tokenise : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x1c] = (ver >= 5) ? opcode_encode_text : NULL; z_opcode_functions[INSTRUCTION_VAR + 0x1d] = opcode_copy_table; z_opcode_functions[INSTRUCTION_VAR + 0x1e] = opcode_print_table; z_opcode_functions[INSTRUCTION_VAR + 0x1f] = opcode_check_arg_count; z_opcode_functions[INSTRUCTION_EXT + 0x00] = ver >=5 ? &opcode_save_ext : NULL; z_opcode_functions[INSTRUCTION_EXT + 0x01] = ver >=5 ? &opcode_restore_ext : NULL; z_opcode_functions[INSTRUCTION_EXT + 0x02] = ver >= 5 ? &opcode_log_shift : NULL; z_opcode_functions[INSTRUCTION_EXT + 0x03] = ver >= 5 ? &opcode_art_shift : NULL; z_opcode_functions[INSTRUCTION_EXT + 0x04] = ver >= 4 ? &opcode_set_font : NULL; z_opcode_functions[INSTRUCTION_EXT + 0x05] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x06] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x07] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x08] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x09] = ver >= 5 ? &opcode_save_undo : NULL; z_opcode_functions[INSTRUCTION_EXT + 0x0a] = ver >= 5 ? &opcode_restore_undo : NULL; z_opcode_functions[INSTRUCTION_EXT + 0x0b] = ver >= 5 ? &opcode_print_unicode : NULL; z_opcode_functions[INSTRUCTION_EXT + 0x0c] = ver >= 5 ? &opcode_check_unicode : NULL; z_opcode_functions[INSTRUCTION_EXT + 0x0d] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x0e] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x0f] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x0f] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x10] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x11] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x12] = opcode_push_user_stack; z_opcode_functions[INSTRUCTION_EXT + 0x13] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x14] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x15] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x16] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x17] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x18] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x19] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x1a] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x1b] = NULL; z_opcode_functions[INSTRUCTION_EXT + 0x1c] = NULL; } #endif // zpu_c_INCLUDED fizmo-0.7.10/libfizmo/src/interpreter/zpu.h000644 000765 000024 00000006535 12606024314 021623 0ustar00chrenderstaff000000 000000 /* zpu.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef zpu_h_INCLUDED #define zpu_h_INCLUDED #include #define OPERAND_TYPE_LARGE_CONSTANT 0 #define OPERAND_TYPE_SMALL_CONSTANT 1 #define OPERAND_TYPE_VARIABLE 2 #define INSTRUCTION_2OP 0x00 #define INSTRUCTION_1OP 0x20 #define INSTRUCTION_0OP 0x30 #define INSTRUCTION_VAR 0x40 #define INSTRUCTION_EXT 0x60 #define INSTRUCTION_UNDEF 0xff #define INTERPRETER_QUIT_NONE 0 #define INTERPRETER_QUIT_ROUTINE 1 #define INTERPRETER_QUIT_ALL 2 #define INTERPRETER_QUIT_SAVE_BEFORE_READ 3 #define INTERPRETER_QUIT_RESTART 4 #ifndef zpu_c_INCLUDED extern uint8_t *z_mem; /*@dependent@*/ extern uint8_t *pc; extern uint16_t op[8]; extern uint8_t number_of_operands; extern uint8_t number_of_locals_from_function_call; extern uint8_t z_res_var; extern uint8_t *current_instruction_location; extern int zpu_step_number; extern uint16_t start_interrupt_routine; // Splint doesn't recognize that "terminate_interpreter" is used by routine.c. /*@-exportlocal@*/ extern int terminate_interpreter; /*@+exportlocal@*/ #endif // zpu_c_INCLUDED void parse_opcode(uint8_t *z_instr, uint8_t *z_instr_form, uint8_t *result_number_of_operands, uint8_t **instr_ptr); void interpret_from_address(uint32_t start_address); void interpret_resume(); uint16_t interpret_from_call(uint32_t routine_address); void interpret_from_call_without_result(uint32_t routine_address); void read_z_result_variable(void); uint32_t get_packed_routinecall_address(uint16_t packed_address); uint32_t get_packed_string_address(uint16_t packed_address); void evaluate_branch(uint8_t test_result); void parse_branch_bytes(void); uint16_t load_word(uint8_t *ptr); void store_word(uint8_t *dest, uint16_t data); void init_opcode_functions(void); void dump_stack(void); void dump_locals(void); #ifdef ENABLE_TRACING void dump_dynamic_memory_to_tracelog(); #endif // ENABLE_TRACING #endif // zpu_h_INCLUDED fizmo-0.7.10/libfizmo/src/interpreter/zscii.h000644 000765 000024 00000004536 12606024314 022125 0ustar00chrenderstaff000000 000000 /* zscii.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef zscii_h_INCLUDED #define zscii_h_INCLUDED #define ZSCII_NULL 0 #define ZSCII_DELETE 8 #define ZSCII_TAB 9 #define ZSCII_SENTENCE_SPACE 11 #define ZSCII_NEWLINE 13 #define ZSCII_ESCAPE 27 #define ZSCII_CURSOR_UP 129 #define ZSCII_CURSOR_DOWN 130 #define ZSCII_CURSOR_LEFT 131 #define ZSCII_CURSOR_RIGHT 132 #define ZSCII_F1 133 #define ZSCII_F2 134 #define ZSCII_F3 135 #define ZSCII_F4 136 #define ZSCII_F5 137 #define ZSCII_F6 138 #define ZSCII_F7 139 #define ZSCII_F8 140 #define ZSCII_F9 141 #define ZSCII_F10 142 #define ZSCII_F11 143 #define ZSCII_F12 144 #define ZSCII_KEYPAD_0 145 #define ZSCII_KEYPAD_1 146 #define ZSCII_KEYPAD_2 147 #define ZSCII_KEYPAD_3 148 #define ZSCII_KEYPAD_4 149 #define ZSCII_KEYPAD_5 150 #define ZSCII_KEYPAD_6 151 #define ZSCII_KEYPAD_7 152 #define ZSCII_KEYPAD_8 153 #define ZSCII_KEYPAD_9 154 #endif /* zscii_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/filesys_interface/filesys_interface.h000644 000765 000024 00000006452 12606024314 025634 0ustar00chrenderstaff000000 000000 /* filesys_interface.h * * This file is part of fizmo. * * Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef filesys_interface_h_INCLUDED #define filesys_interface_h_INCLUDED #include #include #include "../tools/types.h" #define FILETYPE_SAVEGAME 0 #define FILETYPE_TRANSCRIPT 1 #define FILETYPE_INPUTRECORD 2 #define FILETYPE_DATA 3 #define FILETYPE_TEXT 4 #define FILEACCESS_READ 0 #define FILEACCESS_WRITE 1 #define FILEACCESS_APPEND 2 struct z_filesys_interface { z_file* (*openfile)(char *filename, int filetype, int fileaccess); int (*closefile)(z_file *file_to_close); // Returns -1 on EOF. int (*readchar)(z_file *fileref); // Returns number of bytes read. size_t (*readchars)(void *ptr, size_t len, z_file *fileref); int (*writechar)(int ch, z_file *fileref); // Returns number of bytes successfully written. size_t (*writechars)(void *ptr, size_t len, z_file *fileref); int (*writestring)(char *s, z_file *fileref); int (*writeucsstring)(z_ucs *s, z_file *fileref); int (*fileprintf)(z_file *fileref, char *format, ...); int (*vfileprintf)(z_file *fileref, char *format, va_list ap); int (*filescanf)(z_file *fileref, char *format, ...); int (*vfilescanf)(z_file *fileref, char *format, va_list ap); long (*getfilepos)(z_file *fileref); int (*setfilepos)(z_file *fileref, long seek, int whence); int (*unreadchar)(int c, z_file *fileref); int (*flushfile)(z_file *fileref); time_t (*get_last_file_mod_timestamp)(z_file *fileref); int (*get_fileno)(z_file *fileref); FILE* (*get_stdio_stream)(z_file *fileref); char* (*get_cwd)(); int (*ch_dir)(char *dirname); z_dir* (*open_dir)(char *dirname); int (*close_dir)(z_dir *dirref); int (*read_dir)(struct z_dir_ent *dir_ent, z_dir *dirref); int (*make_dir)(char *path); bool (*is_filename_directory)(char *filename); }; #endif /* filesys_interface_h_INCLUDED */ fizmo-0.7.10/libfizmo/src/blorb_interface/blorb_interface.h000644 000765 000024 00000003653 12606024314 024700 0ustar00chrenderstaff000000 000000 /* blorb_interface.h * * This file is part of fizmo. * * Copyright (c) 2011-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef blorb_interface_h_INCLUDED #define blorb_interface_h_INCLUDED #include "../tools/types.h" struct z_blorb_interface { z_blorb_map* (*init_blorb_map)(z_file *blorb_file); long (*get_blorb_offset)(z_blorb_map *blorb_map, int usage, int resnum); int (*get_frontispiece_resource_number)(z_blorb_map *blorb_map); int (*free_blorb_map)(z_blorb_map *blorb_map); }; #endif /* blorb_interface_h_INCLUDED */ fizmo-0.7.10/libfizmo/doc/changelog.xml000644 000765 000024 00000201446 12606024314 020716 0ustar00chrenderstaff000000 000000 Adapted print_table opcode to work in lower window. This fixes output errors in “Sherlock”. Fix for Debian bug #795800: When the ncurses screen is resized when Inform's menu library displays hints or instructions fizmo will no longer exit and complain about an error in the “output_rewind_paragraph” function. Thanks to Lewis Gentry for reporting this problem. Implemented “flush-output-on-newline” configuration option. This will ensure that any output is flushed to history and interface before a newline. This allows interfaces to store paragraph-relevant attributes in the history with minor fuzz (which is used by fizmo-sdl). Added new metadata-type “paragraph attribute” for the purpose described above, along with auxiliary callbacks “paragraph_attribute_function” and “paragraph_removal_function” which are invoked from the history. Minor changes in processing when converting font 3 to unicode. Fixed possible garbled upper window after erase_window(-1) invocation. Minor fixes for lib detection, will remove some warnings and possible some build issues on linux. Fix in history/remove_chars_from_history. Fix for missing prompt after interpreter commands. Implemented "alter_last_paragraph_attributes". Implemented backwards-history reading. Minor extensions and bugfixes to history. Fix for erroneous upper window text in history. Fixed conflicting array-size in zpu.h / zpu.c which could result in invalid memory assumptions by the compiler. Thanks to Michael Tautschnig. Fixed missing lowering of input case for versions ≥ 5, thanks to irb. Adapted to automake v1.14 and fixed compiler warning. Fixed "encode_text" and tokenizing for cases in which the “unrecognized”-flag is set. This fixes a bug with the “name” spell in Beyond Zork, thanks to irb. Fixed “AC_CONFIG_AUX_DIR” invocation. Fixed wrapping of long lines without spaces as in ASCII art. Thanks to David Batchelder for pointing out the problem. Made output_rewind_paragraph count rewound chars. This makes refereshing the screen a bit easier for the ncursesw interface. After a restore, the current screensize is now written into the header. This should correct upper windows display problems after loading of savegames. Added “clean-dev” build target for better cleanup of installed development files, which helps debian packaging. When breaking long lines, multiple spaces are now skipped at the linebreak point to avoid superfluous spaces at the start of the next line. Thanks to Lewis Gentry. Fixed UTF-8 for input from file. Thanks to Mikko Torvinen for reporting the bug. Fixed wordwrapper for cases in which text was written on the same line as read_char was invoked. This makes output of multiline-hints in PRIZM's Invisiclues work. Thanks to David Batchelder. Renamed getchar, getchars and ungetchars from the file system interface to readchar, readchars and unreadchars. This makes fizmo compile on systems where getchar() is implemented as a macro. Added missing evalation of fixed-pitch font flag in the flags2 header. Altered close_interface function to allow z_mem access during shutdown. Fixed several compiler warnings. Invoking “/config” without setting color defaults will no longer crash the interpreter. Added z_rgb_colour datatype. Renamed “install-locales” into “install-data-local” build target. Other minor bugfixes. Reparied “math.h” name collision, fixing missing “rint” function declaration. Fixed universal builds on Mac OS X. Fixed warning in “cmd_hst” compilation. Searching for z-code files will now automatically create ~/.config/fizmo so that search results are no longer lost, thanks to B. Watson. Fix for preloaded input removal, thanks to Lewis Gentry. Fixed missing characters in transcripts. Fixed swallowing of dots, commas and quotation marks at line starts in case hyphenation is disabled – thanks to Lewis Gentry. Fixed crash which occurred when invoking fizmo-ncursesw with the “-fi” flag, also thanks to Lewis Gentry. Colors are now correctly set for all windows on screen in case no window is specified for @set_colour. Re-implemented line-wrapper, fixing several issues. Fix for memory corruption in command-history, thanks to Lewis Gentry. Implemented new build system based on autoconf/automake. Merged Andrew Plotkin's iOS-fizmo changes: No more raw exit() calls, added screeninterface-specific filename prompt, new screeninterface-specific filename prompt replaces fizmo_register_ask_user_for_file_function, fixed autosave-functionality, added “disable-stream-2-wrap” and “max-undo-steps” config option and fix for an overlong property issue that made “Heist” crash. Implemented memory-cleanup and fixed variable states after story end to allow fizmo_start() to be called repeatedly. Fixed some minor memory leaks. Fixed segfault which would occur after storing 10240 undo steps. Added new option to set number of maximum stored undo steps. Changed blockbuffer initialization to allow for output at any time, made fizmo_new_screen_size adapt blockbuffer size correctly. Fixed a buffer overflow during tokenization, thanks for Andrew Plotkin. Implemented binary chop dictionary search. Made fizmo comply to “praxix.z5” test. Merged zarf's DISABLE_PREFIX_COMMANDS functionality. Fixed missing $(DESTDIR) variable – should already have been present since version 0.7.1. Fixed an error which would occur for empty pathnames when starting up a game on 32-bit platforms, thanks to Samuel Verschelde. The transcription and fixed font bits will now correctly survive a restore, as defined in the Z-Maschine standard. Fixed missing “override” statments for CFLAGS in Makefiles. Fixed $(DESTDIR) evaluation in config.[default|macports].mk. Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. Fixed an error in the stack restoration in “opcode_restore_undo”. Thanks to Lewis Gentry for reporting this bug. Implemented first debugger stubs. The debugger is available via network socket and will currently only dump PC, locals and stack contents. Module name change: The ncursesw- and console-interface, the sdl-sound interface and the X11-specific code have been moved into separate modules named “fizmo-ncursesw”, “fizmo-console”, “libsndifsdl” and “libdrilbo”. This module has been renamed from “fizmo” to “libfizmo”, providing only the base interpreter functionality without any interface. Implemented Frank Liangs TeX hy-phen-a-tion algorithm into the wordwrapper. Patterns were taken from the “hyph-utf8” project at http://www.ctan.org/tex-archive/language/hyph-utf8/. Re-implemented the word wrapper. Rebuilt locales system. So far, all available locales were directly compiled into the binary and stored using a rather inflexible method which wasted some memory. Version 0.7.0 now stores the locales on the disk, reading only those languages and modules which are currently required. All i18n-invocations do now directly accept a module identifier, make the old switch functionality obsolete. Adapted all i18n calls to new method. Rebuilt output history storage. This has been reimplemented using a single memory stream instead of storing text and metadata separately. Moved “i18n”, “tracelog”, “z_ucs” and “types” into a new “tools” package adding “stringmap”, “list” and “tools_test” on the way. The tools package is supposed to be used by interpreter-related tools which don't require the interpreter itself. Rebuilt the interpreter core of fizmo into a set of static libraries. Implemented saving of text history using a non-standard chunk type “TxHs” in quetzal savegames. Added configuration variable “save-text-history-paragraphs” which defines the maximum number of paragraphs to store in a savegame. Added variable interpretation – so far, only $(HOME) is implemented – for config files. Re-implemented the entire build process. Libraries may now be compiled and installed on their own, pkg-config is used whereever possible to ease compilation and installation. Bugfix release: Fixed negative count for unsorted dictionaries in the tokenise opcode. This fixed the crash in “Beyond Zork” which occurred while executing “i” after an item was name, thanks to irb. Fixed “get_utf8_code_length”. This fixes output of non-latin1 output codes in the transcript file, thanks to Lewis Gentry, closes debian issue #617714. Increased maximum allowed option size to 512 to allow for longer filenames. Added NCURSESW_INCLUDE_FROM_W_DIRNAME to configs to allow usage of Apple's ncurses implementation, added GDKPIXBUF_INC_DIR configuration variable. Bugfix release: Interpreter and interface information is now correctly written into the header after restarting, additionally the input length for transcript and command input/output-stream filenames has been fixed. Thanks to Samuel Verschelde. Added “sync-transcript” option: When enabled, it'll flush the wordwrapper and file output buffer as soon as possible. Fixed trunction of babel data input. So far, the last byte was cut off from the input, resulting in an error if the file was encoded using unix newlines, but no errors as long as DOS newlines were used. This fixes missing metadata issues in the story browser. Thanks again to Zachary Kline. Fixed story browser to remove “.zblorb” suffixes from story titles which are not backed by babel information and evaluated from the filename. This will only work for new stories which are added to the list, to re-index your current story-list the old file has to be removed and re-built. “rm $HOME/.config/fizmo/story-list.txt” should be run first, followed by the command “fizmo -u”. Thanks to Zachary Kline. Minimal changes to the seeding of math.c's “srand” and “init_by_array” in hopes of increasing input entropy. Bugfix release: Recommend for MacPorts, will make compiling work for parallel builds in MacPorts version 1.8.0+. Transcription will be kept active after restarts, thanks to Samuel Verschelde. Fixed Makefiles for parallel builds (make -j). Bugfix release: Definitely recommend for read_char fix. Fixed interface to supply default colors in case ncurses' “pair_content” returned invalid colors (thanks to Samuel Verschelde). Input from read_char is no longer re-echoed to the screen (thanks to Samnuel Verschelde). The top-level Makefile may now be invoked with “CONFIG_FILE=<filename>”. Adapted “config.macos.mk” to MacPorts portfiles and ports-filesystem so that fizmo is now easily MacPorts-buildable. Added license information to every file. Improved GNU coding compliance: install now goes to “($DESTDIR)/usr”. Bugfix release: Corrected save opcode and prepared for debianization. Adapted manpage to make lintian work. Corrected “src/c/interface.h”. Fixed typo in manpage. Fixed save opcode to not wrap data into IFF and to disable compression when only a table from memory is saved (operands 2 and 3 for address and length are set). This fixes “Comp96.z5”. Bugfix release: minor addition of several features (may now compile without libsndfile and libSDL alone, implemented XDG base directory specification). Removed unused references to SDL-mixer (which isn't used for anything anymore). Improved and documented default “config.*.mk” files and added config default for cygwin with sound support (to my own great surprise, sound really works under Cygwin). Added more information to “INSTALL.txt”. Implemented new ENABLE_AIFF_FOR_SOUND_SDL variable in config files. This allows the sound-sdl-interface to at least play Infocom .snd files when no libsndfile is available. Added config-file options to manpage. Changed location of fizmo config directory from fixed “$HOME/.fizmo” to XDG_CONFIG_HOME standard and implemented use of XDG_CONFIG_DIRS. Thanks for suggestions and debugging help from Eric Forgeot. Specifications and more information found at http://freedesktop.org/wiki/Software/xdg-user-dirs. Fixed broken space allocation, forgotten NULL-checks and fixed some issues to make frontispiece work better on GenToo. Thanks for these patches from David Leverton (see also line #50 in “src/ncursesw/Makefile”). This fixes possible startup crashes. Added FIZMO_BIN_DIR variable to Makefile. (find c cgi cpp fizmo ncursesw simple-c simple-cpp single-turn sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 29953 lines of output) This marks the point for the first public beta release. Killed all known bugs as far as I could find them and made fizmo work on Linux – tested with a 64-bit distribution of Debian/Lenny – and Mac OS X 10.5 with a 32-bit Intel machine and MacPorts for SDL. New features since version 0.5 include an SDL-based sound interface, support for charachter font via unicode translation, partial (z)blorb-support – runs code from blorbs, can display frontispiece images in XTerms and play AIFF-sounds, a story file navigator, interface margins, restore from command line, a much improved streams implementation, a manpage and many other small features as well as a large amount of bugfixes. Implemented conversion of font 3 (charachter font) to unicode. This appears to make Beyond Zork's map appear at least readable. All directories in the “ZCODE_ROOT_PATH” are now recursively searched for Z-machine games. Implemented recording and replaying of timed input. Implemented new “*.snd” search method: Generalized for all files, not only Lurking Horror and Sherlock, tries upper- and lowercase. Fixed scan_table opcode. This fixes Beyond Zork window output. The filename input for save and restore may now be cancelled using the escape key. Pressing arrow up/down during filename input no longer displays the command history. Implemented wordwrapper / ncursesw margins. Flags are now correctly restored during undo and restore opcodes. Added progress indicator for story-list update. Fixed a bug that would damage the story list in case a game had a release code with a length equal 5. Fixed an issue that would cause bits > 0xffff from routine address to be lost on timed-routine-calls. Implemented “no-update” command line flag and config option to avoid long startup scan times (for example on slow notebook drivers with many story files). Implemented “–search” and “--recursively-search” command line invocations. Fixed bug in scrollback parapgraph position cache. Fixed a memory leak from getcwd(NULL, 0) in “filelist.c”. Fixed scroll-down display for scrolling to bottom. Fixed crash that occured when a read-instruction was recursively called from a timed input verification-routine. Modified LOADB / LOADW opcodes to store 0 in target instead of doing nothing when trying to read from an illegal address. This appears to make the russian version of “All Roads” (“AllRoadsR.z5”) work. Fixed a bug in the story-title evaluation from filename when the story name did not contain any slashes. Fixed display error on refresh of preloaded input from history. Implemented IGNORE_TOO_LONG_PROPERTIES_ERROR config define which makes “property.c” ignore too long properties (fixes “HugeCave.z8”). Implemented forced predictable mode (ignores seeding random generator). Fixed story-list for directly invoked files with relative pathname. Many, many other minor fixes and extensions. (find c cgi cpp fizmo ncursesw simple-c simple-cpp single-turn sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 28499 lines of output) Re-built SDL-Sound system (implemented sound effect stack, better sound-has-finished-detection and many, many fixes). Re-wrote Makefile system. Releveant module defaults are now kept in separate .mk-files. Added support for AIFF-sounds in blorb files. Added support for extra-blorb files (these are specified on the command line directly after the story file name). Added “-Wextra” flag to CFLAGS and cleaned up new warnings caused by the new flag. Cleaned up config file, fixed a minor bug and made boolean vars work “more” correctly. Fixed “VERIFY” opcode. Several fixes: Patched “savegame.c” to re-enable use of “CMem” save method, removed a superfluous free in streams.c which tried to free a static string. Many minor fixes (option system, running X11-enabled fizmo in text-only console, etc). (find c cgi cpp fizmo ncursesw simple-c simple-cpp single-turn sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 27123 lines of output) Implemented filelist (which remembers all files invoked and files in searched directories). Added use of libxml2 to parse metadata from the babel XML file. Implemented story selection menu in ncursesw interface. Implemented parsing of rc file. Added bold-for-bright-foreground and blink-for-bright-background terminal options. Implemented dont-use-color and force-color option. Fixed interface for > 121 colors. Added “help” command. Implemented “savegame-path” configuration option which specifies the directory for savegames. Implemented text paragraph position cache to speed up scrollback for large amounts of text (not elegant, but works). Savegames are no longer restored in case serial, release or checksum don't match. Removed non-standard “FILE” chunk again, the storyfiles for directly invoked savegames (from the command line) are now located via the filelist. Implemened “force-quetzal-umem” config option from the command line. Added manpage. Fixed “verify” opcode. Basic implementation of input stream 1. Implemented basic blorb support (meaning that blorb files are detected, information about pictures and sound is parsed and the first found “ZCOD” chunk is executed). Fizmo now always keeps a FILE* to the story file open, eliminating the need for a lot of open / close calls (and simplyfing blorb handling). Stories may now be started from the command line using their “real name” in case they are stored in the story-list. Example: “fizmo sorcerer”. Many, many small fixes (scrollback, winch-redisplay, negative score, undo, crash on large scrollbacks, etc). (find fizmo simple-c simple-cpp c cgi single-turn cpp ncursesw qzinspect snd2aiff sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 23265 lines of output) Implemented SDL-sound-interface. To make SDL work in Mac OS X I've used MacPorts to install SDL (“port install libsdl”), on Debian I've been using “apt-get install libsdl-sound1.2-dev” (maybe “apt-get install alsa-base alsa-utils” is also required). Fixed scrollback and i18n-exit-translation. Fixed libfizmo to also use setitimer/sigaction (makes fizmo work better on linux). Implemented foreground/background color command line parameters for ncursesw interface. Fixed get-cursor-[column|row] for ncursesw (makes PRINT_TABLE and Sherlock work). Added “UMem” support for quetzal. Added “snd2aiff” commandline utility (this was the basis for the first sound interface experiments). Added “qzinspect”, a simple commandlinetool which uses libfizmo to list the contents of a quetzal savegame. Added non-standard “FILE” chunk to savegames which contains the absolute file name of the story file which saved the game. Implemented restore from the command line: In case a quetzal-savegame containing the non-standard-chunk “FILE” is given on the command line, fizmo will try to restore the savegame using the story filename stored in this chunk. (find fizmo simple-c simple-cpp c cgi single-turn cpp ncursesw -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 21963 lines of output) This version is now definitely usable to play all non-v6 games. Did extensive testing using Borderzone, “LostPig.z8”, “Zokoban.z5”, “crashme.z5”, “etude.z5”, “paint.z5”, “random.z5”, “reverzi.z5” and “unicode.z5”. Only two minor known bugs remain: Scrollback sometimes miscalculates the current row after a lot of scrolling back and forth (which is always “fixable” to pressing any-key which correctly rebuilds the current output page, and a display anomaly on the frontpage of “vampire.z8” which I intended to keep after a lot of code-inspection (since fizmo appears to be implementing the screen modell correctly and fixing this display problem breaks a lot of other games). This version has been tested on Linux, Darwin (Mac Os X) and a little bit on XP/Cygwin (using a self-built ncursesw). Added “z_ucs_rchar” to “z_ucs.c”. Re-implemented word-wrapper to not compress multiple spaces, keep spaces after newlines and buffer more than on line. The fixes the map display problem in “Enchanter”. Changed opcode_restore to read dynamic memory and stack of the restored game into a freshly allocated memory block instead of directly into the game data. This makes it possible to now continue the current game instead of dropping back to the command line. Fixed opcode_save to not exit in case an errors occurs during saving, but to merely give a warning (and correctly evaluate the branch). Now the currently active game isn't lost anymore in case a save goes wrong. Added a LOT of error checking in “iff.c” and “savegame.c”. There's possibly a better way, but checking every single return value also works. Added table-saving extensions to save- and restore-opcodes. Fixed tokenizing for version 5+. Fixed timed-input detection for “read” opcode. This fixes the crash in ZTUU when the lantern goes out. Ran fizmo through (sp)lint, fixed memory leaks, minor bugs, many typecasts, some double and inconsistent definitions, cleanup up code. Fixed Makefile dependencies. Fixed a possible SIGSEV when using fprintf with “%ls” output format. This tended to crash when used on wchar_t on darwin. Implemened scrollback for ncursesw interface, added support method for scrollback in “history.c”. Added last missing v5 opcodes. Fixed end-of-stack detection so that stack is now correctly enlarged when required. Added module-based localization, removed unused localization entries. Fixed space detection in wordwrapper. Fixed metadata-handling (memcpy) in history.c Added “single-turn” interface. Fixed operand handling in zpu. Added configuration system. Re-built save/restore, should be finally 100% quetzal compatible. Implemented output stream 4. Fixed output stream 2. Some split-window / set_window / set_cursor fixed for ncursesw-interface. Substitued ualarm/signal with setitimer/sigaction since the first one won't catch SIGALRM on linux and manpage says that ualarm is obsolete. Fixed color management so that ncurses color pair is avaiable for reading. Many, many minor bugfixes. (16373 lines in *.h and *.c files) Fixed a bug in “parse_utf_8_char”, this fixes i18n-messages. Added C++ wrapper. Implemented demo C++ screen interface. Separated code in core, interface, c and cpp interfaces. Improved upper window handling (trinity sundial) and blockbuffer (zork1.z5). (13718 lines in *.h and *.c files) Moved to this new version on March 3, 2007. The old version has been lying around untouched since November 15, 2006. Abandoned the internal use of UTF-8. It is just much too complicated to handle in the interface. I'm not even sure that with all the code necessary to handle UTF-8 handling that there is much space wasted. The important point for me is that using UCS-4 – fixed, 32-bit sized characters – is much more easier, and thus safer to use. Re-implemented everything using wchar_t. The barebones C-Interface is the first converted. Everything took only a few hours. Compacted code a little bit (tracelog.h, etc.). Re-implemented the history-buffer in “streams.c”. It is controlled by the Z_HISTORY_INCREMENT_SIZE and Z_HISTORY_MAXIMUM_SIZE constants in file “config.h”. The buffer is re-alloced until it reaches the given maximum size. At that time, wrap-around is used to keep the buffer up to date. A debug function named “log_history” exists. Converted the error handling to wchar_t. Implemented SIGWINCH-handler for interfaces and associated handling in “ncrws-if.c”. Implemented metadata (color and style) storage for the history. Implemented set_font opcode. Fixed two minor issues in the wordwrapper. Fixed a missing string-terminator in the zchar_to_ucs_4-function. Over two years that thing was working without it ... unbelievable. Fixed a token-length problem in parsing. Implemented correct UTF8-filename-handling for savefiles. Implemented CATCH and THROW opcodes, both untested. Re-built interpreter commands with new wchar-base, prompt-repetition from history and user-configurable prefix. Re-implemented scripting with UCS-4. Implemented buffering of metadata – colour, styles and font – in the history buffer. Windows may now be resized and keep their styles intact. Fixes in property-management for version 4 games. The sound-effect opcode is accepted now for effects 1 and 2, although it doesn't do anything yet. Improved split-screen in ncurses-interface: In case the upper window becomes smaller, its content is copied over into the lower window (making reading the sundial in trinity.z4 working). Fixed set_window to set cursor to (0,0) when selection upper window (this makes the sonarscope in Seastalker work). Fixed wordwrapper to accomodate for styles which are sent after normal text which is followed by a space – so far the style was activated before the space was output. Implemented command history. Fixed a bug that would cause screen resizes in versions before 5 try to set colours. Implemented specialized blockbuffer for upper window. Threw away wchar_t- and locale.h-usage. The problem is that they are not suported on older compilers, embedded systems or in emulations like cygwin. According to specifications, wchar_t may even only have 8 bits width and is compiler-implementation dependant, so it's practically not useable to store unicode-data. So i've implemented a z_ucs type which is always used for internal processing of characters. Thus every interface gets its output in z_ucs chars (which are simple int32_t types) and can happily typecast it into wchar_t if desired. Interfaces may still use wchar_t (in fact, ncursesw does), but the core is now completely autonomous. Fizmo now compiles fine without warning on Cygwin. Both the c- and the ncursesw-interfaces seem to work nicely. Fixed a bug in the wordwrapper which caused the zchar-converter-state and the linebuffer to overlay in a single byte. Added “z” parameter to i18n string, representing z_ucs-strings. Fixed stream-3-output: Current length is now always updated, not only when closing the stream. Fixed input to make it work all across the screen and not only on the last line. Fixed cursor movements and screen splits for version 4 and 5. Splitted files into fizmo-core and interfaces. The interpreter itself is now put into a static library and linked in from the interfaces. Moved “extern” statements into header files. (12276 lines in *.h and *.c files) Added a few ZSCII/ASCII/ISO-8859-1/UTF-8 conversion functions in “text.c”. Improved the ncursesw-interface to handle US-ASCII and UTF-8 directly. Implemented detection if a character has a suitable ZSCII representation before adding it to the input line. Fixed a bug which prevented correct assembly of multi-Z-characters. Fixed a bug that caused multi-Z-character constructions to have a wrong word length. Extended ncurses interface to handle scrolling on the input line. Once input of a new line is finished, it is erase and then output again using the interface's output_utf8 function. This allows output which is longer than a single line to be word-wrapped. Implemented correct delete and insert in the ncurses interface. (13302 lines in *.h and *.c files) Abandoned the concept to pack absolutely everything in UTF8f. Having to think though the fork-8f is simply more complicated than necessary. In the name of “Keep it simple, stupid” I'll revert to my old idea of having a function in the interface for every output function like color setting, changing font style and so on. Removed wordwrapper, pager, decoder, utf8conv, fork8f and fpipe. Reverted the system to the plain-style-C interface. I'll use the break in the development chain to clean up the code and take a second look at most things which has proven quite benefical in similar occasions. Cleaned up most of the code. I've now got a clean, simple version without any real interface around running again. Better yet, since my last tries with ncursesw I've finally found out how to reliably produce UTF-8 output: By simply calling the setlocale function from #include <locale.h> and setting LC_ALL to “”. Once the system locale is now set to something using UTF-8, ncurses delivers correct output. Implemented a new, much simpler wordwrapper that should now also wrap UTF-8 correctly. Fixed quetzal saving. The main FORM chunk has now the correct length so that both frotz and Zoom now correctly load savegame files. Implemented a whole new wordwrapper. This one correctly wraps UTF-8 and is capable of storing “metadata” – colors and styles – into the text. This allows color and style changes in the middle of a word without having to flush buffers. Implemented colors. Implemented text style. The etude.z5-test is running again. So far I've got everything working except the character output. Implemented v3 window handling. The random.z5 test is now running okay. Implemented [More] prompt. Improved command line parameter handling. Fixed a REAL nasty bug in the line-history resulting in buffer overflows in very rare cases. Fixed another minor bug that would let the word wrapper start a new line after input with a space (Wishbringer's “read message and move leaves”) by added the wordwrap_reset_wrapper method (which correctly reset the number of consecutive spaces). Fixed a bug that would cause a crash when games were saved in a restarted game (forgotten store_empty_stack_frame). (Successfully completed Wishbringer – 96/100 points, one wish used. I just have to find a way to unlock the chains down in the tower...) Fixed paging module, long lines causing wrap-arounds are now correctly accounted for. Modified the module to keep one more line than required on the screen to ease continued reading. Tested compatibility to Zork I, Z-Machine version 1, release 2, serial number AS000C. This version appears to have a bug at $585b. It occurs when the command “open mailbox and read leaflet” is executed right at the beginning. To circumvent this, a skip-underflow-check can be enabled in variable.c. I've posted a related newsgroup-message at http://groups.google.de/group/rec.arts.int-fiction/browse_frm/thread/c77652b28be69f2d/a52b9f652fc75928#a52b9f652fc75928 Added the “@info” command. Added automatic detection of “problem” games. This way, the “AS000C” hack is automatically activated at start-up. Activated hacks are displayed using the “@info” command. (0.20.1 finished) Enchanhed the pipe/filter system. Each filter will now receive the destination function (and “object-struct”) directly. Thus, no more extra forwarding functions are required. Rebulid the windowing system in the curses interface. No more flushes are sent from the fizmo “core” any longer. The interface will flush it's filters by itself if required (sending a flush into the first filter in case input is required or the interface is closed). ABSOLUTELY FASCINATING to discover how many can bugs can still reside in a program just to creep up occassionally ... or is that just a sign of a bad programming style? Now I begin to grasp even more the significance of Java's Array-out-of-bounds-exception. I found a bug in the utf8x-buffer (forgot a multiplation by factor 3, resulting in a much too small buffer. I must have had a lot of overflows without ever noticing them in the past). Found another bug in the UTF8x-Converter where I simply referenced the wrong variable. Fixed a forgotton “converter->utf8f_parameter_bytes_to_copy = 0” in utf8conv.c which SOMETIMES (grrr!) caused an error which caused the screen output to vanish. Reorganized piping in the curses interface. Every window now has its own combination of wordwrapper, converter, pager and decoder. General window commands like split_window or erase_window are caught by a enhanced type of decoder named fork8f and passed along to the correct window structure. The random.z5 seems to work fine and I hope it's sufficiently correct to finally try my luck with Seastalker. (0.20.2 finished) Fixed status line display. Fixed ncurses color recycling. (12794 lines in *.h and *.c files) Version 0.2.0 adds an unix interface, allowing for timed intput, and an [n]curses interface including color, better wordwrapping and accented characters. Zinc now runs random.z5 and passes all of the etude tests. I completed Moonmist without encountering any strange behaviour. Put the conversion of UTF-8 to [ASCII|ISO-8859-1|UTF-8] in utf8conv.[c|h]. That way, c_if.c is now down to a minimum size, and all it's “outsourced” functions – wordwrapping and UTF-8-conversion – can now be used without any problems by other functions or interfaces. Cleaned up Makefile. Implemented call_vs2 and call_vn2 opcodes. Made PRINT_NUM output signed instead of unsigned numbers (found it thanks to etude.z5). Corrected OPCODE_MOD to correctly handle signed operand 0 values (etude again). Corrected a REAL nasty mistake: Replaced sizeof(<constant>) in a utf8conv.c malloc-call with a simple <constant>. This made the system crash under OS X PPC (though not on linux and some other unix-variant). Re-organised the makefile a bit. Interface dependencies are now correctly resolved and build dependencies are in order again. Renamed the interpreter from the project name “zint” – meaning Z-Machine-Interpreter – to “ZInC”, meaning Z-INterpreter-Code. Corrected the Makefile again. Implemented the Unix-Interface. This one assumes that it's running on a unix machine terminal without any specials (not even curses). It uses select and tc[g|s]etattr to implement timed and preloaded input and a get_char implementation. Fixed a bug in unix_if.c that would cause a segfault on startup. Some more i18n, cleaner tc[g|s]etattr in unix_if.c Implmented correct input line restoration after timed-input output. Modified text.c so that the streams_echo_input command is executed no matter whether the first word could be found in the vocabluary or not. Implemented preloaded input in the Unix-Interface. Implemented correct READ_CHAR in Unix-Interface. Fixed a LOT of tiny bugs and itches. Implemented [MORE] paging via additional pager module. Fixed german translation of i18n messages. Fixed ZSCII-to-UTF8 encoding, ZInC now passes etude's accented character test. Implemented a curses interface. At the moment raw constructs for the upper and lower window and a status line. Basic color management. Adapted wordwrap.c a little bit in order to achieve corrent linebreaks. Completely re-wrote wordwrapping in order to get rid of trailing spaces and other problems evident when using curses. Completely re-wrote the entire output stream system. It turned out that the usage of flags caused problems buffering text: In order for everything to work correctly the flags would have to be buffered along with the text output. Text-relevant formatting data like color is now passed directly along with the UTF-8 text: Internally I'm now using an encoding that can encode special formatting sequences into the UTF-8 stream – see UTF8X.txt for more information. These conversions added the utf8x.* and decoder.* files. Although quite a major change, the encoding helps to make the whole system a lot cleaner. Numerous fixes to the [n]curses interface, addition of status line, better color management with careful consideration of availiable color pairs. Using the ncurses interface, the interpreter now passes the etude.z5 test with the exception of the text styles and undo capability. Modified the i18n_translate_and_exit and close_streams functions to support a message-on-exit. This way, error messages are supported without regard for what's left in the UTF8x output pipe and error output can be seperated from the other valid stream output. This way, the ncurses interface can correctly endwin() and output the message to read on stderr. So far, multiple invocations of READ or READ_CHAR with timed input casued a “nested timed input not availiable” error. This is a problem for the random.z5 test which appears to use this feature. The nested behaviour has been altered to an overwrite behaviour. In case a second timed input is requested, the old timer and routine are erased from memory and replaced with the new data. Fixed interface commandline choice. The random.z5 tests now apperas to run correctly. Fixed a tiny bug in wordwrapping directly after read_line, fixed command line parsing, i18n-string-length and a few tiny localization issues. Added text styles to the curses interface. Finally added modifiable names for game saving and restoring. (Successfully completed the red storyline of Moonmist). Renamed ZinC (name already exists) to fizmo: Fizmo Interprets Z-Machine Opcodes. (8848 lines in *.h and *.c files) The 0.1.4 complies to the strictz.z5 test, allows transcripting (even on startup via command line switch). A few minor bugs were fixed and a history of the last output is kept, allowing for a faithfully original prompt after an interpreter command has been finished. Compacted locate_dictionary_entry (so that the zscii_string_length function is no longer needed) and adapted it to version 4+ files. Implemented the object-number-unequal-zero-checks (in order to run strict.z5). Adapted read opcode to version 4+. Renamed c_iface.c to c_if.c in order to gain more space for other interface names. Fixed zchar_to_utf_8 so that multibyte-characters are handeled correctly between two zchar_to_utf_8 function calls (when continuing on the first call's source string due to output buffer shortage). Implemented basic transcipting in streams.c and moved the trace functions there. All output is now channeled from text.c through stream.c into the active interface. The input is seperately written to to the streams, in order to be able to distinguish it from regular output (and to write it only to the streams requested). Implemented “-s” / “--start-script” startup option to start scripting right away. This allows to capture really all input emitted by the game. Implemented input of file name (supplying a default filename) for transcripts. Fixed a bug in the parsed word position which would cause the following garbeled Moonmist-output: >get out of the cat [I don't know the word “ cat.”] >oops car [I assume you mean: get ou o th ca] You're not in it! Implemented CALL_VN opcode. Added STRICT_Z definition in config.h and implemented a lot of checks in object.c together with a warning mechanism in i18n.c in order to make this interpreter compliant to strictz.z5. Fixed a bug in the length-code-size determination in properties.c (replaced “& 80” with “& 0x80”). Added a lot of STRICT_Z tests to properties.c. Implemented READ_CHAR opcode (not very well, since in stanard C without any Operating-System-specific calls there's no single read of a char, thus you still have to press enter). Zinc now passes the strictz.z5 test and looks close enough to the frotz output stored at http://www.ifarchive.org/if-archive/infocom/interpreters/old/frotz/frotz_zstrict_result (with other warning messages, of course). Implemented wordwrapping as a seperate re-usable module in wordwrap.[c|h]. The C-interface and the function for output to stream 2 currently use it both. Implemented line_history_buffer, a circular buffer that will record the last output sent to the streams. It's supposed to be used for reconstruction of the current prompt in case an interpreter command is entered an the original prompt should be restored after executing it and later for easier handling of preloaded input. Interpreter commands will now prompt with the last line that was output by the Z-program after finishing command processing. (6013 lines in *.h and *.c files) This 0.1.3 version adds localization for error- and startup messages, corrects a few minor bugs abd adds UTF-8 support. Made mod (remainder-after-divison) signed (due to 2.2.1). Corrected opcode_div so that the divisor, not the dividend, is verified not to be 0. Added divisor-not-0-check to mod. A few paranoid sanity checks in opcode_read. Modified opcode_read so that the whole line of input is always read, no matter how much can actually be stored so that the next line of input does not begin with left-over-text. The non-used input is discarded. Removed use of input_to_zscii-function in text.c, since the input does not have to be converted. Extended store_ZSCII_as_zchar in text.c to accept not only characters in the current alphabet, but also to encode other chars as multi-z-chars, thus also allowing the '@' as input which I want to use to identify interpreter commands. Implemented the “@predictable” command to switch interpreter in or out of predicatable random mode as suggested in the spec. Made random generator more spec conforming by using negative values to seed the generator to this value. Implemented parsing of command line options. Currently only used to start up interpreter in predictable random mode. Implemented UTF-8 handling. The data traffic between the core interpreter and the interface(s) has been modified to use exclusively UTF-8. It is now also possible to output a whole string via the utf_8_output function. The C interface can now be put in three output modes – ASCII, ISO-8859-1 and UTF-8. Characters that cannot be printed in the ASCII and ISO-8859-1 modes are substituted by a '?'. Implemented UTF-8 output as defined by the Z-Machine specification v1. So far only implemented without testing. Implemented loclization. In order to avoid special cases in which it is not possible to tell the user that the localized files cannot be loaded since the files have not been loaded yet in his own language :-) I'm using the prepi18n binary to convert the locales/xx_XX.txt into the file locales.c which can be directly complied into the interpreter binary. The localization files are supposed to be encoded in UTF-8 so they can be easily output using the usual interface functions. Split the activate_interface function into activate_interface and link_active_interface_to_story. The first call actually initializes the interface which is used to make output possible (in case the story file can't be loaded), the second call performs the necessary initializations with the story file's header. Extended localization to use parameters the like “Could not open \{0}.”. So far, parameters are only allowed to contain ASCII values. Moved last remaining function in output.c, read_zscii_string, into text.c. Implemented forgotten lowering of case after reading input from the keyboard. Now it's possible to answer “YES” to Moonmist when it asks for “YES or NO”. Cleaned up stack.c a bit and fixed a bug that would have caused the stack not to enlarge in case it was supposed to. Extended localization to use type identifiers. In the beginning I decided to skip them, but to make error messages useful to the user and handier in the code I decided to give it a shot. Parameters are now specified by using \{0s} for a string and \{0d} for a decimal. Together with a few supporting wrapper functions, the main file already looks much cleaner. Due to the buffering of the Z-Machine output, messages are even correctly word-wrapped. Implemented switching between ASCII / ISO-8859-1 / UTF-8 into zinc.c. Logically it would have been better to put it in to c_iface, but since it will be required more often and don't want any copied code I decided to leave it this way. Implemented echo option in the C interface in order to be able to read the input from input piped into the interpreter. Converted all current 51 conditions-to-translate from FATAL_ERROR and [s|f|]printf to i18n_translate[and_exit]. The FATAL_ERROR macro has been removed. Compacted the zchar-storage-functions. Completely replaced read_zscii_string with zscii_to_utf_8. The new functions will output z-char-strings of an arbitrary length into an limited-size output buffer. Multiple calls to this function for the same source string will continue with the output where the last call of the functions had to stop. (5094 lines) 0.1.2 fixes my currently last known problems with playing the 840726 Zork I revision. Word wrapping makes it look a little bit nicer and the barebones-C-interface is now probably as good as it can get. Did quite a lot of code-cleanup. Implemented NOT opcode. Implemented NOP opcode. Implemented RESTART opcode. Implemented POP opcode. Implemented SHOW_STATUS opcode. Allowed output of tab – ZSCII 9 – for version 3 (due to the guidebook in the Dam Lobby). Implemented VERIFY opcode. Implemented PIRACY opcode (we're all honest, so an evaluate_branch(1) sounds okay, right?). Fixed a bug in INC_CHK (wrong cast to unsigned value instead of signed). Totally forgot about the 8.3-filename-limits on DOS machines, files were renamed and merged together – /(.*)_opcodes.c/ joined /$1.c/. Fixed a bug in the random opcode which allowed 0 as a minimum result value to the random call (should have been 1). Fighting with the thief now results in much less garbled text output. Cleanly wrapped TRACE_LOG calls in curly braces, meaning disabling tracing now works correctly. The zinc binary now has a size of 82308 bytes with logging enabled, and 54700 bytes without logging. Created Makfile-dependency for zinc.h from iface.h (by using the touch command, is the okay?). Made all and clean .PHONY targets. Removed globals.c, moved globals into zinc.c and created “extern” references in other source files. Moved globals to corresponding source files (which eliminates a lot of non-needed “extern” references). The linux manpages tell me bzero is outdated. Faithfully replaced bzero with memset calls. Replaced memcpy call with a loop that assembles uint16_t values byte by byte. This will avoid problems on little-endian machines (i386 and the like), since the Z-machine uses a big-endian model. Used the Mersenne Twister as random generator. Only the genrand_int32 function is used, the rest of the functions, with exception of the two init calls, were deleted from the mt19937ar.c file. The generator is seeded by an init vector consisting of the number of seconds since 1970, a standard C random generator number, the number of milliseconds since 1970, followed by another standard C random generator number. Splitted zinc.h in a header file for each .c file. Adjusted Makefile and #includes accordingly. Changed **z_opcode_procedures into *z_opcode_functions and moved it from zinc.c to zpu.c (thus avoiding external reference and setup). Now z_opcode_functions is a one-dimenstional array indexed by the value instruction_form + instr_code. This allows saving the space for 32 pointers in the smaller opcode classes (with only 16 instead of 32 opcodes). Implemented buffering / word-wrapping in the C Interface. With this change, the C interface should be complete. Comparing to everything else it's still very raw, but hey, it works. Implemented BUFFER_MODE opcode. Moved all the configuration options from zinc.h to config.h. 0.1.1 was the first version that was able to save and restore games. Implemented OR opcode. Implemented MOD opcode. Changed get_prop_len so that get_prop_len(0) returns 0 (for 1.1 standard). Updated property.c, splitted up property search in three functions in order to allow easier implementation of the GET_NEXT_PROP opcode. Implemented GET_NEXT_PROP (you can now pick up the elven sword). Implemented CALL_2S. Implemented CALL_2N. Implemented SET_COLOUR (but does not have no effect in c_interface). Implemented all remaining 2OP-opcodes with the exception of THROW. Implemented DEC opcode. Implemented PRINT_ADDR opcode. Implemented CALL_1S opcode. Implemented REMOVE_OBJ opcode. Implemented LOAD opcode. Modified the tokenising routine to correctly return position and length of a word even if it was not found in the dictionary. Implemented dummy stack frame storage for quetzal compatibility. Implemented SAVE opcode. Implemented RESTORE opcode. 0.1.0 is the first version that allows basic playing of version 3 games. The only game used for testing so far is Zork 1 which was drawn from the well-known site of Peter Scheyen. Moving around the house, object movement (taking and dropping of the leaflet) all seems to work quite okay now. Implementing more missing opcodes. Fixing a few not-so-easy to find bugs (like the property addresses etc). Fixed a bug in the branch-address calculation. Fixed a bug in the object-unlinking mechanism that would not correctly remove the object-to-be-unlinked from an object further up the sibling line. Implemented the c_interface, which allows very bare-bone input / output provided by standard C facilities (meaning fprintf / fgets). Implementing of user input, tokenising and dictionary parsing. Major cleanup of the code. distribution of the old interpreter.c file into multiple .c files. First appearance of the interpreter.h interface. Further implementation of the basic capabilities, including property management etc. First basic implementation of memory, variables, stack and primary opcodes. fizmo-0.7.10/libfizmo/doc/configfile-example.xml000644 000765 000024 00000002124 12606024314 022515 0ustar00chrenderstaff000000 000000 # fizmo example configuration file. # This should go to ($HOME)/.config/fizmo/config # -- libfizmo options #locale = en_US #locale = de_DE #locale = fr_FR background-color = white foreground-color = black #background-color = blue #foreground-color = yellow #savegame-path = $(HOME)/.quetzal-savegames #transcript-filename = $(HOME)/.quetzal-savegames/transcript.txt #start-script-when-story-starts #sync-transcript save-text-history-paragraphs = 100 # All directories in the colon-separated "z-code-path" are searched for story # files: #z-code-path = /foo:/bar # Directories listed in the "z-code-root-path" are searched recursively. #z-code-root-path = /foo:/bar # -- libcellif options # Margins may provide for a better view, especially when used in terminal # windows. left-margin = 1 right-margin = 1 #disable-color #disable-hyphenation # -- fizmo-ncursesw options enable-xterm-title #bold-for-bright-foreground #blink-for-bright-background #dont-update-story-list #disable-x11-graphics #display-x11-inline-image fizmo-0.7.10/libfizmo/doc/copyright.xml000644 000765 000024 00000004772 12606024314 021002 0ustar00chrenderstaff000000 000000

Copyright (c) 2009-2015 Christoph Ender
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

This package includes software written by other authors:

libfizmo includes the Mersenne Twister random number generator, available at . This is available via a BSD license, which is stored in the source file “libfizmo/src/interpreter/mt19937ar.c”.

libfizmo includes hyphenation patterns provided by the hyph-utf8 project at . For every file's detailed respective copyright information, please refer to the description stored at the top of the corresponding file:

  • “src/locales/en_US/patterns.txt” from hyph-utf8's “hyph-en-us.tex”.
  • “src/locales/de_DE/patterns.txt” from hyph-utf8's “hyph-de-1996.tex”.
  • “src/locales/fr_FR/patterns.txt” from hyph-utf8's “hyph-fr.tex”.

fizmo-0.7.10/libfizmo/doc/create-mds.sh000755 000765 000024 00000001534 12606024314 020624 0ustar00chrenderstaff000000 000000 #!/bin/bash function xslt { if [ "$5" == "true" -a "$2" != "configfile-example" -a "$2" != "libfizmo-initialization" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.md" else OUTPUTFILE="${1}/${2}.md" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-md.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/md.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/libfizmo/doc/create-txts.sh000755 000765 000024 00000001544 12606024314 021044 0ustar00chrenderstaff000000 000000 #!/bin/bash function xslt { if [ "$5" == "true" -a "$2" != "configfile-example" -a "$2" != "libfizmo-initialization" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.txt" else OUTPUTFILE="${1}/${2}.txt" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-ascii.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/ascii.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/libfizmo/doc/libfizmo-initialization.xml000644 000765 000024 00000004604 12606024314 023624 0ustar00chrenderstaff000000 000000

There are six initialization steps:

  • fizmo_register_screen_interface
  • fizmo_register_sound_interface
  • optional: parse_fizmo_config_files
  • fizmo_start
  • parse_fizmo_config_files if not happened before
  • implicit: link_active_interface_to_story

fizmo config files:

  • /etc/fizmo.conf, always parsed.
  • All fizmo/config files in all directories from colon-spearated XDG_CONFIG_DIRS path.
  • $HOME/.config.fizmo

The screen default colors are stored in variables default_foreground_colour and default_background_colour inside output.c. By default, the foreground is initialized as white, the background as black. Initialization is as follows:

  1. By default, the foreground color is set to white, the background to black in output.c.
  2. The screen interface's functions get_default_foreground_colour and get_default_background_colour are evaluated. In case these return valid z_colour values, these are used as the default colors. That means that by returning -1 for one or both of the functions, the screen interface may choose not to alter the interpreter's default values.
  3. The foreground-color and background-color config variables are evaluated from the configuration file(s).
  4. The fizmo-start function's variables screen_default_foreground_color and screen_default_background_colour are evaluated. In case these contains valid z_colour values, they're used as the new default. As in step 2, that means that the default, as evaluated up to this step, may be kept by setting one or both of the values to -1.

Why the additional step 4? While it's already possible to read color information from the screen interface in step 2, step 4 ensures that it's possible to still override the information parsed from the config files in step 3 from the screen interface.

fizmo-0.7.10/libfizmo/doc/readme.xml000644 000765 000024 00000004362 12606024314 020222 0ustar00chrenderstaff000000 000000

libfizmo aims to provide a Z-Machine interpreter core library in plain C. The goal is to have an interpreter library with as little dependencies as possible to allow for easy portability. In order to use it stand-alone, you have to invoke the “fizmo_start” function in “src/interpreter/fizmo.c” with a screen interface. Check fizmo-console for an example.

Currently the interpreter is in beta status, which means it seems to run all non-version-6 games quite well without any known bugs.

Dependencies:

  • libxml2 for parsing of .ifiction files (optional)

Please send bug reports (or other requests) to fizmo@spellbreaker.org.

libfizmo was written by Christoph Ender in 2005-2015.

For the latest version, see .

libfizmo uses the Mersenne twister from as a random number generator implementation:
“A C-program for MT19937, with initialization improved 2002/1/26.
Coded by Takuji Nishimura and Makoto Matsumoto.
Copyright (C) 1997 – 2002, Makoto Matsumoto and Takuji Nishimura,
All rights reserved.”
For full copyright notice see “src/fizmo/mt19937ar.c”.

libfizmo includes hyphenation patterns provided by the hyph-utf8 project at . For every file's detailed respective copyright information, please refer to the description stored at the top of the corresponding file:

Currently fizmo is in beta status, meaning it might do unexpected things such as stop with an error message, crash or cleesh your machine into a frog. There is no warranty of any kind whatsoever and you're entirely on your own when running it.

fizmo-0.7.10/libdrilbo/CHANGELOG.txt000644 000765 000024 00000004203 12606024544 017654 0ustar00chrenderstaff000000 000000 Version 0.2.7 -- October 9, 2015 - Minor changes to autoconf for better comtability to fizmo-dist-0.7.10. Version 0.2.6 -- March 19, 2014 - Adapted to automake v1.14 "subdir-objects" option. - Fixed "AC_CONFIG_AUX_DIR" invocation. - Added "clean-dev" build target for better cleanup of installed development files, which helps debian packaging. Version 0.2.5 -- June 5, 2013 - Renamed "install-locales" to "install-data" build target. - Adapted to new reachar function names in the file system interface. Version 0.2.4 -- December 27, 2012 - Minor fix for libdrilbo build target. Version 0.2.3 -- September 17, 2012 - Adapted to new autoconf/automake build process. Version 0.2.2 -- March 9, 2012 - Fixed missing $(DESTDIR) variable -- should already have been present since version 0.2.1. Version 0.2.1 -- November 6, 2011 - Fixed missing "override" statments for CFLAGS in Makefiles. - Fixed $(DESTDIR) evaluation in config.[default|macports].mk. - Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. - Removed "drilbo-x11.c" requirement for "Xatom.h". Version 0.2.0 -- September 18, 2011 - The "drilbo" library -- "Drilbo Represents an Imaging Libary not only for Blorb Objects" -- is supposed to handle fizmo's graphical related tasks. It makes fizmo's version 0.6 requirement for GTK obsolete, it directly uses libjpg and libpng to load images and provides its own Xlib implementation for X11 output (curentrly only supporting TrueColor). - Implemented support for reading jpeg, png and MG1 graphics, the latter one using code from Mark Howell's pix2gif tool from the ztools package. - Implemented output of jpeg (RGB, Grayscale and JCS_YCbCr) and ppm files in the P6 variant (usually only useful for debugging, P3 variant available, see code). - Implemented output to X11 displays though xlib, truecolor only. - Added support for bilinear scaling. - Implemented a "z_image" type which holds all the data and metadata for images. A z_image may contain either an RGB or a grayscale file with a depth of 8 bit per pixel. fizmo-0.7.10/libdrilbo/config-conds.m4000644 000765 000024 00000000347 12606024321 020435 0ustar00chrenderstaff000000 000000 AM_CONDITIONAL([ENABLE_X11], [test "$enable_x11" != "no"]) AM_CONDITIONAL([ENABLE_JPEG], [test "$enable_jpeg" != "no"]) AM_CONDITIONAL([ENABLE_PNG], [test "$enable_png" != "no"]) fizmo-0.7.10/libdrilbo/config-flags.m4000644 000765 000024 00000001252 12606024321 020417 0ustar00chrenderstaff000000 000000 AC_ARG_ENABLE([x11], [AS_HELP_STRING([--disable-x11], [disable X11 support])], [], [enable_x11=yes]) AC_ARG_ENABLE([jpeg], [AS_HELP_STRING([--disable-jpeg], [disable JPEG support])], [], [enable_jpeg=yes]) AC_ARG_WITH([jpeg-includedir], [AS_HELP_STRING([--with-jpeg-includedir], [Specify include directory to use for libjpeg])], [], [with_jpeg_includedir=]) AC_ARG_WITH([jpeg-libdir], [AS_HELP_STRING([--with-jpeg-libdir], [Specify library directory for libjpeg])], [], [with_jpeg_libdir=]) AC_ARG_ENABLE([png], [AS_HELP_STRING([--disable-png], [disable PNG support])], [], [enable_png=yes]) fizmo-0.7.10/libdrilbo/config-libs.m4000644 000765 000024 00000003601 12606024321 020254 0ustar00chrenderstaff000000 000000 AS_IF([test "x$enable_x11" != "xno"], [ PKG_CHECK_MODULES([x11], [x11]) AS_IF([test "x$libdrilbo_reqs" != "x"], [ libdrilbo_reqs+=", " ]) libdrilbo_reqs+="x11" ]) AS_IF([test "x$enable_jpeg" != "xno"], [ PKG_CHECK_MODULES( [jpeg], [jpeg], [AS_IF([test "x$libdrilbo_reqs" != "x"], [ libdrilbo_reqs+=", " ]) libdrilbo_reqs+="jpeg" ], [for dir in $with_jpeg_includedir /usr/include /usr/local/include /opt/local/include ; do AC_MSG_CHECKING(for $dir/jpeglib.h) if [ test -e $dir/jpeglib.h ]; then AC_MSG_RESULT(yes) jpeglib_h_dir=$dir break else AC_MSG_RESULT(no) fi done if [ test "x$jpeglib_h_dir" == "x"] ; then echo "Could not find libjpeg.h." echo "Try setting the location using --with-jpeg-libdir." exit fi libdrilbo_nonpkg_cflags+="-I$jpeglib_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-ljpeg" for dir in $with_jpeg_libdir /usr/lib /usr/local/lib /opt/local/lib ; do AC_MSG_CHECKING(for libjpeg in $dir) LDFLAGS="-L$dir" AC_TRY_LINK( [#include #include "$jpeglib_h_dir/jpeglib.h"], [struct jpeg_decompress_struct cinfo; jpeg_create_decompress(&cinfo);], [AC_MSG_RESULT(yes) jpeglib_l_dir=$dir break], [AC_MSG_RESULT(no)]) done if [ test "x$jpeglib_l_dir" == "x"] ; then echo "Could not find libjpeg." echo "Try setting the location using --with-jpeg-libdir." exit fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED libdrilbo_nonpkg_libs="-L$jpeglib_l_dir -ljpeg" ]) ]) AS_IF([test "x$enable_png" != "xno"], [ PKG_CHECK_MODULES([png], [libpng >= 1.2]) AS_IF([test "x$libdrilbo_reqs" != "x"], [ libdrilbo_reqs+=", " ]) libdrilbo_reqs+="libpng >= 1.2" ]) fizmo-0.7.10/libdrilbo/config-subst.m4000644 000765 000024 00000000767 12606024321 020475 0ustar00chrenderstaff000000 000000 # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. AC_SUBST([libdrilbo_CFLAGS], "-I$build_prefix_cflags $x11_CFLAGS $jpeg_CFLAGS $libdrilbo_nonpkg_cflags $png_CFLAGS") AC_SUBST([libdrilbo_LIBS], "-L$build_prefix_libs -ldrilbo -lpthread $x11_LIBS $jpeg_LIBS $libdrilbo_nonpkg_libs $png_LIBS") fizmo-0.7.10/libdrilbo/configure.ac000644 000765 000024 00000005213 12606024321 020105 0ustar00chrenderstaff000000 000000 # configure.ac # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AC_ARG_ENABLE([tracing], [AS_HELP_STRING([--enable-tracing], [enable tracelog for debugging])], [], [enable_tracing=no]) #AC_ARG_WITH([dev-build-prefix], # [AS_HELP_STRING([--with-dev-build-prefix], # [Specify directory install development files to])], # [] # [with_dev_build_prefix=]) m4_include(config-flags.m4) AC_INIT( [libdrilbo], [0.2.7], fizmo@spellbreaker.org, libdrilbo) AC_CONFIG_AUX_DIR([.]) libdrilbo_reqs="libfizmo >= 0.7.8" libdrilbo_nonpkg_cflags="" libdrilbo_nonpkg_libs="" PKG_CHECK_MODULES([libfizmo], [libfizmo >= 0.7.8]) m4_include(config-libs.m4) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_PROG_CC AC_PROG_RANLIB AM_PROG_AR #AS_IF([test "x$with_dev_build_prefix" == "x"], # [with_dev_build_prefix="$DESTDIR$prefix"]) #AC_SUBST([DEV_BUILD_PREFIX], $with_dev_build_prefix) AC_SUBST([DEV_BUILD_PREFIX], "$DESTDIR$prefix") AC_SUBST([LIBDRILBO_REQS], $libdrilbo_reqs) AC_SUBST([LIBDRILBO_NONPKG_CFLAGS], $libdrilbo_nonpkg_cflags) AC_SUBST([LIBDRILBO_NONPKG_LIBS], $libdrilbo_nonpkg_libs) AM_CONDITIONAL([ENABLE_TRACING], [test "$enable_tracing" = "yes"]) m4_include(config-conds.m4) AC_CONFIG_FILES([Makefile src/drilbo/Makefile]) AC_OUTPUT fizmo-0.7.10/libdrilbo/COPYRIGHT.txt000644 000765 000024 00000002701 12606024544 017736 0ustar00chrenderstaff000000 000000 Copyright (c) 2009-2015 Christoph Ender All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. fizmo-0.7.10/libdrilbo/doc/000755 000765 000024 00000000000 12606024321 016363 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libdrilbo/Makefile.am000644 000765 000024 00000006657 12606024321 017670 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AUTOMAKE_OPTIONS = -Wno-override localedir = $(datarootdir)/fizmo/locales fizmo_build_prefix=$(DEV_BUILD_PREFIX) PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig PKGFILE = $(PKG_DIR)/libdrilbo.pc SUBDIRS = src/drilbo . noinst_LIBRARIES = libdrilbo.a libdrilbo.a:: cd src/drilbo ; make mv src/drilbo/libdrilbo.a . install-dev:: libdrilbo.a mkdir -p "$(fizmo_build_prefix)"/lib/fizmo cp libdrilbo.a "$(fizmo_build_prefix)"/lib/fizmo mkdir -p "$(fizmo_build_prefix)"/include/fizmo/drilbo cp src/drilbo/*.h "$(fizmo_build_prefix)"/include/fizmo/drilbo mkdir -p "$(PKG_DIR)" echo 'prefix=$(fizmo_build_prefix)' >"$(PKGFILE)" echo 'exec_prefix=$${prefix}' >>"$(PKGFILE)" echo 'libdir=$${exec_prefix}/lib/fizmo' >>"$(PKGFILE)" echo 'includedir=$${prefix}/include/fizmo' >>"$(PKGFILE)" echo >>"$(PKGFILE)" echo 'Name: libdrilbo' >>"$(PKGFILE)" echo 'Description: libdrilbo' >>"$(PKGFILE)" echo 'Version: 0.2.7' >>"$(PKGFILE)" echo 'Requires: $(LIBDRILBO_REQS)' >>"$(PKGFILE)" echo 'Requires.private:' >>"$(PKGFILE)" echo 'Cflags: -I$(fizmo_build_prefix)/include/fizmo $(LIBDRILBO_NONPKG_CFLAGS) ' >>"$(PKGFILE)" echo 'Libs: -L$(fizmo_build_prefix)/lib/fizmo -ldrilbo -lpthread $(LIBDRILBO_NONPKG_LIBS)' >>"$(PKGFILE)" echo >>"$(PKGFILE)" install-data-local:: mkdir -p "$(DESTDIR)$(localedir)" for l in `cd src/locales ; ls -d ??_??`; \ do \ mkdir -p "$(DESTDIR)$(localedir)/$$l" ; \ cp src/locales/$$l/*.txt "$(DESTDIR)$(localedir)/$$l" ; \ done # About "-rmdir": make ignores errors of commands which are prefixed with # a - sign. rmdir may fail in clean-dev in case other libs have installed # development files, or in case clean-dev has been run before. clean-dev:: -rm "$(fizmo_build_prefix)/lib/fizmo/libdrilbo.a" -rmdir "$(fizmo_build_prefix)/lib/fizmo" rm -rf "$(fizmo_build_prefix)/include/fizmo/drilbo" -rmdir "$(fizmo_build_prefix)/include/fizmo" -rmdir "$(fizmo_build_prefix)/include" -rm "$(PKGFILE)" -rmdir "$(PKG_DIR)" -rmdir "$(fizmo_build_prefix)/lib" fizmo-0.7.10/libdrilbo/Makefile.in000644 000765 000024 00000063241 12606024550 017675 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : subdir = libdrilbo ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libdrilbo_a_AR = $(AR) $(ARFLAGS) libdrilbo_a_LIBADD = libdrilbo_a_SOURCES = libdrilbo.c libdrilbo_a_OBJECTS = libdrilbo.$(OBJEXT) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = libdrilbo.c DIST_SOURCES = libdrilbo.c RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = $(datarootdir)/fizmo/locales localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AUTOMAKE_OPTIONS = -Wno-override fizmo_build_prefix = $(DEV_BUILD_PREFIX) PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig PKGFILE = $(PKG_DIR)/libdrilbo.pc SUBDIRS = src/drilbo . noinst_LIBRARIES = libdrilbo.a all: all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 libdrilbo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libdrilbo/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrilbo.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 @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 check-am: all-am check: check-recursive all-am: Makefile $(LIBRARIES) installdirs: installdirs-recursive installdirs-am: 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: 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-recursive clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: 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 -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-noinstLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local 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 installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile libdrilbo.a:: cd src/drilbo ; make mv src/drilbo/libdrilbo.a . install-dev:: libdrilbo.a mkdir -p "$(fizmo_build_prefix)"/lib/fizmo cp libdrilbo.a "$(fizmo_build_prefix)"/lib/fizmo mkdir -p "$(fizmo_build_prefix)"/include/fizmo/drilbo cp src/drilbo/*.h "$(fizmo_build_prefix)"/include/fizmo/drilbo mkdir -p "$(PKG_DIR)" echo 'prefix=$(fizmo_build_prefix)' >"$(PKGFILE)" echo 'exec_prefix=$${prefix}' >>"$(PKGFILE)" echo 'libdir=$${exec_prefix}/lib/fizmo' >>"$(PKGFILE)" echo 'includedir=$${prefix}/include/fizmo' >>"$(PKGFILE)" echo >>"$(PKGFILE)" echo 'Name: libdrilbo' >>"$(PKGFILE)" echo 'Description: libdrilbo' >>"$(PKGFILE)" echo 'Version: 0.2.7' >>"$(PKGFILE)" echo 'Requires: $(LIBDRILBO_REQS)' >>"$(PKGFILE)" echo 'Requires.private:' >>"$(PKGFILE)" echo 'Cflags: -I$(fizmo_build_prefix)/include/fizmo $(LIBDRILBO_NONPKG_CFLAGS) ' >>"$(PKGFILE)" echo 'Libs: -L$(fizmo_build_prefix)/lib/fizmo -ldrilbo -lpthread $(LIBDRILBO_NONPKG_LIBS)' >>"$(PKGFILE)" echo >>"$(PKGFILE)" install-data-local:: mkdir -p "$(DESTDIR)$(localedir)" for l in `cd src/locales ; ls -d ??_??`; \ do \ mkdir -p "$(DESTDIR)$(localedir)/$$l" ; \ cp src/locales/$$l/*.txt "$(DESTDIR)$(localedir)/$$l" ; \ done # About "-rmdir": make ignores errors of commands which are prefixed with # a - sign. rmdir may fail in clean-dev in case other libs have installed # development files, or in case clean-dev has been run before. clean-dev:: -rm "$(fizmo_build_prefix)/lib/fizmo/libdrilbo.a" -rmdir "$(fizmo_build_prefix)/lib/fizmo" rm -rf "$(fizmo_build_prefix)/include/fizmo/drilbo" -rmdir "$(fizmo_build_prefix)/include/fizmo" -rmdir "$(fizmo_build_prefix)/include" -rm "$(PKGFILE)" -rmdir "$(PKG_DIR)" -rmdir "$(fizmo_build_prefix)/lib" # 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: fizmo-0.7.10/libdrilbo/README.txt000644 000765 000024 00000005324 12606024545 017330 0ustar00chrenderstaff000000 000000 Drilbo (Drilbo Represents an Imaging Libary not only for Blorb Objects) is the imaging support library for the fizmo interpreter. It supports the following file input formats: - JPEG - PNG - Z-Machine V6 graphics, MG1 format Not supported: - Z-Machine V6 graphics, Amiga and Macintosh format The following file output formats are supported: - JPEG in RGB, Grayscale and JCS_YCbCr. - PPM, P6 variant (usually for testing purposes, P3 variant available, but outcommented in the code). The following screen output methods are supported: - X11 display though XLib, Truecolor only. These imaging operations are implemented: - Bilinear scaling All operations use a "z_image" type which holds all the data and metadata for images. A z_image may contain either an RGB or a grayscale file with a depth of 8 bit per pixel. See "drilbo.h" for more information on the specific functions. --- From The Z-Machine-Specification, section 8 (just for reference): Some details of the known IBM graphics files are given in Paul David Doherty's "Infocom Fact Sheet". See also Mark Howell's program "pix2gif", which extracts pictures to GIF files. (This is one of his "Ztools" programs.) Although Version 6 graphics files are not specified here, and were released in several different formats by Infocom for different computers, a consensus seems to have emerged that the MCGA pictures are the ones to adopt (files with filenames *.MG1). These are visually identical to Amiga pictures (whose format has been deciphered by Mark Knibbs). However, some Version 6 story files were tailored to the interpreters they would run on, and use the pictures differently according to what they expect the pictures to be. (For instance, an Amiga-intended story file will use one big Amiga-format picture where an MSDOS-intended story file will use several smaller MCGA ones.) The easiest option is to interpret only DOS-intended Version 6 story files and only MCGA pictures. But it may be helpful to examine the Frotz source code, as Frotz implements draw_picture and picture_data so that Amiga and Macintosh forms of Version 6 story files can also be used. It is generally felt that newly-written graphical games should not imitate the old Infocom graphics formats, which are very awkward to construct and have been overtaken by technology. Instead, the draft Blorb proposal for packaging up resources with Z-machine games calls for PNG format graphics glued together in a fairly simple way. An ideal Version 6 interpreter ought to understand both the four Infocom picture-sets and any Blorb set, thus catering for old and new games alike. fizmo-0.7.10/libdrilbo/src/000755 000765 000024 00000000000 12606024321 016405 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libdrilbo/src/drilbo/000755 000765 000024 00000000000 12606024550 017664 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libdrilbo/src/locales/000755 000765 000024 00000000000 12606024321 020027 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libdrilbo/src/test/000755 000765 000024 00000000000 12606024321 017364 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libdrilbo/src/test/infocom-brain-ad.jpg000644 000765 000024 00000715007 12606024321 023205 0ustar00chrenderstaff000000 000000 JFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222Gf" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?_J(zv1\f$Ӏ@RS&9&9#4F8@ bbs0GzvM&?:AztX(н(F})N:SޓoC@ Gz1Lw.9ԀiGK L@F(4{QN HS֏lq@ F.8.N h6c=H?&rqw\\z@ƗlSIp#btҐ rh?Z? ^ܜ'/=1G~9 gRA)v9Rg)zZV4ޝL{RE cҌfL|QF=i}!;Rouo94x`Ӛ1wAGNh\m`>n9c`LN3O)s@ 1K\P}Eh1IN9hϵQcuhQGQ@w+c"Qh ғo;t@^1N(ǹz\})ؤ(I֜^+E88Jړ?F=))yҤǽ~);R(g>}IhPTc5WQP3Ji E@S@8 v3J bOJj?ԄcҀ#<)=xhih:T0(#4zь`b0I@ 9zR)1@QM4iI4mHqIHF~I)9GNԛpy4i?;Ҍs@v.=:1R)PGN4qPRh(r>LgF1@4c)I>iPFzdP8JOPp (4PcҁӳzRin@;brHCw8李))A?a(4sJWq_Z:{P1J" PZM7֟Rc7O(@ M95&NMy qcPqQޝub ׽.(*? ]~֝ip`u`p)g(8zQzqN(u!^)—N =)Q^(ͽj\sKdͧPu杌@ +ڍnE;&0hd?vE;lSm8PHnG^4S1Rzhִ3J6xҁLU'zw҃@ E(Ji0;)hRڀ4s҂2An(E?({PF(4)p bǵ8 1I< ۞i mjhl{x⍼zԠRm\qҤd[qIja4!1ڔQbPAc@ dSсuP4L`4@"Sh`TQ߁;XQ;ތsJ3491R3ivduh=) mӈsҀڌdӂ@Zv91 dt.= n="яz`7S N(c?<㞔 AAR㞔+RciLRswOzNhǵ.)q& iqޗP1;PsK(@ S@4?Qn=(;QQ:ӽ(qA^J;b qӿƃ@ Qj~=q Rץ>ԃ4)N @ Z .4Ra'*09eO^Hc`)◜`O'|ʀݩ֗h{~iFN¸iOZ HM.Ƃ9wSH` w'z@)O-!i6F)(9Koj\f8N(9ɤb$0}j Tr9Tc/=M(!21ҧ+ب,f1KM. =9OTsKSBv,! !lSR ž‘JEӵRU'^)xϽU5$2 zS g4. 4ړ4nJqq֎٤ =1Ӛv Z\zRnǽ 4 ]nƕ4 PG\Rif8Zvaj^3@aPTaKJJQن1HNFn:Rq@r`n>@#ҁ<)zRO\`n2{Riw/LqL=8>tLQ) j7 >(%O@ $fӉ+TU'n\ӷ94 .)7pi7QaR3J7p(\wz 7x4nX.:JieFJqZ;ѹqnX.:c484nqq7p`)z) :`׭'| LދţҐ26#qNqzFh1֍JprѹzG?pЄ4\G{ r ^cvwiizTOqFT87u!>u1H;f4Cj(<M 8@Ws; zb; @<4fNcG֎u!9IzӇ=(sCN4=)s)S&{3Gփ֐du(h{P(h=i3\fsP3\R{PhȠBI.qHOIj9P~`g>ԤR!i ;uT@ Fh~T/~NGҚ5% 8)g3cޔ\P1(ǽ;Q _zqCFzE!?ޗNE4J)US<i=j;SZANB4Nz>Z;R vϥ59.)SzVOv-9 pA<¾xNؾ|7ӴYz7 ?k=q<'_=<\jwӨuyMi^Df45ry H<3M*Ʈw8?AQWv.N`X\o`۬^cpR'5Íڽ-? 5}E!a>k~$C3)wbĂIbp5h)nhZWfʚ⫻32IVg%v^8Ƶ/p?|.֔Z𝏷I'u@VF?42?:=5xY!eOO=> `)?7b0^9Ϫ MfP^:ԝ䷧=zC(*woZD.v},`+7({;ۘqStGҾ"zu{[hlZdn튗Ѽzd*ժNuqZ9MQ_$lon_hp/.s枴GE>%ȽѨ_||4r1q0w"]߈of>7 *s@:y?Y%Nο TƠohV:ܢ @Ln9Z*ds}#Al]mFQUu܄mPmӰ /S~z AL [ 4ƾ:D+y4p1sWØ$w~2Ү_[*u?Z_܃9{!g09)bKnс:WxC\2[kh}>S(X=s[\q MHC+#֭+d LWZgn-BИ>!aޣ#BMx׏~)KK蒘\ܯ]߭^S."A,ߐ90f v)eb_:_tdًNO֩3$SD9}Ai{·DM#uZv$#>wIW,5K>UwX=:]G;S7oJIڗ=7׭ QY2R$ϵ@ҁt BOR[ڹ<}$dSPpGVr#61{qC[R{ԛ}  dsGd?7rS=;3)NGt}Z${IS?'UoxfǬ8g?+uVbܜjArc=Rz<7F$TFFʦfOGZ^Mn|GB+| &6C /V(izodX?xe얗39C}tu;Ndg_OpfCŴ¸;.@Ē@9W$Z/lz1j__%. $9;K̿8yf93[U?hWUv= #_&`r SUOًaY!EIox^ /'@j<  u닏gĐ؜tߑ֡2H\w5gk6 O>xTH# KNk_ߴk87|o9\eB=N0i5msg>z3A#E Wͷ#RBR)v>.1Ro+H^B~GRk:VO4<~͋x,(޾;W 3\qM 7 [79=i&b71_ڧq }/M;3QhjWgW$˰QqQ31?. ^eb]JVw)w)Bncf0M$ϿJ~^L3b<(Y\\/{nkX >m?bc{q5%F!|~&.X#~͏#/R~"|g˞~RIyuE*ҏd#?R4d0szab  +9F^5aٜIOGīΤ6;r~A\qnǚS1GN?a)?p?z@>{bi&.cĻvOf=kԯíÃk#Hpcfd|w>,k?1bq{,0|#2\,Eee=<"_أa|f g?S 9cG9g?/SՎ"OL8>s&s6Уv u \.Tg>K:>=٨)&98@.i?4~49< Ay'Hc4Q =˃0 JGNޛN`.8Ҕ@q`.)1 (4A4bH6V_+붟`nmW0HՌ;>m9s[zƪٞzт˿nqOJӧ0*΄zk;sN38U< $rF3\Fhe9T:.|Y+q]τn2lTq -ϊn# ۢ׎\tmQ̻I`$`)yg#=:RLːqSOVBhXB$+ѼCs?j7#[~ /cvD2gw^ Ҳ?<bmBB$$sQԳpr`sjмp3ޠ*&I'<+{fcN7wpڤ 4I?5DMhFQ@Tp>o]aR%\y@|HXX;*/m ge$0\d7Q,^Ny[t`9#ϴr=!"|+2+qVWY3> %Pnsx+ Nz.?;WG_~R3 s_UGykH"v@'N?Z5(.*zU{۸,f8P`3VrJVX*I]{MjC7r@\o?1*g=U)8nc1X)AH :< ඣufjTמPI\} +H?c]2O +jq4}:wkQptwnqOT<فci$6Ǯ1 ~SYӠ7e0fb?$gM瓚h(F3A9ӣI$hY@tx' tk_ Jϋ4BxmNKz|o/[;7w]'s.LTƗP0X Lg9zXԴ {u&}?eI7(__JOqY|9fBWbx Mx_|C6\H sW4ʽy5#ɼ$ީ:;a#pRG|sZl $k߃o]UݸU"?2[(SH EH.0w9 ƙYn9F~k:&es1#nW)M\HGR[zq)PF| ??ZۯnOZ:Ȟ .[=: 9+<6KeΙj~кEU\ i+>gJ,Z#K[i:sj1!B,xi6Hd z_ZyLIv<xW}[Yt Kz`W(u*Hy\*⽋ WLRּݒgʅnG?ʩ"o_›=N:dPXB^Y<4a~nކd72 ^q_G-4ΈldqhV=Y;~]?*ᧈ5 ?5^ysዱ{q| c^0}OY=g \fح0H1tIϥ0zTa|^y ;־l?JgWɖWKobv?S ۣc-^NȨ<8[zg;Jہ6j2G$d< 'i8rE+E}^揨/MM=-|x*<5 -<V ga3Mÿ0kbp=~ sYh\{+[bJwx;#[;`FzgHS:C#{?x5䛤 ÿ]4MdVѵ1~u:&5#i'@}j#f$1:$3+pnI?ζKeO5N]g&H5ݹ ss_ :筲f;Y"n+Z0q#lD?WPM =Njhu c͸3128 {Ղd.Fy#jY ZXaA qOYW瓞k5ڟngaq4{DsҼ A҂HzP}B)ڳ$c Iz[mWo+G,LXpsX{ԑ\28!#[#6k[Np䑷x'Yg׉,IZʫ1WvYFN[PmM{`v~ meErqZ3̸H }Q+~4u+,vf5Z?<">M񬡹oõܝz \6FE~GZCL9,_*cv(ci 3j\9* Zd`}90g>xGK8uURi6G3QOoUizG{K:Cd_8Zږ=3fꨊ[vF| sY@=:gM݂'RENb6$ |q@92v}}I[ dn>KRj =D?.~Ȥy3 Fq^ēB!-X%ih ,먙. 9 J$\׋9)@3p:TPH?W9'=E7ql?L5bU\yNaNۭv+@ x!Q89'?*~ ~A7"L`E#WgB+3q}+ 6"O^uxu͚1Gk)1}-cELqVf&|QiJ.K~d~ q6 2ҶPw0=2s6?aoe1JǠ'i#zȮ+X~-<_ɒey鑝|79mnE|/5c,vm9?*|c5@➠>/q!)T50ݟzׯM=įǑ>Vefǡ9V'/玼_K2> \aw9$,v7M*?rDp>(wEHmѹ~G\ğSyiyZYr'=}⬐=㑞kY+n+:8H7n8⽷>|G+ħBl s`o={ڠړ9\=>b$rp x~ R`C+-ie=21fG99wm9Ϧ_?O z8>%+r'Z^19A]`O܀y^On3fOu0H#_,uk+'Rր=(kuOdc n5s_JMT*psVݮڐG*~?0~ wz*ޕ['vڒ+KҦNh|'R 1|s;WsJ ]F+ T!ʐ0ozNVo’''2G%7awLWIማ[q2s~kdg'$Q̶{Cq#gTNIqm*)HɧXP}O@6!zzRjQI` j(:R2dSE?XLT!Œ@h=E8tߌs>.i7h&)8d7ʼm?Cz9O_i}yc"YVVS*n ']fh}fLK>D}ּO[ :gppI" !wOvGyܪd.S2yh+6$*cTTF6:gޙ H$czqOIT*3<+W:_:t ;F<&?j{YLWHpzŝ^;=UQf? ůy},D-8?Ο;J*^Qȩc2}sV!u=WV􁈡 wc kKLtW'6n&8>F?k># v'x?.e?cO>ZMrNs J\s}C>L8;J+sھ:eӏ׭_'&t_7R۳|}=x~!B#q)H\b+ȾVռG{gk21z8ڳi +0G*9gֻCYΞubrJ-r`@p8ϥok\ַu=?vy?ⴱwLV%^zcھg *;gQ_&Ӎ @M~77GaGzM\UgUj5]l1`8?r~a% ߑ'Wh gk'qk ~:õr?1=}S?ا|uIA7 g_P6 㱪a[{\`x̍oSy_z+-q9 `}Yr*寔m(0@&LkkǏjL38G' :6#Xn*{V&,~ k\z ğƼv\eIȮ^q֫4cmU1}kGMEa3I*0ݜ{We/]!Q3ЅN@}MhH$f9nHдVEG^?Pzv [+q>I s\ԸqrESPq*]>t 1厗ZZvcvN}}OkK*YKVݲ_\ߎŏu)O?!tָ?y^ a΋JMIC[iS=-))<>[-=ބU%0}mGeaom"Pcb^0^,+SSG翝Yw0A٬?:ֳB=gi4 ?嬃s~g\l;k{粯! !fitzaUI޼;7xu1{}OZZ?MZWA 8,'$w h9 сK2 Rp+}PqnsךjWT'N98޺0L+n;V,Uס뺫6劮pru2`62r< w(sxGJdU?&׭V j1k=Vݤ{ȠT0cR|4 씶ls늊.:3ߧ?#}+MSIxjq`snOQ@˔,qӮMZWXO= N[9Ŷ얗$## {ȲFH#khd)Cr{^ -n,ەtTIj\em+( :R0AQAE*X+sc0u%Њwjq9_r#翊&lȲ鑃^nX*ɑ-6#?Fy0Ek-i:q_Hjk_CKb?`ͶvF:+5t573#Խd?ץ(S}\\F-؅R;k9FƜw,7R1tW ?/A}k+_#tWX"Du%U2_B q( )cֽNac˦Ġ@mYNFn_#<Lͷb$^Glm KI;sז;$,Miw`]7lB /zw_$W*Ф|Io;1۟=?<~U56&gL:q\R8=^|OS2qǥp^xZ)A:ϭ{eF|ׁ>)6WTw}qud i>/+k7 c߭zO½UXRèn64{F9K*K4gCRu 3!$ICJy4RȢ JԢ*Ās_yUV0r:uW@-4@UFWa<-EA}C֧N2{sWwSGoj @7n~y u[{`*qqi{004XDQQ+1 ?=˞2gp4wK6GU#-=O֧XD;AqդB*$$XNjhc;A`r2Moi5eycנ[Q=ͥshv)t ڼ}'+q{c$0Yw1N1^)n\C"bҚGZy/b6ԴlUcZ{ּ"NhFLpGlW \oc(x6u'֊].7>f6v>Gi䌜WQvCx/#h[2z\ѱ;slAftv(m=ɯ{q㳫ZݨԄ k稛k|>\v[nr$Gc֤Xf?42>hAb??kYsW-RL!{cd<W.ctXro| )'sVFށ#-Y]@+_)hEd ^[1]K ;?1"xЈd'ZV_R@Tv O>575 $zznk6E܅f gN:$ .1Φ,c X5_ ix#W*rt=sWkl|]9b1p?]O 7LPhdj)a_1|CB+p|?ҾlY|S≖ J;M`o'tP,\?)N}M]prO3M]?#oZ?yA!_Rl"`XBL_UxCYMk6WcهI7+پk'Jw8yfG1Vr^m74M< ΃fB'? sʥA$}b7uw W1[hҴ["^P2q]àiVǮ2]w&tVI_GԊ'=OqEax́vҹH!vǼX=53q9'Rw4ӌRDfEAU+ mi8'scu}s06 Q,(=x #0=7`#m^0:%?^ULi#5Z:5?X"׽V ߊɞrjj"H/^|EQRW'Ӛd<  18?`?h]O>iSGnՌ0pHQ@mkk$Ǎx/{b FPá: I*z C&>F)YXh;rמ^ -^q)@ed?在?53wJ#J8I9>b'\g]j_}㒧zSE|xOv?`_Ex.<#m#XUQyeox)ϔ[&]_'i88^zj)ՙ7<ӥ n*k`ll'ھVO<aҾMr.\n#nӇsr)1Ջi@Sb~RN={L >Ɯ+$F?ʺ"YycI{mF:GҖX%S4n\אip`u#$tѵD9…L'8[g\nZ{O`AF[J Wʺ+v "eͻqX|+D|g$ֹu42؆$09"$E'یCy)*sƯ:e}ǯh'1F 7uSNPy} Gl.NsV~J_Oހ ;݂'8yQs׆( "8?7|^Ijʾa3]Ò j2֤t, *HF1L`+ 8s{)7g9 NJBNAqZKo u" e&`g ˴EbsNHlҠ y8⥌s 9dIBW'9Fq^#c!koM̡1<NOb&ݲMo{fϽS*U򮠎zH 2&7' Z}q;"@;cף-6% TKV@ϡ9"= q9.ὴ5T!EZӸӽQf93=gO|Guj][JGgCǡ=V[Ҡ9A'=T1j;Lw%Y|`?*ۚE42k2⾟GЂW7XBWz¾u)[0E|@DccֵLT(`Otu-MBx\?NR $qȎ]A:iRIR7q8Du|B^$-瓒?uGTx3֯>X/u1O6qԚMبϟmF ?P^Mcp%ЃcZ{j0 &WO7Z`v?Jkؑ%YI#b~f'5 ?+rv=Pγ`0yp'ɘk¾ oB_'QJ XU6G͸Yg&5ax)<[!J=(͎]f:Wt ϭ S;OfЬXuXTWaG;sg7_OcSSaGu<ߧ89]j\2A\@…ީ Ӱu#ښZO"IM2QG@s䁒:+> Onݹ k|%!<L:~+V4ֆ(PKd_B{ ꆓ<⚅ o$XozF8'=)}TP̪X 3I|Զpa?%k?3Q,{W~𵷆tm 3KU+Qq*UA5ב`٤RbK2zo?y*3Ƿ5_12*o3a'<ҵD=ȈS@AzTux{:ö`H\u"inQ@#h?yZ7$V AW6/c2wx{[8D,cCYKPwGz\Ph699lR:QE c{RcOqE8TTv98Z8S)R 8SN4LJp{RNiSLaN撐?T7.\/Jzꦼ  z^'O 4DӑxE #<+璴#%l(o'֥ Px[sχҙ|BS>#;'{fzl,7[O>8k5|uۓݾnz~UKݵʞxZWvۻq9MBFJe546=g=_YF_(]G9?}\и -|uωUb*L:|ƾck_'w`I?5P9lq9$O/`Ԏ*W9an<- F߭4frFͼȤ'vA`W1Iۯ>OhGm*o5{Ex4YtmVTs Mlf/)= -.DX2CZۊU<\G>4#a\}-y[zC+L r7Oݽ]u&qD VR85?FQIjk#-+ $ uk3 8O=>99 'QYrO\cu.ezOD&{Gt|-lpSق_W\ں; zD3[y#ZIU@Hd@#[4;]#*g#WC]UR)}Gq+@T(\GLdmҞ]\wkM9P:?#KCG] V{Nk6M} B5dO0N57?$7Q~.ҵ{6ݘ'b:dr8khWi[ȅG 8f2m|l;A`A<9SWvpDTwfE\J^,MOA >v?Q]wQx%?iS#㱧"|};Vi2}tX-vusZ-vHA3UO''%hШe.rJ~!!OWW>\ndwLd^nz~mlmgxKvy?NG=i(x@_7<2*?F.'VIuK4_%Vw;Sȩ_5{lyuכD֭ $pħrmGV7C#zbgPL’2v}2`]_Veuq2X>2:(K[t( BvcGZ>U ⩟z]gCk6)Яɇqy?#ad]#x/Whݣ 7?F2lNk ;A^G麸{웗z1V)ꑒfFI}j0~dMye>]%XҚV=s tOÖ7"ϖ=V\Ꮖmci$$/<\Rl^Jb!{ բ1I;ma0\KTʾ`Ug}w\IeǚH<"2у/yx(dRXsS3=9HѬ<A7qe?hI"sOSf\Յ=%h"*Tzwfg=yz gZX#IjnjU<e_ [8y_6GVtl$9@"Fj@1،OD}ˌc*Q;SXi-wArƬq,׍ #?Ҿ4u?Y>IQ9oL5 B$b%l*jiYElj-NƊGO"sJ񞝨Wl-ᕣ0q?ҼwL>KK%_DŽ|ðC;'-u'O5|ӹ_=h5 ,&aw u$5]JǦAr??.FZYxe s*(,μQ6s]o'~I#=1 IUfd ~LR/2:+cV2c54^o n>{XbH"ސ5djG:_)xuK]432t='azb,[z v gi &HWPrAnpˍȡ>֯ +rt,x#O'9\u 1jc6Zld^3!Y1 /JNZi`E*%EI#Xy>j| On9" s+[ٲ[ p99 HӸ?j'ir3t68nqQMT;^ )a#<ֽ@L9?EvB'kD9ngg(Tn >kjq-06C DOR?jDߑߝp}Hb@ p4&`#={l 7P(zr;4jGOI݅S:-[:T+bn@RZğ6v߫$" 2:{4W1Ko&GC!4W/_Ep2w$Z',HSz<2ċ"dݷ'a\7GArO}Um߆;ih}1՞$o X`QMW!<|MI.VRq?7rz>xg=o}'"=o^6 x?}Sa57 pk +2 @L}z)y pMw؏ `?>`N}zVD#P^X/ R1#6|8eueoqu֔d4m|VK8NGZ'^@ލ")9)=qKMSLRXi44 ҌP}90 qA4I1E(2O皌{Sǩ5d ZZnF4Ji)E4 K:QESZO˜gwdZE'3BRBTJ\~}ie}q_1@FI]2Bz?*BdӣF:U;V8B;$:daqi5cv +nog +bqg4-dBD;ds֫u }I[:\ȄaԐ -l}Ot"5 , Lfn׉AF }#{/ ` X{Oj*㹭:W23}k%|c}?# T<ኇo j’O4d*\֩eD20v?xg*h9:wsFÑ~ }_3iQ㤫{iTV3ܸ MpW)x_ks;n=dW [L/Rd2e#DPFz֩^nm^ PA }Pr95grEGN~ w6I\U牟G*NNOCI"7ÌA<׵QŬDI9vzT^n 28ia}{χ;g4ZZIIJN"B >!|CZq+> G+ggWo'rgMW:t֤ѝ̀pO'֡11r䃑B].=Qg$_V'Jz"Q־@v 7C_3V2s5ɯk#$_Y^4[%]YIE@*CZ[ݎt~OL9oOqyjidRSIDg4F3sDži|CZ烼!\k7bTdq@کԿ539~T>~y&Y 2I_hgĤx'O¥I<ܾؓ(RV>0[SE\Z /.AoL:om–uO1#㤍on<'$׃U+zvX|vi Nǭ_+!u qx2?+F `nk vl'Ã?Dgr y jX R=T^?_½ #k iEl9㩬";2kDwUԂ? .4sl'46^+JKÏ^Oʜ24qE؊t##mhյ-ўY6 5=v%|75~-w۷r9AS&4^AafxEycG?tԻ;;|iC#I9FRCpk|;Z^] !5tۦXdv֫]_fi7a|.:̄#8'W󭿎m?q+t.E!K׎Xי|cN߷vk#0O(Btzҍ6@^k]I#T \E6qxKA|Wjz|zwc&1-Y/@}=OwcJ8Z_ZANeܣq+2WڗI5čprg[QW2AǸDy#++ `p?;L[F y\ tk?F?׭7W^iRgu~MY>W'19Ҳz{uhn& zp9.[9n#!b9_sg6HU 8mAy_u|tADdE!j]vԿKav*OCYd'vpkkѯ3\Ti=cԈORw]Z^):ƴm9cZ^ 5A:=Fp=goÏb+w i}> 9R`[ +l39 ӘLf'|+>曘wHF};Xz0y݂qWMtWH7V֧,Pm*Y!:i7,>цtnitFzOMqO+/e/j5Y4dqX{ 򟉺.xe?!Ff)i- ۸@;yNܣw|+2t=cY? 7VFv:?c'OÕ=Y&`_Z_:>e_5ŕ(l2W\Tՙ:]^?pD~&>=:Cr6;{ s $d߈furH֤;F28$2Z%0,urIKme9nZ%w q3Ҭ܀[qV^jS,6L ">rقܧmm$bX(&7χɽa gȴFMCR-D_k\g)+YF=X sJ>S5I@cx DPTUdW|Uk:Z qx<HǙ & 9~[~ 7(|k˩?xNo :8 MO t/␩3j{0YnE/~8#YysSҾdn %c3Z9 szqWHRUS^k@Y#Jrغ;395x'Lgt UHcҩ}>ZXl j{Om2;Հ&^ҰLڤe`qǽd$ ߵ^ 8szEV򋹕Hdpko䯂u6JWɅyk?7OFR+d٨lQ>26'O xϸ ?^~6!` knhY9ĉ 9zi#'=de|`G}?c,/ӲJ9׃D/>/LoaӮ?ɯKi#Pa?+J6s1N6rsԜg'Y c t8*Wyqӊ5#)v[8Ny7Chܪ_ojŠ?3@H *7`=~%X4; g6$*=Y6V`s+/_?^׉[?+=ϵ{T+)\~x+9;i?/yܤAMn8P~'-jڛcۨ_9i,\싿Z9-Lm9JORֽ6\ɥL%?U,0qZzA$"x]d6NL6sttW8lpUqw>*m{]R9Sm[yd rj1czRcsF!gTG|SrI :MBש>jfG c nێ: jWZGRZQ!Ž)) pnbc8!>o֌Ps) GJQHcv($R2`S1s:D 8~tih bRLAKZN4uҜu5$rϣٳIG5ތҀ1>3k/,>Y"lXBֵ&3@.j˓z,3ɤ33BS? c~+\Qd x,A 9qrn,-y"V'"oZ@/N1 ?WRzPُ`G.:UG~hjeRA\Kp(iȠLWumvD ?Zj}'yH@W[ޗ[/dxGMj=Ճ] =^e~EmRE }2 6Aq ְ#u/7V6ֹ%#:⯕y}!*}^K;wbrYҾwoj܀ylTgq!{dr0>K+oJ4/Wܞ ɚB)hg"N(Ql9i(4TQT` v̭ `>at^1ezi.'V}ܰP&##K B>'#Az{kܓҟ#cS闍m6՛ x4}>ٿm>^?/kz,-#AM{c0> Rck$m 1̀+Ğ3mu.EE@1 $wVhj$'$}'`m-?=t,߱_4acy?#OmٜgC=c q.z(1_3 C$G)I@$&(bG"ԓ)ij f8,u[C4g'ZXj9_pG9HNU_`0+sqV>ks^U[o.duhih4hjI3xinxE| [c԰xdnTØ`>R$_u\W=v]kÅn&y.-k3)º=vy 5#vGKiYN!O5 QULls?*<_.^x\fDoA֪nu;dUqT,tP+?xXj7Ns!b-Fk~i=4)vF#8#$|"=(HBWzjӀ$eP;CF>Nuu)䏦./1][4gd@ ~mMT?GW/ďNuO3SCG1'#\l.c-f?~YPF?5 +t;V8n}SkzG)zX'fS㊗~b*$p*A<ACsh{7P͓F1I!S7RؙI/1OJڐIw^,2wϕ$k\6(v~5)9*;C]xCbn:d~xr6ldffh6$gׯOJ"}>Imq0*z7OnĶ/^?3o\dGn|{ItR{~t'rk  7>dlWv)+NAihψX(sfQ-]?M=kocG>$ړ`FOA_G蚊5hcGP*2@7 *^\Zvݭ&k F*HޕQYYuMF2gcꯗz2|8=i^q6t:sW*.?Oۏ֒>s@挩W˧mbnքOͫޯ柲}P@ zW˭-qAg33LOcpG}R3F_ 7jƶ/3HN;`Î:Mus(4(RK .WYxaL=)ވ/c!zwka"V.|AֵiO~Dv(1&K339<ZR}>hdI9F+]nhe)R9܍jt> ӊ{i:O)DJ;?-vm]μŞ1lGAsqꪮ@P L`ރr罶 x5$> ?ȧE>yپ>{+i/N}Y%1rWUtKod}6HG;7wV4S)@eOK)AI|8MSP|FozB _dFi:~1ygF41)sG x>9?g!'+ĿgmhQvL9=^}˥3?Mo[ZF#8PtX(+ 8ծ9?";!#:=<&`>B׉wz߃GBPkoxpߨ5P|'%ŤA(WnKWOʑW& 3S?:/=jg+Ώ8UQ?>'/47z-m9# pyj>$S^ rJG< Bm+ĄHҔE :K`GҟgbOTi_4"VZx9G$JG2NMxǀ[~)&ݹ{Эʹ;$Bib;1qdXc]Zm|r3cY @F.ہ 1ivR*("'` sۯNFQPVeơut$ Bλ`^sQ^6"hZ&$ <ލv 0)<?JĻ_TlJ(R63: # 6Ubϔ!# f7V); jun6=»$cm("#3>h OxOOVjZxH-??NƝ>bqqsm,Hˆ&Y%;zPmb?Q@>LT6rrX5ըd ylN} =BKi>FԢFV=%-F(Id;rxRsiO3bGWU*swʋ ,OY=CYgH2 ;qh8dp׃Jù~i:@)4PzQCcS֐K)(1ɢeeQߍ8U_2}yR QQZOj`(PiF))3!G7g>SLS :Ҟv0Ìc(M8CB ON9#') JiJ1OS@ AhȠzPԛiq&9sIތ昆8)ɤ?Z_šh(&^ BqkϥT}UsU'*\Cٜ1GbHg\7.Kx<~&HN#}AϏ|Ѱ%JqҪydH#]F@wG@9>ǐ0}G,qӊ.!=yJ*ExJp@5%揷 N+LL\Rmjl4q-sF:T!RĤB8SOO.2$xMM}XWp#9t9g=!r.<)4u, xR7ι9ep; +WЇ!.g?N9A_ ڀyz$rL `_.Lp( |ߝBer˽qY<2tr]?# y< ,.8Q~uwz7rq>]Cs' ]zIۜtF^aW$zM6MЮ"iJ6Z!YԚk4ژk#C~(xb]B"]kï7Há#u~4kjg`>\\}ڵ3nipC+m $gk5/z<$ǩ>Y~hiK ]u䈲- ˠi7+ge9*} ;B??++݆v y־@3>W̺"_y qxO*[KrNskKI9798M *w/c!E O8I9ZB5OWg}Jp.[ =pxfrN{ tM3Vоx-Qo$5|%b|]<|ckA[\eKb>(9g|֍lۤ)DOԛMmS$Zw~G-P+H#G WT  08GCV/o}*j<1[#QBG jodG h<4Gc~tGRWڂF5+s3t}UvLOkח PvQ\˩ PNvǶsnH.y=}j5<`vxj #qI/`I`s[Ρ1Y(2?ɮ^CiZS^Cs ŗ#RG\T;6Up{DS+<Ո.9U_n94!"fלq¢ \ӟ|+X <`\w&yO;C|Goox$+m6X.c?1X2^UuGP`;6~`4i?HDq !q's?ǚG`sOP""|)B-[χ@$t|O}AŎZ(eywd}zmlU %wrYM^%Eٝ֯'wp;{W_HjۏxZuFm  t?]im<@9˗yZ Au8yAG4>"XZ-nQ㉘o''<ƺk I'EW6\6AEPw-xKܖBͻkѡZ.xF(pÒX;`[*`SzBz|IIᬍf<>>?BMnLq=cr͑h$ti-~Zv))wW!q8LB}I8Q?dz}*\EEةݧz|Rh3q6BXkb3Hbyɪ&Bs:JGW}/>Hii"& qWw/w\IŽiNiiԍҐϙ|JfOYkpbq}4Y,E4bb?~5Q܎q^2cvq8"i 9Qp\J ^7PqhR:a! Pƴ>aY/aWU!-va[C@X2Ajve?1[bWY˦^3}1O.߹=k]I9PO'#FinsU A =sYC+KLe22y{Xi$V>B"2Lv\;Yg _ۦek8+ʹ|N1Uҏ0p'~F3V~<9S\>1'*N6\Vgp=uا$Rv>'1ʲ Xs_BxWU»nh>I_qVZƚb:|Fx.OoʢKTh ɌA4|O^ʰ:Łc10E|'?vB*k-Brr2=i?s֛M5qScDϔQ]-I\qkR1ծ?xBcpV3{30V+߼ t%v)s5G'vÐv| kʂ;$]9đ0o"ٜMYH P.nj.p}1^*VpO$T8@bB3JnܥI ҵx #][`J$$-wc<㚑.=GegU~(k& I s:qY[-&f199zʈhWq8㞜 H'dm+x,pk־GKc)?tpZV=7 ]1;# Ȗl=+P=Q!~= >Zm eGPӊCn_qH/V%Ϸ'+7Ú4zm`&5˰&<֯sX7wsD?:;+)‡9 }!Dz+2JČcְ{RJvyM1U;y dUMmi#7ўsdzsM!EׁҦF>A8 43FxXOڴHLl邶1A~uWO .mio+绨rs[RZS8ZK ۀD1=gql>pT`Zy~LSBWs8exRH] jsƲ!GPx +|DRnlN3SZPz*v@M5NOcVgc_n׸9hEm|Llx=24?Z Pwsy9 8恚m eH5<U]o~bsc9brp3GJK]x^|$pYަlC[0N8kC6֨Uqy94a.2Gn:ڨ>Jq\H c]S4cr} W x pXnЇ_(dT͂;wO֫ $73c9=J|Ecbj_#qWuہJÿmLin`F Iku>0xӟfƱpw5SV=jp\g|O}[;oV :jG}k֣bӹܦ( '9dxԊ΋EEӭ!Wxo27v=F J}v6;)lEfw6q]-%#5p-$\E`@ZuΚgKu#h<xw:3qPĆM88>ԏn.x$ɓcZ g5"񔈖'>Jsh塸]fg'h#ok:SM["vߔ$~yoP-2%GF(\q洪_*`UhH%8QzsP> v.rMB5"<'PyI;=yls|4N.{X@QCu#ϗ&6c?tU4JNu'h0i>IځHץ/~('Ove!iM vV(NyӀ1i ZLsJ(O9) c-&yI ^iqE4'>)EdF1@R@ir)Z03@dzpiϵ?#4w1 \{RE&@4v2zQLtbI@ 4dR@ ҃4zw.);Jg=Jpaҁ &R`|¿j`qָ|7Jpk#ź#wF7#2 j[P)bGrO'Zx VaxH3˓|CB;OgVH?A^^k}7Zxa<. 0p1MRminB]NsJy8'VLL}i)8m379遜ւXH#YTmsqN1m3FPwt83EČdO /Ft{D18gj`ǟ!WHxxڽ 厦;({"q#8xJCFDGRDi 7&,G~hd|wmqrpAJ9k^IkGT~e2̖|:e)u:QHB\^L1rbl =*Hfx^:qyRxA7ukrWnVy0J緭z⩵7z~X?y,^Ff]8/tm܎tt}zVx=1sd qƭr1Ȑ]Ǒ%lVA׾5g5kM\~;"v*8^MXӣ}ѻ+``cHop91ᕔ0#QE[ڢ>𯩖6|M|}S a-Cv(RN)ICz!9=i)xC7F!ֹùp;ޱ~D?Nw5xi>%h8hȾpKHǠ<ᎆ8z4$9P}*#/N)L*ltrI+}DI\?.=OBo+D'ڶRz"Ǚן^kE ]GV,xȡ"[O;-vt>Tf;y'ruzgԚ8q@0p@j@]`n!U!'?v.(@ZͺRMzgS(m돚M2#h]*a=~w 8P0>oMӟSmbyDc=<˜\p2$?:9] 5913c}[L\ Yʸ=A*̞p9LbSq /#cx 6iH.sSִ".wgm+v={N|5zW|#K}7PFLk7/sjͣ$dFN;oֳ"V(iKysܻnFD, lb2:V\:&YPG4~S,ڞ9ޅoi&o y4ykO%-@Ӧv<~Z5#F0ZDDD3#pmxå]lGfpi봨<R?} YX Tg]6+"GldrǞIF~1lH9UfY)4S 0=>F[][l2Fx\Q)S̑ܢ'8P ]E3K C>:OjT(#ƖS$2c?3%SE")B?1ž E-FUÅ4 I4 Z o~P B8۾*kK5bDx_ND6ot1 ]@zdtOQhXJ5kύP3?IӗKbW/?_? nk^-"3ߜUI/YBc*@2oYPӞ #BIgIuo{"DkG1e\,sHTU~qϰɩ-SGP$\Q(j:Ρ܍$+sq^c98$;UǨGy DWs?)sj[ۃ@33sjama z1 ÑBh VӴ,ni#cc ֽ\i]<gAP[]\7o, {U֓`҃E!JhjNyJCii !R;RHbڊi8EHʫ8b Zh3֎1{w0Ri(&ý5ӺO˜R.xGSiݩ&E3csRduJ3ޓ/փ@ ;RP3@Nԝ .qFOE&h'֓4@y`P1:AQހFhT)G4! 1Hy@;xO>+P vA,ĸ3+߼ٴs+kȖzlֽW?G:X2{c^?/'AZw=+~0hlʽ(t6McqiCrDŽNT V6pX8VN>QaQX`c dv I=7rn8(~Vzi77OM}sܸl| [ ϓ>5sӯjL5A!1ѮvBķqIkI=QFJf;16mJsȮ v/fr3Hvp>?ϭVCr23s9`pNL 6R74 ]F *l־ܷP6+k{MlONpk?;?RrnǶ>bQ9\8W+]('M^{?Exhd9L;\[W ͟x&#>scusxJ?iI:+Oy}jg^=QxKb };YK#~GQٗ#nu[[GQ x,#u!F߼g%WȮo:LPC,pW5 ֧u/d ptd{##$qM'?Nԥ%+=jN$?kΛq|ПRqqES-{^zH=LCٕb~+t_ 19<}kk=cF߂Ⱶn\̢4Q#Sjqi4NuR?v~j7 _כׯ[6h6Ѕȯ AY .EPQx6c,[v1s?_F VR97!^uPs0MIG_X坏R^3}s\jlO x栓Rrp3BM+ș?ȫݪ]zHT8E{nxFF]x5wm4_6[f#mIwMp.m`\n\5[gQ ڨӶ) '''uĶ'q/?ҹ=~ע|;ͩl$/_L숨=-n]>*W03^oFHY85 6VuIX6<֝gcz5a($s|>|Y}'HTpG?5QּZj eǧUTsÚfY̎2#@ /lb4Op}@D<IW[3[f.l76gX zko x ku$We>WwbK2xie# :t9G{=FebUm=+vTJuq+2u"џ;gpI8SOTc5zPH!$UWbGF)-Q8HS|Gюk9?usQ5UO=z?m]Pߪ6?_ORG3@V/ DU`OΝ2:֕0,FèD!!pV }k~)9@ЅyD :W#/Oq)|%i>\BID.=J_/wT|vz\UĉnBKp@淴 Z,@P1sjTt})606udhy44&g|ܺoDn7 ǿk9^GZZ8VY{6%QOBNG׿+{vxW|VųXm۠U`8=ֵaj,#^H텅 m}=qqNڱ998PNI' =j-YIou p9VfH'AYkdB^YUz>>!D 񆠻2Џ~  0+ŸX?ŷ4O'=0k}~4>Ɖ=s\>%/twc OL{Ux? jQZ?dI$cg{Xw_yw2+$(\]0#G_vOюs}>~%V/20yx%:_PD 37oJ_SH3}Q."͙bYd qh+=T6 ,Z9.T.]ck:yd.Sh  Ol4Sݴ֗IYD/I9֘I%89}$+NJRҥGpȹV+$G=*/O-٥o\oTFG%?<i k!p`3)A_ IXeݞc!! 8#jS +8nKGgr͏ҩ^\>*7p([ih=;FkoXgC9(YՔo`w[B,l5JOi*$d'tג^cum4l<,wy >RH.^K.0 ߑB\ѮmʤsK(#T k{K{"Td>.ps7YEll|NV0Ү7T[jl ɜH\d1BAq:`@q_wm ; g'8s+BHխi䌴( 9RCAq02roBT(~^]І8h+3 Oӥ%{t0$tVgR=`es*DխZu4gh(pYA$#FlX2-5 xڢ]-=fNAH5;bϛ!1V#x<{TZ%g'jzR\:&&sn>"|*>$sVՔQ_H p 1މ wV llvh:͊Ŧ CġLՆL1B% Ue㴞cxLeUuMil[RHZEʆCnt9?n.K:RJ;uҍCBƕ0qA4wSHRuE;Ýԣ90&:R4f ǥWJ=I4nG4 Nz`҂q(zLNs֜NM(z\(=iGs3LeQ^S$dW\9+k^mjC%Fp {! \??Z61ʮs}>_ O-Z!5H=MzQ9Ь~50ocoAT7O^W瀙UaAȪjjm@'9?kgs&u./inO"Vb!1־|f:Кʒ#rNO#֭4*ñ+9E\9=kVǁ2=* Kes=iN*FNp8T Oڗ+- IgpiH%:coZtqsL*OӁJI=w .c-pQnNWk@WKpG>iB>MZ|,AU=;Tcc.7˜c-O3ZOcs$&#JNOoW#M;3q(\T:J9-,*R 'd&5<3nV-;l;?\!3nF'z;B7by1ӭoZ 0IVJ 94֊5=r G9+|Il-ۍs]m`׊4fho(vuΚ9+3+. _XPH?^ %cktsb2:8s^xTɩ|c|ÃA,W5d½LK}7O q gǹ?S\mv<դ]x]yws}9s7CjƊiZp#g9Q&߳@A ~VTuβ[qW<8|}+Z3xl\P؍3O5j+/t/pz؏m&~0hM+iZVqcqY!btϡ^Fnn21^/C/"\#7IGxΩ_ oslÀӥtYM $NjTg2Ax!rFYaN QM'q$m# ?5xZ'glrNp;P79>}+R]z~v}2GQ[;w?9>S^i76RpFW>>EM3_@e-v>Qld]$^6ee 8;?zO$dP"_4FFrpr:֛؝=+m{Bμ+rӽz$f_ H}PRԸEl␎&(+ޘwe*{+[Ha_O|E_~ =֮(0Nxt+u`r$\#m<$p~m#1GבM1OHvԡyJi&8?7l; a5yV$?׳|^Я.H6<3}:׍9ڴr"}B=bH<ǚn'N ?!vU|GC-S H2 q_D:Echb`zܟs^2ԇ4ZmY>Tnf=*Sdh$ {% t{Swd|^z}"&)> :cτ*Fx k|KM ?O-l|r򺪜g}T+!|yg[S}dU?&Tp*_NO]dϯ\*wBZ=E jg%ic8R>U9犙cV`fH,J;S~-Qq5y]]%:/^XxKŨqG:sdpq"E37;|#&҉bquX 8+L1hSkFI}w3[Lh0#潧˦jW6 g܊ ?/ٵl5>ZF8;?D&,soIf\#:H6yby-c mWFĂ~s9^,IͻjP8#`~4T'qcw\/s~wAB_CMȕ]n8w&bA0B8 9ھ_,r8 gs❶-#X0!2MR2ys| a~zљfjhXYSBZ[) ,Ӻ*.[xی /RZ_{]^gUK$!SvTGF:沉37"$k*#G O?h|'- ,8TXGj w)>Ƴmj˽əa*#l81UR&KWB7IA.~:a:}BGX^Vb!,1rI1>NUd1A3/]c%;I<׎wz7 Px\j梚 h۴hvsZ3^[)q8' ː2pG*kcE+B݉0Dx?/#PCOa6`崱r9> &+`C`$d qMU" H,:=4heZdxHd]n#'oqT^؎H8b5&1);`N ĆC .pr'ޫ3ݫRP6rH= WQ`CZSB,ѽ4. %ż˳mB*ʻW>9jM[0_ YU $>(l 5/z}h42಻XkfS '̿(!;Xktű0;sǾkJmRD NO1}2?i롧vFsȗYHk$2d _Ku%KKf޶~^I_)#\X.Ӓ q?(P} 8SqK)u~4c4~H3h1F;I(l olP<04g":Ӿz:ӂ  SȠ 4ޓ4RCs)Jm&yqH&8z_-4gC#bF3Fi'Z;KڃҐ IizJb zju+n)7?jq~{F:uJO9OW^%?koH4Kvʉy]ŲxmaO*ƫϨ;[{Rrov"܎S\4^ownƍw0}j;nqy1[e)bk>@yۦ ڣuv|5sO#²{sZgn{u~túV?ԯp^+s*`tfօ~\)IRyiiPVi\r\÷CzibQysĒ{2XB%[#|SI8zTzx w+>F| t1]Rc;F%_隇vr8=$A$}=+GxϭZ1²L}ꕖ;-F}&OQ#浴}5y攦qMze\ :U)[Js Lwخ@Gq~wʲjy|7c&O| 5t태UbOJJ=P\˲ޛbU 9O~ǭ"Lt)7jB~'dgk_XaO0\tj2Ip𦑌"?ֲx?ΤF2UtH!x+uQϽYUZbhy?#5IKh kz`\GjK@1Y8DZ.v=sܤ0mq^K^l,PqҥmF:T6!0 ҥldsVE׮+Hޔ9UBJ9NnolҼv,߼ d_i2ҟtlb2Xij$q3G*V2Ҕgɓ ǘyp?cT׹ài֥JYG\nux1ՖuH zle$U)8[Kk{ ,3Sb#ԖZ\ExVL%pRsɨZ<ΦG$<6@!Ys+v뭊c5DQUV})Orfcie3!E0mTjKh:ܗ7Ztr!;~ڥћwn1)Z!GT8Ϯ;Qg~=tԷӇ|4D$N.7fϥRQ<vON݁Xil#Gn9:ޙ};.=ż+A*yܫ#|?9LC74=nno {n^[ f\K4ۭR6M™O t˸1?YW(gq01Mkfؓ#7'\z F̖<98OC=q6 tkk[R]&ɗcsxjir9?Ju% 2F|R.bXK[;S>ciw #kƬZ|>WY2S{%O0y9HR=j‚p3Spf;9'o ̚ v S~ -O&6 .9_U<_ٿƗ?O]tS, > V1 6}_G/ Ɓ\5#PC)t4Q.dszg4-;;fI21FԚǃt}z\۴9^=}Y(9=S(!kwwMD8V.gY+ OiG/ ţl];j6h]B#F.0RIؒm0c8p ;(-¡PXQexV^6>涓Qw WU M?. %(1GCBHma:]Xݤ}ݴAX} [m$ܢnYw20x8?j- 1eC J0eÈ̒ݙDB>qQUle -eKTM|G'QR9cv@luɈr8EwvSVL`Fw8#+{ kr@M?.7g[6}g{$W8V>1f@ZZK@()?LJZKU)Mt-٬3ub;> :1ͻ|'3M0}k0w*V<)1k6翎P9e :kkQ,0W.nKG1Z>`踬s*JxK5iacܮXeea^ ^}۠xQ010#bqE|`.-7y2!^7qbkqsf;mpU'" noܪ; VRε[H"rYAO7ZugO:7iBpWtzSO6ڌ:\Io5D0-!}wg?Z[6U 9|1JTLc=k_[Kc/o*&2Am8 zѠ,6/ʎ.ecH.XC*ED/s60a{9?JWvzӈPTJ7nRrOO$1IzZLzӈzPi4J^1ҏ!y7Q3Ls{JiHFN(=zހQJ8~4Ό^P~wi%&q@ A*}{qBM],yocjƟT.KF[8#8'6f+U7c1?cI`~^MLBzB'mw} .>oB+MH(US4Ɲ:q^]R@\争=MB]ËdQ?B^rڷ}UFI=KtڠiwZ*H.nG$}q$<Ӽۜ@m}HpՈ%$ujU}~JH]F3U"r(BSNO#S>Rΐ%9z4Gt;ZsD'Qdqmnj¨'ՙBrUqZAQ5.);F,N=jI֫P&]O5k"G^ b{d$chh{d}ON63uϽ;Q6Bdݴq6["XFqX:9t9G׵e-]T5#gS79FGץjM Fn:f@idߍ8FOH#`΀wt5e#C ?id\ >O8- x?C)6k 1M-QO<X#9TJGOk {VWzUsS͞LNvǑY:ij[so3$gM_P,TYhnRWR4H/GJ9PH={R2qKKMQcHb%'=i)MS[;[iHԜiZsG,ы}Q6h 댃jm#?ͼ8UBX+ny<~Ed7eJu ;wH>ދe<,#/$1$t֓JTԃIa=̄ [#"4xpcQ-Fd }hWV4:iKKqG?8 #SF ]+gyӥo5 v.ǭ wn_h2wcp_J}:#aܶz1G/Fg ͯ b0}yom\ CZƛ w\rJ.}F5Ou1EA -Z NW:dսoEvƱH8>9O4`qՇ~+k%Ex,+mđqnvvH t8~Ye8鹀+mI,j‚Sr+4zKXnZ#7jSn"e"=3Xiű&:΋.ehż,evI=3Z7a`;9,o*EHPy^z~ҵ#!RPAR29jx%]K"Sn1mYp\,'%-jQȠB 2ÎGy뻈uk+H|!gRJ5%'{ا AH3ӯJwSTo%NCm ).#&2DMż N:ҵ ʂ3qyŌ * >[vH&IjK?ylFTR]+KE}yq@p~r@_c%sMHeWyT] 2a}g!vz c4#d`o!giv;t奵̖g/"ש⣚%&V!!F|sS`ϖ\ >Ke JXc8#U.]XFPY R0AtEkX\PD2܌,.Q2GzfxnIݦӌhnʡ@{yZI=؞`3y (քӡDW2,r(9Fpi&YZ߹hͷ{{f A%u 00}ӵ]:C*D(j.!*S;l k\"DP@ vqک$hf{f/$Db6?hmDl1$88=UgXkōDg*ї}^*[hEnyr"ceݿ8qQe$bHi}I‡!CgZҵu y3+F9uN[nbH~6C!Qq Nj(6)E"sd g'ۭ:j5YRDvyLh`s"y}$6stUT'r:\zQ7DM༇tA'qpq9U4VMڢ{(cPu YH9'{뫻h.!Pgr8'= jڤJ ?s x;M[m"K0 =9E-V5|!#9hLNӤH,Ӄ˂9ZW m|s<^v'*N>ҮgP"7fPWp*3Z8 37d TFTv.Wc^s|ֶX%HZhͼ{"4sr.':ΛmǕGץMqmdb˒rq?/##=ql̤VrjP1s8튽09jķn\<ƞLŁvqҵ-/ϛ+yin6b#*ϛjYTz/PE[{^7yMb3;j=JNҡr.BR.ORHzYAc'<HFm"Exh䉔F8kB /rUN7+ubII)֐OOƕ2iZo|wz009ErC!-TiJ^=i JA4sړSPH)B_qN)iz -)3K Z(vҊ?0 3 OƝސ~PhQhsGJ=)}) nZ_/߽84 McRgiuS曚b&֊P()GNE% })3@ SFzqJ}8LQ֗zbƚB,qޢ#>gw&Cd$h˨G.s }fO2Al55JqլiU6[$Y߳u<z%P-/#'+IvOzjœjG'\5ov[J\מicODm@߆kND+LPWZɳui$O>tx<ϧOUhBrUK$1R$Z1ێ{i2GwsN=ZQJa9zi\=FGaґ>;Ri g4FNG2;ո['A dqUOz@"_ƣ]sz y`cND9- g?p8Jݖ5*3ӽP:gQtf2qUI:ք1cUdwS3+UOzT:SFZ6ApzV-F+Rݺsa3T mU@?\>a=2gW1S'V^=}9{9{ǃҺc- q*N1˃{~ ijH$ Zzg FǿcRb r)[Rǹ@=+6X5+b'=?c$u# SYq?UhIZz&|CaJDZY95r98nUk")1:Ҵ`VRE4tƗ~r1U5bY)!H.6qWMjyEnW=;p)T?ºxሯ\?ʢ:Z@};VM>U}{UcQS\2zJоF63ެ#皯I#^>hN&rgrs\ȗn*D*G\.7 x5q.!#?pq^|tE|G͎)Q4bdo7?i~%0bUȦoJ șiiT[b#(K pSi Mfr|O ܏)P8 ֌V<ʑJv;H($ (} [ 9F+@5n9h 4U9ӈ5ˁ*S}:T8ZdQڃHhIFhh1H4gs:IzRK0 wYn,øl1|OLֱ؅Hh!Λ @F_#'RA46S#J1*=]?2 OCZE|2&p]L9<2)W?t{4Sa$!pWjF=脉v{$~u(dI,̮<#48Vn[Cqu$ p*yJr=ilWYuNfs$ Ѐs669Tyg g8#4[JQzNYXcX)hw^qSƶl9)ك ϩ>WS~Ϩgf-ۀ!;v]vGg:|7eC a 1vL,bjmףiDdsȩe]&8>DՎa#ں("Y#VaHEoy][[ @mE! 82Cq:ԓqk:Ji-cvzEsnX-L O׆{՝N\$LK@B 5exRz94p]@ZMnimqߏJ]B'a[t dgX`}ypihXj8Jw9HP67o'md nLSjvo ,й(̠>GQ}o!aKk0"bAWQ2Ho^p\mL{kg8GZ[YbPrF.1 ]9#F}*ƒ0&vi&rK&}qoPO9Up}H- Rn)Gۭ^>Wb#1ypyiDQ?cc! {u~5q-ռIp"@C1W=:WBAz*[)#K0}wbp׎~ MťՒeGV?LκqӜSJcG4":(/qVty1ogqzVݵPdwdg5kPX%s4֚cFdք&Kg9;p6??J8 f92}ڇ3(#'nJq*+iEB>[j%N3ԸP;>7Kk5T{i0Ŷp VUA$V!pAxo~z-9WCQ$&?GM09??LR8'}?!ULZk7-D2{u*L\nN~K eR`[КĹfwjV+p:TO+8qJd߸b$i^ O!WV`sZOZrpښ5P3mrF9NO?1$u*}?ӱ' qpwHl8.(⬩G\xN'osM$<.xQMg=)ֳFь=jIq?ҳL޺#)">?\4R]EiresR5H?Zer^>AuaұG9V90TdzgO*Iid)H?JoҢ)+^bFƬ 3QSj[-"dcݠ7"bVڳ d}1L'Va(޲=9kh:U~upQ2s@gO;:a1֤U JMElcU\cUAZA桳N[Rh3 Zf޻G^;)&4'?N71obŵBzZ,𪒮=ZEP60 j̠]n$O_LTPN)0ylHЅG'z߰xXW0=e`?ru3k j˚9< {opFyQi$$T>n}jJZ"}n})HzOƞ&ϽfNA?ue\5Tb9=4z?#`VlrpJYq֬,wF*lK`Յ՛<0/ ưWdm[s~9`un;qۚC?{ &gi{129]#޸ʞhAH>ⱕ.s9]2qQO5r+c}3RHb+ ʧu55~&+!V0+ Q֡\aԈ[b8ݟljZrn{asJU0j&ݾ6*L85!Z)隙SNxNZj0L>n+ITr?VsX͝oQjh>}"-Xd[{Z4SL0@ȥ5Ҁ@ckC-Ɨ"]ggQ4p }ɦ!p<ł.' #st䳖ݭNh!A$t {bo&&Co 䃻*#5h .#/2η!EAٷ`czKAm$\N%Tp+nC$l+ '(F8vkU079qmonw( ) q]_SP[ Sp4H) g.;e\i۵KC<[@bH!wO3Q$L'_^sؤRYĒD>][嵺fD0R?ɢsҶ-h]ldsR2).8?uA?i#QT$4Γ`IL}(H3g3ڹ -j|_n3]yIb9,;|؁70`8`+}agvfȒP|nQUᙳ M\1F0mv/J0RqADlnU8G0X-K{ 2 B8w5kSK .,N9kpyQK]h4Ҥ`ibrں9}<$ێT5n2YvmQEc1ôRr )S *n;[&H~g.;@4LzRHM!Ґӎ)4hn#)/.iZ8ZQސR\E'KۊAJ1M9/(&& ѓ94pKсK@hvh1A z^4ni MƌsF:b}h7>Ԣ spa@ ֔Eւ9&kU;(wz}1wIVcUgs"iQjܳ$| t$oֺ1i>kpcaYr]9-'v[Fp4^ׯNz{Ov78?zA |G$Ρi2yީOL3rŇ`tL5 S jL{KgLRO;94#A?6*^34 )!xǯ{[c\T Iѐ}VcB?zUݍTnJzB*0Ǿ?ƦajǘDsN8ϽQQQL֑dsӯJN㞞>Zܛ hǥI`tR9'=cuQ~*M쑒Sg1{}+AtT,AVhb\g<{SGlgh;^ԚXxTKԁH)pzU;0~:=?Vcq֥JtLqLuJ!uT$[\"(SʕR1\T|۽Li n1J$=Gv%1lU<=k)2JGU%^OH殸$PHcB42OT 2{U9W#\Y4fHpOݜI$E8"S_R2( )替*i?\zgk6rՅǗ8S]v)ON:3@[M9)6~QV`<ƾoQ:r/:v|Td@ʆ4p=E+?Kr9FG"8?ʑIpN gC{Gu 㨦sǵ[󊆊qMuʹҕpvO5s]m]F~^OJ`L0{T$L2zYUnG^G(2jr1aUf/ tQhz L>9Jw 픁g(/sONm GI *M&+T7jN ?Zx@nt5׽^RSՋ OO !`>dˎ8u@pJ|T5$IozɂIZٵ8#2Btۧek=FV:o9*Ҳbu ֽgp5#;o{œ?u=kI{U%Ha{V.73ge1 7+6lţ4gҊCM0ΈW`eճ5$R"0;NW)'&6W_jc"VP#$ngV喗E$-̢2x{dKS.p0>Aҋ.\?ho[@\zmkS[%#rpn@b3Wslq 8*ItX0bA 9\~-o+G4ZI)3q7LQw&#Ⱦiɂy5ѼV SEdU 3R?1Lwo=ybi}KٙZF㹃6s^{g޳K}3MݰH`yP^ O2 >lBoF"R8Z|n!0 bM is5m )'$"Lk9foJ 1{,zE[c0|J}zncydg$yP q5hZrm%04/.8 9{$7Zlrѽok 'mH{9Y'(G=k]>)k  ZQafa>S=( SJi#BiH,ؐWkw3Xɩ3\78rp̀O!I ߿ӬCcRmǨP=qzF5 n%l"Fb r? zxnb`[&fsB3A{NNn(O?+֥4/"ݭ%āCndgZJ4TQ(q3E%#XJ773vnȉ$"E$1ePr}A9ӵtDXVwtM{;ieY6z;($~4] nH B@Yaf.I핾dbFz{F. GMRƧu1,sᦇMd]w;CU>s]]?/=/-a) Sl?v'Mh:@Cx Y728#ZDyUgӝ0dxn==kxEepX`"t8涏@bBg%5HY;hd@',K8>#S\@RW"4I͕r\g9:{V垗ii%Q4QͶhdXY+,ڋX Q͎)NFQ[vO$-qcs8Q ;T oN?km.aocO|Ti<л67@IJi2>elIX$φhg\} ]0rr7WHq"gh[ùj*=;\]H-LZ!GiJİ-ֽ gaH XX$ՔlJ" H6v fd謇qRޥ%\V[vyLF#"V-5~ b̰H\\gnma0%Hŷ"rod'I *^g4a i5QqC FEg^Io|m߶S\ֶM-E$12C&&<9힀R-&-,bznsqXUV&T)G' @rFkC۪ܱ=jEmX#$/RzzjK{8X AbR w-җizcjF.~cd│H0)AJqI׽"SHR& /<ѓIi'ڊO\O)14QLGj .hގ=hh8N)h41I_j;P~4b2hO#ڛwfI7@ LGZ@0:恉&@}hҲ.u#;WPKv4n5vyM7 Un6Uē/2д$cj)lSX$ֱXYSs֫rOCRyIwӆܶ'cMA&oHN{44szi3zS9&}hf(vFsJ8* zq<Ӂ.NpSOrJV- gNxK@hA ~4c?NFǭFzǭ8C4E؉*g#9l]qZzD j8Ux?ϥY:R oL{V}ŒqZ;SNpWFS0*GJ"ۥ@A$1Wv`cf8{TM?ž*4'R@R+c I\X6jvnOx ev 7Sr'l©GL*xT#+D?_ZTۊӒ>U 1[dqN}x j«hf)QJc9MSVJqzl"l3Q?M,sAu#=까t&rJ%)>/xZQ*M,g0:ӊc>y3ҕQ~n4ojt O{M\c?Oz~z>qڋ4 {JpïMq[oq?JLtu֧aN?Tl;cqXEN٫0Ul}?¥eFu1dȲ/#\b}:T@g8 )wΤګ'Mh%H{R,B̑5D^ҧY'ڲ}J`OE#|k>[iIU185%(]L{Vpj*0GJ!xXwbltP_ SǵZ)H՘e'I14k^i(t=}fox ȫ\ sV.24g_20J޴Y \49d.yhd{v;2Zuq ?ʹ[-A\HMN0.=emQ +?NDOhV-XNZOi8%bRBsV4GhD$C92!ԡ <t p!8<ғLkGr#ۖ(L"@ݜO𮅴'`ycZNoeH+ӜӸ o$Dr8s?ǭtJ y ž/8Ld n3kQ3j r`a:7ۤ.<ٜ>loLKF'8sr?Zwd'uG`p8"Y++t(rci>Qq:t]\Mq/hg).NZZEO0d.ܷ-uZ@1pXciٖ= q ΁ 3 l 2bFgNum$#,J^TsֺɬndY&)F@4S iNcc'ҋvoBkدB)g,g|d`w=}Gpб*joy|zTΑFߧMfߋ|/#=Q34Gֳ F[X$h62H~M=:gee*cXX;=%O-Pw( u儋y=[XBѬ؍Ӹp 7jMgM vSb {HIw\N7[Tۺ7+h}>47w7VۡJWy-:QoKB;P7lYt@[iܹ}i_P9m Ηv_[.rH?Oɩt<.?]淯~Eh-EI#GU9PΝbm f"#?7}}CO≣ @$*Ҫ [8"4dG$\S W0QG43:n{.m DR~QJZ(㊎9VDWSO0pN 34ux  ?p sF-St$iNX6@`^M6Kd[(z})1 m|#[xJFpcX8)$5ڥ_@g7iP.6p'H'Ո't&2"e^2]B>'VmX6`gW^kd7F 8?(ױ5 -@'ԎPdHTyc'ϧM4&c~lvZK'\:7پ@y%%쪯{, pv1bW޸$m>ǷS֜=J$YȻX g9,PidUqdVį[hh^V*pX UG @JC {:IDsIŗR7)Fp57n<ך4;0T h^@z}:t.T,c?J.`E2na7 }Z:C#Qo-ey=A>9Un}6My8éߍoϵtPZp@;c8wZ3I VFܹm)]nO),X>v $z@鶩 u|Y'SՋkh-S˅6K`z3RN,xJOlR7$J8njW^;4ьaNq@]tk{nb2@łgs힣ަ>}(V8qPm㌚q²E䙠Q9=h^T IE38$v"F3,$&x4rh`'jiMQa`RRHH!>cdR9ғҌQCC R39sO֚pHS;RP(O>ӿfNtb01K)1 GAi@e@P10i9Ԅi1Kކ*K@D FP^ pΰ"1"RG?uZ5h095Fi or"ϽaP'V#^C4hkgUZU<殲dsA*fm.spON=M^G#ө̟7B+U RߧO?!֓e7dqҜ:{Q8u>u4Hp=EH ZJvr2::ɳhv" j!p?Zm g?tjH.9 ӟJo'P4' jD@ Z$]slʋ#r '#VbV[E}AӠx<~Jx3R`}qOJӚzp8?Q҆^IZPC~~IhvPzM9ϰM^'NRmjM*U58*uQ:dC~~ztԵ&Ȓ8#q;*+T̡+2}zGp?ȭ"QVO^}/_jRWEˈ9UZN!"HffHU8Q:ZV3=>}Tm'sTۃML{Ls9%S Ёӽ.;~u1Lu9/(-SSoz1䜎sZ}a)ZYaq/jĜB9T?5"&D`5}b%9e,[ɴ &nQ23 WeV{UGPI{֑8ҞzPG94%N ެ \~[4WKk0^In9^4$#5 m?LoҞb$Rb*r>C`t9u+A§8jMz>aԊ~|Sm%yʣ=b9&YِGE0q[v}8jN+5-l"Gjiry eTt85M\)tO>jН6rֶ".#iCcq De,؁3>ٴyptjUH8?*dzUVco$> UNG4hDItDb!rIVQӒ8Dx!Lj<.-QW-] f2|bssۊEa?/SMWL < d&9ڿY!3ZfYMK[čRb] cFN&-RI!`%W8!"}ǩҋ2geFb$HѥɞP?ne 8@#_Cd;EM5F\\2Y4#uOcWFge!D"|ܠ:ΖM\n k^h+ %Լ2O)BJַ`ρdx^#ERLu0?6 #<&2MɎnCڠT&F2 #dEt`2Њ,3R1Doat dGv#:ϙ҉[=}?j9%1l'GYM"8%$029Xdш g /V7qtG wdI dzgڦRKhs<20viZLB G偼tĢHfv$p{9C@X J ƥF 0x´,]\Nї *X#;5>l5B6ȉpRP3g9ے8_^pi&Z8}K7;Idc12doPHgghm$d`xlչQ*Qʧf7qɡd2<Ʊ|Ӗ3έg wtWEc tcO44 ,v:\Kqq|#nlZ`V060sޯɣ5n_.\HpөDM7|$#*{鈣e5̭8 }9 s6p16yLkKqk(x.ҁb{ b\C[:~L1̸fLH~}6b]ЇVQt0COPIn| PB}8'QM]1丈GI 9gk &X`A!cʮğ5h#v9 `֋~s4I,RTcv q۠5 ˯i DR{H矗[w1Zə$.϶k* ekddYR0yL vDOCmzcY+,C,323VS[}q2[83RϤ3KxM֛E=*l>$09?E5}Bm )6 R#:WI-V%}=: GK4e#ˠׯi@jXy4H#)G9uy1=iR){) \擿Js֐E!# O( wzZh&4Ѕi J7c0'җ4%N{SM4tQRw3I߯4 8ޓz\c0h1E 44SGz9cgw)Ā)@ސ g 2HVUsQEwڭֱn0p 53bA`NpqV};902(7r OH?o]ji@}zVōcsxzfի+2x8d CYVK?^^G=8bSIpj8nv78BH4:M}h5 sJM0*[vf2g=jerkYJĝ ++o'x4Ij ?Z03Jט|/oNJ<\uMg6im~r)yY:*l\W4msOj^1Q <Sܼb63rxPvH%FO)bLsw>ZG<)jf7"۷N=H:sL90ySi0p:qڟ8r$>y 4dO4gG9.1? p^qRKr CR!jO֜GS-+GzoΪ"PRR3(g˷BTUnmFR&Oʸ/^P8y[QuTlKop(eO+i+,rǧNdة6dzoN9jbcw3Dw"#N΄悀=j+SrʧTv׭`Ղ"Tdnu mX-mmƟ,ǜu̚lχg,:tF=xzSxuHMFF&TE92/|5<~uiϱpDIϵUfթd,UcN>r3;ҩjgƤ^{UD&d<|UzFPvЧ8!DoׯDA^j+dJH#rlm*0d.>5-)YCwzyZ%THU]Wg1Q`RLghfj2c#zہC$ȐancrVRgOdҹjpp%ltGkgQz:$[FWD&jFj qߚ˂lq4;$F7J;,g,+޺iq­Yqǩyl&Z}koC`3u\$.YҶ,oaG/2#mOTѯwf=9O^}j(@e9]͝]۬G=GZ:iJŜ-kWvp!V(]EfhdyG4p?*G:VhϟQԠ`,BQF07G,\ǘR8ϯxp.%;&my3$zU$."$nC Gųr̻ #;RKm+S>+YF<ҴnnyC+`mlgʣV}C Ċdq6y/k*y,KDۿ5=tbuXᄨ&b~8I(%y!HgQɪshyI.r!x'9xPԥHvC\,O<N1LKr항$I;{ sq+-}gҦѴYE< Hdsri\KZxhcM/;9|ئU.|ުa9Yp*,zd{doۻ̞i]ǯ> ɒP .1P귐ZJkYe359 ue`|/o#;HCybIܚ͸X&M۲=OO'S/I< 2wcLdsVu]Nɮ- Y'<歾k,f)P@ry7˶2B`rY~d=qbno~#$&G C~+*PRc{h9&2vcwNkyb"wg,6py u v! ynd < -G^.KRh' R xoY,Y0DЪ8I<\ɰ[JEPytFCw-緒6U؆;r?CRjzKȆGiBK <ӯI$6%ΆAeH2}E\I=o*02(8@+jw6c"UXK7@yZ+{+ۃ,2xWkzo U庋*^$;qҜ$rG<jX* [ dw"/3ݟ\N)-u;62N %xYNAP09cZv+6sלzcKK@Ro)x#FM{517 X#W.VK`x䁋+&;4+zz*s8WRGt.7HI#&P63qy5k2J"|jAVs;aҺY$DR2j,+#8xڍj|l,YH}UƖP]DylΤ~j]&$IE,w(S cԓiO>Wq:zUu[fXea3X^>oP{FWEy R09=:b//nm 񭼐;Fvwn=- hb-I)ԗ9-s ŇةvwX\aĪ0 ҝvl$a?!p}D;W\bB9<Uf-Cg4`WV=GCS_vEbʍS{( < Ղ@W۞{U(%.#[ۢ4 =y RA/SKO)eŬ`!$ >io5ĩm˱[(cwNsǷ_j. ȍE#?*$Qp*Rp2 wP{ge#)! bx9ZkqGxUBrۊ<QREOM̞al:拡XƓR:^2T& INAȥMݕqr҆/9Y4O<ȷф.~P@oΣC㻉)bvg ( K~3@/-bFAf6 Z2ܽ*0?JTPpQ8br{r95"hH!. $/$Hl4пgr6Ծ\CG)s5fрy*@wFQc#%#eM4H AUI ISV TBENSY99񫎊s*Nzjb"׌{RcNsd8yjea*fS׿W;E|qUcVj8\TsS7eV@J^ZH)A"J>aӽO16q3JJN)Ke2\uv[aQ$=i"1FQT̘zqL )a'JQ3ҜS)[5PJb?\Ty5YzfYis[I1.wǯJ`m45;BHc\r+"E`ЭsNFPR}*N,9sS3* g=iC]L\cq#ֲ.(U3Pht#-OOl~PBڮA1lޯ>U2 ?.շ5̣Ah)4!HҌLSg?9s8CjN@.OcN丈`}})0zc1܁q֝݇"? V͔ !۩Yvj@XeGZ0 RfA,ǿj,G\S%Pbu]P5=MWf9S3ǥm,#!|3RkE7! =sNnihҞ"{.4(2 A(]հX5"bs7w&kp*{%yV$ 繮C^mZW ⪼\<܊9)2}#6gSP1%ڦ*OJҝ#2yjoLT=Vc3]#:sXG_kfa kl|<}p1WO5rx#d`xv֎N~um.ZŠs_kkMEiZܐ@pjx_*Z1rwdנ6 Vլo g#յ t zt]a ߺ~}k.`gZtFZAMn.n"7E"5/Ҹ+[7*ޠ+=enktv7T6J[QSI]H#91ߠϭn4s.Q ϟDKLFE u=.R;F@LѕR6<mEWj?۶*O\mp 2$zf%ҾБs4ѸxAB28 iWJN'ycGA;1@ յl-o#'k#8kZ#"DYd, Hr8O?Jkȷ7CP)-,S+^KI.IFdZk^mY/DV|I\~f yȞnЬ)zR'mrȀ,B5b?/;H=sU *͚XF<3h!STr[}_gr#lww8Է᠚gf7ө6cq 11&5*>fマ~̿d0ܩ` c1ۅhd8-7f̤kFG.,ge@ '*j94H5,@ 0l99QVpdl|cv(k7fo& wFDLǙp?^ا6;X|&0e+{qz42YoX8⯦1o9!O_@N@@([ - ) i܋/.1okmH{ T*6%\FǜjCmkk0FQ:s xݝ cu15H0~hehQM ?jbŊF?MKHC)h 6W&Yn$bߏ&>u998?+ R^Hg { -z'nn$"9eUq@XMs.+fUT6PjזPefBK$t{q9"m"mP*+~ޠFc~hPIe\Aqo;"]Fzu"^h_1N\ʶOzRII3LZ,y1{|d?& ˷(`X`x]5!Qn|eLR6]hb3jY\+̸2FÞh 4; ly5ZZnv5 *SҐ\VCS(S7B}-jyd+lx;O1}w-MxsS 溼UX`-1(1 -%a$ȱFiOږ yG0G4[ZuAu$RFa ĜƞR{ӣDUyx`y~jς}=b76~rۂk^[ʳd) r#U}Hn lAL2#KHoB'ʌdV't4ӧ:ڡ2Rr&S.,PS,qcr@Ϡ' }*#_ɲY#@;J;ލu$JKg ]O+'ܧӦ}]nA R35bG X0>h&xn$HGcJ,:9f pn1W}95.W%!td$ zT52ۣ\ϙ-H~djMҤO,nR/M4$v]vk{, h[I>٦ͮ\~,RO*Tmeb=Ԃ=Q i1FI 4D/tMs5dcBPOѠjX%F$ DV{MdI*rGU|zVq]iLwr1~F-h3x v#N}u[/*5X ;Nw/Ys]^m hLN Ex'S1IT>UE6= &複Y7oCr8K@Ԯ$f^hehrnj~>=Iytv5g,P/ IX'޵/fbKXۡ-ދJn0r2%*99ioU$:CK2l2pW7v8qɛʥ0Vn=3K5?.*8ggSΟ{g4SV{VմB&h#jԶ’O+q5<@s۵&ͣ݁Pu1\p8?Ţϭ8O9sC R0=E7zr?z;`Sq~pؤNq5a_Sط-$9IUv8T$(w1p`v ؖ׎P oo Ʊe3L$cS &$5"ݨG+jd S^P#ߨNi%UW?JBO֬d~aí]slY *Bs֘bSMBIC6Jn䎵]LA(N3*)!o^z n8OooHVfrY8L;`8SޡZi.J]ǸB srNB'fE1I'qP 3Rwij}<Ӹ t$oX:Ȩct,G5wPOY= o* ES=T deg']9|?R"aC\BE̸{u5$͵,oPD6뷊}65 Ȓ#SFrs%^/%A$H`灎߭-I |@i\|s1j͞7) /1Y2B2#ϥF+ȷw:KaR2ڭYZۢK2R#O1Fa\X)#O?tc֊jWjd@ʰ,*>aIwpqaqS/#n7Hʈ O@ ֮dH,Wp̲Y^pj{QY`KvnMvݎIqAI&;դ)p㯽]P4:l+,rEs:4ԅSʛ^RU[nmM4Csv֑Q4Rc8esMa$ HY^%۰G'W^s+“*0pS$.:}5Ŷp3zJ"vrlaX]K#'oqq$"Ψ1Jz}k{XDE>p3pyIo7`t 3a2/{k:#K*npFv [k珲/ +pXg hS\$6$F lx3ǦG(v`402|(|L۩]`?]Gm}[D^bo?͏1P!S<(9,аt@J# Uc99;W}*CYcdb%-'Tr7^#Bș,XsԚQPE4 06ܑztΏyuҼG%E)2N~ Ԟ]vH}vӈdo0dnIs`舦A=;_F3u닄>Qv?p~tZ߽ظ!FԽe ğj ە`?jz\AnF;{1*܀8ԍfX[HkLӮot1,"FF2`Nrz ߊ4 Dդ9m/ٷA yԓEuyQh7L|`k5<3pmlHG2lqҧQoH$`==if."E"J1ګߥ4'c*a'Aa|/cyf9a"0`հy:u$#OCn}1>{$582.;ϥ`]yߝiO.3!Y%zQkyP4yһEa2Ia(4P9H4amkQQA:qU򥏿lue( x+cuwݿ&ػUFۊfNN}EV\b_D94h&jr@5q0FxTIs:0eNW4GzxU{ҵ$KSd%M\i_*>gڳe+}=E8;XzabO^9p2y4l -S)$F?L?Q0b>N=1N8LW9ֳQ P\Q48:X׎jqgVp7QZ:x Iۊݖ5psΚ]ts#ju/SXhqj&\6yfQԄv14܊Hp#ҥzc׵Aۏʜ=sҲr[LUD Ո? T24 R4|0ẜօ g䤎Z :{263Sg$f}+TiYEG5I'֧N^Kzٝ1Ed]g皙?JImܥ8#;I<שCsxlW#:TxǦ oҢ#-N8t;?k 4cץ8{R߯hAڛ= o#7TZ6ҬvvbbRɔyL1+{٢;tU67#ҹsG dKϡU$39'޴,lެi +ؚt-dVOsid!xU_g>՝vy?#6G9f"TM''׵:9W?.y搲pNu{ (༜PG|4#ojw7A3)!:v?:P?ZuǃDc9$/p䎂 )TL#qgv:qPR[x!d1,v0p85z7ĮdU Eʹqpz>̎$2iח@k/zݑOc}ss L\wMmsųD*'N1ޤ\%pQsXz~hrFAQuPT#mcvS?5rIfRd vĞ:iYrCx)Îr㎝ih 1L =@f]5Pƒ\3^0UߒI{yGZ^c4=(=z@ok[ D8TԤim涑e(| nzVzXn66LdbŨ 1mCɼ q`7tAN]t&+XX$-'n_ZZ<, 21V9;6@ǷL˥<7$K}Dක`L], #'F?b=Y$)peh# cwjiOo7`\tjWyp + vҕljKuo,&8ٔ#A dp!R2q8 V-,)LnY\[;)Kk~Y:14Y3)|ЍpA8OF#Ydx?:v=.:ZbT_0 W>.SxwZ 2 T7]񷹷۔NAF=FIu,GqowhH 0rLjA$e6*8w*0p~A$te]6+x^B$+$E lddzAX2S$'H< j;vgقe'iٰ׎3W-$H9Sx<8 B$S܀2"aӦ֣UK[S 0PCޣO;lsCn:J2@?%ӮWYQ cՉ2xm6kq-YH"JǭD#I²lUGlSZ?Jd/>p N \R};TM$cKe 9Z2=1M=y3XԳCv93צyۚC:ɩѻb0{zt9$_F}*EbWqVTq թ]IcmQK^;Rǜn\~qfdߥVqL簪r'<{zT$Ra׏֘SՆGW6C1G_Z\Oǧ@oSΙbA>5*LHKEr@#=eo~*N&S\f@p{r{VbD@M]+(IA~u8oj:^L68Y5E*bpyYj;;jWU={sҭ͑un=H5ٴY{pqMjs.9sQKs^'bgI<4>؞{SO|U7ɧt9^ƴL͠NRO#48؋0HW5eAֲԜ?] E=I p:zf͎OQ\~Ƥ\ROS{qTҞzUf<"dD\=:tEie&M~ךx5_zSצI?Z[U9jeiT*:TѨjjw3I]VsӾiuToNM9#RKb!ӰpHҨL'`h;fcɖVVxI[)89{`T5ziy& Z28IoZaϽKOǓN:t3Iˊ5 a:4awRR'jEq]ˑQ Pnx֕J S`P=e5rޡXe=W$Tzs[`fr ,L3$"H ;tTKy"ee\p8GU,nI"EU;#sPk>t$nRA401`秧Y{[Z0GEyF3*F$P3^Z3AyF\JDdlv/A*Aqgs,pKq:M#Js!lsxttn IOޞF^>_Jzb_gmaͼx%HB=8uzXGYȲW UN~.Rcwp?29}3:FyŸثh/LZEw2%1IϠijvmRѴsge-JbXܼ(1נ:4 \E0&ܯ@ =T؋w:[;DX@$ӎlۀ_l'f8ǯ^:u}Tc+\}F=9cgGpb{8F=sڋ -pghь}]s}ܷ-Ј PItV-6-ch I|c7U.TgHK4|?QE˭G&+{{#e8F9_֋ -P~Edyr`2@8K LrXIJ(\=<xM3N64*F0x?Z-4% .d~P`zEλiU"S!`9\z5嶙{e8f~P.OtᦔK,cYV ]^]"o\Pf7IL)X ']6C-bRv*V[MimjBpFvgƅW"wWʌџ_qU[Y-q! מU4IEXG,XcvM'4`cހ|,*9O#&9mԑQ݅'es Yir@=+_: 5jBs$޻⬎F͹uhc߽h|zVDD}*7gM)"˷zߙsl>+UHٔ%Q6Y`uHp1֫!rzUDǃOPV㊖/j*xѕj]Tpfs; <M\u:Te?NNgJe]8STx'yk.{&7҅Si'sZ\u@4>-\ sW 9IT;R39cufʸ$VOGwe1WGԆvaިG;yƄ'NBiϥDsKxh2F?/ʧ~0Fx>JV!FS)XZ*ɦ,zs3VfV1QrOR}ьdcL)Taҍ`&sUrHU~nRˊx sIv%q E>"K g:7Ң9r$}* BWфMWh}*ːr5Fno{bg͌3j~V$3Kb,N=FV[gh8΅AOQe6w Ʊ[K~C%T*]CL6AAgX)oEKן]MH;y&6rm/mT7gsMXFꖮk9_+0YjNmGkd֪u.kшe*G|?_0&(vO֋ 4EEom=Ouj_fČۤvw08=hm).>u{xd 'qN V/.5I`Pc ,BŰFzr>$vq3#41#'ǵI&i$ɕU점zGAT<ɯ.X%~pXhsUmt}>\#ya<EZ+?7=~*O[m 2"lstML! I=~Ѓl*Ջ:I#E0+3Om&׍ A=(}Z}6 `QjZ&`Qlj P \)Q0$V[7kH~e so>kV$m qja9eC0sfM5(ŒG i' ~oLd>̭9|E4Gz>3A8)h'Y۵üVd㌞#QKXU7Nߴ?hݼ$B;q<-(8p~SrV8) m0fp jmRX 8V=<=2 nHl$1mIq͌t0mg^ >xeEVvo\;ҰAжfo8d = $ΆEU* =j+VݦEH!Rh.P'[ؙͻ?]Pjڍݼ 10'UɮI'[{-$Fn7mx}x.,' 5)x֩$+ X{* NX oŐzߺDn==j g$)IJG@]6^ ePs|6v8~f3wA qǷF rvg09ztb:3M60Qmݟ皚F,CRT ^GE]t[uq1*䪟@;VW r2z)/owy q sV*C-F09iekBOև&:@I0'*7g7lJ~l'2XEyƩs޲B \%w/%lw?.Ҳ+8e$GQYUtC4(C Ưޕr\Zhnpir)ҰǜRtC Gj(4CM֝IR1CR()ښ;ڴFc^7Ӎ1hKP1\ӗo')sb$lN2LnփrM7(& ch}@4]H8S<)=\nreLN\֛.(Rp9 8ɣsֲl ~?;kcIK9AN=ƭ# rZ8<sS#H#B6' # 8'ӥsC{]X")i á+*c;W#ʔqkwF6qvf{prSO>9*S-G(L|W$3$pOT3dXƓph9hi8ȣM=xw ҂sQn'Z\uZilTyjNy8֥W!%sjx=jŸn?ֲ"AZ6[q0k9;ӃZB9B9lyi*\AU+jւ̃6\Ozx“L=97R)2``=) qV^<HTL?DZda@3ק(OœI584qjzM*+%U(F8OZrԆYBxz5UN5n5{UQ19i̼i ~=dPd#$~ Zt9=*?ʛv7j&{C`S^19ƣ5*qڜJQ~Ț<nj8]T}V%;t(I˻}Xr1ҲeMpWU9s" TSiF3hF<4Ҝz4=JϩH}*S0dc<H#zsO M9bHzT#;8MG׭]M͓5Qh6RlSvB9&ϥ9g?@ǎ*J'9<zWnQR3RvDpn>]֘[wn`%,3ʜ*J8LW'ǿҐ9uc4KDG)jQ1f6" wjaϮ*Bn= s~氹HJz{g!P*bWR2\NDy #75vN֧aqژ9܇FiTcZzSvrsn* $92T*['cT#jf T&Nsf] *Ibԫ'VfRޮE!\FT*mZ#3n =ZK案Binfb;#kO 1\Izk69IlhV7U-s\A5i"gYFu-ϛdcQڴ:W/k!YPGtt z;Qցu92cWg*qbI H$gmWOa&GC ӨV\V׆(-60K1^=Nk;"MӨXː5=dhFq}:]cSs"\`ʞ)&{}gmNTSN +MIޣ7 ASV$jw&gb)-atԗ~f;X&პR:eIYcl8IU;hQn⸕E-c Rc~tPlU*z &{tnnz~=odFϹ8}mV 5"0 z`NXwWskN2kyȹ!F:;T7:khnB,A2 P$pr7߻'?tQQik,/oQ ɌqQ7MoY, OKeyg% Uc/`85Mm%ZehY?(*'@-Z$osr9ޛA) j#6p9w3p`T`qx)8 ,&kEgCq 2OAr_ٻ[/;G3XH6K ۞Xn(Y@SǠj 8,yI]3>X.tVӖ=yn`~aiq4:e1: \ :]PpMc8>SC'R1;VOg:RdҒqR184($t4#F9R9$1x#4qMaB1iN\PdԠ3nqF LC4M-"8M#)MpHB{S_#Mrryq$ǀVM&2~N<$wsLa">jKdto~uEĄg{Kw2C~ Q<p?*NCH\P=:ӶJLSv=M4s\+lD2;յ|t#*q㊖6++$lCrQ<*FIׯ͊Cj\qk[/yʙ#=):.5-0Z.>^ykNk~UxN33T/jjA Ƴr4L.{qO ࣨb##NZr ;hŭD4| U]VF)^[ԥ~8rEHO|vxVsH{_]e$INzS&<"YIF'8frxsb5UvGfMkDb{SN'ʺ`"9ƙր#$tO5cަ 49q֙yzAԀLFv sǷMB?p9i(SD?\d 3REkGrGvgjkb q. H3`.f9V@rbLS^jLw][8 JdpNoF#9y;Cg'Hne'?*`^RCuu1hi!vۏx:5Ō;j"IJ9*G~:Q`7kńx~VWY摧p@v?ΰuhd!X`tVRc$ w`@5uo,XϔqקN[@7Bcf8LSccWt>dIhZԀ47B[U}6As1;4(bI8k FMMи vNQnݼ+(r8mtq[qn6H]c&1߯q:LQΒalp:xz-#PʱC+ӮQ`6#sMrA%²+FrrI=Uyl.<1R*=HXDuAt 21KwEsTot$H{gG)bw {ϔjdݒ mӦ "-qMtzyj t<`:uo#kqֹhhjjiX `ϧV%;Gwe\:b@9m t7l62`sK7y2Ё'#.rHhp\{Tx8ZwK}?!}TPZo}q]T࣫[I1ݜiWLp=y sVDՕYG55 \Tm+b ݪ=kU+E1?)q);df~5 S?=xƉ┎;J9=qAlUlUqS.1DH TۿEI4c4s}sL;d Ps^UsD:c6BdU Swc<zg Xq dzfzV-~3+ndM9dgV$ҡ*@u5:0yizҦ#*<riBu(pz~T*T')7iMnʬfat'}iuSk2YeOOƬQB:?KrFŔN~Xv :}kb&':uSL n=_U{U4fب:Kb< ճ!P#\ɽ T*$)yVvFzL1S!)t)ʝ;:o.1V|=9 UE늻{Wn4KB] kzh#1u: :"9jU0OWXRAɨ[sU\P2߭y+苸}mY;f]*OG&8 H? ㎵=+Hљ&VqAsj2޲d!{N_N`*ǧU)ٔpF <Չp8Ps9f̹<T^>H֖>R>Xvw7NRIurTWNO5ҕЙY~Ԏ1s~n4P8')C']T]XjQJ9& &B)Jh5e0= |d5ϥ=IoC-L9m5(N?J@Vc"i <{Hl*dnj;LZmժg<~ÌSӮ)::l"S!':gq N8e#TOGoz}*+Z;ِ> X`sd* d[q AS|ZBc„-"Nic#ҦyS؁k̤Ќu={WA=vv$PHj<Ιɨ w>ZыC8bsT?Ŝ椋XVH##kEb<ȁ;ԶTJ) ּL6j~l<0j$.RE Ɯ{_]rjt!3޳G5v%ĩhB bwGz# M+n=)SL/c<ڵ9ݰW}*{v#n͹ G]|ȫ!A \ջL\zn'fznB3N86*>2+jzz\v8rF+8QTw'Oڌ`aũjSOq[PPpj֟5*G"LVvUSDU~ʲ}VTn *>9 ?iGY8,"t 9r a2~w+ n5%_x~Z@>P`H?B;%sҩ]?g#(W qߥsRs4|ĺncU8pa8y:ƥX^+6WO,O#jH#R c$z(R*-GAs(iMGo<S1\]o<6;bY#1.AϨ4@w#6 /cUtoYH*`X"He+Ds #ڦ .Cow#MS5RC3+}+IX"u(`bp*2qVR٤X'B3# jl;UĒ5i$aYԻ`?:Z35i#D!Kd)cVnp:v?s#U{#%71+vK^$ydGqYoGEO c wqη~T74`k(֒%XW~27gZF-dVHz+fR(H8GnSx-#R`%q=c$W4H~)_:hHzV&w mZch4x`i Z ⓓ֐4Nǽ&=ZJq1~E!OzxHzӀ ťi)Szv4ǭ?#iXg$0BqPsNa֗'!qOۅ;T|(LWza8t:ᵴ'WI~t:cy՗D}CK(uV|;Sf{V5Hrt*1`ԋ5Tьjd$^t{OXH9mi~VF9^_y@GtRA<ʺEuk*kldcֻf^U3z%U":YJW!*TT9ץYxHa #֕W۷Z䩠s\z zjAm\e5tZªޭ1 _VdD`ޅ^jm)>+HR܆(>HTJ4Mc-֥ N?29zԪmVc!pQԠ1^|2w'SRdjdfX8>'2\f2jU 2)O¼XeUy郚9/=^Uh\茊,g`8`@UBxjt6R,SH5M%%#9FڡsژsӦ*&cc<ZCRwJieiE&Hv78@uM*"J횩2<ZYTOTf\7Z2! ۭTs+U53x5;GJ])] .4?x͌ jc$`5;ö0V&>}zUlĽ\ZIӊIMXv$Q=*,`CR(9 }=@m1y21Rik JN,jFu*ΪNŢne"TL]D9OZیvSY_֘H De+A$qJ|g'9?L~DxvX.r)=)ڨ-̗H W\{ 2"8ϵ6Zz}O>C[\2/\-@?X !j2;UP`Ȁ :Vgu[F[4y,1'dʋԌ ˻W{KΪ[l:dcϮ^7qw0Wb#yI4Xqepu+޻Q6, \'9|Mc8Y%uE.@cqqH.?+cZ4b' kNcݻuc*_Aٳюi+6Ԗ$ >}:wLpkb >BdJ^#=7) y׍;i(I ",sM>9kynrBIO!Y#&~U P'Lj2#Ơ۴ \1GC=C *՜w-dxz2}yUi#cm_ҨMW$8jTYe8Ҧ;< t]vᛚJesWzWj,RG%)_gpo%?1}hKz̜tB$7vTϭPCz|5\.y4\PZ!PgA\jbFڷb2#sY"g_Y~Ս9 ߻{V5WIIqj3ផ*>4\Y \LeF>\L㷥a8Th>ʒ8+27n9v'+HZ*Ơu$.+E]r1U%AJEN{TSHG cN?ɥ*⛞zFҰB֣8?CHI( c5Ջ-"`ߟRמO=9OWd;W9TU\lUŐ $auWV8$x+Ϩj' r*ÈϨ;pANWk |嚺9G[ı-NJKpǘ=鮇Z,DeG5Gj4AQ4tơI2zn&#[sSJ .5Ƿjp#ҥ@ZwԆ  =1ڜF4d`RS9+JOjc;~@803ZӠ%b(+ɩO5g֝_v 6rsڥzs~+)V{F'Ҭ`8Su)eZnَ)28%²sBq)`Pg&u@X2PT] oq֡1M:iT+ ʩ:ɮYǪ%+']:S C l\r 91;ϭL#cA#88+5HR)$p ;GZGOf\  {}jWzWKn'L緭<қj豉x x^3{jr ?~" ;0'=ƀ2yqR2RD&O!wNN~zRqԕf1j}*W8= vP$CLR֜q udEՍj5!~+߿zf4gב]dXF;5Gq.(aF3ۊWӰBgSL'}#*:}:rkqٸL;F@]*Ǖ87+lp9-H#ZzÀ8w+bsw^dD=?JxG1J 1jEשOOqPZV XN*xcVaf*c%3Qq[b%=j,y楑 C=iZ'ՑƚszW9ȨI=*Ap,}?* HxOOzg?NkJ#I֝2OuR}>H뢆\zTs D\`9V0rAɭc:VTT,8lҢ ά9T9֨N:fFS&Aǽ =SoHfl+W,hw.:$)eO85ŗq5{X#±m^3FQUV.k֤;r7Q )@UYǾoGw] D#|s}*ɬ^i KB־i8nM;g]%ėhmXFs7n{5ˣ`gtX#Y:iU< d^G͜=} @))Llc_3 G# xgXJ{$lpsX[̻vi= }\<"=oY:ztv%93uQcOL򙊂3hQIkAY^+\.Wdd##(Jlzmh57俔Iv8=*ar"$*˴nvw<%ěPp$7ZlqQ*"P7cs #5[[} ^O-R\|0;=$hS9pPn& c߭3[>OjwAfWi4tcO{~wVJ4s3Sq> 8#E+#brN1OOJ$+34\\$GX2=R[YIn)c$gum!\+LScM%Y:Ӄ.XÌXoc-2f丈}q.\dkpDiDʷ@4[wd$ұ 08ǵ0vvT'9G99=[8NHQ-UM(^f,qc=*݅vBD͸!/ڦhIʜ#XEǽMщNRzjYZ{aVr:פd;8=?gM2 tA8?niyvӭT-"IHN 9 q׵$7:>I"Ѭ0X(7q֔M]Fc"+֥*G<ziP0nRB=:PdQ2qSF}65"88F ʉse?Z:;v$m=sS#z~m_2X2c6HUr%NhO;UC77L)&pj3;8bFG_֐)ϥ >_\"@1?Z2?3_4`ʰV, NVJzqOǸ۸YzԨCwVLcƧ@{j坙-2“|C'J}kJR,JWz܀qU::#h"Qw( HӯJ|9dHUkFC[clTfT 2~T֤T@l؆vTHjءq֞x4g8؞ L0;DF8/Jp֜J6Wb4Y񊴉DO8dڙ 'Ebr*ǓQ_/Մ-nHWfT#ŧ8sNUε,JREBDN{;S:Kthliaמ:{Tf, L"-ʘҭ4cPҵI_JFc:pzHwo 3$nNIsSrG1ITl=jьu}+T﹢+=drj}R!4?eJ2V%:~H皸a$zFc9Y{mIR*MGV2{q]4\B?犳{2SRZ)jV`@T8=+MU)oZeR9HzqSO7\gC;RFOyHOZ$M޴sP}TģRj%=u拔¼ҥULc8L7?z)15zUqj-J&>i |U'qB<SWF# R$D5e})v˖I)Efք:zFUIEqk.k˜}judRٹ d1&i 9*Iӕ҃XSq ?֐0f?Σf4=i,rj.Ԇ~9i8pp80m*#+<F5YE5CbGrOUV\j}1$fM9b ޣ2:\TZ$W'SA'@V=d2;XT(S t ]JANaQA|visz~)nipy;H=6D#\Y<`ܒMAV9#S  dVzjk۩?/N3Zr19M^e1‘Y>%BZVdɀ69DpRE ޽^>7Pkts(?z2i +JLoVBV"|Я0zT`qYI%Ƶ=I$pl.+}Dl\}e"TF8'M,D`pzQDYAkmnG8,ީ2= QA(E; C=DjbQ *<8[Z4(*+/Xp'0,@qd1^<X'3) rąV C([~θfg%9Gmsxa{ơy^I^:}+ -c6RK,3a}>˫.k@o1+1 u4Z˵Gu8H"E*Up vEPjP9PX XvqZ:\}mHRe]b#c-lCi$$R&b,iea'5KȮu o vnؼɫZ,k Rʖ.N(P/ ;\,a 7kKwJСQjI滵Hjx*{9SL; p;; .AF?ZVb:;{K{mDŸ(\|Tk k/"S,F[O4WG{Ygd9Hcڗ4wA@FI"l " spF {v BҼ7ī&ֲٞCc8)TW}nQ󵘁v ~5,գ{EХӓ⮏ ZL 0UK7W+#s"E7vH.4#Frw!?hKg`葝ciLw:m/Rm>6 Uyf(O22K|` J*Q"o rG+n~09R'uth_󍡁~uj_k ̒Y2H[Znhn lq.0F3zVMhgʺӧkkȘA> iBoU71w>^~MEfsF' ҽcfz*Y 4FF;־A[ cF,2)S[GrqVG=F'X A8=˞[8M.q`WY!aඔJi1Z4bɴ=>YzbVE=ʩar?ƴMug|p~CN :[[ 91OtJ= ?4t֖af5P?)n.B!Q 3jAdtCJI ,HOfY[hkyn>g\gQI{>‹Nemi#˧,` OUCq{˛،瞞QS$ƤEX r:gEI_ˊ#d7- "Z7K[Z ` ~mV 2 sֲ;k]xz!AM*F J`SOzmbڐC(@*@pxOfc)š)˜8#4y9@ ݊\ddO0P܏qIAFL=*Sj̓Ǹ ްCm'_Ո.26-u$A?Q0ǡr1K֫M3DEH)?zCj\;,p=;9Y9 1f90p3XGB3n+B_)=k$'Vu4WFBN;Uc j2 7n sk[CדT W利~]lC:Tu;s֦e;zN*2Fd` Sy)Hb=)9=: :`~&zuNK[Aр^*N*zg#84zq099ϭUVb¦Fӱec6X$yIA5 S zVN G(n3r:SAC3\B=jPJҝ;'"! u:Ԩ'be+"D{Ug=K1q8R 5o5cN7OҠd֮ a 8H., 0@t.e$bN>*pJdcqQ0Wj^*h84EN}i 皾}G`#*=7*ҭLh(#qFF*K۽Rw&NOjGN,E<|sLQ2ct4 #TϿ_ʴCpi)IQȨ8)N{$sq#Rmf"88Uq{$`Zqw&Z!y}3OJfsԊ7}j"RďQ3vD֭b$f'r}Mʣߞݿ:^=+Tt땦$j6*}QWb7CދMR[OZ8{Wa}g1SS'1=Ej}i>OҟB1Z`8<=QljG!\^sfBzT T3yt ROSTǰ} 3z/9"#)dd:A9昣?L PzPoctQ جqAt>%Q9Bx 泠NqKd5qCT}+^D}hNA+fYJ%j1|LgZoưM'YY J9S𴅡3krAڽ’(pk*#Uy-|0R8$ӊڱg$A.d@-H?+&lnħGb;M(N~5- . ]H孜ޮ C@?=DoMem:WAhp+L1Y\!5T/7lz}zR^c|]mp5= elg˗߱?D@۬C9nGi$]F8?>beI^k7EԱwi}spF[y` U䵒}|tD|GOnO.'HJn#h mN֢,v6~0 H!@ -fwʹ )L'kF{7f8*:2pi!Xn+rANJ|od[h)i"nrF3ךڳ-żBRsVmNG#w0ZsѕGoiRc0>Z?>l֎ t5HۨY5ٚH͂g^}TcT4u{Ks{N:vGj_z ESMR1:NjNy֓(hsE!d b01ֆR EP~UzlǥQkH0']1یN4Q5߭^xV,{ԴE3Y= cIh߶)>=s=}zt99R/Lp}S&kNzTW@z=TNV7Ek ] 4Y rG\S ,nd̪FK=A >HqZOJޒKun{V2.KO?J VڞuF3:3;f2qS cگHu)&lU qJrx=jb8qMqV2w(?JKlw95*jM -w|kjرNXAh6?_]P/## 1zw}1U>KsVQ ߥN"tEF2i c>aTn9NW9Je`9c`x\Y1^wm'Nc)M&\qҫ9͉EVt}erQn=jp0jc UњMJ"$gBW#^hB=05  ۓJ5㎕(Aޮ2l*q3=*WqjQekХ=Jأ}>_8ہۘEʺ]QR♞sҞUX|9(ϡ3f>4nv% 4=4ךSŒ>\5FRcSA>}kH6Ҏ:?ִ uTzJ't W>$I;@:UV@W# !1\^LrzS5u2:A)؟ ʲCҮD9Һ#r z Tj<ҎkR?48秥:(=4p?ɤC#=zEysZ8ȧq11sXroH#G>\ǡ=F@?D'WPAOPAl>՚cj[$sJ[ٯn~azZӜfl ߕNomX5 -)p|*oc{q\ݠ[j`ggVܬVXȲ W pqא*ju<XU#; ޸[Im@s˒A֡ӭBIRW|m㊩u*ڃCuK[t]Il%O?Pj7N!hʲa9LFq\He@wzKY cv*-RM4c*eޤQ?RS$HZ3FzrFzZ#Ԍ*9h[ 6 iZ5Zd2F[vX6P6ϨM.ӻsʲY򭥈:ģ1C<$a#ĺnme\s -D[:%+DnF8>sדS 2i`C4(W-N}F>>[/RmƥAT泛XhVRS#:l,Ѫd׌{(e4H+ @I*G6n8,HAwni[nLwJhK!ۼZuoy4jj+y!" o[SBmC ,@85ZJӮ g{{Q}.&Pj w a1?6*:cHL*y8S80}=Ed٬Q"gӞ5e9Pxi~0zVNFVf\zV헋b QYF޽il48\sthtPjQ\W {s{q6;hHڼzߺm@1΢hZ%AK.܎k[F.ϵDSh9FcSj]GsE&Re Me8p½aR"=M9r:tMt4;P Hjy(Hp2Z xsDIE#:֔DR+4{j%\Զ)N0i88<4^eZV-1;Z3ӏp.3۽0(sF)j70֮10G^K#Jf檭ki"Acq-24HSHzY=3R=,bV pуvdI'歜Bˊt2A˘@l֒;U{ܹ4̲ qcKg҅-NdJyQ5h"G=g=*_U>PqLI8>? c)='U2tҖ\ơ9&=VO؜E20~0Jfy#i`0Y:> ݰz֙ Ͳu8a近 UeIE6hO<}kjPv:#P9#ךVr\i>ߠn>j|#cSMl11ny9D3*j1Utj ,h~6@NyfKI楫9QB1>(JcU$hvU8d~]ʧZb$Qn=/*շ֓daD)LZeR[O^J$<*9 X."sv؛)w>Z}Wsd,;,EtuYZ$s\HʟiɕQ 8J+:PQ0ahDr\d?s#hRKL" ۝#/^OM@H"M¥{&U+wNUW]dtVXس#שzBz}jvrOG؍.^iWI-X[6$$PÏFN48S[s$2MiGfζ2)RsQj nD<~ZP[ tZeԖUr FN=d"yVY@c<{MfXὟF훓 m@jj3[= r |vsҖit$;:+*K"2&)B4x9ӓRz^<慈zt#>-rfVf wd $F@oG-[ # a 8$zՊ@&(E-3y.V8dTgq t^2E ÀX r[thcޑ ?7#xg%ķq 77"@R/|;`:չ)$& +נI3ti1`p8xR V[3 ̎Hn=k2J~ɡ[缻bar<~Fwߛv^׍2Ouk뭠ҧOۘJiwStO9-7q4>J[4䲴-w3~V'yq{l!Ԯr8ڰ3rzja]~ UIB<'^hrs^:׬lx&]]=0 EKVzu<ÝVqeڇKo7r Z=s$9xJˆ(.CnSִM[f+nS jM«4J¹ԍLjcӆ_o6:qT"bhQ>l2 :TRM׏wxֺxRlᱞպdKNǞVkKxYm=#J5^$Qy@WY/A v&XX$;=%ʹs xKD#-c_6:z$;C8n,%Kq<2aY;8gWj<Koށӯi;0kfuZrH(B8uhlOq6Lm=x]0ĶaYiDu[KN uI4h C w[fkX!yW}k-5;M$dYQ~򝃑RiLtK t!QNKo&vZ-ۈ JI5qڶFqJ>_@g_Z3I!8rQ`8jm 6iii,E(;Vg`iqTсY66oijLx?-mG^=#KϘ;]h'QҐzSIy=(/z^AE<E!R/9<Z6*NSM.ԾY⑆  p=-J#$\R3p'z@01CtDK\<qte1ʻi@喲ɀ5\I~Tӥ<}>0;z==*A\S9 zՕ#;N_𦝈j@O@'zNޔ!Ĝ??x={Tm#Ɯ5dNxo֠>iWT"h' '|MHZ쥽hq)㧥1@.f2$<J@}LwiM';h<Ӊ8)\V{7Pi\,#\Ԥc M q۩ןVN&yFiƛO/vcƸRa?ZOlR15VKi Pxgg5̥v1i ǽ(-LR0ITOZ"ծ% 8"ޣ2)Uf 3R`sIW+ث8){ӕj!\pjq$SuFr4 $jP oJK⽙"lqQ<=Edk;jEmJiT.M4MRe&W+1PW r1ҴLz .jM3DԂ\UsMݎGVpLӎdd*~u"K׵RRT/%F `gNUNsHpzSU4*N; Cr St8V匸.f̲UpPFM"Qۊ#RujǣsZRw[Ԕnbwwb0Aՙ-gÕ8;ǎ_p`sd?^tj'#ǥ;'xPX7vz*cH[18oAyҫ?v䚫!si;TA~{Ar@:b5$ڜ$S ;0#$ݳצcE3S$yTijg}M& CpyV:.?bޚЏsPi. (9:pqZf0͑H"AN,N+>*D}jrž!`cT>*'VU_Is;z5ܗӞ ie2=Jְ֤p\cZ@!qu!ScҐ\swdRGa\tqSdsՈza"P:c ;{l:1dPw 5 3ڧHZ6>ʆ1¹4\Ud™$x0lc=2\1Eg .$F pF$"M[XbAp*:.,-Vgs-6w~ciɢHnCnDS%#'6k}UQ+ncH[>л7F(K,w֌۾ 9QfXJkV.}FRZ<dpڴCque%c0X@:WPl,ͬ$z尴f|˰ͱ4qoD^jz#,<71G-C-ǜg_o^+LxA@삗2OAZ7 IEl-r6~7SE=/m/M1k)x dgdQwL=͸Cm -֭#l`gE c8Pҵuerźb'K(ix^M23CqRSNRRx"6Lǧ5gU"m|ryAM>D&U_ֳW CcId)a ski41 qV%Hve?hUnkkrńsx2APt1n"$q֊jo-!y{ɹzհMi-Au%~D~Mu.d9F:}1H`F~&W5]l ֒IRPRiǩ{юs@xe =);)9 /\<.IQ~Tps֒ ie R~4QJPݶyH5[-8I˻X% j9:-ӵ+jWc51&܆oe˜+u `I*)RcҖ̲>v4DV%qZ208NPEt)m sέHMZ2F1I|&Z۱!1XwTp;Z]狡zs֪K=Zl$4ySҪ6=A<W^#_L+#۽H ϧ(Mq׾)ꤌw#Hld"NA(X\(VIWjx N汍+FT.*-s&\Nŷ#:bKh"ȩ@:S?֥j,m{SjRs͜smNvTv}>#iP^X۱Y@Z$exjMǠN1Y]XcC{Ոy&JBUi{LBv>aa=R?B>[3rd`GA!ȭc&CIF3L1? k\0D֜}L+i4 ҴMN86թ"\JH)6v=^6yHmAҞN!`zcTnS>d+g8HjM:B:TdeHm`Z*pڃj1\9늖,< *xˁS!f"Ǡ5f;@FN)1ϽC% wl6əN?AUd;S;@7Tk-ORzJaJ}jɱ`8 P$n6}*M r8EȁKO>{X SsRb  EdI/jֱ A/XgrhKXLV{d!ֹ~ǃf4I)w%ΊU+=e5'ZAϽ]d׶GZ3PxRXz D,5R,}mXs؋t[#֮NM3cȷb9t0Gī*&tAXGH!#4{7ֹ88+0px2=JMHdk2̲ňAA>jM>-u lt֡Ew,f ׽-)%[[rQQn,Y⽅g6 ֫i+X^dt1qϼszReeE l˹$<7XݒWh*A,WK+B3@%F95lHYCpg֋3eALihxO#B{}mg{cpG~^9uȬ/#{>ҪFc`7t+kcW( (xS;;AN7E$RgaA8&φ^$,KqzWRD<>ɔU;κĞZT }-ưm?7~خMŅ&m:ՈAy<+*VgjItCk,LںNFqz0^2R Um>^_Y:j68n=(q-RAR9+>6V3jw".=icD-eRU9>+SF}<3E='$`uzFud88u Yq2"` Mxs]'Zsѿs^>N٬v+!5A@smj eB67OZq&mrwLyJ7^1Ϊ@^u$C~!f7{+d@<ޢ{216w,2 LtRĽ]ŕ$|++{X3Zmr8 Vݭq-1ʏLNƤO0C f)a?{R3[ PDdЬbi:N\G*t|&ZNqeqp 0]|{>aɞ0Gb>s^o-C>%To[uRYvIT#TmF;0'ZE-OI'?ʢW(s7Xt! 8c@ϭ8/>GJJQjB( ׮)`:)v?=?Zs*ULL_^~R36 T1TkǿUzc\u,Cd3R*AU6*_—]M$ cp(4qi)Ab)})تSde;GzvᜟTCx#QUʬFýFOjzv4o" v.E4F vԮn cۧ49O\3\/˱.}:gRE9֠D"X܆cU1ƧBp3]XJfr]F:sHVsU Hʛ'}񃃚6j SʩWSC-ԌT)s\XIhTH'?ғO4\׊4S5R"^3lQZ*)oZILS;=Fiș=+Tۑ*0eW13$is<, fNFцێ):E $uJw!ڣ$P Kni˜:/VX$^ݨH9c;d38\*#z;8M-ܠ[Ҍ'wGxVБ ʪIp[8P!ؔ%1}OTeT+>׀p14϶Xj!ӊRqae6wQgpA^Tv~z{WHz!׽@0(8L.͓~U.ѓӯAA@y{T4|9$<Spjl">5am>jE K= LR*;RG'm$ff8=*h-rsϵh^$Vm\@t{8E+BHRՁt~d5ONˀ7vlR8#W4d#Tb&tto엖/lQ#8U!K[[y[}+1sZimi "4I''H\qHd-Σ'dhRxUA%r\qh˝'R}`/ňs׊=wm 7gˁ߱2r"Q1I+DFqOO0OIf%^,}=:Sl4=|aS(LRyasH9kB'X,X/ }*hys=8PSC}Ƒ"hYH9 ֪i=͍Sf,aA-#$ tb]pD<5C&K' Lj;ma)Dc Mu!M"JqAȩKcu[%E\`~OeJ-V䓅dgl>6,H M`v'=e{2eXHc8 ";}60ݡv yʀ 4)Q?QDC; 'Lwb)dekmymi4pdz[NkJtHg$"EV0Q5xn>$Ņ%sJ:֥RIqH 9!ރҐ\H V0ݺ4L@!^;GWL@ycӆBƱ=p;}*RoJ:sNFܟer왷ΙOZp=Tmֽ2y's*kb˭Uh'#JGݪ@8k/imʍDs" N%? l25SE0O9=z,@EJT㊐GJ",p9R(S Hq2[:i=Au"9f]DY҃? zҜsq\r<P<1?J&3K <RH*ZGjhR zښ&L18J9BGzF~^j(DūSҥ\Nd1g'(c8=W9fCb枝xt);tH0sM*8tY%mL^D"LգF=낥hqC):W,mKV#8(+)џʹn1R<_ƻV!B$4홭&PKB1EJ׊I]UH$:7^h?U-ׯҼMg7cxDHO8>qP*iŐ]*9j)>xjPU4|sM S|y eRG Zlj%3ϥ ?S2q֘d#}XخB܁Ub@[$ z=hVENS$UӗM\T®92+9+HQjyܽj8eJ"5}iTdq]cT,B˃3uNzT+ѧ+F~ zyY5>JJp'$CZr8\jE|dܜjN:}ަ{`3W3h1e [BJѶA]hpV4N9ڮGVFs=PVJFWc- aj_+ۊ㞔FqZ!T&;gӱ40?Ʀt=*fi^{U1ڐq֩H\ 4=*@i9;*W*,cj)]Pc"bz .VmB %8!C˝r:sjI-C#(KoJU3h!Gn7g*s:jՎos M"KK3D` @NŒF̋7Fۋ݀1zS+T$IȠ}FUǦsִ[́6bTIf#YDdY7[$`dzF# cqO(N]`ٖ.a0rsa[wTr̐w8&x^rBk'ʩ؞ǚtZ.]}Fi3Ejwr7K)CLzTj1pni6?wN{SySHb^HrV٦d sĠ:_Q/oCX2.fcڞ{V%05jI.Q|RqJFzb#k$FHއ)򏕝~Kz Z'k< XBM9dgj|9F\Ƅq³;1SCGuO= ]^k{N'Xgca #Oj[EfX'dO,TǗu#ijh?<^ߍy߄]&9ّ# :>uR?z+!Jn>+haʯƬY|Jү $.989~ n"އī8r屔v*ۑU *wy k /Kٓx*;q[H"hFO2]P}Aij CT#J(Ji򉫒N?*fN?zsus׊pi4dTs @Si ~B12@OhsޤVl=F#8;wJL]Jl͡0''Ӈ^3zΚIuuy w.ZtR=@tjOa?=ea >kF[|s) yżetOZ6;O֍ԞYAd{~U"D$7 Z5VM-.R^Ȭ@߸%µY-PW:lfJAv&3 g:=yQvd,3UpJġU*8l*&qU@\Pih)C i\WV(~M/iڛH,?yj 1N-)擿)qRuRgڝǷƎ?jrhQ8c8g&\@SJ4Œ y/{Smv,r|T?U[~ `9'z$Szw\*{dT%b>U{zvNMU?u C&oJGݻ0;]-Za ={]гFMشcץ8ק֤VpLȐzR9Q3s„^۱ 9a™nq5g|FT"jz.X1QֶmRESN+*D(?JHpS9jLQZbFcRlXGZ% i99MU#H[k5dÒ!8g{(5-} "D8$#5=Ň/fw|a^yx{nlHTz?Kp*jquy#)]z|ZV=±O."@^*tTn$v6GOj׷>UȂf.O7uYhϖ`Jtf7fH_];D@=KN2hKk:$MaB;זO&><$><քQS pF{Sy7J\R6#=+W2=m湽Uǚ=MoK21$G.z~5mI氯?>k^y< 钶2N:U{Ux׿YUaYH$CEe[􁁓J׺_tsPieb:VR-|x]w@3jT`=gt#urJKsLo0 w{Zh qa{/֫d>P:th("B}S1'sJQOXǨ\OZ)~%k4ETESfw Te&ˎ)m80>Rd9.W>LtXqM23g}Tn~#!ϯjzI׭qͧПbSrݧ`f\b/A{$m}=wgM?yq{o}M(R:+u]jI nrݪ1)#GrTR}qL3Qg=6_[zRyޕAԡc-HpE+Q̣k8LOiJ<WLԑۖ#Uk5?m0TdΪH 3Q\lF}7蕇#2®Oc85de!qʶr1OOmC0w7n)0O>=Ŷ.2O֋<rZx^=&7Qv#.?eD-w4drX~BՃ] K.IvUVP6 K{y7PZC$+dB~K!=Z,Ky`9zӹ)OLGLRH&9==)0Z(@14dXZϊ4){Ifko _u[F2k6kAܙק" ױ#Gj3Co$gw:~k[ֳR34O"O#: pcOOZoR2>gK0nTƠr|9t=qҢρ]GQ֦Ёm/59$# j_[|:c*})W%OLI끹J 7J$@@NF@%30k(A+-&b6AJڮYi11 =9A"<)5lw6zTorzO5Gsn1I?^+oBh ޹afje0}j9?kλpީl1z8Io}Tu rZ+<;^nQu&Y{ҭNjZ3OJU M9?jqT9wzWW(Xoʔ~^sޜsRЅZQh-ӹ?JfM.N:4z~n\dsH}9\𧃎N(H=={B} !n9YH9ʒ*ny5 5%r \ 4qڜǎ8>iq̫ Q)74F*GbLJ$z$3U%ST@v?“Xw<PrNo_.bc'W9>j7?H,LLY=iEan3RC{SmdF=)؉ q[!ijOAM0ǎV')3iLQiHbje(4#^!gX_.VW4|ݮ{Vp\:^㟯.T?fNx$WgjwhQ'{NsU`SLWTi6_)dq֏0ީy>RGzf&$Ԃ^1ռ"bq4N89IgY!'=*»`VRXοDLcacٽ\XFT֤LÓR` R?iOSGTu$}bA*v9?5"?QI#Ni];2fF8IhȕRj;sU^APѾrz䙤 \f i<}za f+Uk!v;LcUn֑+Hǖ=1Q I$ݤYkv *ؚQ ,ߒsNkyebwd{2Xl''bܤ"R ꨠV&WG5:Ƹ5 t_38Sץ^O$g G?(ߐz( .jWAnLvڤFR:dTٻrWhU\zZIAV`9mfn@j6O=kZ4nEi[ib'+7E1,F_Nf#۞+ی)ƶ-|?C3H}+7(6ri']y%Dcի#W Pr5ϵ`vhj@S1P٪I NLi?|2&i8͒22Wq]v [`RdtQՇqVKfYLeغ1}3]+eRy4-D"G4}BCI2G0UqXv_=:4g~FԶjY,O'Tzն4(z{ʼ? -ڪI du;tӇȵv By`]{hM~R?[yy#K4I,R0<U9_. -$zgSuf^ܜI@IQϲH D|E\mUojO !OO1ڟ<-{<_fc0s%Jp07 o}B+qjHBu8CtR${~E0_5#5ROc$9f;zRnI'n%9݅zǂJBp>v…/a7\ J(榑763ֵ,m@ V+KgNEH@ݍ. #BX1ޡ͚(#}' YoһFD {uպ8&f)@LZzX+8=E%#mUILVG')G|6XkV9?+=o<8nǃ>?hVlۡJN{UJj|zIc$LE1}q\9Jȇ+UUYSF3~]z4h(anyJrN*2I=^:) 43W!E()prSrz8k2a=W՛&.DrVd5QlTb]jOjvaҬ\, W5PQ)zъWR@Lv.ݰ۴ i +\Zi߁^eCγ3P2JaK~([Vf=09h{We^ *k)# gҗBE7@sN?utAeܑ]4ħڪ"qX~2;|'5nJDumzG^իv$x j!q=}EK, ɇ9W}㎵yFfyG4sAzёKސ:%/zN3Ig/N*@i8ՐH~AQPyL/N('/j`&;W7-tQ|?kjJ5v9ǵ2܌W>HݜSgl!cc o}sB3Ҡ9_?j-,47wr ,ze㩭bQ y494*KA= jYvqVSgDiqQHwj\#U܌^d\5 0RJP:J(1wRI=j%nFMHhI=*@y~(V2:`^s@prɛXF[ԊU/`G5U|4[!֩#&qv.ԕGsK!8sk8zisFsZreտÀsTՈ|TIȬ*"ZE(Nt6nݩzv8^UjOCvp}ZL=F1sp lGzS2>&HR[N*uz{ҟ Lg46ҽ1@#9vp{֕XOj{9*zRPԤZRSҌ=~f9A8?Ωh9lXL\?Ԋyt.zړ+M0yS|87pxa)F8?Zn~j LbjO,@>RΏfq)ڬ2zbG|Ը;+➠3Sޗi*l:AR1L"I=R2'K+2`cv{yc=*6\քZPNqcsՒ)>n?ɭ*臜{:n㷎@9+UNgr)<?#VLj—8ZP޿4c:(J Apsv‹1E=P'0K61ֳTjáĞx-T2y =HA^tU tUն#j5OC\ '9)pORH0?Dq>(8_0GSJv*xAϖH@}MZ6 \V#ǥLxi6SE~ю*O-}iv u8b.bzѰzӺ Oz ދδ*I96; d+T_4f2.2;VhTO'BpqW6nif %I6^ )iP\X>w} ;$wh8## ,dA3Ue+y0*D%~JBwe 6<37R&enp~REl_(ۙtDZH ƺa ݜ3*3R#g B^E.aXl<۩ڈ$.p ۃֲQotҔrT<m,X<W rT#4\,rZx9f2Kq,l)b˶CO#!jm ߉Y<,T61>Ŵkx|)LUKcEi"&kq8ݪI>ڟ[H Z~W2m=zWVm TƅX䍣uwWg$ ɄE>b}ӸX˻+)^]`%wg5 ͨKu"j+gs޺7xˌb\cQ2jX@"]m?S "Zڗh5QX#d\zۿ ou`L% r3{b&<0w)dDr89X?4Y\X9y3tͯ^i~ʳ̐e g:W_8|+ˏяʏB6<>d97tOq+'R Pylp4I" ̂)Ӯ$qac[wx,yBm$a?WKj ?f$N5$v#EU 9X gKP ;`;ݟ+Rn]I,THcwO̠^2Ѳ稥t8|Ղr*;+j@^?&qN{Ѱq9 *ÃX- e@xGJ>}N;=Η/;k*l nk}Od 7ގ@3Ey~ዽ6(nfڲJ\VrF:.]e݌\&$<ϙO ڣ<Ч,J=#$z{Ըg(MȶaQǿ9c0Ҟ9Oq[8l&d#2uX@'{~dڇ=cAsf;\2LbvǓׁ]k:GӁ(suFO>UXRӽP[\sWMN)cTm4 yA]D'(jnkU!@QZysW=C jG=a5kƙGR'\w ^ ҼWo0nl~9$([[$ =kI9VpsZKc(hbF=( \\z}Ƙ;Mf5$9Ciϲ̤ݻc7q.|S?8/0VaI nŜ;s!,oH\zz`xoۖ8'?hֆh>ӥ^gXY9X$uG! vnOUÜkDHOVWBI5:j$T ϷOL^:W,l0z!K {4x69TQ G^D>It[۔kSBÁNךp1nZ==kH185۝{R6A)Q}V=(q?“O֜.98_f;3R)i֔uǿ"%W #DrIhR0:OzyS"QLn7 *#: #QZϙI^v[cU1gf u4b5$z~(&|㯵n5HGCxzd~%{=)v ; ^G#KEfdRޝԄ`@4RsjL RmɦsiO@sR)JA sNQhk ]CoymyY$lȎep;c?W@8tIU9vItYkmYwH2Cu &U߱Drd<aX#6lIIuƑ[G*bv3ϰd%p=lAWq9;;mJ]X74x0˰y'`1SXw/+i|[;zIoڧKKˏn8D7=tXK2%M*+Ƒ4$XSE9# 3ڽ*\ۤK˼d *i㎇2ծni%Uc]T9Yz]W-<[vݽ~Ų.Rep=(X>gvnalU+}ugttC.kҥ!|h`ێҟm+ bv9_O m_\EbIXwSd~61-d58 ǚDȱE6B@QW ${5lquХ2A>KY><-nyPd" r #p+Ǫ$y ؓ6Pg9#<ڔs\kڭ0Ii#:9 {MiGagHVw `ʣ ۙc_:p9#=tZK+n' qFQXc\Ly3j펑g \][ĩIq=̹3[w h,#ղA t63Wq3MH zc ]G`УKFK9'1#Vqdn'q҆GjwқҤg3Bp[*m[lp85(1;FǑhAwoc<}kU5]8jw{`g'(Z'́ eݞ?hH%&[V[7JNTt4 ]5V49iN^BCukֺ`#ly?OZcA"t$08"hizr=3Pʰ|1^_Brc}}eXлZ@u9T !$q \??u/k*pxƣ)Kb5ΒG%[?^G&>8j,uy˚H1I"46<@']VN_[܏#XV/۲x[bpIcvɔ QR0u) = 1Iҗ>\M`Ӈ֐ QZSGJP91 )yS L )c4srWX.krCc]479nT T횰_ȘCPP1L!s{U15lH:jΝHa~5p1\%sC1݅#c#ڳ4y8-sWSsr`zzKw5[^6IWDY垤WEu{SNxʊոF@}+e!A^VVG1u6ی7\f"Klֹi4)[Zi4rQ:6\~5 9Tq~u=k3ק-  g֏_SN?k6}Rbg$~Ͻ  m HD-H=+;J S qPfBBgyΛЉFMtP _SݒTnS юqvC"'O>3pޣ*CsZ)&&sқ{T8PW=ޓqGK? N?E:{zPH֭AC?V'iG┏o}:Rl3T:~lɫBOQ݄PBҠa^2EרIVsv+u*LuȨ (FH@*6;yZ&|hW#tLy+;:RyTE( ҂8fFqF_Ɛ) 7 @.yTy4e8)<70 CJ[ɠ)gڌⱵ{,o-.̖e$|=F?[X>[b&py7*AښPoE5#8vx cU{R7G$oF6P4q^2޺k:KK #z6:SP\hzm̒g8X#VԢH-hcLO$2Hd`֤}сWf2$`A3})#"k$7i&33=2qdfrFGCzUM?TuU1#0;8܅Wt qkvk]:VRшcCB@_\~iQȆ$ج;z'9#Ӹ/k1VUF.̅Vl瓜LU$Y3u8ÑF=8^G2FBQA@j m#1D(!81V-j, .2bXy-Nk),8u zVC"xW+& IlphT\wI$U0E>0pgn)Xēݴ8Y} m١1VVtk@zvD*3 2:RCg;{bn+ְal }\,Q[aW[DqO_=:7HlucK'-/Sܞ洬mpH5N< WEcoǸ(JŖA⛞RPqLs6W;|j_kq=%}}|3_7#-տW?p#9"Sn()t(sVbF9ҭR43Ihy66=?Z$w#M$Q?8܃.8\b&G(ԣAqS Og'H8kÜv\x QHNdgCD?OBԂHarFx5\²Ypr+;U8ɣ۞9ynU#uǏWJwF)捸JG$C4=1HOFsqӏJTLtD\F2sL}IH@5/኱8\gT#s;*rRq [G*uЭ7EAa]U(c'/1jŃ?e)6%yOҫ`}ӭmGAT%Lc#Y̓osLcds5ћkzg:gU#cjQ .S3Av)X<2mlkZ)UǯQRM'LT,p1WXuc* &R2IZr[4Ȩ{JFD osO~Rw' ЌTt bь [pGj*s&YeĀd5>-$>2zf~!3Jm 9OsF2N5(F0۸F+ޜW:uՋ!U*g`A]t0QՊT6A?A,}:VG?H4%m.1 j̣h>x`sm(0  W#Icz7ŁnyZzns? A3:u\^X?¡sQsO:rНƿ~GVqϭY'?Dw?Zl3w8I&yPgJ7eR?z\ԡK"ڶ>aҠ ˟4r3gB?iךc>OU&21:֠Sۂje>@uo\I9\UH \sS.F&o FTqq]H 婰TwKg.wP {ۯ44py>wͼJw) PJ8L(99McNϽ.Ns@)2=h(V5R#1)Jq^]ܓUnm-/FPnޡogc}pȒVH1p>?ZMGYt6͍亶P#_@!(7=@Ut+/y 7A /y}j4@`Xv{{ՙt$;eJ2>ҧ-ieƒy_&]Fx8-b?Ԧ_Xy9ϩ_xhm}0l_lRM w3: 6 g;?NmTXC4cS <>Ʈhv |0Ml&3&Y` F=jea OE{n9c.t JyKix`{ڬoQMQ{fx28;BrG8ZhVp3#n1R6S3pO_Z#,k2eԡE*F0;};Sm.PB@9A,~`u5NW{X}% cǥh=C&Jh:8XO`-:bs>W2Dr+8wx&KFYmШ++Os~}xɢAo+K ʻHϝQAҘe75cq\z&ėic%[Ԍ??YWW7:DMQНRH[VQ;etuoHrz5=j)=5[үʸϧX3g a 1'sIc}vC$щY/LsråG,΢CVdlzpNq4fI/fOrWr݀'@2ԯl"|n-4P!".sҵl юhݢ1Jmgzz})`-{旕/֣^0=m,ʁM6AѠ31j12 Eb3'us}m!g&8il uŤsw4v]E\rӊM4QFH۸#qN53BXm%2`[zmSǮ9j7_Ga#d$qDkG[ǽL- 0O69 ѳ?Hgq Azzh,\QjRGbF#mX PIۑN?ZC[ݬ T*053BO)s Xw<9^;QVe'j5I&=8Jzond;iYK{ٵ u(Q%ޕb`qځE;4(+׊,s7'KeEowOuUEZz;0ݜOpQC9QXW|#q@G'{Rq|=hl*Q?JxF#-¼>;yW{U5;&1+.A_(͂+z漰ˎTFfžڕG5%3F6: QXll$x6 }.t VA㟥Kz+Ҵ,Xk3$sW-\)#O5 9J-IWOvYhQ"V-RW^?f~圃;qJŜ(#[IOa["桞)FvZ.Pip/JFT-n1䜞j\{§FFXc'Ӛ POV; x|sR2v fHy-s.kǸH1R#g_nkTAUe< n;}kt˹,% W:u0ssJgrI=z.:ܿ#G~1|zRƕ :s.ZiL֪cGZ9 JX)zZL1ONReT98UE`Vqd4Ɣ?$j#>}9= RRD:~4L3sRצ;S/#?(nqS/ΐryd`QI?)@~B6H緥1Ȯ&?/sZK2=})rmHGrjtUcu8 Rdr(8W^;,54L=sc=O5/FpWz*y/?֔c<֝cbi p~x'ڜF)6V NSsӏI?;Ǝ=sJ?_BivM~ʋ ᏔHlq?ϥztb4pG4^q.vGzP4[y4r;c&ך&H3K0G= j!C''4̜sڙVcNM/s4:p)sxD\S'_Jd`ަ%y&OwjK"@#ArhN8{Wq؊i`v-Z݂1^@"WfTOv1ҊnP2iqGHs=sHr9A&4;Z$SD.Ĝ͑'jk#kX1+ :SSJk[䷹"ׄ~n'{JZskd4F_ʄY72L~`DʪsS⢷ҡKn-_ 2 *gM(ݧ( 'QI^MamD8f0\>Hk7 vl^8$*I\X~+FO7Dfd)"HX(9*C {.L,gh0] hV J2jwhcI!d`uHOQ]&z+h\לfy یz};ִl#އa/zjz i -3Nh iFiOOjh6XRO@}@9ǭi`73M1}sTL>[:溣9ZgLR}UUћ>x`? C`p–sl? p|[OTbϭ=ƎGN}js|?=}h #^ǵJO|rs҃ ^1Mq@Gn(b$iȅ]C)I\36O1 ZyЁk?WBztN.|,-#SkHǷ+(N ?_)L+(ڋf1ۃqc'3+0/N#ی/Ob3J:t.e =bϴbdJC Xk9\."c)sIp)O=)日K- !;g@6d{Rt`KEIESpL p1Kގ@S\p(ix0k[-ι~ǥG,k$L20j.Y\.eczRTw],.i"Y; yD3ޒnA_QۃT\+xF$=rkR5!sY ӷǟoΛ4\LWbgP9fZNdi$nT2=*LÌPm. G&cژO*0`;J0HfJų ݊xQ018hbr9i8Ig)nid9zTsUF2'܊Sw&~T] M,9Qv=:{U&[3c}VLU䟧4z`N \ҤY gMOZz ͣD/U:}WxVBHN6ic5R#`}4 |{Ru/)rW,3IG|~=(hX,R QnBQ:PO\ſʘ[R2L 7ozӽg4'枀qT4Bp?@G皔&s0r)RSXκs+y|>9Uo~/QLM1Us;ԍ;JDQ0hۆ@>?*Nvz;H#.x="kvy~C+y ٫_wQ޳$Pʒ(3X=?(bh׷6Vv_g!A!cb^eks!0e$cXҧMhm[L/png LvpX&3(L`O#<>&(^$)#=6R;縸Kan3K2d(dAr?_JY46XKo5Ǖ#fͻs׭f\h)7_Jtvw颉THS8U+w׍egim[g=A*Z܋tt4;wVG`=IROkǧm)x H >sXO">Ё1ۗ椹^vkUIn{9枀G.q ,UwmrJuKa(b8ܲf⩝K)F.偃@ijZrV~KHcuu9}͛[eeWݗΓQ垬㜏jmƥ; PW7EWM;sWRkYw5vg_q@ޠ[k5NHa܀(x?rqlNN}! (;H3۷cE]l vgy]YYX`鋣N41ˇyGwM޾jP8 g]L*ɩ 9JF^ DDx<wr/h1fxo X;wb*n $#C`G?ghryr# 3tmoNl @@nv}#![_FG={R@V-G&ݴu'4Owџir\ʻNz־i.yWܖ=n|?XAeôrı ZʱͶݹk=D*7 O?*ӼSdoqI!O=Iٷke[74<\A>xՎG ?-yhb}7zj 45dnqLs$:;Y? #=C Pd&}=)F av{ 6?9>=NI g攌>]c@ W)WohG=M-Y?ղ>N3]|sUnr+\=O;s[Ze%-%#:טSּG580*TP]g ?îtqԋp/Zl:6 28OŸ|!EO.wp2qT]o/`M);ӭtiYIyy2Cc,km2{2)"/*F>9jO*4Y[Du @~5<Qݦ[gK:.~w}0jlG;eGx[VDk'Bo}=Tor<4;ElG~yoXxY$nG|q^ ~x`}q2cơKiu:Q;#cϩ::EGgfi6.H> x) 簘~&]~q2s(b?AдzV>e8qHk#YѨYA @3}ke\[j9W0ȅAʩ Lw;E+S3Ң?-rtƼjK%ӄm͝"hek{<>TW@M!\.c_ddOgwcZO.!Y}Wޥbi=hIJMH.0sJv> ;i!Dʼnʖ1Zj}<=3V5_ YLy|yxBzWOj,D c\c'?zS)T4qKs_n<=-qS:g])֧IԌN,|ɖyGrG֧屒=8*=OXTA޳2:hHvC|:c9Z9<{Jd#s4Ӂ8桖 J2ƌ\Sڨ|>'rzX涌Q[y4d dJ΍gRW'yBf$L7 r+=f*Mb8W*-M8) 1۷'sC-T/ID~x|=)r|~t;'S0zq_9zgIn=+9n&[[cQ'PD*1$|׭5uV='h q>۰G#2/TCU$p*($~x7qޥ.O Gnsmn)mm޺}&8vTqW.ۈ-qMZQqp;S٨v.ߛ8ȧf4aB~ GHzvNDX>oNjCHzJÜ3@E(C咘4`AX('(;4c~U?QHT.@3”)-ڋͧiI }i@fjCeK$]][ ?"#mͷҫKmiSE2BJ8kKQ;c*7GJb$O47! c ԭlj  :V-X /6LJ .28YTbps:ރҗ¤cHQ8_8O k' z޾MGDPN88WDo|CuHA;`W|_q^O:R e|#_ ßGsq_-xx 1xԥ+>*w!h_ 7!{-kh%eO-YJ|>>\CѭM|˴MxBѭ"8A ?R{}\Z dc?DSV+lyck g:l $'kYnSֻl#G?UR;swٿa^݀O5ǃqq۩Kd/5܏R)F VTZJǸv6즹W񯂞٢Zx`@`{ӏ6g(wn_H+}w:&muo$#qZ9ݒiPd;ƇqEjjLcL pomLId%v9luU߆tNGlzQS}*OU/6?JI㯵f\@FH=ѻG#1HuǗҤ:-PZ:#< vXL3OOk\vPN%Qy R]+K8Jx('UKk"-j_!IքVa銊~Ǹ|g$?J?[rIȬ gQ]0'RUsuW&%ʹ瞾Z ѯIAY3:U 9j;v9知:{&U,K- sު}\rǛ+s55T#;s ÓH`zg᣿SOEYMZqc֪UYו֓ rZr0ITkn޽8r2X i5;vRx=UfrۘPKxA uj_ls -=6e)GAO3C;[B߸ϵp=ՊcҺa8N35#Kc! 7t^[[]ǟ4;i}kE$ʹ#Ư!0m4aު)1ϭ^\ }jLUZ6`L}(-,)50I!PvmOzLhBπ3ޞ0M^[Z'VlG. Qm=:c5d 7gU9RjI88q r1 \g>pLD1j@+5-CtQd}\xMSA"%O O]c5.hPFdVkxǧ2`coA2i2esk7+"h?R)1 #;yORӥ2=\OΗ *xO&yZV1c\җa@\{ޔX9JZ D>YSx= <ޔ3jڕAE:OHOҢE q{ n69FzMNc;SQXS1Rfל`AVc^9<6?JAĂ6fp;V՝1VYG5i`;ްU"88 A[TqNv\d㔮ͬ41Kl>ԛHkAu,0m(fX1qYsxvMJWW^8ʵ4;Xxt<1q4;+d%m 9Q1zTj.V#nj2^Gxʩ=3AjF/JTrsnux-toB421sӑTORIw)sr9>* b ZZ$eLȝ,ѠUĢ8\[wnZ=, <¯yKpm(L5w-V{|'J$ԍpڬJ7tԹ|c~5m4s!Hm}?ZHnV"yfd2lLp:74\YC f|.b~.|nO/g<ӆs 4E-Ϟd )}}sP_ƚ;SsR11J9f3u&oH$G2cpꧨ?2>M2ZDs^)RiXVb8ɱa^8)_{W\ORw.)#k9YU Hm$| <Л@2-;.c&+|`³W|LqIHs]1\R(ma'*ǿj:_/῞8-#di)qӽ=mbNqۥ8pykr=fHAI1֓iۨ%RJ#F HN{W_~&-פ|ČC[NS yUb;dՁไy 6zg4=sB48oஸ`½/O%Q,ky9"XqKğB F5اríW3]dr~YmG{ʗ7[ԓcYJ{F=mc4. r˶wnˠz~4qj?5Eok,g8b=*(N=&Զd-1y צ*(],Z_*E!-}i>²؋|3v8AT]RmzC/ٌxRwady-c_>8r}tQ#=~"k.IHBG^K4EFLگ㊖<5bm䁭|`jl_>6/NFkЁi{| #|A~ߨFE+hێOr~k:k-֞263^)*o+/+ՓUʎ7"r=\k6@1R#uP(~8Kڀx*J@h9g &=i#@EEIEAҀ9YNΪ#4vc 'j=Q Hizbjcp$V]j#q(T0>B]j$+}9]*5^DF\0Ԍn޺getD]Jǹ<+A/^*_$sTM\ A4]<тO&0O\k.v9m8tt$sL=2,W!Ӏ{tv;x\[+N\{JEs~f0Ea,'Y8\H[!Og\j&@yY/19>VyN0)ƚDws3OsQ;0OZ򙲔CcIU2WBpOC暼 sRqi$=[Jێ9j"=q4rezPsڣTbx*V9'=:e+FjHWs#&OOzevş ;VMܦ`\k:x׵3P^FU~O«C*XPyN0DʹXg=q~*)ZQk GAs $ܚ_*1J!?0q+gqǷLS%َ; 6DC~9|sjѓQtL, QTw`B>cRqPl4}yIn>Ԭ;q ǭB=@v8zSU<`sBK>N9\ַŋqCY'ߵ'Q \m0z֭nnH֢6DžҎ@%4Dui)2C̄^41n(w5:H#iOcMtyqӜq4Y:)|IdWQ6GzϛĒ6{yҾP}:Mr9qEjAs\\0-!~|@O6"&0ӟnr0A0GҨ>f8} eU SZVz*ā؞*cǿX,tH͌s[b=NXpҀ7[F1@k>F۸b 9gr [%byԫn=BNf[VcF YʣZ\I CAҤIzJ,m5Ge69eף!OʡaO!<8'Rmv7es˸G^qZƥ̞<%I?M+_QYSڜ+e!\<xc1NLqګt+Uj+ &#U[vMx%$g֒jW3ۑGiyHN8^=>XB fc."M9P }r*k'P~pp::m_0`neelq -D\B,qȳʌoZv@hGYI2G2"c q& 2ʏs 瑌8]2Qt1㷈Jd,cϥK Zۼ/W%sӏ@Y5n WfmF{b$R?4}zofEVCps?JAZ,.Ry10A5j29,7#w?mvy&6ۃf\?gխ"@ɨ1+&Fr93E&q'2V=O^_Νڽ4XTLRvN j ϫ oex*y\J -b+;y^9H˽Z[V{0(둃a^f-nu|=y_Zi7(I%D',xv@h^s+YԂg?Y5Osp̩4HR<}ӊ A&Zki y-=i#B&F[7''iI5caEJK`-bHЇȨuZ[ͪ2Hs9j3i kNɴϲ<{v 2taxY(^D|Cd>JqE-akaOtؑz`9IzMM>NYܻ'P}BXTTSbyn㎜S@R0JcJyy;hF1A. h);=`C4J=23@'QM$*J+қV@JQH;J^(SB B;j%tRLBv)>W].*?T%L̬yg#c][eWQZ=?4Y<+ҧ#3+WUۉT3Z0k*{WAZ5&uȗI\[d}{UG!+1due~Vh954@~UZFᑌkhnr| GSZZϒܣp*"9+grGF`~JFDɟS${viʻNsNU˞M1Ա۱#0D1YnzVN*k[2#"%E#ߊ盹"6 N<L{<"D0=3ޢ^CuLNJ؃^=9X:\SBG:tHސ#ljЁ ޵g2/5r`*Lw4*F+_>uO:`mC_+^]jR9!=3֗)<z|v]3;Q3m)3S;٣C vpo>6.A=5 5j-r`b:EtgH8U wIqT+25j?p;E⮖CLTɤiڞ(/(x&FqI! &L4Rs -RpxOQ6v8]#8s}k:Ř[ ijRBv8x*?Cj;AW >p~9IL1ZKnr§@88'޵-%[ 3foδaTkVFz֜pvޠˉ3`+sHv[hbk%DUaQcJk8/Ibl4KҔi1@sPc^iE~epsIƚm "[>O8B)vEfOjռj83ϦgqYi~BNJ^Ej&E9N|od2^@?1P>)!u9ǦiE{Emm;'J.oc#ۜ֬E>~,8WQC϶+J IHVs6Rն *>æP[WQU+V5= 5Pc`Հ;{[=i{\{RTbJQ%duqL׽&iԜPQ}ؗOmkMfVaѠRj.k\ Xq {U}rxRKJ`X_mQҫk:FӥAG'̘ B85[H~ubӄ,rqڋًXQW*KFdSu!dt}n8墀ĺʓFGOzg/4-6[rHĮGjud饣~y(l|HlcYe9cL d -X|D@1ֲ.'.k "CG FY*s֕ܤv"% pCEAlc'qaiBFTuat,:In$!Aee8*{WM4c%Bsl 9>´\è,Vh;z)X hqF0I:sD{J2T181yoawzfٓAC@ Xzp;ua]Eǒe` ap[ s}^QtLa!ٶfy\1Lӽ5pA4+oPr=j`7^v+ a E j.eC4X{Vբ9uV@WG:6\p_.T$qYWM#\[ *zc~Bڒ(淉>B w<ӧ؁)X>܊̼E%hܘm<zTBB٠ ѠXXV|'!N4mc|;2v?.k>[K64l]q{$R^Y"mTu `Pc?~Y s(v#3Y5r"E0g'f HhO\PE})O7e y֐3M>@ÁE 3EID(s8yҞh@rx`4SNsML`֩(w!R+ѵ$#0Veųd8TK"4+1j*Gi^BޯMśns*kM9=1Ѫ'kRژа%'H|Sbc]卄ďޜlU/l@k1 M'oZC`9iBlwVI=?>Vh`ڡKrsB`p1ؙc=* 6116}[rXp5b7GP1rk7Db8)cib`jhBҚ,x\y4,ym2jLzUX\sT&cMOj[֝ʑg?jЂ(uLXE4ɭP@Z/G? ׶%xخJHŽ1SB] dzo?:Gg)Pe*ɋqV3yVteaQL})wt4;8t\Qڀ fR@4Hyw Zج!N)jsLf.Tdd6>V>v͏N12(K!M 0r*@) QN: Zpzm8v旓i7(lPX(Ͽz#& srAzRo"aziAQڣTq+=aqHȣi}hiu>j.i4Eu.Z{[V}tx˅֕X78`KIoE ;78ϵ7\P\j&qyswSjZlRݨkGTpOqf6`sXZM_Gh!2eЙbQPksy V]Fۀ=LӵpmL2›T\8?$IgO&(@0NA8隊IZ#g,?_j}o4Lr~xq[[yr̨āϩ8{CX!vy7` 秿JR%hq|tGnmZ,@rx#>z֚ }n]G`}& < yvDgG),^8463F̣=XQ`:AٵN!u>u;{=.]A4 Tp3moqO ډ.TqTVی@k^mݭ2},sҋjYjq Oޕ;JV:]Bx-!Sg+*F8:V@Դ[$T1X9#=2`:ٵ Kv"kgstOΨIywͺ̩nsz+b/:'Y㰒),Pw0r8s Z-MPdq4#h|2OSUFpKd* 6cy RҪ,Bc?T&*غb\@pOg+pv|5}ѷ8cS y.p?ι4qjV }'n@#w .kk?٣WyM ;w Gb!M>_?1q}1K O8}*yD:V-bK-Z;#fqОkny̌DrqȤՀcj8`Wvj[7P[cޟZԴ콍̼mvcXu;[pA pXT1ozvbMJ5% 0Z@8=Tu`[3E*,FnǏXNb$1@ҖU'R8OD{iiq1Rsޝ⼷ V֬ f"9)Ko$$&2?é*XФA"ݘҁrxҀ29m㜚d<U][ݻ̏o1.oxFKa`srqj r {UJ.[i8_cUh; #`\O@#eA٬;ؘsX+ 1R3@!PrRұ-0]n @#qySbJ#'<|[ZV`ccO,oŸl ^NaTn,<1~<?А3o4g2N > ̖$ ,xюOU&w3^$E'npv1TR!N ~;G߹aX4kIC=駃ҝڛ' ^ڌb 9i ?! 4z \ 3&EIE5ZzSIץh@Jp>ӆ1LSGv8(b2~3]n46VI@.3, vj礶dfYAܚueҝ7vnⶅW駪8mU:˹8kӦ;,g]I-iFf}&<@<*IU#+2]9(&&C$3.`A@ `WկkT=;ϑTog*`1\gOC S͔ ]sѨ]Z08 4ۦkj;s^hǡ;c=sK*@ ׸wyUFc'OzP0)$e v7׊C +e>J56#!1?|a@ӎQN|@)M۸jI,&B9bj=2~Y;m8>m4w#%rh  a$*L;p7~Z}|Z¶,Ešy1#V"618܅*xnwsKqZki3XW]{ L6Z,lqzįyWvI'ږ;/1n[$bOaEm0nǷJk^0ڥWj|zĹ" lEwx8/v=y\r8]޾0rqQiwʹ_zH銂]*{8v/6 )$@cҕA6V[  r۳ =+P9eJp92L™LX(ܽHQVc;?Fnޜ te[p'ESN'\~F:>*H@^j ҩ8ӜfNJ!V_V߂q<{U;|A0ztp>^ň/;ctK)[ڬY[ְvҢR\9"#DJkiY%(?e)[VirI"oT\*@ b'#hE ](hp=9h48{RAtR^PIAҔ NԴ{QPAFi^_MNee*E)hJ:;LfڟHSh =~RJPp1JoJUP(ހ hg=;{ӶM s֝aN6⃴c=jLPq>>Sޓ$X>z}(FzRT1ۊC ҉UN1 rh~9>04s@\gދgQM=Fq׵<4W~+4I'=hҜc>bE!L>p@M4QXGl5)i`[}l,Qv9E5fUX堎$7?ց9$4wX~FjhdӡI/uqT쬯mJPY$5o>OsN:9cL{#;s:fTkhY.c#|.ノV仿2AL r< sګm,d 2p~UVQ#9~D€%ׇWRH` >pT w[#K|&p23z-\e7l`$o[8. soDTT㠬;Gp^ ۖ^qG'"RGpdfe$9y-21T8U\;T̒N0=T9Ck{z\@ Cq=ʒȻ-9R_4R,EpUQ!ŏ_^F)fgmte|wd}JiX",B=>^{\ X͙*HT۰p>cP=kkN'Y&C#z88dufҼ,wF6#$T.33VwR3JL oR52HHh˸ug\ sVmnܘA.I ݃>=T人ldfl|@>v+܈A~b F}v Pl3,nwCl)_Lo4[<>1ǵCm}#(ˌ`L$~yYRU?v˟u>i;b|H[?^S%Jn(J$4DJͶ%\yH9۸W|7; jWC3MMfecrvo 6?ϩO^#䏔ts]u9IaPCCvSIO^(Ҷ`Qq^ͤuHpI|Z1+‘)<~8=.;Rnf6Pmdn`q8jѼsEέ n:V\ѷwìOKd:`Saq?\xDZy(j.:`ТbO88Cn!v)XW֞imFGCPzPo!1޴QQךPK rM!o04P@h2xp y8)GZp%ЅǵҚb'jZN'zp"R.sށғN4 #9 2 fhMG&*&i=N}&O}Wa=Ew8䶊o{[*禎@6Wj=d}k/lx&f"/gV[PK=حbFg>׌m%xP:{&IFU_BL _i{5Qه=>XeHH J(9G'ʡ6+Telhzuj!O#SdX^)Rыpl֓ p3 cتHG(s̬@QTO>p8q_,gz|\]Beje9H>}jd9q4A2 ZjDNE;la !cd*Sj޵Dъ]o}I3EN{qS&탷Xkt*3N3F{ѨTMJ4,뷾}* zTM,6w1hjiWu DK>8Pxl +=G:mR t#'4nFG\argAGT5뻎_jU' C; EIԞqMHAmف8)oX=)lNC>T4T{d'rOEfh`/Ene9T֕cbZ h#A`5]4m ݚ1"q}Bۘ#FOUN c'ڒC}=孺B 1|`'Ӿ)tݺzt.9."#!v81~"Ή 1[,- [~F|*Es/NuK/ې:Ouk[q5uj.GV8W;{ VvV2ɬcxb7Iǵh욢i;u`BF1b{tasK$Kt@`$|ANua W4!O!c/wlIF:.\ϥtzl)n;KC48@l)BsڌIiؠȦ隗({_ҩIlsӊ؝wǑV\8nQlIԐxZsW^$wbٛM'uB V\3s%J2%’⳧4g'~u4{9$ϓ늯+ƴ  љ"B1?lp:~Ws~hn敡 M 4cϲD7i)ޔJYH!"&ζ"mLJtӢһ \*EY0ch\["qޠSa>n)j"`BtsIr9k5VcIJRE=/oʕ4NI~9jhbnijIZl3gޞ-Lk|~=*p4jM9L*dv.Ջ$ca֋b9'bQ!OR4pMp'!aTn`Snylyq`T˦iϩp;[6XL1_Xv TWڜiSw bVְ6qҰ$-឵qM̻yKpRT<̓sVṭM>Hv fA^k^GN` X yru G'K+N,?gv{0z~lٝ_2ǁ><*Iһ9\Koa&~S^|ӭI`rGfЭ/ڱ`1z[#&Cw3zqs JևOޢ[n9 j[I=2si>:Z0[ 2R(۹ ԙẕӆF[ӊh' f }i٠fIJ=h日/J6 ZJ@@~g4w(?*Z84~PzPA#ڛzC4C2&GJ`Sޝ)⥖v4H> 4RgϽ3ҝ<S4NޔBi60ǹrl1P! lg&ɏ=(;̊V v L>g4XW ݎԣi ۷ I t+cL\=(sEq))Ď&rBڔ*''ґXsE۹@#Q!-B|Q`.F)xjHjLtEqҘSԁދǎ'fHJދ =x [h8yrp:U;=/L9HDǎH霃VI<a0:P<Ak* q`֛Qb(!HcPTv*F>tڀb)D nQ=):R6䁞xۥ! wqA @\N*5v`S|^v~ &sHUG }.8Fr(*?/Kb.psKځ 1Wpjƞ4Hɳh*WME0#Lػ|RlA!}8B@_7uJGmBFIԸ@ wѷ&y' ҐsGjAӭr0h# !8 (IShg44- Qӥ38s`!>RuQ ^_&`A{SBj FsJ55HTܞjHd$tFc$sW݇jnLɐ 9L1PVѕhhqWxIFs[QykXF#Z=?Z9ZdGQaHh1 'GϳEM)ުs6i[*`,Ҁ6UciIi\7 ck9voկ ڏg}jAD'qMh쑑F Qfbq EӾ̹2[852YQRA4v\!gN[g⥒EQ0sI @ Q 1F)(BҜ)I'ߦRL2*hzjEQT4N^4*1\#S&y9HR'G^^ 4p}LqR䑂4ry9 S< 1pGja/Rqځ !F:SLc48G!/ GN)7 sRr(>Yyq23JsӸXkHȤɝ q|Rz..S#iqHO#8^jP078(<45qH c"֋Cr?&M N2=7``R掔\ڛ)3iƑPNt A'ҐNh.i|SK{ fh';o5P& jCրq4T!dtyJzR0FR&>OÚm`(HMsL4?xQңݓQ@ړ?7G&J`.M8'9K7zӆ4QI=)6c\@?&KV{G f 挜`;#֌pyg]sN^hh!LR S (4\2)ϥ8ҞOj_Z,=iIK;4dLCF⛞{ N)9=9= 5={ҞNe!ÃڟCMs*F7JCO#4޴1x(=P1R/j`NSZБ8h/J`.y4R RJSҘ zMǥ!4r)\Iڃ@1^G4b@KB3Fiq!Ґ'biqT'Fp{ցϥ#(e!AM\,=sQ; %S#֫<*r=ii]]*'hpj(Zd<_X` #;S&q?A +9!IѝhˑWbsxDדҵRA֥wj@9p_jU tRcT9;+tas4zgT)̱=ɹZL0!f^ 00Gb\#9aKpgܾ?Jou 1RsF}"=*2{sQq`0 g?M"ޢ cE{*C%7 ~Ҵjf܌cF4.I9)]H"~T 9ڋQ׷=c%Q0r;{՘br[5Rs=1NiU 8֪FڊqHMܳ5Q5ErO^zJ qMC,=jn+I'pr{cII< 5;56AorVidnJ>j #=+y]ݷACd<#O+oDq_SQG# ^ԬRHt1*`H?H2jb:tkB:}qM"jF;\*1YP0 <}+Rzgִ/wUȉ 0V%$GƮĤ ҢDg=)=EU;VuFk\۴Rȧ3RӔ:R13<Ӄ w!_J8@0(@&m#Piy7ҀQKIFhs&i:0i4t&4dqIڃҀP("C'ߦڡ$Ҝ)RpONRݨ:P /ϵ8lRXю?4oJqG֔0#4M?vXlalH;sLC#\n{j'8) \=֝A)R41m)y)AnyXT`Ƞ:S1ܚQ=)WNzKt8i晅O=h۞ݨ@"g`gESJ14x`тI8&1ޗ (E&88Kj`$g8FA@\g8b tmy 4:dSs@iLh\ԸLBmԁFy/u85#uKG4 F4Q֊A$TSZg"$z*w4R- 4 Ph) 1(P3Z`zZ92i9M0 zҁ@4E%iߍ R)2bRo.(1Ӂ@Ȍ9Yde]C@4cKV8Uim;Tfa!1xj.OjO^()v4G\q@ [MFÞh7aKJS!S(AP֌qHih)sLC(֚:t@84;8E.ix)9wԱ3HzQGAɤ1qG4 Cj(=xe5#Kf @֊`JCך\qLBA0Ruր sALĎ>exT.xlA+~Icjd83-gңn/ZfP: aժdoN*6ɭ*$U95oJҭTelr9gVAӊAo#B:&39qZ&ߜJ!4s!ٙd 9>ժmQ(,̀ښ" зp~Ьc|l?$ժc>p3eu-ˊ_r}is[=}N+P3Om9gڜÜVƨ;sQj/ -mw>eHjY\.{Vl'µ{͒O<`X MW8ǹ88-֪#"ffyIjN*G8?&B**¡ۓ=)]О:M~^cV&9SZ0z=M1*Ib5!xjFU1:>\uI "xcҶ-9GZnUlpҘr.*]$jnXrGR%'үĹRg5 DHkgP8& lV+n邲sKӭJ8wK&F) &ў)_(.hish@=h@ 3dE H]4h)qFiB@ 10AJ ҟAK/L5ܵ"ԂZhOi4t"Ҙ##= '#j:@ Py()9E6v M4j=7<L~4E )7OҐPm4: pI9Zni:43\8$Rcfh`94L=9pǸ"rh!4piUSך`4.G,qJ@J14I<)GF(9ɥ7@9phj`(HCX~4yvS.hɤjQKz8<,$)M8<LRSNzP/LCEpz qϭ/ BhN/@ #4TSHL`R <da\~(̜R\wZ)@91qFHO;\ gs^h`PGduLBIQ(`:iigښz wjoP)攊AҗcAH 1) ozLT)(GJ)Z*J+/lLu >N/A֓9Ѐ7.)v:LqK`;"NZSҊCA!h4ht^wGzNwj@)?;4g7)bғ?&h4]P֐zу@#ތSy.uъ7F@i94c0#xQ**F(Lk)H;٥ֶM=i2yc ySZ1[;M6>0Fgp?kH#}F4rfr+\X?J ?O1?b+SSfsrB uk`Y Ӆ;.v>C[SZXG!G;fa`'59U_RssC|NH=VRQYW P6*M\A4p}j!-HI֜밟_Z$x''j2F@119SZU&kDQ(aRE\֜Бs*`Tlz sBR3Z PpsOi4cW$Ԏ`qQ8= 8mъYi9H &MPzSssG4PFiq1MK440IgҀh8̞( :q9)(Zos׊LE0`?@?9~r ϽO7b ^1QSC ߑ׽(s֋*2b>O0آ>7{b,){JnNi6:R{s׭z|cQzKcړҗ<^ԙ@4Hz{p֐>QfK@ 'N8'Z&?*){QL ⎴w<:F9Pb\AM`09zo 拁i_οsV,HDh|W5Z_o𞞕Ff5!mQ"HU$-ӯ_m?Y/W\LS=:Ba_`OTd^OZ#3]#՝z/<0)߰树7^;w:tcP0I+*d8ISB<qJg WO©+F8 {$_jQNֳl".33ڴmNqV c64v;KeH幬kL}+ t:tSP)Nhֳ5EE/'Z1!\'8qIGZC Z1I@ 9 Q@ SMsIi;zPhs—p#hNGJF vHޓ={^2{P180hҀ+N0jb)s%0t楖4(\,7Z6u4Z4\vZ:ri٤pw'$ufh&ڌR4׊xߝ;&9yyC֕psSI>T:~tׯMwj.惚S֐Ԍ@;PE/JC=ɧt#ڊh2bx֬ ϭ0掴8tMSRfƀ _Θ=h>持@ )<:L␱1=F("\Pi908tfKIPis:P=hlA)s9=(ɢ_Hi(I\1sFE%ހ4G C& S CPU/Ź_)mD& 3Ǯk.PrOtݰICps.ӕY+;yFGⴤ_=zU9t&#>PIuFU0>0TdsEsΫ0M[9 Rh9?z^ c>У#! }MjYH+:0sqb8OLnZ)UO[>#j G;LͲεm k>''kGlnQivmˁq7ws+!{PzRd\P:SEր(vA4b(jOZ\ޓqG Gz\u4q@Xpch 8@Hc&i3G@ئ tZ'"3Q$SNQO@<}is4rh4 4fZ^"p R MԄjOZ2`Z=hjL@tw@ 4Iwz)'wozJL3I4sۥ)LE; w4Zu&)3-0}(5cs>8#'j?jθBG__*^;)/δgP *5b)0;>* թSYIƈ3hz{Jp\9<< ֐D1skjf@޷,ӧD,=;T 3ӃV!ALEq\/:gɬtֺ="<sZښ"Er#7~4q9p' #h4(fu8 ] \bPR3o3M3x1#7v SW4u9QQ€ p)s"Kۧ4ўhh$g]ޢ٦:@;RI Ld.QiQs8R`ҀiKǭ;)qڗ'i(@} i1Iy9e-:fsޗ&XFs֚iwPvcE4٣wj87Sswކ&RgI?84ܜsKҘ 'ڌ~P4: P}ޛI)84xnh:4FhdL@7w4Z;~(t9@ R(9ϵ4v4sIE(cPsj(:sHQHI(e^d`ӀUp:Ӹ(uH3ފ(旯Ҋ(/E t?^(=QE0yh@9C=3EDҗ8Ewh<ѓ(R S#@QHE (1;QEfQ@}h'ڊ(U@03Eb)1ϧUXw袴4k'*.4_ p lEDe9h[ =(5}`!?BM`#qVx$_|}>FbWg:$ pkpv}u!~qpkjjWEG`oTHc~$ "ljx9(IJwl6P(FYbtVpkdC?ҴUrjWSo~I[pvVUg;/FQ!CSkSs~AQX`ƌ}"${pk@XkT1 kPa|?CnWkAjB~|SK_G?D>(5ŽRoI`W~pVALsX}XU[blGt"X/LWDUF<.S_"~OFSa($(Il}GTƍ90/_pQ~EUUBmG9zokMp@W*@ +BW`{Y;9OIo 5 '8NSl9;O$$dz̹Lj 7 8^BV*pGR@*A:6Hj[ZbMmKyM@^q\aǎ~V80U:r29$.{9P|I `Fm~ym@@^.K`H`UI|.ToSLszI=z8BL]S`fr`tsa#s%-$&)*51=9l41̯,9f CHyG!q`w`jrsmsgtttteotss@sGo`GaCqsOµn|X}xtáE)Mâ?¼>ĺ,Qm'`od;9z$V9sǯ?p`~Uaa}W9LQt:94/CnηҀ IDATx̽Mev.n.wPOԠWGaM;XKi Ƽ PBe2/å6U9@y`\AO{[Oɥ@<Ř dXk}kdVI:g}/b-H>iiK"JwJHUH=/+"#+N@GFi:t43ףx69UX03*<)BtD~.u9epN!I VRBW; @ [)X~w8G>d]XPc~3SL*\n)^(6'XB9ff,Eh& )%rLE JL0ͮjWNXd.|QADz t*]p. 5chh`5W~"qi1ZAFڤbkv*BiáyCHG[TJB!=K 3M+'80zLŭ,I[Ygj#+L<3 :ðVB&ܦE5*A~>DU&j43"MבR;"1,fnY쨽uHVWeyUqV׬!E`4HoTGV@b{:.~`GĬrZ^tu Uj=tz26;ah*N!Q(m* %U,b!1H'+ ډ9i Ps `!CTDx`7E=x$ ,L%(ޒ4@ *$5A3d9J8]T~!㡭2ef`Q̶LIAq=) lE@Y"ur1RZdAN`֤zՎ@}lႊ5F B!J1(Դk7[u%9#er rb&aBP.EO9^ B@24H,f7 Cajx%]`e%E1SkIP!A^I(`erj\K[ՖQDkWD:a b6]bp*6r$- E D$\zYZsk#] Z^ĸU$KDHRPtA%mԌ^nVI!4$*A( JFqX"^`Yuoۅ,0qIB2TԲ_G=6H,̒,h,5]2[[W s[LfGą,?'(~_#TFa#SӑZEJ.~A*=Ѣ9m]nx御i#z%]J%2][2s򌝈X}{cdlnMk ]ÎL]i(* ӆKQReZDfXɜǒ>f\H 6/ufVRLQEnGeJ쇚)"kC!>JU6i_Hf¶/B4 ۽_L+ZĠ 1))=qiE$`IKh4*RRR#Ted~Pl L0\0T6]5D)m"2 ˢs` ]LDf}%O,SU}zcq$~gRfh ;;rGmiFӳ)NǗG5:sxt*<:Qbf#)B]-b%g&9s4B n 3tbSyȻ#6ƛCcHC>{mO(CC{E3$1BtYG&MvTP(yXy(@ѥba"ѽ1(4Q[AQ7!:˲^)G!%D1i$ L|d2h0X\UZ!5⫹9Ah 2a@,Z1pZ&"ӞgFs)HH3p{ZyD2〪C?41&Ȣxlka)-%CaTBrC֘w6M-Zj[DM988L-J(%$bt+P~u X㌡X€:&D@Q$L3)ݡe#VBiNV8먾 ̺BO:՚"JhG,W@kcubk#q@F,IK#O9PՑnGSOe M}[%5g.BILN,⭪r1.EUjHR&H !xzV(@O@%W΢W{5EXq#uB: RtC(|(U-A~E|K: *8 ([H Fo (ĢB>a)my+@S HàN؂zDlARF#H72f<:mJ:՛EXh6SFz/Jdלpƨ@c,V _)C̉ .ܩ_wb=Bu: T'+%Q,/Blfφ2 ]u1MqW&E&qPМ3I_V(.fZZ;q@mF6Et1{”e"^5\T!Z`a5[u##`bOM+̾>3gb_,2Dq\3(*WTQB ,*l9.jXZLDĹ~';EtsBTM5+ bZ-+H'ZBoTZ{Np`1T;%dQ'-S0պ3Bfcz3$hyd ^pZoe ى%TO`iFdre| [3 :|Ȏ 8: $ d#C=o92u;@->X %EFVBʎhB6/TdC^_&oEtjvc?A1W;籼PHC1 :٘ g͸/iٕgS}}-YŤ$<[ad^ɜ '6W 62Hd 3?\jdKEO[mY9o@#Lgg0ꀹ^TwHLqW.%NFǜUCBh,؋R`C,b)&QbE̢o D>hK ^lKR4W[R4Y]DhQP*ħNEUI[ 0#$,@nOHFp`j' ,213"Ā4_ sζ^D_ujړR9J %<8bI}⽁&n&9F '4u#Vp]XUQӲf*M3d0bFN^~F ԑpYR[/SڨP-R+Ո2PEuI̿f$2oJ5/Dӳ 7U`*b1OX37+mz="rߢPעĒWFv_m'MLPP#vj.py3 j"b#zXjF#R9#+0cl@c o}R7JVVZd>ܺI%D1ihsQVj8b4 0hSQUE01$|7 4`ٵaΦ@$n=?g\ůt6-N0CVZr̦%%]#^Qh@sCWkZ&Tf73 Z>[1dTH}W},}kfuaq6:IV?^_OW*u$F- "% n=QPbĂ pU?椠D*H>E S*@ DBPID"{eZ W IH hPz"ńuMVc7|Œ4z6D^9k D&8疥 @ Yb1 :u\ɩ?Ͷ& Wh8"*YIPIJ78"kyź^D~dh-k+#H6qYfeV(>:JO9kEr9BD]OhhFHyh@4 tWCWgڮE^aD.jvWUvP!Jww z[}磺Ta"*~EXJLc6`mc)ϠNC2wBJ@Q5_JEՒ &ӑDݕ 0Äb9P^ -fJ:VwcQku-CP aҀ~!kn3 $qs RMgP^ y/1J)VqMS38$.vbY=%ҭL&| V`(fL"˹ `MS^if2dV[=%{@viA굆iG֢U}g:uW9֩yxvu={jM ɦPL9U\iȐMVh/q!%N`,JMף" ԩ}ӌ]m38o#vbZMj̀'dk=Q'bJ)Q%c;3%hAΒ/BMZ7hZ(."`jVׯTt JVA4lr@-K5)/IԨL^H$^ ~$}IQ/i~%g)q3-@N.%Cy 3FYEEV2ĸv8\fd⏈r ̖5vL#{4|iDɒ-G/A$zLZhFc 3F &@"k߳13ߓ*n=v(Ez9izk`$cN5-g;؈}͓Uy y its*GɁ獣AO&K&4,yPzYц**sU<3lpƚw0-Vӛu`)zABc5R,)LrlW+ʖ a} W[m)2;Rbp,0U EK!⅕.U&(3[RQcMގu/{R.$R8ItF"ZSH`؁zITc 401m,{ir6inAV4:Y[}3ITW)g>Yw`E8(!I$ސi:{e:3@{xufcB0Ni3YҏȵcD/ | 6RY^ivrQD#wtn};$fqV^U;4f(NCٲSt΀:;\<%=L3JQ6Arm:m@P J!%g,#3&[i2k;%yf $x{b QStR@N(+Jvt]c#6؝<6W㓭Y':$]Ї1皰ŭt7 Ya!5.Fb+B563.00.2Jc [ɅLjTtŃzr,:5)s&3kp$#"wvM0ysrbk1"r )-yO5C<q@xzV aYaUIzA[(`VЃ>З`+4LL* s \=R`NfN`J{$/^h>|L$7Z+m"Id7qcƊO(1WPypPŜ r`iîku05,$kdSbD߿i}Ej/6 HYmUVX?kp *+Dh )[[d&xu`%gŴvK"1@a]BbRVF]e5GQ6{[(8{Pȱ;'4L2 Sĉ 3'+Hoc[DSi<KxYY[;W  +$9r4nbd&Yd@~*EBKZN~Xb {EQB9@E;5[4*&D6GP/ņHq"^/^_~x==ED^J4Am;aG4i=^֡pN  ~a6?e3zT┗+yPt ,aՖ20'lE"-%Cck)a!ǎF0v  OV$N U2* v$00U)f뗔9lRkn *yEed`f3vB:rM4,J+zdvRsF%6oz-5y#ZYU"5$1ƈCjjkΕ!c TcOH3=ʱO7aٿ_Aē7=~f*pQ3_&.\qh*z]R(P1¤(ZGIPeN}V"{P?k>gsi%`/H??J{CI [S_H3U8:MiZ# RBC$ 񆓘]FLu4K+ϊ^С;YP%NVV(TnC bNT=Z&' HUr2;Csw&/(dyIWzjtion#BVm uC}s6c_z vۃi>4';"mxH)MO)Д>B1sЈpb(l5 CE8zp&Dz}6bSTߡjh[pWcD2}!,rvÒjFT=,j+*әB%n[eťMYtcʿdb3TvjظZoP1HַYTγm6TV BY3t&Ł9M`[KFz`3vQ q6<3Ӂ3iB(Ƶ9\OS1[7^"sryMugMv}W3ݠv B9hiF)"JjFT0YI9ٌFW! Z_|ݘ@В&ϸ!V霶[qX*{2e$" ˲9JفL)Y+ xLDb/.;95ݕY6cu"]E0))CJ8dbNGy,TCiyp%51,j6)S6@a*`x04=tSFDXSڒ͢2$ɬ `b̢~v0 $k&NEnSw_}w{wnz{GrH8k7^ʢe@08NjJ=:0 40\eGT0$Tq"^=cG O2ޚ(u!dyT1.7qyĢO !3dz(.+޸,L8g`T  Oʔ"H%s?L\&%LpFp%-h 4ygL@t3L-fY3'gy&m$>Ñe'fK=|F bD Y|+vZF&CQĆ  ):9u\s2q&;w݇@oxɽM.q-K7&)0_bR̘KC 1, 2~!S~6 U[A]d0H;]PK\3 rw{t`GeJ018]F]s*0fdmW݄sA#kAI*uǜ C٬ok 0,(?\~l5̷ L?)fxQe\!76^΁N5WD69FI zDr<`v۾P+Ir@h=5\!ShΐA&ؖIxa1&( $e 32YY3hn!;L@1C-'"`ko:/@P.zB7Bܥ6 g&22 ^(3h+ +z @R9upߡi/\[Wf[x=@7h&lM(51op;mcuQ޼QHo<0ld߸D<Z$NQW(-? ^7izuIEL*I*eUzw; ZZdD:>;>|5m)Gk?Aa[Gj Kj}bY$aLO7fS혔,eҌtlt_33y s9PRhL3\%8]1qB@ۑzYCY#{+7}3MoMI3EI[=nM}WGuvz;B]0nPKK"_T2 4y=^e% < 5bDHԉz*9م]9Qn-g8m lq益ItEӥ}'qL V+۲)QPIֹ@);}C?7XrC$l}O;0+Bdf}IYR%чq$LQΈOs `PA7W8)l桏 ZQEpnPub>W_2s˛Eݍ.i+JkY}37d~S0Z- `C *ag"\~ #E@& - 9Lġ\t:-y))n :†\Ď+4^]Ln7tHYk2qxwk:pԺm`խVKbDyj]q~tyj)c=cTܙ93f'kj L RD{ݠ'_imC\j&u81;4JwMiۇٖ7Gmc"od2).! TTHG#ل@kӑE@#LV93ȍ'UZXC@2<>ZK)hIa)k@p$ z-b Cbov Gu, ? yvg= :IV;6r8KcJv-YQ/BZ|BvM E 3lٹ=dLZF;Lƣg5{.3 -ܻ_sҏNAXF{0\ C:B!@8dAm,T-5%4 #eH`հW$V'LM@ۯbMtd PX{E-ezBN G8o c{qc6Ay@ز:LET5Ь|TVC }蠼umhحY^3ww4-^V;2FHp{DU) 57k.3 dc*T s@ɅOٌܭ%"eB Y~/-#v*e@39Y @:]fp~E|V7{QP٩E\ l*Q†X:53 ++ "l>M3]L;1(J/]}黪h|X!2jZ6nCzw}7tW) 9#|XSx2w0,kؘ9@Jns%.[Z3N֢N2T} SnPId{zMе$G$ o_bo䞦 <gz&bX"^1:[Y4c0OLQ(ΜMfݓ$F'UyDX WD455~*@J"pK]P(p$^Law}H><j 1W6͘-vE'-d΂$J2#*kW1@EgϨ J<{#=-j;iq*S 3~oey#@^ hdnōHgD{lg^E=Z?FM/dA@<^튐w5Zҍ3R=bf4I}*2N.-&A~VbSMCoWmԩ`ݲ]*dvJ,;xIp9Xc86,E6]ҳzkfp>]a:LfsC^7."3~uʶ XpIN͎W> -GcdEkKZ%e+VdG q4–]Q#+/5|vcW;h7d)OaWZ)inֵDS}_wU7Ûn _NoLGy}LMIwǓ'`a@y|f7hAdz)HQHSfil01HJ3dlH4#ӗq+6[p-J6ˈeA@#J94z-g(V+ə *29mW[MBe8cA , -_QMZmA9FTǗ,Q);;k𩢌i_w6j3kR%hp~WSr(CdgTWQѠ$խ,*x3&|n`3*ǻ5g R:mc6g .L?$InDXfK(У@3-c݀b/98.BT))7J(ǒpeHՙ* מGrС)[xQGDF2 @)6Bkr9#yd48+<4\"Fageu;\o:^\29ƝՆcrBrY,ɆuV=Mbn%-[23|#_2~H:7*VIIt&f(L<4vxטs"mrަ1ڄy^$1lG$q1ӕujOd fP6ـ8S1C^ٮ F"gُTcɸv+="(9'Df,LD@1@ wig1ZCD=HMge﹞["Z<űOkhON6H?6u/3c;Ȇw=f@"[)}ocMX`aTg~#jlֽ<96#ED;Һ7D| g4hݯв sga)aG3kk0iF ޗBl7>h}xp-Q]5' d\mC׃ʈv@䭔ﻟn1EbKc- R4 ;h>>F!XC]1GZ7k`J<]D,((~%U@&Q ! "+PTSiT!@t!-@"Pj"P5ucyeǶZǯѴRG֗UʪG ;xWPA[Qt\v IRduhK^g<˞dE.k![3Qɡ'hð~H6B)3{LS 2ž:P7p%n0DY3qXqsD6YNs7gkpS]D+|,-Fq޵+JvgM+y9׏HhHe/ք3(tW#ɍŠh*k<(za%OR8`6t24vUĮ*tzD->Λaέ{V]E&L  +QM" r7|d65[l*Z93TکE IDATV;.☬gwK; *R7bu!*x<[3g8J 9 n H[w{!1Sd35gb'iņk-acS/Cd;I=E0 vxn (`lf$總JٿFoPm;#Ht>r`$RrES<F—jl!c-{픂Ap_; 8/;N@L)в;pҌcs7N4|usZÇ 9w 7 O)O~:Fʓׅ6^h3?dOF9438L7mlGHX 6;>]fʳ@{"[3 pNJ49A:#od¾Ħ ab6dC!PH`+qiciQqȏ4XQ ;BYާ)Gb|+6BE{qp'IY>A 5сVD* 'ُY4r%g 2No-X}$RuB} 7k\$ EZNՙ-iÀ9EE6Cѫ9(<[U,$E<G)6i٪W#4 =j"ZK{麫 2y@{ِwşy䄆'0:l^FGcs6VQ$1ÝdoQ QN% TYkxEY}eΘ _Z+p-5c4p}m>5Y@f k,~|d 8FrI^` \EiohNu\؁CVi\ٯD"EDy."8[ l"ec{쎬ojMY tiu򐺳Ts9n<.&w˜JP%J@(s/6tF^#xU@e>9KEDW$ ${H.l hg#"O(0yr%Jśtد4KL>LelpXfjw)̈́QJoJS'hF;ּ Mr0FFVr` vcZm򋭯l9 X!!nr-> LxX}]`,k帊6aG [VNRuW9qԍގNi"jKza'`EY~=A)C:2Z CcRbOd)` K}E2u VDmO*4YmyA]R_pƕ*Sc%J`1V)9E o%qQ˧z7BȁST(%^/#煑/# '޽pHE Oioƞu*xRo/h>fI_9#|}m4#6CqCRF cpw)6w.UYҹLI&ذ=Tpj'i jȱm| ZXPb&v KO9guގ22uF9“݄wW7_}1x!3|C|;GaɶW>퀔WgٍP ߮3 ;W:jV1}npuJ+%䶮?5<6O JFUg\%OYPIwfT941&ϡȯ3MdQJ8~aPA_jWĉ 3&tc109d)h3P0n!'#Ed 'JW)u i:U72sf|,@LQXù%aHIa9 YW 5ܝ%h9n 8k T5{{NAo21>6Ӭ-mbE\)i^oTہsX%TY()nxjz;u\m=J3٪0dbS:Ia6 Wyz*ʌ7؎VB _mU^&i8K,L_?H]a!@#Hr8.!ƄQE` Cޞ):̇"JxHG6B龚oŜDiLCK2 `76;:[\55A \262~ 1nsJ&HK4L']_?uTGx&r̈́=HFR`j9ܑճɝ$ݔ٨Ì~Imlj9Sqp7Y{Yshg:Iwo=TJׯhpW.FKMNy~ 8 .(Ą1oFb ť∲r Ѱ( Qҕ`BmԜ;eZWca4 T+}bSDc[($( M0â~Xs<˹dNcN噖̺̒e{oCQ39yAk$ ?7un7{dkGFŦ~P55"_,{ KP-u<7+"ݮnJVMƾB1kHܙ$.f3ytj].S`0q3/E lZ4SYud8TgTIH7V#" }@YMW\M ftFlWw+kGQ*E@\0յCGq Fo0 ;ؚ~Ыa sPe\/̤̝Z E1]odȷ 27Q>~}k 6wym}9Fcȥc.yZ,`H=)tCaq!r8ZC~XQz5mY[Eb'3=gXG$D9I}\K-}J(4;/6d6i_5hFEw X&3m[M3o7cCϰ%;ȺR7_)FUF6g>/ LMf<{XV7Fc :u.S?L]R&VX}X΀&E̛m;HV\ogvcL N5BIʴCzH5ofkx.mu9yC5Vد-L Ty3A|o)gf1N C(573eI-yӝ˚,ffrKȲoz ń!DdsgܵB/'' ոHMqkW6@h7M~ŖS3otRsQzAʽs Y]yN fo(dR4"[Y~{>Lv$p_[˒n9rHmM;{bwX(@A&@ #hyxɞcZa!ՠq4q(j^&ชNjFP9TC1/[ig24T{Y_Z|_}AL!GR.O^7tkg?J&X(CApwgxcED>iZr?v*quC}oMq=N"reJ3&@YM1Pu$ܘ2wafyKOsw"C!oPc; ZqdL|(BEj{δhhgmm 43fO )"K.#8:n7 12@sՑeTg>ٵɝstTt&EP*7={2jYg:?@A'Ϝ ׵jp;dz]u܍l]C5i|~o0V`;8N>\ݱ3q\4t]6Y)R5wԤ~>LO?dl+򲍢*.&H-XQhgFE* 14LT\=.])p:3X@S 4 CgNU\eufxGWFڂ?}j%Ɨ렱`y^n:T`,F1 oMߨqi%Lj)lo,=ar;5N#4L|2z/5db IA\YiYlJ*BL(kEDŽܤRǎ*ґӁ o)2b1g @4dg[AY3xaiߋ%c=ZU,KHoBJ\ HUk:pZ$L[X=3M6Os)FSJfp >S3TeGڼwCycQe+#B1ro#=C_K{1wКi|vw{Y%bL17JlBJZbci|Z|!JTsH%1q1>S3EkVa }#,l*V㛢ˍJ#IYYS],.LAZp,"%Q+C@o{ﷰj}Ƙ}nu*uoL~mE&{d+oCWFF<x:`%m$, -ׄj)A)p u0& F“:CLCYi S4+.CBv~ 0yf!+G3KhsI b4@]p5S;NɇcZ$jV2!]ev:f𳫰GVt Lקp! qjYLwgPM?;mX9Va3XnfOlxęPw+AT,N8;w&a+-p_ C2M!誢]N'{f5=t=gtD 7LȞBrkrQ[ LJbȰ_b"uZ?R]¬ NYEe`0A/Dq>R8AA"_H-1De7M`Ӎl2U$ZA5($v|!h S]P^ ɇVgPq40[x*Kvyt?/!4ϿsFޠٽY7ޟ}Dv(`Hr/,@j[m5bHP ;-Q(P t y"TU*J5*XqA狓UWGWϛZ&p柙3&l/Pt-|Hx $j吙\˨[; OLIU%!3** B a_$q"p.`,  fczЄ^ a]0^HEW p9 &H=lTT̈`B,'QIl"Zooo?/%xeq#m^%9ʗ]G4J3QT 'ݤah^<|?^A/u%fSAgRDKpkxiwܦ I}ܤZGW$FK lAbolJ֊(f0ĭ {d[ԘI a^hBv!*] Fg{ fwUϢdkh]Sf>bx'O"$#d8kƴ+嘧o,}Agf}YƘQaҰKz6|->PzX0\=kX\ pfYvPT2&/"@\qz{p}O 4:Xܸe:_,c:_䟖*sgݒz{D*\22g'WN_\^\p½#Rm ^:Υaˮ~P3m"5ugDq>rWW^ܽ8W't1 WaM6W3g?gվjU/u{W?הl6wk򓟝:i/֭[^q-z?Cwywe`W)Ix|pX[ ٶ(/% /'5|㇏w P8vO~_'?|ZJ*ŅE ҈JCqk* o")ýiJ^3}|CV&u -)8މB٨C<w?$|Ld$~mF_سkyzYoX%6h N= IDAT! %xA]*WSvJ&cJ:z>R`yd"c-޾ѣ{.O| jJ zE]'hqSb|e]Yɗ޺}$y{sOJa,s{?{-|?X pAi]˓>`$3;n~ۯ^0wsѯկBT_oas'?~r^%E$N]f*}2wh::8>>~=>~qG>~iekE3eaifϞe.O?<qvO\zZ; dL~uRg1Cq-߸.]z/e&*Gm[޾mt{_>-zx{Nw~ ޓ~x`w?խVwry1f!_\]j8_{ Q(tRL&dw"V&,MYv9<y|uise ö[x̋yˢ&hďx'0gVK1<ˇ_>la/N5~_ԐYAa BW좶,}EM>7l/wv?4n2ßj?~XGANqÇC:<:4 7YGuzqXĆQvǟ|o%dUU& oVֻnyzݯ~JV{/ֵ1zueޯD(Hquzyԥ>˺FQNRE{8_hW'ϋV,x8Xuuq/1%>?:s^%˫?vk TMZӋ I畎W>{ZUk [ *v_~ޭVSݽ{3ϏEÄZn̫߻}jqfD;0=qëޭٙ~ݽn|ϥoV͔cwO+QbӧOΞߜ}^8;_O^\>{?^~Ӌ'gߓՋ/*^8{oO/>x鋧O__T>m8L:~v=UHGmI_4b/O$M lӪM?hۋfqz*߮3J:~Zi/_=A0͈:%4i<^ \b!U^}y+۷9g?]W?.>y#~Ƿ{j]ˇv}[ >Q-~{|YuIzD?.ެN/%׾mKuiP@m<^߿$ ^Ƀ>fY/pƴxMKQ?jݲ8Lڂ G'w881p&uiC̘< X42IxŠht2LX}_^}~_nzHxG5/2Oxy㠞C=w_ף=ߗ.UnGG?jɣ[I,EMA{G>j}^Y%ggp>?y,L8EtvKF2>nqÿZN."JU[T˙>tp\)wM|vEjRɳ_^@yV̒WWm9q*, ߽ ܒ}iZtw&o6 {H;N֨c94ծZ ..?bX rxZCy7uqQMQیh*<{vYEJ؟>S'GO9{REuq0]}n[5~ٷ3Ύ98SyE&Ҝ3ey>]1[5+=9}zWf[<fR>\I:>m?s ]TViOh=t=|YiÍwl?|TWqSƎe/χFY{:V|yⶪAa]:vAWW"!]8nP'niPwk6uV[{1-w҅Ng;PjڨMdwT.OZ^maˣO8uf6u-|{Z3dvy:=><|Ó?ctJh)Y|>*lg>;y8L#6y TTi&>f߫ j@]ەxVr^UooxQ ^cLgmuTI>&Y2GuVxҖӋ9>\oڄm<dxSQaPy <,Yiu1Y8oꊓ+e-.ً:PW"{#,RmW{8*o>YZg/Il{>tvqTW_~t0 15+ 2GG||zzcQ{1tՕt@F-GvJ)5<$wyG9Uyu~|bά '㛸DƤ'/uzλ£.rGLϾ>Vl7ggT9*4hOٓ5i&yqY? (X“6OXjJ}l ѣWωGO M'-W ky˘\[af*Q8z%VBƏ1n\7)/F٘kJ4_}g烷*GB[g.+n?zNoPvgmyd^G*)ߕGmgLD+@6Scºڪu$UKEV)T5٤ ݿwJ??=x:Lu~2v i&guQ~vw7:3Gy%>~ImRŷ>ze/^ReLl3U4xrqBMe./~b+hϚʩU֬bMݖ7w?h mO+xM[̾5::x`(wwNcj"Pk+Z~y.WeH?9?;3'ƅߍOp<3TiUz ǜTh_xwQ63Kpry\1J \~_Q{R"g|[Gw/-6 t'Q])nSx,&c 5^dakY1vy3{^Rgje3ΰmwPł' =a*԰֬76O//twf [5YiVo`td64e~R+A r|qoyyq>=gfH37z}w{W1GشG';^Օ~X0߫ےs *w%\M 4,05?Q \/?!,OMd'v6^==fݧ-ݻ^vͳ~ `yo7V:4Rի3!9}wnV9f@enie]j /DUgW:QNo] T47Mu>xj$S!}iȳ3Oڪs?aIoJ "PD&bzMѹGj'MQw6 I'@DmYqH`I3.0{" Mfj & κ-} E0ڈ`= *um7!aK˭L?qg>Ȕ:V K-&O>ls#jMٷ"]xʰMEg_}ʫ::Cem|ֽ2}rMe%Bp*_7h0 kReF3%' W SwS쬟ܬbq [_]C=3SSe^c.UU,VF ~1x_s*ɼ*>m~osTs?ufv 9[~y7iGOhxuXc#HԬlbl%10-eS[@CL^d2- ^ މ ._(KEZ\TyA%ZS"uw{ufZMV,m*XeKG/!n|Hh ygb v'U=Xﷹqld2 snҜR!whv9(`+yb,x,IJx}\oM 5)[-0㝜ĵdF` 5I b %PpҌCl p5a&9c2fZ^#eSj gl{+ אO:^bϓ%7S> 0VW~Hh7w2?5R3!V 틁 "&͈Zc\;N?ǯTx-Wj;WmUHps3C )P Di8so^D~ 1ii=)Gp8{ij hE28|ZXѾc|-΀;=Y>őHAiNdPcm- j12bl4WKIpwƱrEܘ)g=#)Ujak ahH*6Ꜩr)K i Y |8b1fe33!n¡MpN"&Jn{/^~'?, [ L"f47"؜f* +a:vЩJT ěM/pbCQu&4(1YtRkIY 2n6@3͢+07,\k C, jNUCחڙ붖o$q˭9Xs2IQjg{v 1gBѨXNF " }IՉB>h^r6cVw IE$CV9W6W W0,[fp2_\G@:wfg+pC~m'Vv vע^d# u0vG0賲vAMִ {7Td! ZnuOUCzɅ߆V|GN5S+ 8(fTOaU^32{B%χ!ģͧ< 's@=9fW&/)=#fW̸ef~L9LO(()Bae0$@mE֮G]?9"O)Lf ð@qPhIh6Ɏ]d<͂wCK^ua EUmzݢH7wɷVev Thh|fPO.BӹIGXcD=C.IϴPc o0GZpz-]`cylYqA兛qPqۅ!֬KKO'=~L5p2޷تXakc.YXyIM A[1UU0zxq?źϙKX٪͐'"N*oAE05c1X".aγJ;8ͷDKiǠ,gm|YJ) oy\ _*Fn0b{ ͞EDx3 EVѫ8F?qd{81@N{YOG!@3םv#sګݺLdz[i7mQN4*>(|o\J jf壹Ug2XŗCϧJST .ԏ?L;4a 1Ma6 ny>sv`iܷ7^?wrpcW IDATcYzFv84543:j`FT#fm_›b'ȣ;> 7'' =6Lr#+hFZ*fmCߛ 179!գF iem򖓇<;W:עr5H D'ٷ*џ̩e,N2Fzn(%ZlE6" |,~~ 5!Ln>}5 Suj˝͠Ʋ03s;fz ѮuL;5f,dz \g&PV ݞ]/^][ЌIYC_*eE͕k11sSܾ islW(+Mϛ{njl@z8\[Oݳyh'hF}5U]3 ^4S˘BV*|SbϜϼ01p#;C'ӪeX 2ΘGf,JR6O)/jq.n$ |s >逿A]~>`(7 ɤT:J݀ f=fn2 hw.hhhj ( Z)bu" i_ĔZOL(36*zF =̐崐Z\FcTNOr3z.JJu蠒 ٨݉Wy[/~+>ivƒSqkW'z+>zȓfϚ*(}s+6Inw LJWU aٲ&ep6%%>A9YC3-Z_8``g#0XRZ ?Ͱa6kJT/3#;(4<l2YPO+kSu12 I=뽅 :.KAn 4Smp“m\Æ!܊Rt7o{c̡k(]z8a4vNϛEKiRۺ*Tr1MY(ܸxt=Aj,f.oUܣ`liO@c/3.ЄkFaÀ@L- $> ]KZRNRTeX l^hfkH0CU)6fmHC~_gnéy"+ rd8B3Qۆedq)<8mXo^n/'r(0 fЉ3.GA{gC?}8ar!}DeaXQW6ɠ7qMR&?so7}?U"n|io8,NhN|#\N]L5k|Qki/}! +C",u@J@,Y~ȯ$q@r2aXzͫ\Qb&wBz2 "@nM-"ݱ,`k©@`&d-JeUӜ;veYC݀7e'Cl=o+]pĞEݏϨ?xHKXj1{ )3F7s?O]SY w?4CO9;S&11\Vۨt/mٲv)7CmG4s/C -Fc&VQ&IY~09Z{QׂۗQjE1J nhlaC7'4!~ARHNYR urd\[ JQ2;@Jh<ȁfncirb :(Kcu]!fxf,ubid jDCWOeBY-z7܌_63tsiHͿT4=C{ak(f: fA[ʷIBV9e+1VBp7r3k^fJZ ہw6y鍫U߰=&MK?-ڢ*fjКͰLPE ֱl*p "@K&-I2CTɜтl&S1D0ChK;X/U)8Edm e BC ZqC4ṕx;I燫xNv5g[VaKzIܚXw |7xץ+֌؇X@zdy\`cGDyD)?*4(~\'S v5 ҺXpΑe(O h~.l-9s;SHYIiDa̵3SgGg1d,?ĨĜwZi C}+Ò\wd{=d0ь+9Qz*&*Tl{'n<9K۸tG17BtuQ/3 sz|OKQ.Yհ#ӈz L`?\)7:dAm`!w[ݜ4?JFݠ௔XR_CQk8ymʣQJJ:eW<MA3V|ЬKP>fE.}?3mLP+tRdH0u0ښNN\P%: ʱYb#&rxUp졪4 Oz@M*οzsIo^ ܳ<2ݗzNXH{<ٮsD/lj>^<^Y;aM`4QYp]U6?6HwcLGF&G8rmg42NA&ވ^dp;  x$8`h]C55ZfBiKE^kC `ZF`d0oog01PTwνtKRswws Tia.֔}R? F?WI"$H&8|h* iCG\ub}̚(0I'5CO".! w\jf1tN*3 Rʾa$cc(vC̎mf]X;@4# ~:i1NxyJ+ک_vP.~f_rqHvx>+eHţum aFv6lje~\p(b=:y`}aB? 2.'܍;y̞}Dh qrkMo?k3{Yy(# ,/KOCCډ/%L^j)RbMu]ATpxPig GT(a;MXZY?&z#tgI<=IlUVYٔ5_XqXXF4̑9t)j_y-6heXiѣN-7oCn]G8un_۱szOW0i9ڔ4[nLOwM +OH^ov3Oެ׆uݷPiZ'.>k8ca&7f]jP+~oۗˆj6R@ɨ\VSH,{rB^fwN')$fǖZGѻE j -`Pb͔'QxKLBaD=넘'!cSӆ-}U Gj|̪4a$zk'֏;!*3W>D#|b$dNn)AQ[ٴF|o6QMR}G޳N4|4Mu4Zd*yX@{ofՒTr$|/rĊ6A?S+=c>d4vtNz料hƥm:Q1mV<_6eCfHN@v0Lg}3fJ홮{ Q5]^ar?7TTF3͕OW1AcBœ L\116 0kF")C5.seq Ifj#lLcIف90k<kݑF3-S o|W"8(:6;Aw3J&+a懢W6-_(~z~zX}.wn&feTzIUXIX+-x\xL'eb2ˌ$fxX11x9Up:";o6f!52=3Q b<恡ddY2c>V3eTpVۿPJ|fɡ:i=4 ҙjC\ %, *9T!5trA0By5Eeo1ڎZ^|jF.+y!I9J 5'nHQܬJ:"&nA;\w^_ޞJ8}AM nkaڝ/lwZof'N wne/_fMm< @#wa% jzfT3. Br g#F ,eSYن>L`H~[Ai;Y-8A7'&b+wJcgfw8ic8A%af1DZcn~T] 4TfvѰ> / s>5q6D.֊XxiJ)_jX$΋V,P[%e&~1 &_,|,XϞF߻5;kT3p[c4rCK BM1/T'К! (3}NA)Ă4%N8tA@g\#> G2_x;qJ _Y^no9bD{y]gzŽ p@k}2ap'&nBk'D/Uw*rN䬲o<`mz$Yxz2\+1vTLE.7=0rƄiàYtth5K]:0/K=}ua0wI8v75a[kk72?TӀ`Ws rbEW1F6c@30veE7hFnaȱcPl4/l@3l"v)5xh|(b@ܯsͨKqUg"O=he3] \/~by=_ ;V* OHZ9rPW}fܮv`Ý1WgH z<# ʮikTͮ|qHR K{b_G8)%= "2r|tҦ(S%>`Lqa\O!KPcvݣX׷}f VP4bQڍN hԺBu9NҸdr/KbsKD8̆F*rLӷ  SC.Ӓup ڊ%j&^i'8›OMyҞ;HQmѠ;+ݗ/͛Wގ,$ ^8Męo4S'.iveBS8ժN֕YL9㽨wL=NI4'rfwhA4Eo%*-Bj,[`'6Rrޏr̟-;nI<5vvv/ٓS,+̸骰F [8_=Nؔ$I~󖦡cX\W^hTmT^XZLBa{5(X>Fgo{6)>kke`.z/kӃoJ:7RR׻ܭ?P ʵ١gDxLY،rw?EQ*>ŭx$ݏ<%Fy4O, N3M`ɶ;eLC? gL4$ɡl`z\y[uLb & ?&%І]𺉘7 $ʉ!5>OY!↫𢊒;3`=|PVބwE'%`7篆&vmŠe@t3=G%M);+CvW/yW_L!2"X$ϲqP'Ǜ?i|~l7~%de@ HboHNj9ˤ<w0YWw3V^r0{0F 6R;$H$`4u]3'.oLBMAT7㜔[(n :0f|P\? vw"pD1xwe&^= JU$NX=bPuVBcZV*E` PgYqAݩ^MoӌBd֭ӤTxsȕ4~10~n=贈#W阰=9i3]h3zr9;F/m?(L}F;L=$ŋ+Vlf17PAΧl3U$-ص=e/hhfIf30XX7ёI:r#`"%p3JZWR޾42oc+1XQBK_޼ =]@~AObTڔv'cSa^D2zMRy](su%;3ќ|9GӾ u>Z9duEe@f57jkt(aȻrf.NDVKx^ˌVU̯iؾV1%zyIjK`B9ٷʕMYT?(k{i䂺?^ဦTmJ>D/f'b*kLib"]ŝ&/%) ]Ȏ`t3i8m) ɫ&ϋ+7\WuhZX4 ~X6Y5! $_Vap` > IDAT5O9 -+Û潜/]W~B^bc.&Cs+BR<ޟ>itX,lHg|h4JZ,XVJzш1|Pp30b_/7f<62 @6nx *OGcƵ;At:pŭo%BۮQ dLZLղhKT"A;K]QYbq^\y[.8?#\ׇI0i=ڱ5Fv (.C(4+eFb?3h9*k&dE}Ųr5TvcĊ=9_H=f)+0Ww-yI'gܝYPo4Rso&CиVהN ҟ)W|_!J+P1Z53Y>w6okr,LVЁӾs:܀vM̞m,ο?7M5[h%JP+,4כiV MZ0'GZ]//R_&@0Ztk : 6μB~976jj00ELpQ"4#I> lGohʲ\834ɯY^ PUّa7Sq̷h&R{?!ٹJKvP%^`h&F},Y327,jy(9 G &[/Rl}P::֜NSnh6SS,Yq'1kIrN? Zi(3h^)T# u\6\.h:g[|eYҼ)yVioH4%TP)';;gnWdxhg8W\ eWt m4S >\+IZtCI:2SH(h&/{W7pky[ľIX"κq5j9摕e3,فɅ|b`ɼreы0(C Ld("W#$Vj8ұ(kƟ3R瞺,{?4יfibl@Qֆ:vTu9AP/.pI^y "\n=Rk LEˁ®ō+[C^&MC6vjgƛƛeMW l=2l fdcGc,TTmc `H u BHERZy=;;UJۑ, Sgݱ(ŃP3)Io~ɫId`\*1Y22Qd4jVA<'NZ4 dPi61s9ɑ_~p Iə7>-L3d4qXq'SY)0\b{]KtjݡQJ{hG#ǣn"Y)$t)m}g6ˬW.<6BLf]t:hٝaئd$P1D* TMCQ0d̛|W6:4<;YMߘOiM6]`38'!g4A7cNr#5KxSWp䗲x߈GL>R+4_81n\ 3c̻8\04kC d7K; jŵA4' h& /*j6e7nN౯2[⟽nhQ>6v~fss?eAyజ,3hwD*|I懇\C6. "@&ɾ%]SB 0S"')A1[X[53E7fvj旡D^Dx~(rDh&L"L z!*$pCͯX+d$f0\b.MWj (uQk7pYE%J~2>@iCu51F[W3B} +Б\0HɭKkek@?@Ŭϭ-aϪPh #rO$7J,W%^ILXO:wƴA?65eRQ43yb k:[EƢnL4Zs+E!03;z-͖IƁ2+댊 f-t,M_Y;4Ӭ{Wo#9goFA'7;z8Ƣ]9 Ҝ|@6#Y /=g:d(7Qsi luf3z&LhrQQ q2ʧtWό0Y݊)!_q:S D,%<*8!%)&4smQB)F@=vA\Z1`X$fzAQ\,%^KfU|q47@n@W5CXm(vge;&bg əzr 7).7mZD#eV|ߚmk?(o;+iXd" [LcGxAZޟ~AYO:H}(fጡLǔjIFeG)hcd BiO=c6s zEsd@i4)Lgm7}2ۻl.ٰ"܄9f+ls}r*!MIʉZ4eL˟\6S&&u [)wQ9_n gpv)2k i5䜨aTKrb" H'!ogK4Sikצ 墚̀i L4*0~j 3>;W6jg@6a>7."5R׬@Yg܉"j)6j:ט*Yww݋=ix{lddW n/ lµ+ӛ*:e޸ fbN=")(Fc6sk`BՇ*A%)r`9k Ŵu/L-Ҷ'`YfkCeJ :42jFMem<ιgs=jҁ8d4ΟL8ɂ| Cq1I5"룭3Sj;0Ei5/KNMb!4cxH;BnE˶#8Om3C#oLJU&&ws壆8@bCYFF>Ucq``$,KQhx~[ڿH%"|yQnV 1O{'#ԡ(<71YܘZ;ē%FhH?J4~0c'=HgJ}ES8z'oDh*lE#?%\[-F\7ar`0xRza/-iBe0768Au3CcUy3/Mx]1Πh`Z@[QAGKdCydr<@?KF<2 \̀[#"bߺsw|g}GaX4*9(86^b^t޿`>w8, oPHyDfo񏎅gj]9fM$N74t$i-+*G.sGo[*ό_W Մ2zlZzδ8y21jL%Q=q~* Fsƽj93YqOq?.1"cQ_^ f;HzhsQY|j3Nb ;`]QQ8kGD\&ͼ׳ &oXC15_GqFH݌r<6~۞7z:/kTW4a?z{fKt\XR3"~2eM50 ïVShƋf.S49]g[RKA"Z`F0w&MUPyS~!G両D.J^kGlH D#fD#Cce"V8?Yjez"o(9dp4rk?`2)RcU NXb& 5bD pKood j4Z1po=E~"AP"^5Z E:L&F+]؋"+'s )>^lvG{|fͻ]xhf̷immGqIu E?|W.Q`f2Վҙ{h~{s- (,hNaej3mXen2+/pZ-3;O$he'Sg',VyT(ΤAu#iLߠpLNﯨ)OnKЬ.; 6ό~Qp!Ң_Zh+4@MO+U|5v-<4J廡c>ɶ3Ku'=v& ^3Aۭ6'V %& C\,@,FC=fnt.1| iҜ06S`^힘_ s.G4Ɇ:*I_3b+g0]x_# eBǤu @24353E6 ̤rnƞ+?fܞ Y,E&Cpd1'.#&/? ҚEU4KW*;T!I~ym]8!~2h 5K-Wksp Zh[7.6IafEFʙ ˲Y8pG)2ŵd#*MjE,)R:dWUB5b 63lJ$.] ͍-ūJM"N?E?BfYi+:wD鸑i@e5i6i&s8[F#m$ju^SCgm\3Ќ`3"4.+"tVLj0Ꭓ)NyLD XsX$!UB@+P2"ceJ2':Ę`Lir6K2[_Qjԣ6\Dr*)9pӟΚx*DDͪ@9@;Sԭ]H`ypj5~<54tRg̼c(ߌ2 :fH/+Ț_E7'ǫҾXo?<4BgdpP*I/GikjF}(v袮PfHZZTD{&2KJ+kYsq孙H2Vά90?_Esb7肖f6SPI`7,QKyܤi %$vii= c48&šd{VnnۅԌ̍ I$ɰOޓ>Kɯ Ǭ`gyl>) hX&NIJ=yƴ3*?-U  r{HO>|DA oR%(4AY26ʇ5f Cz;|c4hܟ/ jDl.]BJQzrv}m3CGˈ"1/|1#f7fJfDJ(5Xc1vS Z+gRU?ڑAMBMhVB3Bd*"bq3pjFHͰtDgGWzR5 AEGb\Od 1X3 KKmUOHW:E1ջP'毅۴} lT7<$a}Ϗw0{λm`f'K4cB ׆fZpWhzLd4B y[~{[&2]k+pvPGi2cR)PgEn=ꩳ5n}kIQ)A"%e 4 Ⴎ"Z0u؎RFp 8LMĜE؂`@eɥ䎝 ٸR^闄` }1Y+Fbce'D&~h䌅rB2UܣS7*P ռBaaq+6V̾Z5f Ǯ:;pFK[M ,q,E]5Ҫ*7Ě8̞O[=`_:~@ӟT؂p`1k[xVЬ\/˸?BG#XseS;5?bUh^|\G[pUk,~ߘY./+ZC(l=%nrJ79uVy)؜jbrN+J4VUlQ s35'/t N">Lp޶eJ9TbpRnF3[YXVگv؛f['_0ٟ;[cOw rN9o}#p {6 Ct36wma|klAZRԲ Sմf"&>ٱ.7l&@ %Ē^@?-v_0OTU%ftVf2TkG]PBn|4\+SYV^yͮ ޹h3D3~,\>oC4/B/Ѕ"'8稻 )~ Qᬲ{qEj'dK}{( ?l G/6@]է`ib:T):6? of{ sOEWuXVyGC:POiozi=C$Tz8IԬEhFbDc#MVFnZsT岜/r |~lP vv04C /ӕŷNY;vs0ܼs+[<5Q, g},im}ƍe4G8SPmy\T)h/dR_':h]_&?+focv؋)bq|c*%fPkh<hf!o{D$2CbxПX~r6Qcg+} @5A"3֏?& ׆S1)PhCyѡ0; pZM+j*`;I@-'Ʊ&Q3$'cDrV~+mWYV܄2n;D{Ï29Ɏr3ֺe9!8>=4kȱNpr3}?CxM:q WnBEP_ k0b}3+j%|(V)NkSN. 5{7"IP9h)C. y(B|%20T9\XᨪL.n_ͽDg< l6TXѾ2z0rIzޕYCQaM7IB|4N$)ɩKjh9Z+RQrQ_%DH%Z"S 퍇ޮӂ¼.='\!J}]cA`V{\H7-`4bN.Bx(N!p@gTuzzNՋm/8y:T?v¾=Kkfv΀#<֑${(xGAr@MAgVn5lY6mM^rF/G"'uqbdD6(qެ3_gȝX }7kk4VzӣtO3YJ~(T+n@tLgrH9lJ~z%>-%nU. j㩚{W׿vÑ7BOzޯ24`fѱElB@ յ(v \oPWw /B/;tny/9-dv^Q+շ)鲉4͎ \ :sg2vD_?X8Q[C|Q'SȌZU,f'Ј&̍ Fҭ@B3"D&~N!VMetc@%i؃l e@RQ'A"CjsRtAmG9-PN ]A9V<|$d$vT20rHwD8xJ+2jqд?uzI;Ѝhf8F뎈\^+ hd/M+H"`e$'S73i&#THxf#΢{Bn$|7Cf EWJ`ҎM*aQLcS}IB03NW/ nO CZ X֬KOU%(i4- ~n4x>(@ j3iK4y``{Hr-&ߪ [?z7 $)^V *c521iF-:'ԝ.fsuJ`8|;yrZQLD½AL bС!e6ٕϥ`R@@ Yfz[@&JA6P ~Ջƭ?e3kG X4$c4ԥT9ÜU L .aG%F1 . ǣ RO6wr3(ళ`GP+(JGIJkOǚA 8/@I79mM;.@ 5H <[SY/tT/YzAE)xafw,ёc ؾ>B r5{C_@w@d2ɡ!|1?ew sTZ4syyHZՙ@vf ЌEJu67# tu) > : 5TP8 2-IŽCP+3!qhzg<3a)נ|?I^b +MȃU&H{,RJkLogq}Pn"d d' h0*A#Tқ`TL9} +쉆/a qeKSx\= H,!^u'{`C|Eʜ#MP Jc&ڄ?~GꙩtU#a,k=4[ѡǠYu tS!6f4K8@;(/8iC/(QfqvoW 'Fw4?fl,  SSj4s _<4o@& ,x Z*OG#'SG\c''9fɱx6s!{|bA]QW_D8E 3JM2!ka|>I3A9&Q }=UW K'WBv}H;*n+ן]qio mi ڙڙsk/?^HڲRo {Uߚw|A9lh~w\]R2)vf~m`[3BBX[hfHrބ1 A3k0rlCCM8dc@=t} AsE꼱kKn4h q`ܱq9zdBs򣁖q +rrȈJmcuB!a]$u"!8gSSUS{ݳik-o7K{ˆ p/0iGDP C͢cҞfew CdJdTfM^Cp1nd+fxBhՃ}9Ԉ$30;ӓHNR12F Xuhša%~:y@Tb blrξ Co,1KR@=9~1g<Pj/- NAFG^adgE-~kӶQ\JnOiծ }%CMcOƖ-a$ :GљیJcHk{fi;%zН3Y{oG#0ffW&{Ca˓ jPR^֞oͶ}j!lHvSTq=IgTЌ̮xl!zuhpY'`ˏ׍&בּbco>Dφ (ic_,Y&͹(! R)E& fG.m8!~5FhBx; K !/a |D%pI-LQZSyL$v;nR1F231I(@gN~(:|(LJXZ^|&4#,NlC̣"f*9-wAsɕ3?7:ckY:'d^@#O 俉.eD&&)zcP @RӓAʢ%6gx5:U ŕ2ǂ4b=A]~8(p!6gg\jQ̅SA鿨PAIS4E`S6a>KfJg>0?ق2vA-r 9Zb}lΉ).v2oh n O/=󬌶qG;͔bj60mf:wf哣3_^ԆArC8 2d/Z5o]\qƁK3@zwAl& Tv3 u) #e3G}E90@Yzao,Ӿs29!ZT 4'}Y%)R r 7){'eS7:Dykrv=/rY:ObF0K0 ^/*-hdT foNѨ"TPI#X6{?]j c:,Zc|3f%ɍ+2*Kl;+3+3"{G=70WJ,2 rLѓCF>:o4I imI#8 *R%TݸSaXk6)?E`C 6aVV7J4pG3l*״"RnI D;呗\yـ"Ef8"#?Jkj̎U03Tr4S]y-Cg@`Z4@L/SK^4&92\z_ 8q1ؔ\caو(2C/`!7wMS EÚ!\ vE4{j"0ͦ.͎gP0`%Fï[};Ǖ͸(ηJp}_! RwF& lɜR2Qi@4aIHD)3kL2**j֠u f@|6'XͶr&f*~B, Hʻ.|P3.k&CTJEvhMl4|UED}(P9+Ab 442` @I\zݰC0TzHgWFhp;uѨ0thMҬ6PGvJmhH~1PzӃU#}ne@N U`%2t_$c!T;EXfBa[YqU[[Da@eO~4*^JaBAvBAK:Qcg#K á)ÖǞqɃE?o4uS| dɨ/]p9o(dNZܑ@ h57hXեOiSk VQƊ̬SbyJ,Ygo+Y~kg":y۶Ev-z@,FPg?r/C٢IsE6ytwzkyveٙNkUEu>F:pJ5؈:R4C%0r@Ġ ! ǽ +U)ǰ\POvfgՔ 9B3>hL IDAT ۡAosB4UnZdI9BV^_ffTvf(Ѿp-_wzfNdٳVo}'9^#[8)#6hG=m}@!, t! es2Z3Ɯ~i~gw+6PV(wb-X} ;ݝŢiu!%^D)C_=Fi q=>ݑE3I]G0T-r{(령09l`e#7>a^/pbjWrƻ` lhw-P ,EfFvZk,Lcq΂yYڑ祗ONvm1]s_YfgȶЬC9L#x`r`/W rԍ}& b H f'GI/a$u^}n09yLsTyB2g*.fPӕ9rD\p8v:yFb9 jfqF33grEGNT̴q5%=.:٫n@SZffjCnlmn+q<0_Υrm@PdFhZI5@4k]D RUR =uak* 2?ܙWi&"᰻T(Tj׿nHw/ρx ǐ8r8yec| }l:ŵϦ|LpƵdIma$q b EJMg؟/ ntChid!2/ҹ +Wt[=Bc\!Svw-fm g|IrELT^v+ 1TvEQԷ {~@"_$r幩Ge=Ф|#pژ'#auH=<3PíyN^C_Æ PaDu~[cqI#t Z(jeZ !LV$%1j6Ǎ{IUQ赉δ4@JI= kjpHi1VQf$iC.?>zA:l]\9*n s.a$Ty8g?{.nn('?>< gGŌfmC;:Q˚q*~>,N:$Šf:J 0l4CM >C@}EЈ >kf XY _C8t?Y/듦 &<ׁaO(u5&yRUҜīÂnR ,9v,+@=8ؾ%~̼>}W5fj#;Tm돲Rg{Oʤ%ɨYvk &"]fg{D>Dr[QC9޷nݷNo=yA$ge~:=Sf:2!qLcbu/8& hz3%.v6`f_-|2ـ":oBd 7gsÓ'v=:ښ6܂+`P̽".xĂ~D~P-KWh0PRA@[f97Srd^((R *3`OvT.BPL̰138Drk{k]3ưbͬw'NݫZ`9g:=.X{c9i ``nv+GYT "֑k;pk X4$##$4<(3e )䖁IW1ٌ1z N8ԓ m:+ıXm2Mf">.GZpGo8EgXV*~0h={?own* և! {qvr1LM#꿋hk[-J 4' ±يcIJ"lm]9}rXIjb5kepUuSJ+8M)u<,Y(-a˾s98<-v!  V68dJ? ;8;``ݑhl`*']Ꞻ4z^|׏iOөKu}PJE3?*f*#Z[rWV#ԑ_l`c\^^0#~]=R[W[uvUv/kR3k ApMNj.7uGs6"\?|]K06D--㬈3 Wl6}+HlRP!hߤW4fVV0# ѹ8А|K*֖noj}tQ 8RƚW&N3 W^ nI'9LoE0}akD QRiɎ)EiQA) 7DaKtXMHF3{g2Ydml!$Vol8' u347U{?%ƙ-[Pl:2ƞ3q2 Y 1ئv\څx~rLLeImG=3{&ФYs m.L&%5v뚍^ftaoQa}Ptb$BL Kڹ 5@ѹ(FMΔ%]kvלM'2gsGUԞj.uz/GjbGVBCZ,F@[8ӯ6P]/Z“LY3bd $umxIssGEO3lm) 5wZ(E M~%,L\^H\Jx(HRy!,}@@? ! org?o*?v6X{/tsC 4܍ ]AFc[9rWqޕ]df H3P}s:&usWi`@w]jb 6E,NFUR_V߇^=Jnp=A9rsRPT曑bgl0rCr OvXh!wzc䉋֓-uxs}m OIrieě~SV 3VEA4C«qdSMAO?} bV\R3W58$ N+S<s~l\Blf-"ɐ"k7}F г4zFos$a r$azY1^HOX9vf݌1GG=ߑ1.QS?Q::Rm 6]Đ_3߸ `%H䖇ߦbҾp?ك˧Y|So OoZb hy:Ih-ӖyQᵷ$M\5?^wN2#HdT7p@ A{ q Y-lF-sΊ/?Z\f9(Πa 41.kW7Cۙ|j#6&1Du~)Qu3 ɉ' YFsյmhFZa U6a5Aqpr6"<7'tHwU/1=auqKYtѫ3p.1RvCF$ kׇ.V.8uw"g&)1xӌ5J4\ C+S6Dv_GR[cwWbz-= M3ռ4:^uR2OmiÐ>a^')x*xPkq-@55[B^ ʧX vى!LDh1ORjt-v w"6tbAHo\`'L)#Ӡ&>'hsZA秬54QsCgg~07aEKƣL%J&7tqF3XDj}ۈ{+>JSFQ{Lʍ))\ ǧI ΘVu]:lҘ+b #ET"9r -tl@VAC!(6㋹kh ?"RR;}ޟ.Tq˚O~4L]|dV3=VY*M' e`M}is@l̰YS's 3A3`d`jޥяF~e[ayqeW;urFS.(3s" hNğP_ xy40zXۛ/w IR /~F0#e#,j#%d͔* D4u@5BG΋GsĔg>IXJr(z/,5=y#-2׾".2?r1204x2x*}`p;X3e QVS`<}=wbL"j֥UuJ0ͮ+؞0y2`ְփFM=Ϣc\kj?}to9~o[8CZ4 P~X(-.y|>.A? T%:Ȧ s6'7hk |Wfsfiη~,YL$,(oɟZB-+.A 47Gn\ Q$4+Kz0hs)%F\#VKJ Nf/jf1gꗃk&ϕeu&rMqeߑaAh4ݬti:l6:g!DyKQrۏ*alUL__%ܸg}tPPg}ZrB>'x5[9!_M3 g=3j:\l NO7/e3%]Rm ;7|c)A^gb˸ 53 "h=]fT|~/*HτPSAT@'dk&mI4W7kOg LcS3t [6#.,XTo-rQQӒqJϴa<֚F!6ŭVx,hemo 43HͳD(6|'B5~ 3^tM{ƚܚ/O^Wϛ+eJCths9?rr^RoF\Lz&ڋwɓ|pf5*#u)~O]M?^}9=9ǍsL7 ӝkkz*''Y̍h`*=Zw+jv`1y w-\K(',=i^gՔQ@Z/.Qz IDATT-fEKӓ纑wMhif;#B>Nxt̟Ž:WufXUɚOV,ѠSd&s֬'u3 M)Y]:z9L5VxE@K a3A`(O$6%@7إ))Eԉuj.1MZ&H25o% Y? >&g{3'X6"wGt2:@qүu$;GGr(rMfiCߋA ﵴԸeDGh% mvz?S|@%SoS$pMjJ"ov{:y \;puy43`q䢸yRN%3e~9>]PB:6'gvVԞ&WdTWѸ%aJ?^)Vя`I hxYQkS 2² n dxX)K8lP?*"%|ac *e*ӡ? vNU٥b,B3Ϣp,rHLwrXX]l/Q#'8Ң<յ=lnfZsywSIQš6etu["4 CԼ'I_ÂyXj`)n⵼l2CE~(8 3Jd[:%2L;8-zZҬ=# yvfPm&r'NQ)lA;9md&낧zP[({z0iv/Ԏ ?jr/RZk&b3>7@"%kb,ڴ^7،eV8LZ;N~')b 謢n!ptn ,1D\m!Xb1x!ֵ2}MC-PufϊͥXVx B5g|V 1Xi0FPh[ 5L}ﶅ~泾#Ef2˹X3 fFo 䋱527y݄f[䷢,h<Q34)7`F#!0e$ZZUTGuSDm:Ĺ(Yy1L'Y6Z<`UT3N(愪A#|#pn>FC^ qZjow=0Ud |-c Zu וEI*F3R =%1v5@d4:jjvf=CkoYo#?oqs5fӄF:  NxT2 f:f7o\K@'9$q;U,n m,k60,(}c, tnw\{}k,FHy%H @ȕpc.4u4T3g6\ҲکuY\̳.܏K"Ɯ9,'TP,4Mqien_{p{ӘH386Y[[;}잋YT5wgmZ;%:1z 87RoL?Zc  }&ZG%*I g;3_=\e^xHZ&R!Goҽ6Z N!ri] c"y/Lxn]jn"=.M"ϝή 4iw'/z!h?`O݌z@c3y/}4fĎIdx.Fyx;Kqh_y"M`Q1HFs2Rĉ1'Hfq clqBdH'PÐ_LiY!qxdi߬MjXƭ֌x\q&%k_yS+{3Xk/*nyt\U'2`ɗ`^o-N3#-O"qB82]UÇ^HXa\c_!)_g685 fbRN7(X6Yf7pRyw˴5rֳm*[<51 ʰ2cQ>s|'uŏjȨ9?zHYV5jW&i.UVHH|8E3\t95)CRQ1|UՇ\%tgnFffTDLt3(;zgWo^ջWWK;bK/}caUWM= II $ xJ~i}YQ=b >\8 2jOS꼆jžǩ<xFvz}\.v:H!~X+ vXXK7WӍV( Ɯ>_#&Q^;$a jDz Le1H#8rc z$('T5n(!عJKf XIk jr$fK[$exJȍM1d]{T.i8R^_|(n?<%`klAj*yiSŵf @拔 [D8Cظ)Vr[bOE cfŴHfI s:Ba3_IҚccp {@I gj/*S{bht\Dp/_-}6zD:/tdAɋɎ `SOb)KN8}0SӉZAUh-Fz /}1rr:MYsZ5E;w Hb_+:ibDL4IZn%qc8(V7';Dž.eZ%d'ew6( cpO黛W;x*ebgWP㛙MhLI{7H:7{Vav{}grI̹gVDMU"x\Qq`@*I <'{?^!:(`58 4*B%r߽6̀Ɲf$,s³/ ϡuX5Ab 3sqB'ͰMU Ȉ#[eloFhId3)y ߣ7o^="\f4 Į>WK l$_-f-Y~Vz }.҃5S\6茑.99ٟ]rR Ш$%9fF{F^ je ,5,rw-<Qb1+sVd<ӫMN3|I0CI;J6g\ 5CoK(Ɋu]Ugh O>ps/ L4OJw6a.'4J:7 knH 7Lo:Ev2//w0㋌F\|+ifWjI(ǨA0.o 'F&Glj4:z N]_͵F .W` "C^.~ϬKv%1I"8Vvjl4&>Q H4ٱq^q]p /zlb@0 x{@몸ˮ;gp{^0 N!q37fvzlܮ`Z}2J3Q0g6:gr7NZřG9VXی3/4Za1NLWtOqU6XHZِo4f*'7N84ɋEtYM:'۵>'GY%eK`F$FP(23VY<-)K:b-f_79 `|3{$?fI+$HO QR9m~722R:neo< _F({]# -Ŏ9@M1RyZϟ6M^sDJ41lG_+"kK#Fr9p3Z?F1C]gf#b5] VW6B(DP h)AY7#γ2S28mkB:uB TJ, cӡH LfFGl,!Ž.)P}֤o6bX@-N%ɥYt`z@u=qfɻQA?'+lfR( a">j<;= @U]3,ݽap=ğq5T Q#v]2\] gT MaXWfR((4}`=Ql]lf9ak!SBpVvGƁF:fieֶl3i( 5Cʥ7w a kIeV=Fs{&^?>㋜ä>w؊x(Ŝ|`bhjQf .!g(|gEf>d2Mbec&%eF$8}̠Yŕb:bǣ뙓cK-vr[>YsU5>S Oɷf xa_DI"tKV2(3{g,M}b<61{F"AjGE%ahDL6p#~i^Zg^yv8.Ф3{>"Sofv!,ˢ)9G/Ƙ(+骼FL"e@X79̩KT$VP2Ŝ\'K'S8t^8C)O51da^vYekm5*j\=[ j)0`ӌ+ar9X4fy*E؊VF^T:xo|8ͺ?ƋI91-rGY`dO^`BWPvƚՏfd̈́p|]b*۸3! *'YFs3W^ld24scXs&?}@h _TRvE9؛Tk\:k1fgRU;odE-a_5s14-"0FnwxMHE~qF DO\LJ##,J4b`]kyQA q+$ǩzp޳$.uȥ䤈'+bxӌ ,';yHTHHgD 3@7.5zjQ硵Ÿ/لM!薏5`5b^C @ ,& u c3tֹ޲f&:UM^4T1Rҿx^Ƈ$\tqO*:gQ7Ze@@*VD꧇6)T+)?L7L3x [N^*~(QƿLff)4b\H,/#lKÖ%P5"( Yl;Q[&s[ɅEP> QRd*"l[WK c{UQll ZV4،6rLt65g7CYUVxq iȤ*Gr苉:rf[ eaD3Yq! hmI&ь?8IDhjrĴ\) hQH0ŗ(ZF5+P )U9@D}c5IOGo+f8ѻKBj3DZev:{u#7FIno!>! wYgdf}f$piZ{hL2:g lz3~ZhF<<_o2ٜ5r$eDaS4Պ.gWBT;Nwn9]=㒔 эhl` "O_3Ttb/825Zы3Qg晳ITPCsL!J)7fS}? isaWB&VqNݤ2x#)i2\pd~"dF3/MyEs=+h{П(v4Ifs2 8~yYb5fjcpoke >Ko j`[h|B<̔xLL3sŪk+vadp Sr16_#ul._vZ(@Dr:Jw 5('(QeUFb DpQZ@"RZZ%DX*dAFy&3jؙO"$|"MzC"FI( x:.W H:tQVx2(N IDAT,.hqbW e%g),m\:I IYDЋH=aI:qcgdDv:9ϜZpaMz5 QGlMĚDV!ts8B faw]v9%g}=u1<3 g0rΟO2YC?2Gfl+Bn5F9$ #pD-d/\ɍJʂ-!1k2qUF gPެ*faH?Fs>:v44ůoWh!Gbd7Sʠˌe`f]ADr L;DTb'i1¦2֤A+ *5j` t(Xx8FU%kr%9h}Aa[tG1O bø ur%S0ygXs;5͘0c&g[99!2VƜY^fE3+&og&=>Q*^h[~Ux݌s3G G;KԼcNk";* duY,?ВAu`EAsqjKFޛmS-%efvæGrۿRe?M&)eI̡pLڧOv:2@`||mSw1wo`+Tȭ?,dПD36{2nQƚfN֭կ65LǜZf$f03*G^5dMYWpqFq*/'SHIo!ѹ4}Z.$ĠJEb/fhBu3daז=Jr1of $+q]$e !fFxBsb4Ez?nBgTIr22HʙdujN/@I9sd_)95`QnZY"7G-i`7*BRȃ1C rBҰSUrNxF~Km5@Vۈl:ꅢ$04z}j1q@6w3sK}:5[=ufEIH$>ʎ}tΜM$9`s X= .J#׳Ul25{Fݮ̱lEO0KDEuQRP \@FrXMj>pLH^Lp6oP$?"xIbFi"Ps8ҊQj`\aKb\2!F4SImiI9B%MQF30NX\.H(ɠy,<Ot¬Ŭ%\Q)6c 4QYb,7r FU.`1@}%2pqYugR8)V%hNM21gt,"fl Jb&,y[z;e0ˡfÚ @M㱛^7LJ42OM㣶ɢ ΞiP^+(#fR9#A" G_l+m՘qj̿iI ?$[񭶪aOƜ!k3h|J#B(v4fye%!@o5252/Yi*2GT]b' K/#a3@iO N-Иׯ l$dE*9ܼ$+Rb2)7=tE"ʌѕG8֜xb&Hk*4ڡ&a#rgl2i$MI=2:Kb2TE* !%Z$TQ6 2c`.UX.%tu`KQMnRM١n/R3#j&&04Om~mOaEwJח:BQM+Sf5gMF8"731.i49O$6'P LUgˇ͑9x#c3L𿯷lVqA4$m&:l\4kEN~~Hbe0c\0FLPXTόV-uʄG:"7<;LDYeB^X("ӬU:¸n,\Ƽzݘ dO}'(3?%br(Ӭt3pK\(!v{' i3r\񤒰;&EL_ _l yEƄÉETXͰl_q@L";+㩦XO$roǐ5nd:C >+tw%LܑVqh)ĹL_yI(ގ98kl5FeMHxQA+Z̿Ttf˜ Xd+rZ9DeI"bqm=ܬ=[,V(H|oN3j9`.lD% #m&nF;׬L_BorF5ġ OoAJCY20atLP*&g@^%X: ;2>:+\4(R͌mnh lwϘP|1yDEg 5zX 4Ř m^  ,Qe3RͼKB 30"*r(\TlZ*$a+(dw0~_FfAlԘ鉴AC5l$@bx.Vk^'M) )1uWP3j4{QP-kпwY5eI`Sj&G3(;jS?@p, Ь$M;3l: `{ϩcRFm`wI#JHߧ.FAY3K) JѯSgjd- Z x 9|*D[Fx"rEBA/+ M*(O+Q?p`<84=0kwÈ 8̛KF4mm]D3+wQtZUG=n* , ZIibh펑N8ڒˉ$%$)aX]ԉ)2:dkx 2+(sVQ4 &Uk%L&/Bc+/¬xY\^ 7S^z"(#/Ae5#]3ɩ.'z? ţ]lUsF [KlLi<ֈt&AZT": NjHf) ,1%ircŜ3_"[@@wVDiP*yj0沀(GMt<6ҥv߾MeOǹi]kwTLYE  UVjft%T$ \Y3`mܨ\,iO<,'$CvMre )sfM$gLIj1/ϪIuH)$ݳUȒ-b3JwrHՔ>h*^;-Բ eT Z%e_d|+*%'#yDb] L9. -y&/>dy#bsP㌴KQi% lcfznɳ(Ku޴]O&.yP&Mke^h/LK dQIԔ<lyv4Sf622b.9cFY:NȠKHb 46]99gRF9]!%sn4D:Gq-ʢ̓iUgK1*Q]a1igƷ*ZػU9-SJL*,9Q$?.owa`qjDoV& dS#s.Yyq4 In-`INg -#;(*2D oi~j|7pM0vNIC$0>'MB0ʊj2{ EaghNX}ꏩ^RIҙ8U# ~s)T-)㤯u'}fc)yi5 ˜;隉bB[8e$*ֽ$HBgm݃7{bIx^cqyep>s0j6Bz#s Yw=vf5FW .]FJzxfA R'aCd_'kFA $x.IyhSdSʂ~ ͙/'fC;ooӳ L+~1grTkq0XDҔ`@1a 'bgT T3BA|ߡ 7 PbqI}j br96|'7'a%pƠiLuۤм@SebG|IuIS3 |S+jI41{fˊ35eQ On֕2+Sl7cUoܙf[S-Z-\3u IDAT[2h̢!)vKME׈Ka8He9&k&'\U'!ӑӹ2Ӥ5 ǦQti}d{|3} whL,U ̿.J!dy dM|cBUczF/sfM0 錡l7̀7̧lH@>KWoNy3h=M(U$+li 2 Ɵ,=4O줚iF>w?NN>/?~x5>O|/{y򣓓zr8g~`ӓfy呥eϼ~oͿ 9|???Ƽ??2ߜ/Pv{ MR%?>h7VqlU[A0F4*ehmiתJt S,/w8t5RD[GKa@-X=m0xa`Űخ-B ς ̥ID| (4hma_! 3 S3pMqs]p?c#ZD=K >Cj]v A|M[C+$uI:3R+8 'h1V]F%ڗQeIW<6D?K`GqF[D"2ٚ,ƼzH] u3-ۤ [ل+Na&H5;{=u墤㮥#C}mB26+4G b1P)JYN$1DmoFF$ǨƱg˘ Apx-'qNkaǧM;$XFA!;"kȜn^#CsO ft5}5qB&LAj{ Xq<ńSsu 1 9h|8S": ?j[F4'NqS6GXINEeXv 5.#H+a{OsAu:JyP1gφ3nVыw `#I`-J(KȩཇXYӆRT-34h$4sRy/}{T9GW17iC/uj,dվ1Bi[, RB?N״r8Ҽe A=`{7,ۿ9R-@3?D4ϱKn0“nirB  rw7*ؚL&٢yz4rͺ/]4ff6[[/Q{7 ^^_τruwg߁yBv7lL 4 d9;cfe6oDW-C%G x?WnŢEI1s*CDNZ22zs׮ tu(hQD~'C5!em >>gl.<~X4*sr 8~muc^nnLSZp'92`WQwt&$ho$muz_~OvݓgGώfշW4.Fղ3y{^b`oox7ň>Mk% ݝLDڻC߉X9d{Ѥ`ꐴݝ;׳[ ȲǿYxygd\}!Qw8M'y!AY-["tϤM;'IǡS(af AWXvhmxnyn5^<4{^׵f[q^O]z%zJTAR`|jL"stb$4S3Ok `Ѥ"'Ft}0eOvhE e,elPԀH7 эAS 5o/Ԛtv A: q|ρ?cN33/}*CtK^sZ[=߰!NPLuILw),דtT"jjB ?oϭkDWkp:fyM*İ?+'*_)=f!-gX/)+vk홇6)gӣ3|>1쿼3~iQݰ<l:e#yj4ўP嚒;RKP5&h{N65!w>Ko?K?u{Ni0-V6w_,qLQγL;õ]47KtxRF#uj]o?-otȃ*xGCڞ"%$dIA9~ƆuZ:Q%?~N]N@:hP\s bU.S{VNpFR8GPQI~8mXkDsl3MbO$΄%I_&3f i㵬[9ێ#4xR@͝mVQ!( 9-:%6(= Oh&F&4Qۨ1YzXyw: Ur m ~k4_Zy̜pC 3yAL@ @1lcie}[7 [k=k ~Մo-a{ō5ϴmucB@}?߇I{s4|+}XΛOStY+H`?w4|j+O#oIvdN/ƍNS1a)k5l\~_yRʵ7>v,l dThU&bhG)` 2D3m@S,jы_e>Xy Lu\ڨ8Tϙ X".#RAW;RP䝋Z`!aFƮZNHU}g=u`жj6qnZ]cXjyzwVٹ^j}$5Chsz弤)Í|'qT҃c'|%T xL lI9c&e?2b&ۗk5*Si$ dPf˄$ׯ~pmGmٚO'º-isE<y>%w(J]hg5DEZ&?-ݫ[o{= }ݵAz`|=Ck,[Uq&լ5E|+kX}KeGmm~jC;#zrOn-\/uZm,ܝ4mZ?nBPM k4 h;Jo'KB0oG,FpRjJ#CkVZۢCL8N٩uF(r$0g_[Zz9 a팔Pu^6YKf=u=m[+vz=ٮ=JFϑ#ksy}Z i&go_3`&]aL $ͺ7U8[.u{[o _{>:ұ6`Mw3%Zunj۸Ơq =\cڵ [!ֳ)lYat%ş7)|qQˬ$kv] 8ǪEVL-Z4j.~hajUxmwhIuֲ 5A 6YR@W8\T]:FORI6Z" 9_+R7<"w6VdO3k?~cػɧ^$0l4lx$s -ioh8~NML3+\Oȹ k2&c#wt]ʀқg۪K݉GŅ= D}zv={kӻ7j]W-LּUo}#jP!+^HFּSS$[UմbRsFJ49܏>qQSLT}x) = &z[Ƿօz2=õM[~SZvϊoyJڔRTZa8QFu xG6clsm 8⬶F/VHj͙ZUqx(ɛ&]88aA׹m"Ǥ۪]gL,$䵵!Z cqa5h3L a3re`wC?_g6ˬ;vS͆SShA/d3[վ^CֱOh ]h:ǧ-c 4 asըi oAڮn>dFjd9 xZ)=lo3:76/RJkȚT8g=q/Qz.h#(V#^}+K^yȭ%lсLfn%r b)4j2sZ Xffju֨L|v:bz{gC~󢾕-Q,Xc#ʊFβ".UTxTiJ jF/JܹqťHJ,~4j M2 04&{;/ln_7wO5<$Z>pҘCG6:OQ`^{k8k1 kl7 3&" m&Om] W-acmhA/? [dp_@Z;`Fu{w_mgH˰} 8j'S+u8(kn'+GNu,~a#B_ZY 5D\;zr-Djy-><V#lA@l< fSw Z6aEGds4usUj:lE2&0v̌QCyijE֨ 4 CCU5 <+y\;3S!)ɣ/>K]έKF;4TjHN~fC%YOU2f:Ԫ1{w /q8O\NB 7mU,G!phk~5IˮqEqO5 xfEs||&a߳4Ep{ȻGn ͼ|'g/߻>Jo:a˙5kl"r*[1D Crz׉Q'jNtƞj\`R,Qf7+dƺQbZKkUo~YKȚ6v:5}jNP^s{+Yfg iܥnm|WXj}k;l(_?A߾5?=u8ʞXZQ(ԼݳζPbuZ{RH/ߞz~P-P .*)nFyj]=b2Z%(/6ȖN :|8%`+NO{zhSԜL&N>D֧wnOlѲM`e`E`k殛Gp O^ܿo~aomz WmMZ/oyL~B_?N p(>6_Յ|a>kJ:sˎّ_U_C _ݮWO\-_kRy~o,q7̎Y+v;tᲱtZӆ`9ڟU37 sTBKiƠtqm%u7߈'"6K k~ TF'0qpnr͂XOr ljUeDT:-E2簤-ɜYkrT)*œvX [eFB/bh(߻&#^nzBX~cO]b@.c̔6GiPcPb],@T0xoiL:>^<m1%w% 7Z\ř]_ : `O<"޿9XK6YWNOsE}d|d0nCvO ",A}Ȭxդs04%F5Ԑ B*͠Ϋ>Iʮ {Jxt(CfQ;(hX->W׼9q[k-|zdQ!|NE1؎h,%`{^aKn#{VSRUrM2Typ8V M'cԳQ7׃wo=. 3btbRn]*FϪ9ѯ.6B=^h ҟT _fxu8>hG_ Bsy?t?#_M,>jd9MmITJ446|\"`5TG;\ﴪYKblȳ{DŽ5ת|4\XPxcr:Iˊ'֚TOWRaa IDATG&NxI>;tI&@Jfi gK%i6~(O2Q3FfKr-שA#p0?M] 4ٍh3kHm 4.kCފPM6s[6e &i t2=&y,U쁽 F)= `[ V3,vf4z 0r3wc~rx+aj: B[5}5дT?.7$PuMU=ٟbmCTCsjt|ڊWSN +}-~뾳uXG'q]jdh*,PP&kf*Ne-RokGU:bjXMSP\yh""J|Ot8Ya3,EwHѠNw h66ol;HpO4EjtIyU-gmY'{"WGY#_ɐ߀2[qė:l@ QȨK,KH@~T O5A-g?K(3Hz/],#AMlP)6)&qqr5G; |j>$s|rt ++6k 3jw0'7\$~(5;ĄMx7A6A^xr+{2y3 R1Ꟛ:-q(B#'4y:x/&7~ Tb09Dgo&-tb|Rl[x!Eo?("g ,]=J7!A;hnńB'p|@$Az=Ʊ$(`/~9=1f]dy+*wfjJlpYMi鱰Z _wΊF3=XP)5'Tlj4kn_~"j0]թk#Kzj⨈I=?@'}*ؑ 2RRiVt] PXT+?>zrlFU9&DžYäȌ3!#Дj^G8[QrWX`:P|" Fi[WxSaq?2]/էD*l3K9vh8[nћh?<؅x XBP[ kob083g`6 W ϪC_'O‰M;bA-@jkJ$jYY4HdDG6DSY]JjJ%'XLL+f~H@}=ޱ 5'D{U#R_&w?` j_~hQ&(8h<6r)2㸑qxs vJoɀ-`K+e!`-&c3DC]bp+ ˤYGW8aB<;ARc>}<q}U'h8@(&'Ԓ^2r )/nH@ocqo>Xs@Uw zlF&]O0@6<[ CdYU5ifVO +yo>Qf #_ ڿ[d l.~-t~hxPchW@!Mی UjJ g(iqKqld+Gbf;fFbVSF3$23>f4AV ?!^Zo@;8(Ҽ4g x.DV=x\fkaH-v&tHi~GDڹ q9脤eAoC&, ls;Nz ek'i7餸h zUqr _B08OGk? {]@%rk%ۗםμi턻4i(p~'ÎHhaw.jV.7j`MƘ6{ o.gj`-(ZP3`5;lrrKA`hdVP{z:ݢiQ7gi$.LR\)߸ws. i:j`3l12rofztX)q8YFC崫]*ю^b:ne0'D֓vs]tG].d]͔m?<\LKd7C-ew\ -0}\1S|mYnWH(g`Kgᐯp!]!l/9rRPИw.:Krk1 e}p1l\+JS"V3"0hDD%\"*e /B mn)=wzfA u]0z(y wij"Yx0`U`{Q,5Rp 58]wSG;J`"-ٮવciE6 |EBa 4C#i}~?r?)v/n'X&MD! B*Z<;~׌*Ӭ~,TevkgoA_ Ǎ5eR5GqAjj3;v{p]ka\2AbcBf69[00&Q̆Bk?.>T-ˇhY6?*=M%j~ "pYzJ>h&q ?>}쬵e8 O<4DngC,L7>0I-^(-*rPe1ԪvS'Su2mכ[@U{"HzL]gКVl5cZfA[™md1@ $Hr=6W؞6czfֵqDkR ֆ64FZ512 2jϊ:&ɉlAD=U"bT<֬=2DK¬h*,P.\-EE.U=)NaU(#UҺ :ƧKwA~^.Dgrfl'Wc?b]sncr T&[hFb3-Z\bP}<Y<C|*uWK sVNٵ( ,Tf3:>& bߘkF3ƯcરgkF^h.X)8,'C䚴#8<$O!C917Z#5*f~,Tj D(GLf{[גLagfD*.q-X_{"wGn]CA?C0CQs¼gx9~,:TkE}hv S3xHEHf ւLf-qM}RV{:\+Mܴhn}֋̕K=ʖʡ-y|>D#`3U !#[ ƈ2LcvWY6-c2bkg2 M0P=dgIzm6#l텵 iJս1l iqRљZs|[rTjZ/VR^Q0˵3YAh.b aҊ0@P!wˣQ)t>R[* KN GFM= dQL}PjrEOAc-"G?2ٌ4ST0%` IDAT9yq TӬ f8\r6>Yo)gõ _5Iqܥ7XOݙhBCi/*@6A?_NIC7о,# h3`ϴUM3d32#cV7 `Ai5FULqг}wWThvG4CXQ^f9b}陜ZQڐ˓0ǘ iKZ̦(zƢ,5gct:T|~W. &/-hGTHMjE2 , 錧<;:H_zC;su$}fa=38_5y|HQij10eovu_e_%ǂl6"[fg} qi$Lҭiօu<lڦʋ~s`gKkd(H? ,lƔmjJR̎Ir%3kW[~Ў`6S_MWvl  AMhjWm%co$q; `RMcf yt1 r'[\06,f?_=!b,Y]NŠ[cZ*eUfH:OsFc=EiE9GBTlЙ3k=򎞈j+Iȗlѻ[nDErfN}ԕ~#N_rO)4a)͝ yY,;&gQ@KƦN>*gbtХs1{:r,yIM *]$M$\ @h9K*@`F%Z9?tMf< LJ)f*M2c@3i_czD3mњNE1hm+ qH8rR%<e/bR1ag?z@!BQeU="jۈ6D@nH$ehjd\}@ jA2FT)zK*Y|Mɩ<`:xicsy39ZIK,_x9ճ63@ ,xZt2Bfg6ҁ¼Ĥ~mb}z ?3v: &523߼1#^7_R4\sHng6i9FCLKKvRO-\Oo k0E]]Ѷ5ض/ n4(9t2w%2d{~EVirlH~T#0jOٷtǚYR{\j:cK'E01z x=(A)6$ R+`򤎡"4Ҥ'+=N^/l,03J)t͒fhXo,HVkC|:#BҲ5L U֜6Fgmڹԯkp2NSڈkdd AIB JBu/=h.]*nlSJLxń 6 V+wju b?=+j80FrNc4'Xm沟GbqMOH3B ٻ`(nm!UԺ3}o˙?t4};zëv֊?M98or6Sdb?A&"DՄa!'R0|T.8oyCl3(͌\4) ]E"i' v[oF1w+lt`FS=q@1j$>";f'`YJL*)rXcR itDGN%D쵁 zȷ)5 @0sL0{Rx%*SyY?Zꌿ(ٵ2"\}g|ڈ_#p?;\Q4PMdэ都YRHX@3T.˿aB4 q#:YlFZNX_DڙY /yIl|05B(WAt)0u-ThT6M^Ib?R?Tf*3}_Ʈ s8R3n gͯy1?Ac%V/SДIuC֭2қN=a7}]]͎B#`$VCqb]&[2(SP@5-M=LI qMgfd$ gAem5R'p 73N@™f3&]Vp#]"=N]U<A7dpb4QN$N@9fj= :T+xvKZ{)'%Ap"~E3]*FLmٵB/%&<4f-I35J*Tf|}7/xũq2{H ur,hp8*2J)^yT:fDDbBg#<D#nj냞l ,T0.}SC]`#Oj f\P1Ę?Go߼y[mwwLdho=^B ; 8 `lW5(@ Xu\'ķ(.&u& G‚[!|S/ۿ)?drK^/3OS(qבd ch*#6[yCcmZ='eWsp7P2fyZ;+/Mtbr<l 3b`AapW ]p rd }܍&G jAV [3ўz?N_j1 ewgW˪{ eyV!$UA:1N]  .s,92GuLtOIdN]BIZ E{ I)FEGMb49ٕ<ڋ@V\6ޙ}<&TH*E?n6f\0V7.WJ(9s"[]W{*cmdyyY#AneY P"̨1 ;q%?U3? 3uIeA!17ţ²,иVz1e򉬡iri13*3(}~޻DrDLA&`sUmFwr<Uk`rZݞoGAfIrhkw!5P&ONO悈ˣ&B!&Z5j0BZӨW(Z1X]=J_(fm.袪\Y%1 =l7k'!5~_5 ;:zq_p1mk'G7 i1ݙY#_!ifRfT+9dpč%AhTJC<9V$Vn TqP/8rc\+4ʧS# E(SIf(uWoWWo;t)hLN݃ݷ'''*2(hFШeP!kRz3Xqo\JNzDi^I_^)\eG$!3 t!cyD ot2 (D7 ;gC`t&玶ŶTMF'61 F㻏ZW,M\@feh<( 0˧5Om# @!l/ -L^:#GT&K 1V n?1ifRހ{K6rfm j f$$霥\/q*_8\e\Z/!: >X1{ MF[f& o6I7klt3죊 _:{DlΨ ޮ]50 jm rg| 5o [TF2 ~g L`>YH&y.ډF}@ZK6xA}']_CsgAGY%S&fW(ׁ40P{# &Z@#0a=k=}%QXԃXwCqz.W+\roZwo)y`.=>Djovf.xl%nuo~If3ЌA3jc&%cٙݾ΃aj{osE7mg+M×Jv^񮓒E O]d&B ZsjӪ)fl/'D&eAp|{lpNz|MLM6ƟOF8W5ows0KOScIXi!8!7>f+||8hՉ6 f:}ӽ;iw/O^7?+s$zCh6E3*g&;`NPa$Tƅ;be UiTh.g˔s6|cjz!zڅfs3 ]<`^.JS[~rR笥ȱTp8+Cql@H~$0p:q".Pb(I:;lO3Ξ\ga b;i_52߯0wdy㵄Yķ\B>EȯʵfQ5bgSa3+ @5g\Vά劵dݭ fYo>1dM|(fV{yϥS rJ9Whc^~.4v@r5h`HcF`J5ܱ5Qr4Qt$|K D8(c /̌+3{=h/0Рi 됹YO s|QJ%fd} С0ܙ`PVt!pVn`T<//Ix7_.,J-gnHWyR@ow RO59 zV' 3g&#RV8aUg2 \ oIYA02 q<:ngN#PXz(B;MY}֭c8g?l&_?'%m^&֠CǺ{ʇu:8^ݛ5 UCm\lKh|G 膃h.DaE6Vɸ M?a|Ƈj}լq}mF/޾ŲX L/s1|H,< e6$p~lXyLʓmN4;ζϤoe>WkԷ[< DI2]dIWiced%uaړiQL+Xfne͚SYa1q"rM;nB\N/6e$KXqvZzU 3ր=tڒ)#vF\1g0No=hXYKCmg;h@ e&YAsJ}r.ffϖ .uM>e6jy cX̾?HId /!@W(@@i:lfBLXv%3`&-йFr KIi! 6 uk*x38]L\? /sP!#״ldb@ #s\-Zk}'ȗr3zqpVQNA?px2=VQPtA=s9Ţ5jlE_6,-?&װ݆{3ʓٞA~%wj4E~GmkS"nvag8xyS$-vt2^2q\ow/`Ԟ. ɂv}\P/2 &Q jL/ Ek|3`(df"Y2eXH"r0xyMGǐѮu&?()\WdC`h 6hRzY'UN'OdbJT@b hjyfT3(iҦ53<$]D3ϋwe j rR6UjyuQ IDAT fz1 I,I9&*9pR\:KbxtfN׬lțqc'G FvPfb?Ms<DxyU (7f&MkpZO|r@RpTWHB\ȸXX7qA24P6I 9^D)q 7숕S ތo$/8!P@\KS|!XEP(OL>S3a`țTV+@̯íI|nƘʒ|cnT`[-ʛ(D =Y;єƖ8ceD2gk WYǙt--~sNߜ2+5mz[.5mcxXLi]RFN a*Zd؅5[_7s3y޾0xĽJa$A'pHgʗ`{DqMPdrc$,$+$)/8ƷX')KTIE7h $ -FͿ qW=148*03L 2N"j&vdx(uf7pfH &0eq bf&cscVߗgҺZ.ft3 M'P/ N{w0ZznF ȹ2sQ1}#)/x,4i; сwNtB>fDO4LYn*XN aif2Y Q@@(u}9fD&[+ݗ)4GNyZ $4W|5oVp>8ߗ2uQ)v=r Ŏf:,FhCFǚPXQZ >j @S%03vg*i/\[ l?@WKZ&çu[+ !UϼEKM#$3k7o3XjAL O;3^ec`w* ;Zg5DͽjKujm@wMTVʰl|Yۊ2xnG#,vwfyL&_kbfEt obp6;uf% ;rw!fP$Aߖ9E{Zi^dQ4JtD\;5w}L~+B (e-(*?g489o6 ̆K(N&Xg eC剃iJXUa̾xi6g/O~J4GxZshkݩ-_ߔ+#.nHKq(c{lj2m͠`~yrkLLLIuj̀k(A YyL;d3-3bK4)̋>8j[ٷe^IAVl!ޙC`B$*~V}jb}ϓDdo8iT,vJ>mC{@AQC6y}_;2?F2WYT)`Ef(60_+ 꿲ƨ/l7lc2:Ԫd~13Cp Fčqk+XƝAi쎕yg0 C\56:U$zN jNfU$yd_}g(jht-39:@;๲o=x_vS5ߛJ,ŶȦCX3t t>C*-B'@K]3ؽ_Z3T¤4?i$ax|J5 g7ed)"=vA_'w %qBF*d2'% 4Όɭ6Bie=3 jFĎ5)6#0`cN^`&=(KxVw Lk4oVf0fn? $]f(_tI=+1O8i6`Ys $JV\IQ.XiZ;QQ=J9IcIIJNf@z;PUىr@VwÖ͆F%ٷtcvHmFGtw _^yS3Y B]8ec3C}1E,͛-9@ O eQrratd)<3; _g6{u7%z?XOYL7ܫ :U[DMnb/#X]_{Z5ZwpsG_2^2; $?ʏ#.*s3:d\Sl[ aA2xˢ,jX/Yɛr?mP_6ͮm'4%O"gI-5lq7蓳sSz]@4x[TJ*3fSH3OW kѸ=g4AښY[-3dVً&5]3.tv|A&s{lĂitg׺/)gh0.wR`z#"TR~'c(e p˵}Jhfwcܧ 3,/$Z#(j>*bR.єCw-4/gf/*3H?ʿ(+JI!e:b_/EW`(ϊTc$|jAt@_TӠo`ۂo(z~Aon2xOInl8]\ 0_<6;3[; *{-EelKj6ՆѪ}*HVǾY.gPh,2pj;8n+NW/&Iztj:cZl\?Of]PCo.%T8T{ ʹhk&V5q: aBʭK2JI>9h7wa쩇; co%4IƽVl7 3S&NC@H28Ȟ3P]L071_ Ռ̭b>n7Y@.>%nAǩ_)Ɠ3#88+eJ[C(XYB43g >5P3,ʟbdz?36SXDQMpq<ÁTV{A_Ak9sCny-b @%:f#8BKycyYʑf@t惤/Ap$&;+7t>S249x2l v=7$^=QS!œe ? k(&VՌK+u)E ;Eا轂{/ AjbiH5:V͹ דk49v]!8dt/XS8Pȕ\&AMm7A=֠4"gAc[0Ov4A<4OaXE"q^igqWAfrNNhbb;YҴZ|j]:*{c@N`ީقmrbQo[9 kA i4Z-VR{v\UZ'6^"do{#|khdqIuax~qc^9{R\M\P3>t NXY@J>EutBD4%Aל)DEElRcZ!`N棓n/3$DlOVq[jYtoÃK88dPifmc;̀j#0#5sAJokFS ̘JqKT\\ـn)Ks\N|_y9RcxevI (ܘeSA >~"S8M 9^`c0ohD䰰T|w 8;k{~Y:݃g)7cKd /zj_c*Eް3WaaAn*V齷7^FggN`{TxЈ(1F~4"|`-~JTs`W͟઩fb>PM6'Pfa37` ~%։3I; wR k szv>D矏l 6"3q.gWLS gJب+b)-#alF]k`b'=^0|^t= oRLez61ѓy{ 2!v r 5u 5ls6#&. ?l: 0vU>Ծ )0LV/IiVpM"+2; dy,;Jʰ N qh2oӛiJZ(U(+rs,Roʰ}HN^ )AZ-757 l b3qHz#o6? / ˉԻҊ!=4tlmVƚB9HdD8NTix蝤YEi:k 3қ3tmK޴VhVX( OBfkJ^#gc0{g ?\kvI6ؒ݋ʅW .Sy6ugv݇\f[!̀wȹxYaKmnVy095-qC,#63y`/؝pit &Y/Ӗ Q[8f6nYj)<{Yb "CZ86{6fGT6g&⯞|}y[KmL1qEWV0'w ~. aLN2[Us2itv w6 ffw~x07D&?eybO X;jdf"O4mq-Cr0Zzڶc)رũjPyuxjvg.1-z03{*T3 fj}TͰ:Ab߸*20gsnV#+2sn'Ό<^Ѡj<*WM&Q}Mh$IrhTACOE%t:h!3ɒX4shH#\pU y܈8Z!hVCVGҰ=½#OB &ju(6]f̞GdUӞJ)~= P)'gUh͚|EB`؀،\o5 = h@ NxCfP`=-˰w)3c]VаDnqe=3,]!6!9\>N IDAT$8 c".wXNWlCDP A1ܙQ5$%|0jѢG@9qm5c5U2a xzOVR 8<ied3P,j?aRo2rr8ay󔽻 82,)A3甀DCBJo;iϟ1DdKKEq92uuM`\Gd82@>:!)%,zPt^Xcڪr7VSdqA[n%RA˙ ' FOs5urdȹz\OQg;|6{=lk2f~=Ԗ(tvuUV%s ;iZ<їX]fs3o} F-J`=d&99_2gS;/K7gJ5Zޏ5̨;@t@i]Mϼd3cB4SfkE%1}`fbb?IT`t(()P{)Rф:t@jʩɾb(O1.lmmʃn%Q 6c{B8LgIffP豧'h/ߛJ=3w%v] z57/ɽ\p!X<7"rЀ^ђ'翑4dWr'Ol1^> G&ј~nU^Clf ٨ `b?ᚽN>F@E"D  85DAM?3?M$6T,l$:hS32NJ|cdӢe󡏜ؐ:2a7?;2a|c!j!_b6~?/S_j33es@3 (˃C%t]0;vIAcB9%ɩ>E//7$'MsE7]vxމ`yWkxuk>ajT1tIG7i4> WЌ&_ݦkxW"nv =i")ȶO,̈E ?+{]HnvɽV>p:d,ʔaj4Uf (:OBm l̰]~SBNqzdM !tԡ)ZRטCP[*ǒ-=zB-XFk 携f$5v!HlT8Q,rZ~loxvUo]HIg(pRӬ;S! ˂GY8LXXw i2fu=3~ڑUqqPɜ;YQQf\R~ʍŰ G+lc A+%23@`Yǧ) "t fuAbmbd3!AidTravp. oOwvP##@!6xdH$;*Pp *Մ&'@j +IGԡ&^[}! uŬxT2yJn( %e5WLUE C詅0 (-32E3NLNE:?ܙ(\_ZKr;!Qn>O4W/)K$A wzw\$ ˴%q)ggKΗ?^5 (>:-f(C>X4=Q#ucF~ z~hV5B8TQ,"_FjO7:Ź+wuJqis1+ׯ0>L8gPN 9-NJK_t XE$  $(]YS} 05b13M3cof:8[7kR?hΜ=TVl~7$mri鲙)(!%ꘋu?Z?jsR y`>* єEbz *pi9is\Y-%3h蔨"*ø*`A;޿FB2?l@+uR[F-d3;Y5"|2î;WM}_Ig{\tM3o~~ʘvEz8Lj";\>l >tD1b3 {yr_|en& Zr Q:$"qqh*72QN !a8N ^ۡu0Ɨfi+$oBhڥ݆Gt?:ų}̩q!1BW&YBP?!'zNanO:iJ'}Ğ#V+@\g}k>J6ͼcZ1 T9s[YWYaɍքlL :P@u126lw'nagxSJgQ N:/S6]֢ܙ\93:-s6SƜ(k?.t65ЙM]rr'Zg顒S0FR^ !N3ɫZ3@^*po&6tܠ&~5_ T\SmhlV1 9践] s3̚: UmGeZ'Kt g[1`zrc!*w@xjJV0`Y%dZ4s'zmXD*/2z(8-%fI4ff@|.>P8uSHd)*u?sia/B3<^AZB( N$&U߰ q"d;rwMBY 3zWef 6ʚT+ȥiNf׮:"6CeHH8G x-P&C!GŅEN98&_B}rr }Mް(o mO !=sd*;Iv\4 M 㸟u/DUl!43E7+ qqo;,3#`3+5UEbiUSŞ#lp 6dNM\PC+vr:)G3]<-^LG}5-TwaМ譥OK?I6gX Ka,zٹFetڄffr㷕(SҔclM$EY(}j'Ƞۖkg߂ɟonB*>elkLSm 7 wfX,'067{ ~I((8a;9O$YJO`%erc L42Û/ qC7˛ _L!TKU7B@Mh>FolLG@3۷fj$J91-qb[8dTAq'bAmCbCrEl bֹE*]ӐxA7jΠM69 ]Ť(ݸ -1ʁ9k "!N1CMqeHikBd5Bri,)NѣlXiWCO~^ IF9k#c9bM3"BQ3f(ӟl/ m8h '6}9I6CrrSVn/HZ]roLA’@ ))`"=f/ gUqګqariPPu=iƸo6y 6Y5bY7?4[- 2U2 W'cjɺBkCrv\ЉBo)NР9I-FT u8͌?_Nqu]t$:Tݢ27D52: ?cĶ;;cU rb8f,8X kKf8o6X!apx85.B9_FՍ˹- TH0jިNaR(o>vθѝ6T~&tQ508BK`E3`aY>vRu~ N/lBronze<- S7k`gJnQ)&B@N)*MCavVi|]djQ1[?i}P(,q^rD0$A4Gej&I-w%0{qn0ZB:℧x80.;nNE`t|j529o\HA'Y'{ N`Cٲ 1= q䃋O])XV7LqLæ* Iq4 a1Cs*DpSŘ9/(+ThQ#pQL9|ȭb}V\BއCgB&yĪBz[YfQշ+$v%WbX:J%%?)ʭCLV-gB!p\^j(GKݩ 5ּcn(Q)gcLF6S3ΣIO<[y':i4E)!h{qh_9xmq2ӕů;K&4ɇ4ޯQ隸Q:+JyNyn~a68S=aPsឭ 3_k!SQ}: N'H:_VW<4p~.9^KͰ$FJq`k:ik Bӏ UM69./TvP - ͭ]PmC! < >5vI.%5~U`UM6ն.VKbsKy6 @ʃA2r%șO[yDff)nknIeul%Ofǩ@d׫L罈FYfsr7o_C1͝RzvV;tw:2`7m 1w4O;q vs?eݗyv;4g7 t:EQ/EB,QqhL%JDkϡCۨ[TcREŘ.XIWTB BP9MĜ(QnR :ccDZb,7'"c,98ZJB7!;RTJ@̄ޔ"Nno9`?,bfiS'0_27eR\OYFL7g;_4,>$/>P3n|[o>|w;TDI0SLHL(TpS댏'cM{Qh{T LThu 2DPVJH1)D.ɰe~6=wT  ]f_mXYf fېrno`V*f:%gbVbZxYp_y #&W ]]T3 ͡JytƜk|| px轘P;}nf?:GWB׬Vf (YYn=t|Q:\2ђֿ)o`-G;7/p?J<7yM9e<n_*|.‹X)1f|{'Q7Z^卝U4|MMK,Xd7b.xD IDATPڕu埴%qRJ![fr=q0vۀtv>su\X,)2 9.K,hY@ ,bxvj/]./5wyQΔZ:$SCp*8gáEWLfA>B| G7˯non^ݾZټڌ27 c}fj{%a4~bQx'eGf -XIwO}0Sgf.öET<-xJߵSg 4InnN'mN.U(\D6Nortd39T^O~}Ƙ9haJ YzZ^\ 1h8S™VKŹ(d,mBf}zIpQU+$Ã{O978|刿IbҰ/ֻ;4xmKfϜXrInò=寎ɯc [_o_IUd=ȳ[^<_*=蕪2_%F]&an_I-O'mRSY!!/׾9<Ë?YSr{@8'V Tu97Ф"hATqf&3e*\Zk ЊmS#jMLN*`N'0o8n{*`s ;7 RfP/ڛoFԼHm 1GBSNSM-83r *, դPlXgWB3)ڞ*?APz40QlhPLa:,l5f4 40eOt'@c"2nS=[wO~_O~}b}8>(@=> 3+8YApxxVS(Tޑ+nncb:P .HL$|џNx=Pg^N!gŗPk'9zKNt~=^[Nhjkt}pfhf6p~\ -x0 gs @%|ޜN-q䏒ILw{Eޔ,`/`Y#LLX9(Ho?Ư_<}z`rP]Q@&n Muuc\- h$s%ʜ7١<|eb|h+-kF$8D W,r~  ]?EiЫ sZ 9QzDŵ螲TrpXqhNNҙP;3W|GRBf> wхb[AW3K! 1#xA쇰%4f-#%14ɐ7nbSBbt;}rzAD2 }v*_[+|%'/yfOp›L24AGPd|vC@^hŗXX)Ndns/O޽&Plj:wϾgb?D\bCU0AHR>oDF1gc#_T "Apn:h hۃӲ( ;3mRaLHDu 'Y:8HS3} t}Fw 첏96k[2*qʂik*lFPx>;_] 2!'>?6T(1 >ɏo]hPGbK .Ф9=72KƬp(iǁnD-G})2Ĕ`8=jqX;52C{^5Wyg-K̢#e2(#Ib!5? 띗͋['yZV*kwx !~#熉ȻJ<#z#aF< 7V Dz"1NU*Tf:aRT~t9HyˢOn|grBH!ar2CmWY\c.r[C^ =@@1KpZȎe6g[(li*45Rک@D2U6 )3D aFyS0D#mFDUY4ל3]'69po|@̓mPۻf56tcƋ7"7GopM~QcVesE ԷcGwN3g59[  Lޑў@h^Yv@ )6ENyH?Xn6oQg{Hz',Q;Eêf3E3gϘn!pҭzj[^Y q,/؎VG\f $TMM{$s3}?bWIB2 V%=[:-t6Any3aX\%pS`dͬ?T䷫@Xx 5upi[VsdOHPiy7VGJ{$'ܪz ׀a<43Z>JJ6#4X"NLΚ`ҚhUro¨[+4gt|jAܲ3f@ hLwVk`;η-a%a Q]q]EQ~/Orѐ쬂hTc>=# Enj ~Yك4ic  /)Bq. OL\.L!ofK2]P&8^ؗ%FƧ.OioAvzIn&[qlZ6c ;Ew{p޽]oTv;'+`ߞ46jbFڡ ڸY\5^4Vq?L4het _O}it!OuY 4 9c CFbe9Q\9x 43m'̜)6b϶L* M P$aQjנza#jnw˘dt%M5Y +Xwh_*7 270,8pf]nN/҄k~@\ut f*8`x"ټꀆ$$׌+Cf9a΅yxRfX$GޖՌv1sJf6~#X2b3J Ѯ|<vmfff1gg*XL(ţCfTBOKs@Ӫ[3!uCmT亓֘k6B 066;A|CSQО|Rlh-ҡIFG` zNArEHj$6coJ]P&ta8zJ|k*4{a: WCȉ_ io'?6@}?hzߺwwS"67̎oWߪߑ[n?:r(;&/@׸u˨>љItsf-!%?OLASKTǓd6ot{+͔߀kXI8m`Ry n9!GLl dbä@M 7ufdRAg45h,s0Q\.T;3 H+YJ1f$ӱRA<n!4h0roO y@`eƅ/ OvuaG76^=Zn񣕔g F͛xyn#jt!?:i' $`5RqOaYBjh+Wh9T-k ],?u _~u%/Giheؕ$[0hFNsݻa`R3Af2 ũN>4LP4j h[Rњ9Z.7nQtFufXfs"37r :HP=06tM',SJԋa2OBl㺪H W+%zDA٠(jG#13,6=N.s| P"+??Kpw?<^tݕ{(1gY?x?B,f;F޲ݾ?TҳOp~7eq|_7oGO?8L:GmmKP*.4l?jj^9ӼN 50t}PPK1E>-SrkdX骎PtU';i ʪ%0&a䪭},}tz_ɲS>|oAFxǒgFHm͘Wc%T haO؈ !NV|J4x5b1a|ors%s(g]D{g7~mΔ){w(E~;v)뺔aLz21Cs$+`)++,#G |_:f>aIĜ0f p][<HX -h4bqYKÎ8¬@<3J XpSN`sS*uYPj`RNRl/3osWӜ,re.  rzë0+\ XP&2d^.U@p<\[]azFH#7ʭpُ8'8 a/18F%wК .28h']0L"d:S:2]u3zL I/ I4蓵փikŐ`}>#oZ:I {n^cRB _t݌p!cUp .CFQ_fYїv P30F'z ay%*03+*z=1_}/-UO.ūKlag.褮^+e?AL7i.l)&5drҟͬ;: 4-Os4$09.34|4oQB]W) f1}4嘲˳5WNUfi @rB; ev:6-:1e`$S\`8܅>d=PtR hDEƑ'/VsY;,2_@\ժ@%4xzچ'*>~wкZbq b-ѻ. *lv-ًżlvfӒjph]n_ U_uDsj!^D'fpGG?qODd<6㿜34Cq}ce\ңx((-̄yʇ䚃̀A_R.t9@Q'f c];?xrŅ32J![ gh]1?TQ>Fܝ\Mzfr >&Ya"T|j7Liϫ:I<~:?eN`3S6'p$Bż %b5 ]lXjm?)c8\@PI G_^K˃1WJ htQ)2ͩxE{ʙ@L=J SE0eS3\.U2`n@5brٍ($-z<;HtE=wDI r%&cr_-b1euGdmg Ͳ7ߊ55|DE{FAЭ;;nMw*lTs+И6L۹VjP}2UX= UX ^%-re'[23j)8+Õ ly0n,R8))L%ЫBWkfVyt c}#n75f5fXLQKv#6׆p?Ik81 ]~'4pPt36;>d4 +M~ Xb3 $u9=;zEy+?3\i'LFgӉ$g0,Q >jGԈnA{^D=&q?x@}zsd2]T )/m3jB=>&(3nݑd 4K)lDA%ePg ؐԅVW2%f 'hEJ7",qQ.v5ZM.6efè"l窧ag1\PZUkL8 +Tm fDs@&bT &7efq4o|1_Mtb"~3J1Ҭ$g5q0>_H(~­ӡx" 4J# -~9 bB״ݒhp8NBX(s@5<%MaZͨ|)ƆlG]'jYlG`͍W1?,=-9O?? “Y(yFC3BGx *V1܌8ȳYf }KpO)>3Tz @[j6s^s;C1{1B35L G\~ A#Ƃֻ.\zEupi!ꢙ -DzaWLv}ur>|+,y+Xa&~ ED*fޯ/ڦuSi֭gֽrE R3 $p~¦((\A255+3QJLGF̘f|q*Ùv56V09̮Ms@)}0|ui6y) +朰jM-( gO"])%d=glF*6#QwʋF2PzFH Kqug01ZMדC5wzMٍ/Q&\Y H>|xVn)@<]H {Nb9>-y IDAT=H2d3tqxE h|{v\#<44of-HHњ^S8p,H 2,u㩅}PlIhYGTV!vyܱEͣip8LK™< o)uXG':o`IBJyO?i+ E]j#êmW-~ _qyr)Jcku›Y⌄=EcThfiXVYa R Unm ěՔ[ɼ˛lis6Z)PtP cF|6AC!THᙺE4sƜ:3.~3۝\_eW3yҙLA݅1gkDh4evtUm]jVG?zl޶Zm-cad+?\pهo[C8i.+fv^^}8da*g6t~ e7GdZf"Ԉ9ݚ5;WGߞGcRј|LFS{Pވ`$LJ{P6Sß=-SE IJfLOB׌H՞'PmEKFq<%'ݸ9̳d/F o2N==o#uupv})[`HŘ3h4zL8pJUpYWs $?~E )s3Ib](g>›& 5Κ#;p9'ޟ0au^Ҽ(vE_tk$1Zpc͆bKIp0,)}=3H()ѱFHg&ٸmyRgfd4΋AF`͘%LkV"'3hH#Ũ֝-B+If"A*5M-yEUhɖwKm+QT*G1<ђ〔 pD E\WXզPxx8reujRV9W[,Vvkk2{yy 3iàFt2kwSynV#:Zc% QO{ ֫z/_2Nsq2ozQ#欄G鋚g3D~p> b0_cV%WKltsߏ#,>+tm7"?Gͥ| P" *@9̗=(zHa|\a]=1$unLVۯNIt_?9R7;~a&AòM!Ҁ_1R?X4M0 LޱBK|[@05*n0,IM3;#HFB56CLJR_F c+\b(4GnKm1ksf`Vw8)4Qܨfff`||Nq-7/w>aj͆mF䫔{+-7҈zS f ޹W.[f*IP3FZr"{AF0pa<$X0 pI$M}yW<KG\[ SGGyb&Puf5''kNlk6&Om0Vh>c3JrzaCs[< 4 oYZQBRxޟ1%Ol5E΂ E2?-@m_Ҍg:}lJd5wjQ!#K4H=Q%(u|0cEHq>b(K2=~}@L~]=+\ f f6ZW7nZ@Q0Cs$U|̿d/I߃iKAlX(لB+}c?V7~b[Û]YE6/;_X}kc'|b$Fͤ2Τkfj2? LQ%`yitIaM&E~m/wFK3J3;T8Ib鹠LZ 1c)5Ωs%>[nd' RBIΔ"BB# \3 ϔPpXdH..;RSOf" ƎxM3f{W-FEE1 5J2-ƖF[1M2CKʢ%?ܣq{@moFL d^èq6hH[hx92{d"4eI֦d3Ds)@<=i6%RXY ,XRɍti|YjS9(gS- 4 (< V'XsTv&#B6{oɼҦ]Eoj|| ,l$J7K `i(>YF+ vtcxתxԊcYMISj?}w&+-u7XEΥ>c3N!od4Jdd릻Qɸ o`mT<LLV F+%3pIOnt`bJ"G>ahA3\€3V b3Ϝ3eILd?/J4a编yEЄ5CM, MFGݦyf1cǸSZ3 \}T8C˽yN`Mi5Z]8v9'H kR.>3arA&J$[OnQ5V;W-Vn0Mg+u L|,a]B e?{s&b X(`,`(Mu&*BqWP 0=*,y fyùj䩧,dBNs5kk+ϰƴ!(½2Đo*4+6 fD]fe׍@y,!'$7`hŒ34Eތ,~ز-A MgLO; I@l&X5[!f4g5dcyw$_e` ?bڸ5zv+{>;S5ʥr{xvkAZlL';ͮf9r͇ν|H]z66<>)gbf1f3.=$=VMY fmod=3Ms Ka&z醧 ҁ/lŢD]cfCx~IMWhV>pJhw1r `-S ŦqkH4cKZddx(_KQ;;_J(bxYZ]R7񄰑߼ھ.nv6q]*4?gv뺾_zTBY,\gBj%K{lOi}5i@ihlo7`ϞӍ&k\FE) ' If-h  Y#J1ᔟ1a a}782ye34 ]oqjl[ͧf0VNyL'IJT3r+Ѫ``(N1C!KۿfSZƊdRRfŵFP [@굣TnǦ{:(°IL_Ō(&s<]" g3k9hM<3~gvljǥ:bәkSV}MKQ7 S$e,XWIIn憠?)#:R1sBGKqE3tk2`ضk 'H9]H--(2!  77gPB5:w_ܞwǂEm>xu7 vRd5dQYLXXa|ΌECZ=sz~"⬮bS^OU:+\MѦžMB##x ?-2=h̻Ǿb¬܃=_lYFyyhC`-4cy3eq&N C_.x1 v̈́@D`5)Q%+"_VxޕŤ-l̗(,[3U8zK"Ȱu`ޅHs]CyX C&@?(b =13Man IRMH3!s'#ְ pG'C.W@'̢pTx 3jL(SȄ3ɫe^XfqC9nG2HӉ8gJ8W-r[ WТhLP@4OAЬ=9RK䏎˺UCvࣼc*8bFCiֻ]v/3˺~fIb^.w1GC\ L wM_.Lf}rVuE7W771Lyr֤:_ 7'> 53@cf=BpVÄ tqPi5,E2  55`Y5c3eZrاkgh@p9|gqq1SR_'^qAѧ0f(~ާ6iv$e ~\xN5um ǧ'v#6irQ)Œ';ݣn}P`&w{sT3 ѥ`Ln>pphftu@]`4խpO#N( k+7BBfTތX3e IDATvcEcg@sd&H?^6W^4f\JP3f׬(ogM'vVʝ8%C""ߝ%N\ImE&z!$a&Hb~w 0k5Bh8,-ҖT?.{. (go.iކ ̣C bwL#3RfcrSX $Ҩӑ?F:1RF!j5].4D̙Z&nP ϛv3'Xe?Q;.[uaO_JL5+&!&( Nf\8ĻuV;Ja%X#sA| R<#ĬP[3ېf BwDfAf2Ҡ ,]T{^fy APѰbB R:2px4u@vVib>r/Tܮ}xy.tYq&H3@zŒiuFuZXpx G GC^5?(D>mY$%ċC` db 4sXдC25 =t,GbFlǪd> 3a,~Lc,˲|<Adzur&d6å D48MBJP6M'g70`R7?5(FX jڮ#<0A'QTΘ5%WpQ&XRk JDOPM Tsc*UAN;,>+ӏ.mKI |pyjn1TGi͔fNPyA^]0;e-`31ʒ63K 0+݇uf/4VPޠ6?}:%c.zih3P-HYxZ5ȟ `bCA[O&Ӷx.*YLӬ8TY< J [cR#gGƸ 6Yn&?{z:C.Z2#|.eFQ+Hhgyi97 na.X YxOzffɸ7ۍun 0ӟ:ޝan\b1(ݼB# :IhL3 hvrQ ^@G4aH53a"XAo2#qTr$lbf2# M4”,nݲ hJ)DħQn[S3nPN\*!3a;Ţ>wlG8u Xm<45ST @3V{b|⽓\j6jZj. HO`N@VfiD e(*S7>MuLΈ'.ʖ5yƷѠ-ȅ5_ԛJ'r',8/y.Q&D$O@1d7<`(XH%Lo%ү{kJbDP(8bSĿbTФux\2s3In8 8jڴlWƴa5y֬KX,+݋ L؜tmFـC͖VQ6~7mBeދCPUmZ{֣+( OޡbyP?G\k.|tqlAZ fwQav}sl7鐄9CêZycA {~2)܈"vT2x>?OL']طя!i 0'r>$!3 2 P@|$VVNڄNBDd/>Cؿ^,v+/J1YjF\f#c&Ȯbƫ<" ۊ4ߠsn LFF8J|ZX5\jJ(0,դ> e[HkR@'6t!;Zh(.ݙ~trkSNQ aG㶬te#: 6n^ 6R >+;ěl˨ ]iw+wS4ϟMp01I,NYrӂK|Ae"s,Ͻ0mff2K,3 83MWQyz::g )RyfVyjy̦]?J-^fUafk+߷fGHm!O{i󽕛ɒ] !+-  ( 7{,'뮋⠈4mW]›0h%Pe7Ϟi`.'d#(-;e<3Yeb?le`H8?`j3rm:d4J׶}UUqCO8%Ѝ_MdC:?ae2~|A'*"}<p>'E|^Y2<!7fԞuOjNW 1WͫI"^9[0CgQ/9UY(X&87q8Eʞb 3?p)+\25q&@hS"o>ÿiflnLi<%i&n{I k-,9엡ʐ!D-k}t@W"PLZ(-?yki||mQ<_9c $`0Ycr9p9̼t:H1{Pt/x]aY5P_yuEҡ4Slu:F-j@ KD) 2ݩ!`j3T2.&Tn)ceJ]8Ԫin UKZYAT)ʹȎi, TU+Ati rZUF Q $5lO;lTgTPeNg"2MHRaQsВP"ݳ}̚o$リs2xamdCٟ %f3ӭ f5CJR8OiKqPu6Fvl~rafs >M;a *5/T6JLX ę|MeRF߻y<ϋo? g귴3qq^|2: jm&2AN?cjOfpȒAo%OIuy|[ %VjNi`2H$z#]j6)AGu{dmi[sHVrw0Zr9.pzB4ZCD>u?$3HNt1)* 斢?syҢx,6 65?8a0%j;zѦ9ɍW4tXnug.nnΰt:9L 3#%`Cvgf{3/@FgT]f,`L^.2xf>dtDq‡8uaM=~,, ^g<ywo 疙~6dokl@"43UrՅ>3KC&: kkuk HF@q`6?G{xO0Gcuc`WD٢mc/__/6*q0y\!^9%x^9?綷sv%$ tVFf.68&x~j=1鏃|vjPCtp:@1L:B9aכ/0`q$3/˞EDi|"~4qCS3Bg01Ϟ%c&fsygNzʯݕ!y5 7F#Ϫ3WTZ*---}PMnii K-p+jz:yqqo|#Sq ˏfJj[utO#b(`VZ&,*,ޯB{x~8}ý`H_"#fv7 6_x9mhfu"K -bgfo/֐~&Glm!pť6 -]mQ\> M-C(=܇32WSLa[BǂſՐ~V( nƊk}IPV{ KB.B6cՌt)9\D0vXL 336e#W)$ 7#.@a3d11 YfX̚k(UF f|6,Sh{"v,טy8$ad*X…Z: c)PҘVRԦᷱ03W?yv9L&WWd3xv"H8Y@kV/> i<Oy\G%(B ސacR!^e81FdFi7p trc8 B {)c>ym$x c3Fx C-Ԡ&d]V"0x@-yeEF5@7`040ƻQsVIy.JU~9ahR^ge͇nvn}} ȶHt+f`Á#"0(9SЀ`3=4gp3FsT_C=?5t8S^T>5 |YLAP{/cv0`nO˦  0 1[/c6ܫFO ͢1ςPH3l0%w_UKBf7:9b(֬HC{G7S_ bIyVR`qrVPir|jSJ4GN.)Dp-4xh,}Fe"#D#`W׹ޤFaXrSimZ+eR骍cPZ<٬֠3 Kpʟ:P-Vچ|7_/ @4}Xc;"eI3H`wa@PÇ )&8<)& MRӲ"#m8ucg.{++<{~gpਛL]|җ^e_vCf3>3(7]sa-=q5ǹiHQLr<I|?zˋ ^3սeB֘|#ۘ}%uE+~2c6< ̻߻=tqu3LP1%5+)ɁXv㾫J@Fo'k kUz fph4OZ_b{ L^ ̀)ﰛSfl]\6x/~tA.ˏ,A6i,v';p,8OQw 2̤[ )+"͊b 6hey'~d@p#,'?F&mn%m:p rS^>FV쐽DçruZF!Rfq1L-S+Ky|Y c@=ϩ.IqG@L, eKGLJ~,*/iDŽe F ;20Ych&$8= gբ "¥L~~V mZ REN vv}w(l߿{f|`ʄjImVAj+-9C34\d 4t IDAT}9Qs@gx3@4A.Lf}A+C9Qy#7n6guϠnuFr'fb6ޏ=jN_ulx;\|-Ͽ&> 5XCܿ%Z~s'?dGC߻mo03aMlK*ML?.r` y&.a*o8fiI2yA{.1K5lrj'_40m.|Wڀ+Jaʀ'Ԑas/IAաOOP(M&\QU2ZHUS(-Xq޶Ao裀O9 jw'傰Q?,\.4kr+ 3*ApF,*zsVނ2|O++P2NV3 Kn>{nVUTQaHfI.>\yU{}u=}墆S"`MtM-?8ӦP;rpÙd L;”F5|&6=­ǀ\`?~zAј4{~4L7 5CI>H~-MK]3-}Z$~ZFE>^yE㑔tUVCa,^ 2`l*&1}u/g=71b5x5M(3q^jxPԏiy:{`6Áv~d^s0l~&ϼ?3) {@4սSP(@&}ipf9]F *0aNhd3B| Ҍ,3l T3TKd|gc$5gc*djsu]ʤfL c$4UTrUBʜ\|3d!4XG52ӰYjvGr Yy4kk p\:Bߨ&+q)@P%`A\%KS d jfM}Z.s +bș}ұ~;'1g39ϸX6"ڨr`gϰY g0iO@};'_䭒Y0 +QM1i@iVP=Lex4@XCAiRMGP#8@ͤ Mc:;Fnh^0\0$R({z6S\j%G҇6a"zH pR%S6))0bjӞu K6qw.1i*/ Cdc30|}Kmu]\ؐɯy{L|x%4fo*jcYJ)"OEbZp%θ'jr€f5q0jFto$ >G1 >s7+53+ٛiT!dJR3.mn?1ً o1Tҧ jlp5r$qe?t)Ȃ>H%Qa5 FxeyvE|q)dD,ם9af)l)hj‹3޶խW[j>d*8[.d6?.-qsЌQ qep0LYqF %D\gz%G qfdH1.r\ā5Up,r2mfR3XC˰1n}J$f ֘\(eX~#6VD2O$QmOS M vX8MN,XVuB`Ya|֟j׋2&<; JЎ&هS-ǚx@ 6FYW0 0e:yg Z OA[W[/|H;byl=6U+GQbiX.fM7J23 ĞGt ıw䪲Ča=jh\PFS$A:KlAoըJdљ%+ju]|s J2,X+^P`D{Aӥf4l <3m|[ @RLX`c/A8Yu0˞S4! Vr bֱ3=km?PKffg3o0 1\0q?\ rhh hǩ+|A)7s+PQ SM N$yC(jnn62F5L/=OBMCmš-M"aT+N~jYeKb0'餴Ɵ⛺jfB) 0 G[r4˴5̯DH c|\`y ݟ&i'_AF&1!.$ CXA>bE rgUzHZ 2, Yc'77/QX'y5} P]phSjqJszbxFL4y[A#;0%v.-ꮾ[f%1]#FxpY@2E>uR3QRAb32L8]bDu_ϫm \rDH^-=~:4ULYA_4הyLoq"- 0J`T? ~C:4xZjtC _yLM 0;s=#p9PG Ë2pdrRV!KZjL!C_ JO/ 2< gT ˣ!)}fgLi@ ''&b+d8%E>\\wVWu:V/ԺBugo!8j+ .sG“$g"2B$$#Q[ds UM`,CsLP5 I,aLע,ɢ׬zUMQgott@^S.ojvOj"yyf0]ЭwpU%)Y3K޹1R{Lysg@_ʲ"R>3l~ْ9,;N?fV@7&td9ڒ(>=L,  ƛ2ŐQWvSE>-g#hMgi$n]*(<=-/(9t Q])otmK \-XrݽV~N˺i/e ]/ֿifh2r3dsyKir  hƣ(1BeG#f99/* 4vti6DZ-{W/bgkf"+ >e8{ak~Kx{U;!+:0F?)P b $I.b33yxO6НBUd #ͨaᖘiѶ 3A荦?cNHs?NmGЄ>X`lFa$bx&aZϘZ`fih^-7oQD2[ 0 .j+ uURiTƸOg~=-Q*zG;:1[8THƿe̾a8:҈!nsYLi2it;ӌ;] /}Dz~X3Wb9_#$2@EPQ)4yKTιhoxxIlͰxy A|V*{CQM8Mαjzri,'nRs|ctMPsL@>},~|&h[»*DX0f3bZlXV%lG|±plg+;/`-g BҰ@qKm:SۍB#E;K´^94pi!ϛ ;Nvrݴly+2NXٗ9Sr! r<+BϹf-7n9TVuiKwꅍȱi$,dSM2Uȣ,he,+#[Πtoɸ8!dgd贝d0'M: 52ePvQtfDf ]B=qOrtyxٞf3Lf.]orfsDH@uZeJ:,\͗s.p,ɒX̿O]v30m2z1p^!S\? [M@J|ZKXM3A׋*Q 0̀؏u0_j^(S36Hf B|ɔȆe,#}tLbM~V#KUIPcooolo<'H @2slcx:w,f1pxճg2]޼}gYqr2Gdu6Lm+A IDAT3`Bm6T**#wq̥# g(و;Curis^W^bftP qĸ3b"  f5 8(-froV}!tLù ‚L"nQ4Y{HM /Ԋi.p4N/ngv! ;`FRf ٥va^:B1]uȼ~f-P?~NN^9+2ݰɿpIZ┑-bRlA*ofheY{cELPcsfXJTTeQJhv+hyv4םY@1+DVt;.l:Wd'+Rv/f@Od4z;%ޱIG-,1Tp ڙ63,&2n3S{z>:AB̴$w1EWR|!FQM̮ x{Yb)p4;idKvF@+ϵl;.C f-A9a, u(B/rZqHGebuV7Zqj+Ĥi=.|J^~8Bn=ڻms BfHԷa$>671cϹ;tfԻ*M4yzQQ9(N=)duuIeZ 8*`La#vTyhɰvpp=Hc8fsXDMS WWWN紴o欯sj Ta kXQ,ȓa=q]>6݇ z.>#cVYho29 ކx?\tLW:W[^̖*] )vD_D \,p@qhSW^ |\ \ZљMOCW`QbM FFA:t?l_!d=R!~ataq̙a`6Q\gqvEZ&³3'. giP;}+?HB-#n0yuCvN3r #沜9+5LnR5N_!1iLҴ4%Q.eQS`SCZ38ձD٬%gkxOLc/D9MIB\'>G!6ѣ LfTR 'Ϝ+|eҴ# X -BdW9'BLHH$Z+PxXd gS6܌UUIdS;%^>ypۢliy%}r2Ō2T7hELLSI:$*rhXV!>~dhh@d0ET2=rj0WQOWkcݜ6zAWj7g!SA&3!1TJMQMuFHtPdG8Nt7Ș9X Qcwt~+2nJ~piܕP7F̴KkBMg` r"jDvrWZ^bcB v/$0+γdH6mQ >z4#BjFfuށmnXD.^ o4# \+ÝtHQf"_8C]K(iv0mR]ς#{fDf1Klge[3i"qQ_d)؂PΦ7 ffnu jak:k7uyme(e~hd#fg3ef>$+i2g$t``W֙rZ1Rmg埻u~uބg(1DmlMep=q;xmqdEvfһ&9fx4!JN3?Pw~@p0*&s[V:lgT^Ǡ 2_Qgg19T{>R!fO8mԦȔ oPsh|g*KN;(k6l# ]续L-x/) <z8yRdEc 8tG8MAwE4 -%rնυlܫ(_?G!"2ej?`;.-m6a?dClfmk739" )W.rK-hU (7o05bY,(ю_rd9d`6# B\f_Wd^8G<"=v&6$.ʭ\p]OZ|D-"PK&,ZrhimfD;"n\-wًe<7Mq &XtY͒J db}ܨL.&3c䲞y?]xxŒ*jxv/c]Z7YgB1@,/]wi@r ,@G17ޯ7fj`.RQ PSZ)% >k8@'lȹ./)y/\Xf 'krڲ̾u h Ch|ZWmieV,'"v~QD;=! kEug;ȄWcC&z gn;и7B] XBL`xLĢ$Ks fb i7Ԣ\FLŚVuqg { ,0}9cS{IMc4YYz8M"{|B@fyǻX,fyeȝ?>_?1\,eBU]Q>޺ 5 y**`l,QU3P8gpeX.vCѷ(52, U*ղυkũ :cAH  J(?AgIPcgw"i0 Q8! l_yNU-?RhBOS_EjucNl(7`h,"[8Sh3D3M il"4Lsrg8vNO(&]9?~a1Н)M*S&it}bxXܻ >/%=y DOIUd.)*1,T- T>4I$+ +)J^2:IL-$$7.HI SĹSICOvCrKaE", G/=dD5z`V5ץckxNM#/tYZ$cHzY&g9 ӭ9LΌQ,]3py`fݧTJ9Z}*ܘ˧+)0vul3J+`#S'z#,8yƍpJ?>[9'rvK6;[_WS%[՜8 gYepDmTWzON"*2cE3ݯkF,Wq 2uLW򽻊&2zq<ȯ'vP;`Giha ꛩ\MJ/Od{aWm`i!&:l23 ms+v;1 2]d\( /%w@Q=2*UF4BfΙl}=_ׁf6O]K<v%'ʌ"a[~.&oDԋIhH:Csd=bu9:;&glF>~G pbOjͦl K`z0 +1ޤOda̛)DJbtǐ6:)4Ð_ޟNMkaEuK9).S3Ȍ9 4>:j,)V3iL%jPS94>ϷS6@&X˳M-o[aUEo]t|DŽ˜YAhS>-vN÷{o%(\Ys`9&gj,F 4՜TO0z)^B 3+֝!]39ޖoeId;%/xRsQja="TY+e-*K tZ 812D*Sԙ/ұ+CVi]":2NLBKB]R~$$a1x#\$OOKWb4zef+tZghf׈Aju.Jtnj, 22Ŵ}tm} ;;]_G73ΛZ?/mnMJ3pZ ٹjuu}c6\Smkcw̦;(vw\+A6]ʘk6QM2٬ڸkUj >3W6;@0phi dTHe(k]fG fql4;3tVw\YX0+yn16&C<)QkԹx=*L{N!OE.x4|{Ƿý!26//׸\la;siVOpVwz%8Q#fm(QpJ \ḑ̌~<Fk&`y::sI* )c{Idzv;h4=!czJL8&C-bYLORҋ'-1>@ә wn 3 8 ^rܓǮI5Eiba*2Uj՚Ug ZW$Vrqd&_K b2$bZ2";2܅y} uS9ExԬW{a豪jkqm /e,Gu-fu0=RX }F;Pu&һ[~]|,_cU3P+F6v⨆yN`6I , QԙbP 4I@)Mg*2= k/==k0j.sR g:Խ;i8ʃd2g>C83 h.UaTo榤\ '*lA3<EjΜ&~"u^s+`[7L|Ѫ.XJoEb"3x0">Kc#=EYq62iɺg&nk`9} 7K+W}ۣ4لˬHh3DLq4*OvCG3 T'^uz)4YzI/wLBcSlB5&BbfɲM_ 1_\St1-&n5mù6 $ Yw5c^v={;xZt>\v5sbҔb̦C -BA+ θSz*r3qdqRȰNl#+-+OX9f ȤX.ThёLfTa&.) IbYT&XԒTfTf9/ZLL*hI>)ĒEA1&~.w^k8]O9*݂%@T&}%5aiw ]uJ+SfD:J3r+Kgr:0zȗAvt' )ޙ(p7˺6D8yU(oYYr[./:̶|?HfQ5R,1A؊ N9^:(4h6qI3Ei8O_O$w 2>I:t0&v_E>5dH=< 3qi,3K -:7 1Z/hm$־/ 63d./.4_m*U#0MdnTqͮ˨zw׌n7D+{j0F` ,fm!`}9}J3UeT*UJ><91ۏ ǏVm3lȠܜcd}`!_}Cf s1Hé 5Z&jm9+UT%s".BgH͞bYѝ76闈fAi1S#q&fFlkF& $)A.Kg  {D" hpZ&1-Q1y8' d ̰d3}MdlR=f'֜s*?0CFCjKi椑?K7:g.d8V{9f>F^b1 3hE U&Gb^9?N{LL2@FIs3 н`@Jkl3⋱ mc8_鑤V0C6LtƱl4Ei67ìʂz~Lfb␚ǀ"<.e3V%Q+:|9l3 ވ:~^]D=l 9{C8W|9̇7Dov7L>Fqv}ˁ3"hC'Ynvs 36@/GZlLOi\_0Uͣ}R2]m_{дN^XVjVQNUy6 ;vhfUWh*׺nm+@@:(@ WѢ?VZe6E6ږWv`8YAhZQQlͨ-ㄮ0~+ WaP*H4S 7*h~|R6pvPbC²RhۿFiA;İB Tf>3ҽ;lնᛃ >֐h:Sބ۔~n Vh11 Myh c;7~2q+%̌͘*2aE "w ǗaŶyw )k,$RVOMt,mQF̗Cq+v@fo*vW%EqkϹȃb=\۴jd<l$:~6Jͱl%,J8[Xsf3Vb ']řP ' ej}̦5#4йd'*Kh8X:n9͒nߜޞ8Jfbݗ4j}h}d}໣]ug`pVsLŰQ:r.W|G0Cٛg?{||~=o03)!Ch0<ĕ!3"0Rx4,eYu3f6;h Y \\%njNj'of+rUT7RBNVeNL{f/7[sSETcC)PAhhV՜b【`+|VcT~UWYy8q*hV8]Zgj}+t7lr:Dvlʶ߆-+;)÷]wUZAFu;P|`ń4S'+re# :O+߭'lt=ѥφHL[񑄕Hc[_g^7%Ti0ʪ5RC{-~.7R`F߆jj _fàg-bJ[W(PL=ŽI[ʼn$I>3V0 >r@LJ =™2チ7~w(Լs3hunuAU aX!qIs&?`!CjZBc濣}CRY\KWU.09!lja{4ʨY~|J}jl49QKZoJ6ۗ\L̆~e>#ڳf6 ߺL g6  +[t_G*Ѽb Q(֌y3?w~/`eOJHEfI4ڹ_N,ڸ-?;xn!RTQηmB&Y&=U9_CY8{!ⶮa&+K%l^BjʭCu"OTga2"hQqcg1ę/똠fP2gs&>>x~R^vOMln^ Wm۠ .l ͭ'6/Fٽq"2E1ggg4厊@ckٮ'c/hiAM^SrGj=3aLK0oon\.*&|xh})J3@oF7\Yw(689SJU$wa\`h6k3׸oA@I e>*f3 43 4A!'|zZ30I:aP?,'wϾXz~E?~FPc׏h2=:ڣ q c&i2ϙ4بJ3#;?J,Mgrʯ*Ob K%V4=&\c1,ShY5Fs7R~L;\{`YtT>|پQ66gC?M* z-΢P f4v~\̻, νE\MJ7ƾתJd~M&ߴn|? 0 4Sks ν޺&y9&^q 4F<1@2 5b-a/yu``LhjXJ"{`hLMǢDcvѧewT- @Oe3Nyq<.jyp)Ԅ@@R*9u Z% )da4ޟ-K%3I>cnUƻ){ΰzZdv&{4wִA E=6fdةy\g5zM` "4ݮWos"2}5}p!w_xm0)սS3>P 1;Au#`$jS4nH>- S:,K=<,A3RcH)™-1Vv" Дo)qx! .s"l6@^_p hN@j?k:Y{Yq~Д~t?* q?9aVҼs@/FMV :SQؑf٭0Wf\'+34I382K (,мL 3 I,fbPޟØ{U(L_=HힺHo#޽EyMdeuNq硇;c "1chtw9ρԏpzB?Vj#;H8TވטO'')}A!sn5Gf4 ^.}ˁ2hJKHӵ,+ڵID_7,c\^fň3X85 .",f\R@ѻRfc01kt佁.Z i[i!u3E1r)lN tw*UҠ 9u5T~f-<g3ogqLU+D6A)KlQkkN0%:waKҠ!( grO־Ο?{5p͇gߏn|@3!A_fCp":n݇cq3ЈR@@f 4%ϊ9,M,ej$U{ݭL>'Vfh j6VXͬUQNJmfNݖc Kkl9'mf3ՖZi(*WZQ"z n,,ўey-窭*+s\luU _+7id#*Veesߪz; 6g1ҖmXk2G4Ի6gvLmCeZsU}T伴@6+opt~"F;әBLu|J(CM{XM,\+TJXӧ3wAj-Sz?psu-ڋLZ)Zf]baApF9I r@IH̱!e3Lcg^1Wq<>x/?x/^X)w.?0) yx8 ^`Yn5ړ! cãvaH\xHSս=?"A,GuCe6@/0gg:3#Me@PYj4yy4pFSEfzY|$-wS#.ǀ_ľ=v̔C@ 5ATva Ss T21FS4bNs0uL P~[%Dki {f֙Lkuabc2giӮ#wueskNΠx vg ;g}sN( b~}=^||~?_. &}!P6纬3MeXOVˤyK/ƙC(R 9ƝDNв4꽐zmLu?"lu[4[mt\inʼnD̥\T"Tܶ(ǔUXi-AJRu3j-WVkQ\\!z"Y f/8#ssZ4G\49} XRF/ IDATf@ 8.B^#VN-y5c{p|4঄V3ٗenF e3_jf줆T @c#5: CЙW h>M@g>~vMZn|1&B3{>gh<uiVq1q&4`#=[8LoAD F\sQ5˷=b;]_;Oj8[̂=tR&$ždNj dvHrLUD\/ҁ(Lvs;IM}l &M";aN'L/㎟c4Y??f1f~1Uq7_A,}s|)?#dӹ : 3Kq 2 cM){m- QoC4Y&ҕHJ1l 1!5A˜QOZ?/c3KTNS oKeFL?4%fҼN$//@T7yH533:K5P(Xp^W Z SRcgM#œs"զ KuٰmGf@#pzU]7AN#apgQ$2f`5Μ?7w_?k;xyVnlq6&sf.g ~!! w6cFϡ3X@0Y">hnLhsS_o򭛋$<h٧9-gQ.KNf^ffd0\Ħ0yUtE\?5JqL1Y?uRGi'`0ѷJdf$934{t<$礓5s]0ÕY]y.9-ϥ%|8L u*0?ϋi wKE IY e~Vz`8=n"*T!)V@xx\D㳳c1BwDOC]e&k&28\G 3q0"Uju]Ci(aN9%aF/RSN|&kcGyǤumXYlh]K7`3Y%Vz*"dS`YN evGJ0e1gTU5@ +WS@<fjygslA" 9INAR|Ff09#4[;N7־F߱0 @Z G^hX@u&z`MF2GsO[N~`@?}\x<k@NUe2i_fO HO*Nո=عԫ 1[D~ 2s tw'H 6hX,-*$fDܨěҘD7-}GoK yE 7L ws3hxp hp7>SS_#Jc::`DfNr,I+&0/ B0 dlf'@v۷7&u~γSDm#7T3gǢK j.AGS0M3l !fC,yu{挛 v34M4 !75r,|7l2,$)(V<.jSYWvy=zN"@(VOe"ÚޙAxٙN UM2p$قZq,uci107qXϐ,\8@jip ݿ: ي0)FxlBf1d%]c yfޙnEsI45'㌌]ns xӄP e_üh&qLc<֌'/3wNf]i'&(c#`hVKIHLA%FHЌ w7/$jF/F/;4ӓ.XጃC7`=l.Wu4C!͍a @^լ20h{ nӚcEc,,#v2љ濤 ~jRx kwe39`J]A3g_ }v ' l6BB.jݴJO0 0ms:a @ͳsc:\Fȩ[0.4YXUhyLjP>]ӜL0i'cX^0ǨLLL[3{,rrG4d#S9I~0qCZ,% 3eR)3-2Ź0un @u -{ߔnClµbx&0xg]4˰'tO3hx^q X{_[s8d6:Z1g߃ϙg$3CdlYi'gyv N-2V>ӺPC7oc4kfN>A >4\M\/d7G4Fn[ŰCg;8K; *2?KLVGNȠK'v?pFFߊ$^>S"'IFUS(P'u0ښ;vCB2ѿX`d˜ ze|qk C'B)IO )1c 0C\e3Y2ƁUFeeQCliMe"@R6IӖ3R`ul,pDPn Yu#[B3b4 l BXe5cW/kU&nIǿ&Stum`'7@a@_K̰ f{#k/Y T3u]s|:zNRO" d7jĩO3;.|+i8w7F̹_ɀ8Zhg4bc(&6rayC}7PKO*z'Fmϸss3%& x qDa5)㭎SD'ʹM4?Ui{菵q4t?wL\y-Bp)DϮ|g=_7Popz|8onr7K40w[V`h.ig^M=ޚ>k'S4,ŎmT Œjv/Q/uG)u:NwTX(/xfXdD򚝣܎Ov˦_0O=~N;&q7ݽU7iS4o ݌g}Ȁg(ioyn~So8LN j^ɨsYEl!vTe:ڀ\F!6\َktV_kgi4ۀqnwTTq:;ޔj1r6HنBO N= 4N۴!g*J$δBL.c%6%"C(JBZ~pybZS_ȩX+&(g`Z$ A"C̙gRH {&o +e2nqh,p*@?w.30mzmvo`  HÅ6Qk(7#F pV}02p9(L&h$'@Jcp;3򐥛_VY; K}Bf . P\92рI%d#ͰG;S$+tJ,Cisi"KސةF$K6#Ί7ov>wsU50ME01 G 8VC g@e BJZr00#)h^ٖ5ULUZPsY4گ2+v# 27;)ƒn)h~kU~9Wsj#N.{e5>e6~ɯZui*Հfڗ0x=ùwB^^ r`Լq0R^f?SrrT,S/udfnYO?̀I8[牴MWDw0#$2;6Q `cғgڜ)&,0ДhLc]~.7?s4F%]E u'R-!,Ȓ>Pf@66K m)aqixYz76`C@al/i^} EiuL͘֋'#u9>W7R-z>XR\N&-.qhJ)}K<|Rcf3~X-^Sx LVcIFϤO}s/bP ʵmk2ꌆYu)l{Vh*sf3}Ǟ1Klvۘ@|="4\h@S0lGlk007)lfs"YH7JavYɦ /7J!h6\o{ [4)7Zg|-c 9U,n oQ&=zxG{n=oNϺR#c2k%V.ǥ3 Ka3Y3ce*b1Dg|"G|RMZHdjQe-Aޞٮ=RNHg&kͣ#+xc 128>ޙ|dXgtzo6_n=rZY؍u)3hn^VM3in22%.1g}k&f7ei%3R}@EbQ.R*RrJ[Q5J7z&+ՈE'hlcD8K 2c%Zp*Bk3R6YF,f&_T~Q ".첗*߾?6wKaajX6>7d; q +\2A>1U-Pz_cٟaZL3 Yci1I 3H̡Ey驶t5;̈"p3|dn}\<^4ׁ5ia9 [:gf:39{6xY3ܳ#FsLC)ɉE^d\\7GF,@8k4 QXAfffIhڍ,HLM'_jٴTaI`^)ӑ슍>ݠ̦ : `l1*+^($2'4ƞˬwAIľ:I_0V1=ӽsLaVY_MF—FǝnYIu~qE̱hVu3z5${xoP6yZG.j<>ee9u/Uf3o]-J!Dѳ3i6標̌uf_ª0t6/X>ּ뉔YLkR9i'O[&vy2 #zFCDfG|NX>X]oA*c (4Ep3ZO~ϛ4zu.] n܇44Æ vʐ!hF221~fwf;ӝA >pF:`VohRp*U/3b0r\:Üd+^@lJ Bw6+2{,!v0,z s[e\&ZaJ.HV%q7Dj|xQ5U,ѮJP`Yڌ)J P0^HBIbg Fz4oipwGfZ:H&)H_fZ΀C[;kk릉,y\]gFilv(n}[ObgSg9ښB鈷_?UNJ\t|l NN( \-r XMw CtfU͟>=^WjOcmdC}^u#Xfmt<{?kwn˜u3v:K2j ]IJ/[{7g 2*t eZMfY? P78M{A5mc_F7;\qdgJ]]))xo/ѴVmJ5'ƙtK+mzugބ97S3㗐 !Ad8G_6j*StAPtK_YϨ+ZfҲ -stw>6+zdLyI![>2Xc^-^zgz ټ|OL-;6 @{NeaڒрfGgJ¹a6imH5/DE0ߣ Uj@C*HRc LNCK#<=dDcm=Px5r$4[)+Db PӢ80":cX g;#Lf<-+y6@ +U7o+) A  +ҞӍt3I#|jమVͱ9d3eu; }!_~y1 }6!hDf(˹G($PBc?c>?uPו* {rk#pvrŚ0dkƚםAĆ`H\̭눝]\KA{iqzG4 pOtbS UT,JrX! 'L%,4lcpMU:H̔J6VJpggn&ƎvjjJBo\btڎ Paq-BV,dYaY۵rJ~IY!Ҡ|%ihVXWxwTx[*9ΟLǾ[2MaZrWyߦg\zҬ@kJ^&ox؄lvI&YbЄ f7S1J~A|*њ%1[ gl&hzrg"{„zi:íCH<.cF񙝹9tLtѲFF^Ff ;CD!  He-@{$Bc.sAA-2,cf:]oEV<^h RTgҰΙe13kY% %D{./rs0>F%0Τՙni5yM~G6 ,B7NSH 3:Ch.'MR0%Q@"/ t+4bno6M hP{Q%DbŜG7|cC׾C-<%B'K`@u8mݾn !nz P)oլ?l@fx-UR% g/Isͩ;vN_j {lfzZbN6/ň0Qge{'OGcD_"XLƎh'CkKr>Q9|IҴH;SK[ BϻeIp1 6T#V90SSch1i%l el FOݾSe$Bfo/,yv &7\f1ypeZ66^[&O+5C @=˸]ғ&Cf6";+lrM ܟ#`Y җEs#wDwP|2LzyHT{x4!2SKMmf7J+@VC$˒ oe9ਙYOsfeTX3r>{# ioF|`(( ufu Yp"/("27ڃ@2M>|.u&SiDz_LBgw  x9Tga# oBJ?:hnƢ37f>u y=Q~LٵH!Uk8tfgcKҘצy-vv=`0 $ĴZg/:L԰Ñ1j=ӊ$Dl$tBa.;coT+f9kP ϰM?}X28Nc驹qX5!L#SWY'| _xf"1#FJf_= KM8Ki=hH\S&*͌\Vjpj ߎR4WWys2"0\/QR;s9)?_K1X!{;P8Ӯ9r@PTiFe$BC0C#' h;`\@C0̚yH #|VH̰x^3}dve>t 7 aErưh(Ąs)P5˛iD= \ Kyoff>g>rm^k V5 )2cx7/@h2' +WRckb;6\n> -xpAs1@i By_K#}jF֛h x77l:lA +?TMuqo_]]ap'iq͵$Zr):u8tv+ۼ#Y_-z,4=6tPfRP34OϢs'bN-Dnqd,4'<fZhH-o)=-Y1I6NÑv\*djь|mT}Zx|%Gu\TKlB3C6'e aj w)z8szfDӮ^6i ʖ;‰X}ӆcZ>5*剋P+sz"fpfqI2{slsѻ8a6*v,C> I*}@ \BRǖ2iԀ"n`\Zq{dz{H[/:cBbU[&{bL"3`_#/K\kKJl,Ӵm #Ry[KȚSeNC` r:t/ D&zpWjtE` eU3#F{{#F=ζԊ GP,EqSf=@ %B*W~{#oe/|"BG!:C\!䁱}N{;j2*QsRfrLڛRqtv!?i߀<.AKl}s{'n5ai| Vk+׹7}3?XM8r_\]8ڃ؝%'i:GM̶OgDhLs4a-%0p>ܐ·:tX{A\7>3كd"AXP^F镜ZFh+!z$I)ӊJn.=FV!?$ZwF''~2^Z!#!V™4%%bY̠BR3m,a3ݯ9.| c~I4S 2t/ q~L.6!h;9qY__<>#sdk__;Y,,MN Pam`Eds {{]lg*ۥ_9Jz̎,5+7\2[`ԫȅ*`3Df}DV>ڻ08r(G*x%L.d+C:xبfp`rf:Ba&6Yqx !q(e5mgguCH;y8 bR^.UI2]A*s<RL"G 9@P^~~|}bܠPFM'sݦ(?ʚDsUFU܍#\پ_շwWytvn(4;h 50$DUϸ{qxpA_Ez<6@v6 *аY<5uo~^ ŵ9?V!5Ku/F4jn˰ 59b'=Xb "D[k% ,~$9SlIH5N21,'а5`t!- ' j-!>}onG"Ԅ4AbĈr,hβ[dJLlL7of_͟Rπ'q4iZJ./( k c?]]\Y^Xz}pQ+ Ca @ TF 7ZnsخX "Z$ | BeC@ca~^32=€mϰeXU72K%Z9nDf<>`}eʬ5A歶 ]\ TJb,~qfY=q av!6#AÀd: 2 8N.jkq.=p Stj(@XtrbaDSKn:3.;Umoqf? .J(ȜFQE2f2ϱW4k;;$OKk"vൢVڱ3 +?EkjD0~ԂF\/̜xQ )iTϨ }KkbBѬڡpKhj!0I `ټFqt=/Q0\af2ҴsyY(H #RVv8fƂ2b)3"]c#G<!G(p`f5ݓ{4Ъe(a0e Yl&Yz\̠p=x@gܥ4|}!x1Pǂӂh/o3KoK` 7 %ԓ?'JCXS@0tJ.,qhq= *(@9~6*"}1h{gtAtF|/@ œ Lcgi:"wAt!LB `ChCF1:㆞HРN] nI 7"2(yIG#A NIɩ͠Be]= <3\V5noEGXn {҄Pn8וP,;:.o77A6ʣ3 s36UcN}󡁨نqO5&~1Aj_l|A7֌Հڼ` ||#wa76cOkG蜿诹Qw 7J hA4:#ޑd_J!nʥtf!6|âU#+U ^z6{ga5k7f`U>KK~{FQ4x tϜY;8J_:AAI/uY1kb.K`:aNAT}ac-ٍWcxUK~ZQs2ukΖV&[Su)]tΙԢ_ug!L4|]~Ϫ\{;R={r3Nޑ;ԕ4?)?>f)y%8sU|VrK˰ թ#r~pjgnxY"hd&"Nl6*8_? jJ=1Yt)Lc`s` Nc62tN '\(h+(zn\>̜ն2&C䗫).rbh | "-rfΔP/a|AG@=GC!oC۵ |q|ؕcPo!hezt77w 'μ r(#fك @'@},+PLB:00@z+#šQ6lp÷9aaϙ[33]t`%v g'lAB6C4sfm3~߾7oꛫ7WWh#$Nа7m&'yM77/o:3aCS]_'d;!YXx6:I3zV>^)wV6=kP+Ͻ |15fT!9fU=죬 ^h="7C0cf5b C=4j]!pn׳A++"]624pZG6l|O;5a=8i106^22ν\umTɈړ1׳ͿyMse4Y'*CgL6J!7C?3:JБld` W2Y6I3t\wFβ}}; J |U;td4tY=N;z*DX;VnzkB׮U>JFVuƝYMrHX6xJh@873V?&[d&4'/Y56a~V{iaFib%/XSÀ@ ~&G.ưL"fƷjWi|hSf{ĥ_$͒6Uhqf2#(Se.ck1w,˥v M 5sdTK~t3P| w @eK5 Wʒ<5Kp؁swP tsApH.Ep#(&2wg>؇ `4| 2JݤҌ5Di q`+!7i$@g70i]#Xػwy [a8 A3etFiX6P"MUCms<5*O߾4i~;"5c;`LLhojF in.ͱk"!"gUx/$r 4kqqfB{1T6Dz,4jrj!bna4~I߭Eb3F]J~#ziJ_3:M6op6T%gϽ(6{q+M4-C,!#禓ED'Tqh(uE^}1Ko֝UR89gb*_k>>YIDD?)ojVMTW1l':v/О6>_ {;_*:p 2$ 0sƛUsElϨ%Wy*9_ӛZY/9.m!E_a->Za?B`"A7DLKpc3OdcO˚33i!]31ny @9*1?I٨{[13NhklbƀƠ\RUL|9`ƾg-=F u?_•p#rU.ia$3]lH0KZ&! y.)fXA]3 gf" BYQY(y[EI~l Ba1ysZN;3$vUn{CP4mXm/n/miKXQj 03)-<+{D@Yp/RR?^a.9WfX׍m&T49M*t=q\CyNѼWxWBf""@xNlis3g3q&bsky$@J6"O' hfTtߝ)g3qҚ Nh鬋1T@ӯ?cef3 fjlڌ،U2j. #K dVi:?N:nfNKi9Ӫ1}vM{+F90F`VjA)\ i|ũ3$6>Mdj:{A4|/ =&q服'dRi'fKF AE?H鞥X?9qGhk\Bh\Hux㥕Wu#n}E.–G_H7fu3ݪ$$|Z_ ~ 01{F4\\r 3%[CQCՋFrq03`6̠GŠЩ=Dc\$+C؂hݧt b`X[)¼[_a% lf-퀎|VU.dadfnILA;  cV33ܱ{D'i*"=@ Ӯoo?{ջoI΄ן3Oo:>Fms&# n~^f2{ptqN%-YbQb:34~ :Dۇ쨌% ni4 * 1c {Yjưg̤,1=aYà̙vs3>AO,4qFċP+ kd&)x,R ɚ2a = PBgP0Cm^>nӞ},r֨/ta>>4:qTLB<&EJR"ޙ"p%Fϩ6a@ 7ՊDJf w2S8&]Mf<hnRRsgqѼc 5b󙷈BV2b*C?|կn2R ~;m#aa>s6W{ ԇc/bL/5rM?ḋ4O*&h=k6S5$Kog XTNn+&fBDv0fWc,3le*#.st?M3` l?6;RӹW,Ukf Y5d:,hb$^~ ܦ;uq@8NyU)e3&7,Z,+Us|E~ ?5AVT'9B2Uwi^B*}=)Qg>F: a%E|/) y^3SV1ff9?Fl,Q8L˨ϭld|;}.$6JRO{_3t̑EB_67uŸz&7W1QӖtLh.HÌڈF05J ?"=H@gvR{v2wJ2THB{ !jT}V3~jEL!b;^k>)+v0PaO#n/C5XCoBB")WQe\φg7dxF21wp 5V5Gס|IͰH8Yy՛whH*US H3:mt[n`HHfD N6_/fF*A5L+Q\*Z4ǮfI|g>unSװr]t2Fh61mn3vfKْJ݃Uv:݂.vVN1 N&:z{ofL%F^f:e¬rliR\_ +BBj#`5 ށ_ ec=BAp`i4KVF?hNN^m+# 9Lw~vDeM2Kɭ}@Nܻ5uhż'ݳ*d|V73l kL12~h;ʜmFֽ0<ǿ2XSS" s;x'lfe"!y i}"jVg [S>+3K#SxO^0 wF{A>bj P-?Hfox .H+0ȼʙkp < ^cn*w[+E>,t@f`ɣ%AAILVw߭07CO%(D_on^\mʼnl 6аFz霮M]Q]bJSS}Mհ5NWMF8]N3qZV?Ȃ0~F]oZ xC&WWco?uSnȓĸ9mc&]#$FXmKJ ]bCrQnM<חv3v`,kpmY8&(\m@ЍWyq ?1XwgeX+' Y r3ԬFk"O!Ô4e 7b0ܐ]/0 ;:<84xFK\XEu:-Д 57 K!+CǝPɓOˊUn_.g- D)ҹU3 IDATD^.4p8 f(HF ,߽ČJNbew#5w\W g:7}6LERXDo0Z5syy4M~5e&q. Cns}mv!Weۄ4˓V(mfi%@%P̜|3 tBkz@6ݼ׫kV”g.=Lw@ϣCΰdoC~fo B 8@=dt0&5Jӛ z#GEM޺H[^Dicc29"X^n{ȕ:0Ӟp ;h 3 %eIy:Obs”;j2f=C'@yyx4fZr6͍-m̠|ܻd`1K-"2>9(a2 , V3*s+H¬ :cřfh?B3pFZ+Ep0"Ő//oc3Ç?lvkI8z@u]c`$m. 3!tfq1b^*aʈ(UG";@}8m24]0B?z Pgoo/CnfhF,W#,}=]3ۼSSD[AqŤl`ZmGaaBY>]T5ao"p`$je|\4B[MpjoEPe^}rI0sy΄5poޠ͓9Ny=s¾3g|aq3k' /Ϭ(zȋHG1j8%FXqnv2Q2!ezx^{M CuN8#{&:&BmSoOq.'{O jEWrR%^WGSia,c j$NO1_z=}Y~j=CE{/zḺ- |3(:L'WO'7V+B0Fde*fb4A "hl+=! ?#JˋUb_ߨ1 4W\b1@k179\v6eܰz.@#e5qSfV1C-Hl̒gsyP2/D vz thڬi,A4 ~) Llf{{DC6nwg3]ᯀu+3kFT9-(xT"T# c.>p:~%B, 6?τf[ y޲`tB_bӽa8 P@Lﰬ uG)ܗm˴(Ydk$#YH%]2i"9A' t(f5dXw5C c5VFFk)Mp^#B:6"gk4!FO+h<&|zq35} J)ȚH(e0%OF~3%/ Q鹹OHu@eAxPBn|=3zcp-*Y "; 5jzDe4֓ _g^γk .a)3g8LsF*=K_l M"T՞]I} _&)T Ir_:ڠ  202=2͎0p⑆JcܭsD *f UM]r,ʂݗd;X6TƖ 3l><\?{#qBlb pf4.Yf_WDty&f([Iڣ%!mv]FV)b>3vQg*Ò=?6ZQAj3#Bݮ 5LjJY|(F=,#GUda|3Vt1dVV d\.T:?GN`Ztw *K˪! =ZQW*)QUs0/2[w6.b`Wt~!@f.|·4'k;ss;shvfv^,slf& <NAH,'-ӚD܁eVxTeb2OHer—F2Z|j 6hg0E|Io)#9׫0 'H[l='Ptwf j՚f'^&_ZȘ%xof:4?֖fZfY 8L>> `fhRȢ?^ i-T#d-طp!PG&֞I !"5~ٕ3,0+Pp< h(e&4,o$_ Ç=sExf{9q38#dRf#Z^Ϡ}H c9 d {+J#9ghf^ ЖS( +PX*;ˬ`p[<1q5m3ʚ* ٽ,qVggnܯoCL&b,53TYWq>2PG_hk,Dq\E_kn\>@ Y @s盗';s;mBY8a>sZ3m%a\!Q{A`>30Ma$;rk!ڑ!6gғdlN>c98LBn‘}?Qv>M̟?F{<~=`5i5io͘34V(R%b/xpQ ,ar xѾfo@S=CD,Y@}|~E1,p%p iX  q٬hRa]xLׂWf3xi=S3bKF+Qδ}` &rE“?6hc̃p&B4™¹tsg +ʯg`fw`cjj 2f^__ؘZaͤA33fg{Tj;*Hb@\VWN^G5UFT%Z4hi|WK7C Qo+'Q#Դ=Rat]VҶK2 kQc%i{>C:Z;N(εQhw= ^wnˇ*2OguRsSxeI)11#ZA/j91a'µv̮TƊRthe!һrrTN>#3,d|)|9x-,z`kqL._9 @XmF#G4sHU^6 x'θ J!Qj=O*HWc/ gFY3 vQ}లf? X˜E~khC;ӭᆊev ~_=m 34!-# O@QԵA&t Ơ3a7Os/zQ@ӟz'3_ rH²Ņ 5rce"H=P5zfh%ڽ~ܔ5h}os1M,Lr6TWV8>++kh͈lhX \斫fg>IpGr;5f+JlUJK]%V,ک\ŧwuʋbHu2) b2ah ݴ PԎuG;#3s2]DoF#U 8#z #J1-:4>WZ}roBDvq+%Hmg߉FŽZsKԍ^lQ5hyN_'p^ĿEOkz~&<,'㓭wx(|;7/=_l$VWwFR/6 b=+ylnP.qK%p > 2dVwx<55 Yjc3cg y!_8D<[xQqmtFPLk˃vGi=eX,f F4gR & ƀ٘M]2&-P|\tVV834!M6!=7we&S}(}/9gA+x[zĘX3MfX< |ŅH2^igCk z"%c9$@lJ蛠jLlmhq"•fkXCgnW`,vDc\|f\/r1ǃ}ઙkɨ`\ bMw53AM`򱌠 ipϋw Y!J'7U K>> 4qg66 ]xbamamћ $̒@ Fb5槍1a{ۗS%zTW5h5!JGtܱZ:ֵa$wjdfGQ3$d/lO8ynژHڵ;dFLjG$f lbF+*~+OXvNVMOoo:M1HҊKmHvԿ% Zv#=^8z+jqSIY)IU찤.AX7p1lLws)LZLͤ/^ܚA,:r2#_sƧрB3ů/ ПX=5h]%9814kSS+ 20*9s# *+*P] 9wjzfM6>LN{ Pf X,ͤ9@gK, U,c,&צx-€ -77&fwL({q͙NX /n[~d29z> jݬJ {=6YK)Y8Ak鱵9GQ0 6WsA@fMV Yslٜd*CM&C;(i5ـ!EbHXr3ΘŸ3asee^EE &J3r([>݄ҩuMq\*ff>}="Iv\CH#98Kty^h##ӌƧ^hYH0hSg?>cm$jC5ձw8ʘEbbT{mR ]+tfQu4@JkV:N("=wxQk7j ~cb(Wx;.9 Mq\P@#GiKHpih蔊y!uKN4 Lp|Ɗ =ꁑ*m;t$OVSXX.b>w&l7\\ь#$,dhƅ&-.q&p _*|Nm3;= IDAT)̂*VkpSS++ jʜ3̰x'',H9 Hf 24gpX*29}\I8̛_d^Y5,mPii &1L%H^Xl#=fh7Xxs8sfg L0u7 1N +N)+TZ.ZI#õm| @:4  A ZO7[qqxoop q []!g+h2N#3?sbuITzN V!`ͰzYs&=9'JfDmBkn3Ztou;f:psӹ;xv-f;Υu"=6jg /£:h`t:toXܜaZC8N3 pA r04C5خQ:K& 9&gY87MXYܨJq[%Gryq$c;c+H3ff.T%h!0!pC^wf2D82nCn׹cgi!C }6.cɸd{9 M[ngg.\.].T 3Jgʼo|Vo:HERXޭ:~5!?+Io*-Ilfy1TTLHM3V*:#]&S5#o\`)YPfF[@L Eƽj<,W+K5>uP 53#iL0_;EfY2J#gZ.!ƲX4WTUS9둽Y_Bd8_1"11v`{Lу~̿g>}/ܦGmWyěCf m&d#-j,P7A1٫݃)d } Bm1鋧Q$œcgs10s'Qϊ-rnCB +qy޷̂>˷zƽ(?sFt6!&ᗜ@tW"Lّrfͤݦ?X7gBunΈgj 5zV JAdg4.qDX6d\l)8aJJeV8֐fU8#xe: ؀f:[ tZ Cˌ% RCƧ3g54&طCfPݣfؤe$_]+ 2bŸG@"GC4/P2ckJeERe,Úi ST>nZMy5j1]0;#C=LNffvX9@瓍3kk+S S(.&0LSN-1mq䍅g%b5wS'#GDGZxH-"?z-]OFt#bd92hǿ>0 “לQ2Z^5xUDqJfNLZYk7Qrw#zeޞwpm,^/8_+wW!KojtqT>:QE'yY#QԾɢm&T~UIZQ -ɋ?9_]$xJVRGi0 0Bb쾁f/Q73Z<9.ԝf˞oaImx<晞.V*^' }NNNNv_Lhckkk21t(KHE|\¬zHQf 1F},7lӜIdDϢ>BCKОM,s4L2`}~ :f {Xqa ˽ՙtB; @-;PT3` I8 ti&h4bMA%W& h aT@7uIOs~fkL2s@`p"/ 59g:"H3X֋{LM?U7l2H`fWC0.afNlzg1@<%:Ea Τ07C *޹qgX?s}-3fpqMH l*sqE:Âf]%OM4iv g6@eʂX@(GG4tUyeWm0"*pVr%"ycvZ{aZ2'9HOAH ǩTR \@lە]xb1إ20]8zK~qGΦ˵2љtF mT0mH]EbDҍҨ,O+FFY^Z WkII5%~,c(]2JI$%GP_uXtKC |$Y[1+c,ϻpfG3wi4sQ\4twG룋rn+O?|{{k3Y^%9!.Lfwjeh ʜCW,׾ρ<Wr.>lf{O4@l++S|k` 2Lxٌ( 8LAS4SALo/2efw,& c^ff;kk&ٛ$nT'(Ã>DeЖSAV7޹1' 2CK *X6dbax&KH`:H]33z" D :wg7EwnF Du+hҙϹ}LOu(pʭ-W胓U"3DefgWN}v f0OCnXs6Ά23x,;/|;hx/3Rϱ9fʠaA꬇PYMtg0d^M[a0%333^m>ޟ }(H$nZl6PLjӚy! - ZzBʐ͛R/|`=ntDq}y9 m1Z4ݬiwL7q:Pv̨f ~jo%El xe\j BW~G|< ~\i|G-ctpsGȡ.J]_q|Wvd_yl|.<qQHHC3qAg?rl/@e<)p8c*s4?r0d`ngD YBC  ҴȄ5n>kE}9ƴ9kP$#8hR8B@q1uR%Dž*N$ywO⛃3cpz03 ;O`k g\trHO/.i\8Np ݵ?lkbβM#0\)8xx(8 pB \?V;Q̃_#ctt>.'oK]5 Bj+sdC'hzY Qd ڹS9fo:C/f4&fs}M8Ҥel|3Fn"3xhn\. 3sŊ#y"6=~ИudKkzqn⠘a3ALB:31F_̮\]YpKa]f CC8#1Lϼ b wIua^6Krߤ~2C?ZѳtU)͆/g$MT"3*my03zyz+|vPˢCmh|nIZ5nrjZx)RGX /M? @eEr\Lb,#R<NpM,Ø2/sFs,6Kde{9$DL npγqkghpDbtƑ4qfdz3:Z,@sZEImwwUwoq|Z{Olm*lGّƕx/8jW[\J_ie#wqERŜrMiS'ƉQ㛷 {p7sNw s^2*':ٴk;}j ,pKeFc^@̩(gQ{ݽΐ*I-=tݭt{ Lp8D]S<>DzDnf25mO8s12Ul˚٩‹}@VG{B`4ZoFW^ʙYҌLex&7tT̻}4 ;Lg$^ufcljsf)\W1'BA}ys5XW32[w!Jqc54,vR\:cL tO.~dރfS q G&;Pd3p{8V*.z)r lfN+Alfɭd+ .[f'M"4\ʻ9f2.sy{`YPȅ8fCA&Ȱ3]R1n>DDm2ngr˕5 Ƥ@KSURrxB/d`aLFm5Kԙr.IIW]` }6KVJgg`v{v6Ӄjc)=:*>EE̋!(iPt*?>hbӎK/Of*-noZąU_t3hh0#hYߧ*lv{Ϣ$Pi҂\96BXX;0ȝDwi^GfwsgSb--s3y,dfje'A}jvbzY^)8PF.kq@}Xl1&I2Dvs^($Ed=V o{5=Ǜ˰yf)h҂LK]P+e3sxC`cb*sf wh, pp=a3"5-=8t3^4OQ3jZDO%Ce - t 6pfe)se{EL ꄭ@Hʺpcf<&e A6gܸ*' f,B8mƓ&O`R49ҕai, nNrd)yHs2 E'40qM]&U؃f3) @kf@ÅԠs2Kzqu@sH;$wh @SAqsl:lFXvMi?wg?N _uIб2ˍEyS 5e?Ԧߺ_TQ/FZQi7]hUڂ3vah[3%ق?tt yW4E}^4>xHNQ+Ӝ y(E4we 333SEfFx'8e?8;43<穀yLVg+ګe3@ż{`}vaa>ewYAD 'LMYsqE-qfNX|qpG0B>ý+0ᵇ bQ4Lc c(ȋQhtS`;34gyCe=lm gn:[7`oB0kLgVeT Z+3l0WlBlntMrh)Ա15P8+S.k5sgY;nZ)9%w<53R9g¤^ #0lEɋ#C#=續KY Ff.r0$^RLf =3'(^7&1A=Vxtǭ|h5xi즖cK ÜlњHVlf/SFb.|xF-ۓdJO46r:a+slz [c4ݟ IDATT`9`qM R<% s2NSQEetE{C0gcG㔖\YT )M{8Hc_v'~ ^x00UF-UQUVD0ACEC-vď 7mE-:Lȯ .C Ң>^mh^ѡyc3b3i80̌oc S5F=| O!7*"v_v)(>sed^Zf^V6+++(kO+L g8C )<f3,ޔ f8{|;>&6s =j+ѵ3GG=v,{)ɰf!,Du8B*%ZhbILN strtMo 3rkkO:P3wo 8izDRMi6zBJXNWw-gf>ˀKe, c ,<pDwkE].Ejr2I'M'm;d>v9JmiGz49[n )c^E;hUvoR:mӉwd4zw92jb^jԈԷ#iv۪J&wd97ȯ[5GjeۆNIeZRr> IowrYTԚ*3MvՓWŨ6r2vTٮL(lU(]ӛezjJ#F+// ~E('gXrƄM2shQ'fG*|td͊v^^VV[5@Zl`^B̼L. i٥6ђ2̉GҚkE< zU3eKډf94 dÃ3Vuқ4xmJiB#cИd afho͡jD,a43 6[tr3sE?ffly(bS`hs0$@gكw e5k0IcS09 OSn ^Ţ@D ."cS&~h=SXUI茨J ̼3de\^,eiqE- [6;lU4Q "HE61K2-cT"gT֚anl} .Ė5V vZF+3،A>KތfF٪Y `iyH7J"Nh+sdI)h$p50hXTw{4gmfM}oZw^~UvF#4|nnsM}0!2+Y 雳E1$`$HqLl/:>? 6)7XЃDrDS1=ψ+L2 !pnA3nn ^11xX>&W`c=A6l5"8cZ߇e3kkyOh_N&xUK5#'fpmXFo*D$ 9Jx0F +8_c6:jT)RSJAje&R xJTM#ߤct.jSێGAH-P@"q?" n;Dxm%RW'*MzI˄mhW}[y6 P"9̅JP\ ŴJ#[Q0-hoEz2iʑ/.ۀ6B;- 0EH'zg)#2pZ4nk&@#x,3Q5 π+Js }̓'6;yfS?S;wk}1+x|a~r` ^ߟVkb,2sm D?Z u%y׼Y  BY72F bf^&#KY^CyMh65^5:e=J)XJd-6Ç}3E CT lf8c`LS$7[CF8aD }u  beBְ20)*4"E,+IW[(ULQC`6R6;i1Pe087N+eE/89ji᷺Ukn“Vwޖ9C̈a ϰ#ae#C@sA3A<."''of.iBooώjb `GEPtg煢]*iIO(Pshն6tλR;sfS'Dٌ( ٝӄߞy,qϖ^זKliWݶHtx6mUw5Fee8 izY>@#>v& Lj3ՈjpG5%ݱq]!rm 70v+(뤑ln4"6 9]1d{pdUa2G7WƏ'x;Etf/K[TL4l류O:6{AAZ+aAIXZ~cJpsFl =9Ńcc~9@>JEgx%{2 f #@jR.c@ w}ўfj̡;c!4^_bճj_ژy2\sUnyb2QWVNNh>=7ڕӪ0a=/9d@9/x  36 h_ KkW9O=@WL-er Q{L6|XdH5$&FDu gᕅ+ gh1-Zo`u5ߟB!t hߛn8*Eƌ,1@% PM 1qve3 <=Yf!К#"3ܜlmmY[[_?<<=Yz #ht),k~ggXG*h8;Ihp^L^Ә76psK fP)Yli%u{f)0d/#s3 ]6cAef:˓6\˳13:yK`s6\B| m3Un9.bLu30lޯ/_|O7Gv4hD~^"$fbG Z`A`1f qڿqv"iQ#HAZe;Y""$4OSԎ^_h,=[kQ8]Lv1`ht}9ʇc^ :L &\qsg;}l~|_}FO 苪b@|rKe`vӕF}~bl|zx̍<;<ڙ(j2*yn Z\NKK_!}-ҕ`+^LIpA/72&{f*׹A2T8%cKbjj=s& њ3Cp 3Vggwa<"Ą"eY-s[zBGLIi'>= ǔEX3@ ,ۚ .L;3&e͙!-*XhBhSYR9VV,t#8&?0BkIdsXi^N73j&UM jkM+cLnJ\iL{69;jAh@j[5Ӷ3&'B*L`DwZ. 8` H 94g8fi4Έ ; GҪS{s-V?IɌ8)!H3yM"bzݟ^ICV -Ntg :Z^突)0A('~E2<J,flj*/9{aẤ)c5?Q0mZiD(~G/:4H+1GHg>op'Ll&JUky*2-Pb6S̖62aw_PK3;mzQɝ]+̈́[~|Qg< 3,s<>A|?V3* gg/63}u{7_{jX^/īk4+ 8vɬSy)1f)w *j친\h`DsY-f  ^?34uVH@&ų3HLL6g> ~oMh) 2$21Ŷ  5ζnCsױ~{sw#Cy{~vY@uf!3DуNȥٟA~^]y0=&OH Pfʹh&n ׌U $vؔseZ4Y0 3U#ܺJH~yI ?||>^aи.>D8.(}Fq܌Li⯛ͳ32bHs0̅6s=AZN gBhMb)5LͰŦ([ncLf%r"Sl R#4S،^=D tU%n\j1K٪{E>@X@rHe,.X_z/1b9U7rn @Qh; Z+;=zZٌS&vR{Ujy'*n ,GZ=|Rr^o&\#xR#z*5gerSpьnr^O@МH|^T8b]Hp< 1VSFѰg0I}aņf`2cc3: nnfnР!SF5߮%!*sYIsCS?~P;bXEre{eK.gM@3gOטîuv5suE/bA[ОUìf<8zF[ߟmu,EY̫Pu5g𬙛r]O*Cf;xo HO XIv2O19/ n3h% N]゙֒ѩ,>ӲG41]+cj<Yn^Xf5ifV,/lv9 =T?c WNFD| oHFJGT6=:Ɯx%DMeokN@T|f\:Ki^ddLS,fY*+4da &$gDj)$'0?dw&=ٜDf5! a9&BO/`.CI$YGIڃJ#Jh8d:]?/"dsPDsm.Q9 e3*+uo}YmЬqܙAڋhޯc.G=<ԟE/Y%pg>kY&A6f?{g*%3E{P:5;I_=զ47 :sԏsp986ߌXa͌LܙE޸zf%I4#wpg_z'-?,?r #!1`2K@R]xV}AR%ֲ>XٕF.)K5Ĝνz)-(\*fKdtd.C.hdxG 1.k+-C݅;8&y&s`Y5 9Lsȣ #pcz5f Ru2L3ln ïћ9ckW#`ڢ;D(`6WXpf=;C1mII? a ղ,C袁d(6z,pE"Ffާ )5E.%vUMp4,3Q8[Uj#\257Y6pYj㐠ɉZ5Aeד+fc hү$.td#82pG{/m쟚̵e:>_/e^,Tc6Im<'t[uM; 06Í7>WKwoQf.侦,--ul L/0$89^Vbo Aլ!#opu*PVÉʈEu'f8-!jg\*^q qd3"3wH%B3 ,:7Bu6頱bj 1$Yz .-c KQ 3 G5[3)sWfWS-B;T "oΌ.OH#+TN™Йu _11sBZg:'Mp~+L^&+sO1-. i|WҚqĤ9t@CqPl(8d %3^9HZ=/,)2 3mhJPnb&9$}$FЖі^..!2|Txx9q`+vLC^FO[ [\6Vl]f 35I4r^cݤTR&YS cF3W8CoEn̟onn@g>?J:]'P1o y~EzcQ&[х͈Ԍ]7l5Las3@vf;XDffp3Ca8sKh fgR̖P+L- 'N/Z ™A`$2'g}&2ӳ Y81~ @lld;2짴 @Ffhw"L]6CL'w @g9Fʈ97je[fF}}v5 6l !:C|E308FC88JQ4B?;[2'@gqF- ~>ˉ `p)kr1/+4[]+QE2U=vګDh/i|]b΋{&MeOpf03giC3ff1)14rYYL(ˠf\=>QU2kkZxx1q3[tY4E:z۫)OtcΗ K85K{R$1wfDʙ3}s`]žO -,hYWpg&W =3[X@3H9[*B7(fPB H<璁h ]f`-ghR&IkMzyC̀Xgg>;Ƿޯ"'N̢t.⦔:&oPgz~!ޘ|f.Gfӄ-l`W} ɺ!4vR 'ZFid8 H>lw& 3p6  X3}WS@D^pڀ^oF|\׊ "9LR?NJsLi2Yٯ׹Ceb33p 7ׁn*C[OEQ{b}f#oq؋Owi Z xEjgdN:*$G#h⦟Iޙp^$Api1ѡ -6ۢt{4gy)ݗ5h((ΌlCȸ$REIudH̢AJ2=tG]hy1JI`fL g1b!efϿN)cq[&w!}HT륗R,iΰA"I(tVi!b=;kL24{V( )2a_elEW~i 0YPG!gD M }?y' ѐ^C[fj)Ŵe p΂ ͔͛4l,4lAk0 yx^ݯ޾=7 o Z-G7"3`bDZd;!N`P"$˙,7]f'32t ٠? 2b삘L^|%3f8 A (uv)pmvs! 61ߏ,K*56 QvfNwiDVcK?d'dO1?c#uh`lh}cĄ ™5?0߅;<>V3 K3nE'ȼO?&3'*SW@0_;Xve.)J̭9bp^@e"0݀5؉ %! u hgFi%f f$gQri>v3> F[J1rl:+a–+kj?g7w>{X5f oopcq =|?-sCI PphdpWfUf]\[W}ٺuZ&˕; SCt\VXqչ˪歭?g6$ dssd8'I'Q9@π3zf5h6# Q|4#f8l6Z-g 3Ҥ8 ȃr٠I4sQ삍f4! # 7-S#M.]#v]2̰ ݙ8CtM&upn‹K׌33 3Lh$odK?^ K*"*|k,=ŻC<y Ș}e?<밑p/^݃qpf'SmB{OGC]rk۽m??LC W?  7fXF20q{V Uƌr ! >Kqb*>Afw,G2w.a)]^EpNBlI%!˥{|oK/cFc*H46Yb݀A&YKZLt9,">=gu|:)w: Lf:FIk;0ʴs?̫ n hg~ _} =Q4C,tss癛!rҘX]zH l.vhYtq"*&X2gI tJ 4ef0@$l-]:ACP$fnfMDnhwz+E-hCət'4YM$k3&ְӃB3ܝL6bf+WG Q63&סlJd-1섘 8y'i#&Wc843!"s5X)C4k6= 38p[jT+e|O>BCW:nV*q}&+R\&;QDF?koV/@1A.oF1R[EI)aɊ-[V$CR-Dhۀ#Vrũ8r.w1ar2BsMAOiƞS͖].\m}6RգYml~=y}S9 V .mpjXȉ )4-ƭf*x4s:&,.o2ٶ "V ELؕiYnƄf*Otg^w`87;#2^#V Q43^F X7t: M!튑:{L;lD~4F^ d薜6Wa19qA-5r3F 1G=n-,9Fqbo1Z03۽7jL*dhu{}y߄tk bmĝ+{HG(FV)͈7R/rQ3e{q3BF_nń-kA7s?c|e4C̋\&ꈛ4=ȹ1%=4zjAs#~{o0/2[@*^tԡa3V$](bI:]34.ݒff3`-iI3N]rZ>'|hfA2 \5; O"2_&֢=BARj>#vP>f6C$h=-8L"29ivA|2ŤxdT:H6KU,hTgy}걭Ӭ*$GD\WņM~x۸R#LLjckH"b^Z w#ׄaPoBpY0D9U!V iFψ%TMbȸ:c)y0T1~/,.my[>o[˿~>_#M3çVt攤2<*3X <{-Ћ9Qjc,- UAXnmmue`#b5; 4e6G|e(rpf 3W|6JPs ޡڠGɡ߯fE`K3Oz _1z udZ@_C>\3lnNO>Mލ07Q~tќitS:@gވðqU,躈8ɌYehў4/c/(M3ԏ;e^eDZ ݊^CN\rB2&L2J9L=B/s[7stVIqS}d-d@P2NӟГ}Yoߩ}p85hMZh 6MEEnfufڨjfIL?8LXP9)S5eL,vI]|̆3B7U;1x? K>Sq0J~bfjbi-']%}X4ksw`_>^g #8FpJs3j>]}tm0`2*ͤ:)5=}P8Mx0cwD4gP,c3P=uāhgLgI rGv2N65"JZ f*7sPf2ldV- &<03`Y^Mڪjp{-S+!ԓWpD-.`&O@M1Qj> 3Sa (C P8ŸN`P&)T8 s g’.wT山{4IEٹGT8Ђ3ݻ+#?" o*{gWWw&snC[~?&f]*@JЃ>nXq6)LJ|^< ;Ċȳu$C+ Нt++\G0*7͌.p.pԵq`X8NP "l'9n #iaM F"H)uMC=|{\2-3g8o5eo =OL!ߓ>bTGyEЮ* FG D.73QL`ƐFZ4tt?gdߘb6C/ {frx|hN.:͵E}n d)ؤwn\63ھl~ݟC[&nʩL3Ɣ4Ǽ?G"&Ԉ)i#mX_,Dtq57FТ_dp:1}Q H->6Jig̹Ky4GK ͌lILpevfg cŹk<ǹqG.hwacVmHg`M00Ȥ#^ dgl"eV̜514`$ ^vPt.hH̓KwZ aՑ 4 K2s$HT<'NK&pthq!q&K]]"De\r:.3W.k6}ÌQ*.jH)Rp4.I%2l9TBѰHR]f`L&3_,&ef5 b5;yx|GG4""'DTC[A5 +JLmC0iv@l͍)Tn #,S:cgE)+ cJ\?o;qV♹z њɇ3v;pWҙ)ގL94 *۽m)C[eI[Oe3(I 9kNGY@ps#/77aJdžDL +|$ :orbDݭ2n qG.3̨ 0~ 5" 9B7CށF]lϷ1̞vQS,, /Q<ǽts $;u]@ƽ6s6rr =@3f*kO4]+:}FJ+e'o 37 g PCx*;L3,7~. ;J3gC?WMDhNXWdTfmWBe ϺtfXif3~Ř 1[k\B>t.<# ݭ{{}7va07}ʙ@f2 cbSO!=B6IJ?q"<~Dk \,A<`f3{1&ǴD]KF3[]-#H×4T'FٙuMwcA`!\Z58vN1gcg03L:jln˨vjrO՚ #0=flG؞Q}&ڠ/a9;CXWK qw&" Y:!t rxcf66ۮO>c- —<&{JάfE}ƃbU٦+ Vjpf@s`@*>g'3hTJ2|%WC Ѐ`otQiXL^N .'4W`gvV>~{p)f®ixRD$Df lB@Sl$e6$VڦySc+OPs3L  5>JOr,fTY_3;O#HjFBu^17>z"s"ܛ9){K 2ՉjXj5sLƟbeFgϮ`AIAP/lwN@&ih|AwV,/߽+4E{Sn3LsFt]ьEJx??4CB?7Z462#eF@33hQu5Fޙ=#7tShAk)?L[Hp-uDx}lj";W&<iGr ⽄pք#jԋ&B4f} b}Yi]o]Eptm %߭Z( 裋JZ\/˟Q#仢|~wiFӽSԉqQyݠ\nͳm Ѧɰڌs%fm6hHr7>}?<# sÿ kDeЗYsALXʶ86ϥmy02)ZfVn!NmehF1w;|_'c/ك`8 -󋜵#e[g 8AG "TfG[YZEJE"6YWhDЋ0 4a/Z%iΟl{3IWukk:1Vc[i_dyPmX!HBMtWH)F4nLkEb, 6)1rq%j ה45#* IZCy,F $yEd^pP3: }qj7pđiuÞ8hmO _f-"iM8m0c2(`3\G=Ǥz ˑtjlf5rm$ޙ9/Ha2#'q]rޱti3I( ʪ{0lmhYeU:Zf` bC9 ݍࣗ/#+w܁ڳg#&t~=liݝ7rn}ie }!; ;æmtVK&3-:AEDL.rTCΌeQ–|[9PN+;Z8/ҧΔvjJte g;(y@h /'mECa0B{a"E/9vM2fF@#r1co!l<@v8 QՄf@]ʋ =-, 'z4٘x&8|3' QV$7^sGD͸i cAe^wAͼU kH7t٥ujgnm g٩~i/9id Eiuf7]Et8 1q=JXs=d$!*C6I{S4pm>I^ ̒$vw笩I3 fN )#N i_k3>2E0]g O a֘қXt L}~"1 5WiQXK0lT`YS'_X9>})<122Dfd zasq|1:Vњ30)J$B1t0p$ev-q{M[M2^l=a(ma?IHzaxNyqjxwvcv3|ǡº3S-?# Gip:av͈㋁G'hW~ ]E\1CW4 CfUy@ccP̬HB=[!Q;!nK(L#dځ-A'\N68.O3u5Uڦ@7 'vi͎,L4{6;O6mDtV*U`;FDa>2˖D)73Җe\>\Rlq &hPΣ7l~l$%͖:Г_?&'o6FIc1p? JU(+h(-b{ٹVxO@\FLC |˒9ˉ03:x?$@lVA{\f747<rV5fFG/x3^=u RAM0BxCW! JBS*K_R119°S:ń&# -UZQ5ktTgna3q}}'yPMþidIIEFqe6*3Wcڗld-#pUôfc*kkJ tǟ"gG[GRuL`Ѵ93]LJmĔJ΄&jVGĈC!KK_eչks3b.(@,LfBx;ES}D9X] hFטͨ9 W  -cZs͠|~gdyݧZD?jdn,U8}si}{MͽֳHzmgmPTKI[ ("jP Ch]V23N(;4»hU~٬l5ެz<{kV I( \dTjb W M> ]Mӗd? o*-㣔Q"˘]Y=zB:b2`>l>xxV0TLN@iƕH{A0iVgd?#`Y2ZDv{"~8,Fa\ 4WWb'ХŤht uqܔ ו4̜W^| 4#v{DATұg;Čg1ٶf8EԧLYvgm6s31;#hlJf3wCluAt}^Uw]+wv _`՜Ŧ:`˹m|]X;m[(]qB$d 9#Ƙ f,6EF0sk/33Hs#Hw|%H|M_D ـ7_ȸ2P\2]ӄ(If4 __OB#ۗM5S$X%V@c$LO(wkSzǿ˿v7?"[PTfd`‰ti$qvf-&HM !GՈ4dxs 0XSXc!wPE,DfOc&+<=fn #'cPr>@X Yҫ?zҗp]=(Ȇ efm9pkfg+*˹y@zѝ`jn[gO^{z>%W>"fkgF/}-O+ 5C ]|Ah#dʄnϧ<ͭLjԊqng?yҞuXgJ5?`{in -Hdʹmd aTvQ.8tDkRͿ̿63bŀ t4l-62tfd823<3FFt_8AV]HʳѕafLz6׻o6., ~HPH:Kp*18'd3;D;/3[cL>ޖs ưG y2fK/;773j3[{]NĚϼ3uחqXO{;{y͗NuoZhobuοXL4jY2ZMw meWoK|S<5uz n}bOL[+p XW(16Rtv*/ q<'f5l|Jn233H+2h5C{TQ1~aaEnn[vNvZB.ejTW4bHѤ#j}ı*$݋ 2STVQvŸ jd`x62 gD$\xP4+n1:>l $QCKJ#MU]DIG7O6NmIo@P*_] έ[lPz׮=<VL$ p<(Mv1TxP:KFxNSHsd92~5\ӯ ma6R#>6:[ɹk\.L0@2씾ض׻v:Cffۙ6{-ɜR=jovaDb3,O(}$]>Kd43ۏP+)|8*zP 0ՋsQ5>Rb\}b 6ORbQcfgl\6%tciF"Eަ/R%he3LS|aLtJ*8f~ ;ài l ވjs㈵'.~_cfoM0,j۷z{fu\E K_澐tlHb5t&՞2ӈL5*z;XؓҶ>YRf?zOzn4uO$&კ d!sʚI><Ëz݋ 4o?yT9C/2dw)4˰LX[E*C#uNLxlф`L76, {GVWח Lc\oerEi8júE^3Wtorq>e?UY[W0|x 嫺3Yn \$F3f-H-|gXNm#& \:-iZ6ޙ*l,qqGt6zEl?kfEj2Ϟ][C27 2S]9%23bȼ{|GtIJKgu$g&fv DBÃ^h $ @%Ze` bkl`V Gs9y<\1k2b=hnAK]i{eáon x8!Rky&WZW5]qh2ޓIcZLtK5 Dƭ~-A.ŢOFdh7f҈=dt:q&Қ_t:ޒ C =/h>l:1zmbt9aO3+>:3Lаhe 3cwWץc4qRvA+~b@_&E?:>⾚y3t%pZevªO[* 2-Y=L{zFpm[809 @,&q2k*2'`<$>=N*'ǁIl SW)i!B`GEj!*#l#HFu jl0Q"U*5=g|[ɨKݗ|%\TAIȀQ 4 ht O>pMѠJ ~К$C m۷eg$%I7wy@SOMl3Bҙ2xfN!3BkV^k 1ګC3Xp#F8M\͖MC?C/Dz/Q7 cxy1 (Rni?fԫ寛9zx+;#/X#cE'y4es5;i6˅F>eri6̧N\ 21~ɽ'''*|>Į襡st%N63AZ3!E6iM#mp f7I\j-ɃEܷKܡ5RPy/]2\eHa'BYrsN*2u>I d&xzzX̤l*,{ữ~~Ջ/7;oB~d)2JάD+YZfe͸Q4Co& 99Y` ϰ, =?tg֖W_Zz@ *#r&>?qI;KN r̯ .b{tˢw#C~J-L8]Qa@'< E':iC="{!Wz9LzDE 3=0tFn+ڰ##L|!OhT 9ǭrh"L3H(mAF'`>Ѕ њS>eÔS$ͤ$4)6AsR6aP6!L,_`3YP骆;P:kjH wf&g%ێ'ނ6 $".X6w)ɬ2eTxD\ X8<ū_}W~_3q3̄hTp (<IfϲckwƖlȰ㒚 uWO9 3ݍM™/Y#f4ȳI+8{d˫f.>?"zX X cp gT';.is&۔VOylpDEW,5$& bnG[kI Zh՞snitaDsUX^gnᚚ]hVs09fVVnnܹܙ) s6+('wK7vLͪ!$XŖ~2xȒw4`㏟>`O~DezS&1ON \fp&MF$V3`23v6m!OLdٶ4X|Fe6xG؞k8e3LV И*S){2 *ugP/+d촀p}[&f@d'I1ݷ߽_g^ tg3\R"[s-ssrFՃ ($?E3@7_#F_q# 3J'0h~qW9i"d/cG_h~F<|FYtgT(1$h,gzmZ d-a8ӏv0#V>Yt_'7-S.h pf~9kfVG! pf%ZԼ~=D;x -lFqEXs$SH{P35@"Llm2-hXwj~gaLL 36әl;.5ۇ}&YBa'_]yȕ1j,T^fQjd;*͖mcNow mJg[c''0@lud0 9@S`SXfC7-uO@hY p6@"~ B_{qU [:Έ 1kT=hRU<(|3%5C#Y &_n(++I![hض&mHǚLR$d6{I*v1O}OӏB x Ohd .5 /`4 H*  Lf}.} LTGdFdmMS3j4mcfx:"@OSGtcБJ ͩ @wx|;][pxqsG7,sd##W2|ٱI^*-DMxE9b3(w7 ^eC nϬn&3|K/< 3МŽ!f7i~ↈ(s,3q ~j⁛)yW3f>EP4-olWЪB;|iǨLp\P4︩aJŻF8Ι܊,Bz3G]F 64:\8rnQX nspf ?c ^M-B(8ZnW4Op=-bN'-V1-s캹f3"đ?r7=T~12ތО3ր IDAT ټ0!"BBPEE ֪f$Etbׯ/__X_gIճw(Lˬvlo=3`2Fy&sg+k2Ց1zWH* z,\Vq1xWìwA%;#WOtp XM9iS ɤ}sc<;[G p>@l0CS=`/ϜW$eu&عW ,-w(U H5yFBlv㷵}1`FbnK^L_|&2t6/zGfJ*"Z@;32{ li:ZNde8;CS{{-+ !_Հf!b3Nbo!7M/r"t]=I ehAshF~#4.R1ZrNM2{3{CbNho?a}eq1x=9Î"ϯhl!>yh+S- 7F4C|/Ba@^0n ^+#ZH!&붭(x=oZ#;di|ufʰLA f\U/ƈ|k̘PaO_]:6~eddĻcC3 gHC3dfLEb3wo#>TaN% coꀌ „D?Je<0DFڅ,riiĘВT?™˴ –b+Lr`RLk.W, TP6z:P=:B̧u™[GsjAd alG| 4ld$`&q'{d 1v6[>I,spϵ?=tn$ PBZ.r&ǘy `9ョ˜6ɲ 2lR $$! )NC֌ ':\a6ӥ5kX e$ʞOF\ginkӄH-2esK{'&S *fS1Gw_} $ ނ ±ێ.;|3K̶HJ̌KB2ĺ[ՠoUepgfɲckcDx,}3s,/C:K@?]t'!Džz럏?ܥ7]vfE=@ Ꮏcax[;|LoZ"o2Č.|d[S]۾W!̎q)|dilٌj[4uOkZe57gXtjg2o7Xa3 ~&.dm<јYyv%+#A: gFLoUqO4nϴfᄋ\P` ?Qy9K*PcLf1tMEte8ApyqyJ.daߥe4qd, AsVq3o3~/LuzGuTf`1Y)Ҕ`cDS|3񌋏gT>WK5p ^6[o3 ( P١N$3[>`bfـH/23|ܕaQX#EӒLc*0aV&aHK6a 9I44 Ϲ͒g8AFZ[`2UdjgT bbl%R1Saa5ͦ`d61b:p'정 #|&fP$vf,[=G\[)îfjfN=9I8e…L`ū/^g^/! P[egs)#y A;l7 ye>JE#ξU-!cF߄/n.ۥw_e*埘&|l'lMq7!f'5<_Ο@I-yq- 4`-jV)!3U"%Ox\0B d<7b0Rs_b^o+]θJտŒ:@tهI9@U*1S_t%gK_?|3k|5}{=TP5S/u$VG^napR+JM5.0a5̻lmHCCB'>3b%5ΙLZC9rdCRY1dE3߂bafs:Z!h$pLf##C1+nԦk@@T}p8 E_Ȇtș…7/| X" ΨcT~4gE/p1S0(W2˜ [. mt LgX @kۨspw:o1M qA>l>*~~Ĥ gTϕJ3Y*?AQ-9\=pPS1x8R4FQjaBWUʒ)E6_Y1evRʨLY^F$Jh6YW`JLj.݌6B`ӄhU3U?Ch{1іʜ;>0?hh͍Zǡჲ [T\JMЙ2wތ];==AZfEqzjPy1?>ВӍ͎w]s|*uÐ͘i,Qa9c15h%32ss1 >\̫DetdٸHjYcFD.6ffe)mgπY^ X}qɘ7!vVDly<P#R]OBjٱ=Lc=f֖CPHIeL1ϊafHo݂Tܚe{{\6]BOdF730h#c, 0Z2D{-Hp3]eMl-xI{6× E2rEѐY0FL#d96QtZhKnbJqsKsy0|ꃉyaqwtC]%>GtR+Sf}ľ#¼9 e겯}QW&Slr bJyG[;V 7 }&a/xٷi7=dW7F*O]YDU>'D*g'+rRB#*/߂h lVMc{+)/ػ}3pP";̜8wn0̕xҧwC)`Gs0OwBwy|Q|8=;X؈ق(}yRB3oytȿNȱ.,W"9ep)͈cPS$ء!|1K0 ucИ cs 3k׀G_<ۿ $/Fc%|t BVq* (̾-(B\1RuVa5μ?YT]i6C)`H#1bRBPhVF"^VTCˁtWl4f7fj:լUn};o*/m%ep(>lopN\ ;Ѵtqx6f"OP r?|2ϟ}~.97g5BYɁŸy2Z0(3~8gbQ'Jc@ӈ"GZFf"s̵3dLj eןFb5˙_)l ;]#4y5Y љׯCM˖3t5c0U3ƌ. g#/a2Kt㬘Yk. pZ5/wf͛WCY3J/D3?6_6g^Swy29FGǸvvVа- LLp(|^#j XMq]A4 ,@gtE' iE}a{ 4@/hde ,nΘϜAu =.Yc!fm¹⡙t??P%YyV ;G6= ^4 eDV&v!LJ׸gZ iX.6Ӗy@c݋yJ%5;:W\.]/\5ΰ;2ע5[,l#Lf[28q)̞].vՠ5S O  c23#/!ji.}eЛ!ݺl g.Z̟6 [ف5"3kk5W. Z)kqg4BY*l#t6r7^xhYMMxe,(1HDk._pf:f!MVY׆*fMb3́So9%TD HV~xpBg4/De-C<_(EQ$b3hW c>Swl zɻ2Ȭ~{3~5~/xI ޾|?www '#$4b?I-?g)<^]9eAe*Ӆ񩘆Iٟ#wy<Z3F({ ̌ifyM4f%SQ%u_Mjh)iL w\ed 9CQ UT'bgՍhmz_LIglJ:V4(Q$9-m탻* w.\@Ōe N;6CL.',9G>!["3ÿ=; Z<" {3q[c2l24TAeXiΎp\_-Bc,k Ljb"؈ K&"3Dy! 7Y:2p{>~ mPԿYvtJ1((,% R86[j1[mdfO5C,â|4-L͖_<C_-"441o;f=̱l'tq58{ܬMD&! pƵY'wYQJJH 9B06-8Jɒ_Q$mn'צPw&Ue IeŤK'q rf״Hh#䨴Q>'RV IeQ4 bOM}ATA +/s eI_ӯ&iC2Z[ VbUp&elX'0& -!i AGv}HA=XNlT4a+~CMEI#8INESiWK[AU5ؠ,i4ٯ@\&pbCZf}yٗmXr@of_c71їdu vGe3%m{O` ==~GrCt^N]H^O˩ .GŌҚwO^gp3dXVff+c#|Y`iUGk^,!&?` b(IGWYp v@HWA8H"S eǦ1qZtPU\=RlD=1 g{B:* &/Q؁%EKf/o\_9jNQRU[":s'wFEDL% P"|fd$Q%+LJIM}Y u wUчjD$~DQ*(W>>Y U]&$BYCI2f`v NL~_ yU̜;ľ>g (kko[~p*3n/*cm̹f4?D>IP?#)^jAXI{Y7v3ENH52YҜ'^CҺE! [K2?7 š+:fhlm4|IOy }qs&Ydg621"&``g ƱF&8*C,̰b^Jzu0?wh&o.SY:iGBi┭.A~q8'tNM9|uyl\1X 2ffQZ̈(% -Mc\#T 1`?/{'عG:Ak&H[[ g"3ͤys­VęKbV󎋕 4DpS'!V&+I~M#pp@e#rR(͐'yRуN 3lo'\F_D)7@2V-B3~~)3+;}zbl)WbtpI`F|Rx*=b8U':CZԡٝ;G3Gϝ87 ׯ;?s6X9͙6OrWQ6N|||sw@jtNwϹE{C+ԫ؝wL/|Eg˰;l1YjeW ACL'2ݙ|ь(` ѠYB . 0`Iݗr]oɓ4D-;ԘElv)He _@p_wLyҫ˃,7\NX32ig&Y#][ԁ]s{Z^PX}v:P3`>3ͱti >\as@ۆE'A״3ƨ‚ p*mOTDUpT× ffGO@*ڱavlOF3E"&{Bfw& gpp:zcFʹk[&qkf{3+O&d](3rxʰWT'Bh>̌0}L0 1tj3 Lp`1f3-/&-M}OhIeW{ ]M=H&86?g#8YК%5E7=MjfV8CzCb6O#r˛42 3o_lo[j}+5VT[1W9QɪpwQ&BpOe0"5^F wͅBm fv{u-#hѰL֛Be13]tX/{ΫW;򺏹{ʞ]ae&%gz4#gMi<%7u,l9blAPR>ت D((|T E3=OluA$Df|JNw4t;(8rSM~E"P*j`/.p>S晊_AFJKdzbzO6*ieJW&y/!6#~n*\)k*mYeBx&߯i>`36Ie4e[g6W3e,*FTM=\\%R3)țb.d'C윸~U7L\fxmŎ9%qd[Le+3}oQB >fi2pɉ zv;v4ؽ _w jz11]W]1h_E4F1ESle墙00v8 syqMp f(@l`:ژK h0D%햖vW6kTeg2#crNt ^m423\Wٛ7 o BKd]>B>F3[?oѶ}-oZr c݆Y0fxGg^#qEXT?0m:|f3@N.i1eZa=Ș gPJjtm`-]g*ӹrfg2 HU<"JceS@K 49 sfC7Ib\4@+e*=J{Fw{; {W7#Nx~f;{ S7 b3·x1#{`dTE|&ߚ3ma3ѠQE)Jno*>Z˕ʹߖ}%Wf."JH! ,Ol!RKiFm~vL kQJB &]&'5!v.#0#B)NQnĮ ;@K)jSm)*ٖTZI؁8ʇUɚIJkV:WDr/G՝ jh˔TiffmHѐC`RM\ʯ$z &_ G#;fvs2l:#5Nt/?sLNtEYkeRᤝw|PxCnO.˚߽H&2<-.U~nst+g̬0E: ~H.#0)3L086 50Y3A—F.!yÙ'u(AT״MHhָ±k\2%62#p f2(A`,,,Y9Qj0UСC_-~}yB8"Ӻ2ܙiBZ1cmF 46xx6c53@-cz$ b #0"*sfX_G8 P-1E*@6E Ö^ ;|"1pF Tgv0 9E&3iGUGmzuugpy53̜z{FZ/VՑ4{OLdǡ.ARbkMafYz[ ifXSLhXdI&k<hܟI]J͸i74\3nHÊ3ZڢCԗJL)3e0 )5ت!P;+&[@O%-e}]ǐYɴ⎺Wf}.7QeUJ+ΠW2}N!+n}*Z*} ŔGmQGCJΕ?J3!Og1%=+ITSdd H)x貥_WnE2,hqPn*j aQߊ!-rb*isE*]yIhtZ_Qk1.Co!9"XOV,Cr2g{/MF @bDZ J6c*5j)YG2TwmtZ}9&TcfU632lQaz;O vipF`اۄ <.J NHu#rvwy떥W$ecdơf=De`KLֻ~?I8ne㙼w}k4g^̑0 W̊B1*u1Fxc9MnO%?XX`FSjE'^#2D(SGRb]gx6 l41Y llf kgC=4p5ĝl͛C1^cf]|>|fnkiik2MCGo H&D͍` p3L-EL(p6Mw֡Al`PR( ; ^- F]{4qքQP&0>[̟A33y6f^-݅ e]f ~6oѻ?CrCfF{Gά.kIjf[H 2#{s20˨s|D-Դ#1==Mpݻlk8fSlFDtfu3Bdugu:Q(53ڌbڹHhʋG⒊v}ITU+rK 퓧}W&D v)(ǵ̘_#)TrZ˱Mz@BH(M ' "S'qUI/DK 怪)qJ1][M(@$j"o |˅I $' @BDܒ$]bKFL&8ef,OJ՚B|VeS /D@*>c4/*l8Tffl%|lY a޷Q:( "bX5Ryyp.h.ܙ9z(T3uO IDAT)#*h|gz2<@HǴS9bqŲeQɀ e /vswhТEf Ғ)fLeL1u34k|C@S^=™mLԯ;=Y931#OiF4kơ!l&z3ks&^~_̖uuΟ'BG'<.ڇakmS;+̵kDbХinjjдXY&F&}9a$9͒0gSf4\#. Vқ,k(׉U_[O5i~sh4ws7,gP=#Ns *bWw7t]G69,]\D.0X&tWN=;).-`f/ʑ)Lc.c-O J|vF]&ӝ˅;Foev43 NIͤLXj:VI:3#Eh>2 k}Yoe^3ʗg=G*.\xAJ5/[+70;2Tkͪ,cE*3ˇ}@-ŞEy9egWD@4%JhMk+&]cip{0FxH;o,j&B9 S50? Cδ#lp64AM M+[H?`ͦ؁B2;KUJ>k^m򀇛<&qh>XmslQI,I&k|%rQ_2y?_z/q}%QSl6ZUDDDfDioI#@EՈIyWܩZ$PMd_bdt&iJ܃QVBUJ Zh0#fRG&%xV^ֈvT .g333G[ρʹX霟ס#6è3\nK{=[Ksލ ?L8e1 v <'S0oO,*:ft$yN wK{3-l\9Vʙ 130g c&,58A 2 )h%Ne3, Ke g`*}]&>mپO6jF%PfVgâY6qR 4l70k+ܰ7H5u`#)ww)flf"֙8z)"4]fd0aap @M 25{ΑV;-we02VBX"fx_ʚJ__0<}Эz{օ WğeSc`T5l?)m44 hj+jdۂOrMu8:3S7+**vnR̯ f%-|9Z3C h6r?9REIUNQ<`?ssme?+ $t4<2 e3=Gu9a,˞Ze(fSэ<!:󢁠ڡKy Pf5l`BaTehY咾%ZrgPAcTqkƛ么LƘɏ2 5OМ!VqY+Y#.cE[δ[[-O#D Kgk1hƠb3Dgq,lgפlM\s&=?b*qŋM\f?nmqk @C0ӲL$871Yj4"˴0Ԍ./LΔhTAbCmŁ&?:;t@aZ\Y?5; 7MM1l D/3j/vq%Gn? 7Q0eYm7w)jr9ptA͌舧 22'Jskdl;̘ sbHZ3cME͆ȃOРh&XrK)"\6*83;j3xfF+ '# z ^&5ܘT?@]-dDڐey>/QLQ7Cǩ<m/g>0=YM "3PKh\Q*6SVk"j)E}p#TSMVA@Z2-YSX̚mB+cl043g!(iZ檚b@9"yDQ[|qurꜺwV9 T2l݄% 22P4YN J]]ve9jJ&3*bfXddW& V1oc"ݶP3dƈr`RO.|9Ō& I!"c@krNHTG@tI4V34cbY,1)Jg`5EH5=3 f<[]$f?c{S[u2('OlIol:B:߬Ә  -RQK)vda @fDh޼Y7@iGmOb1@ezpu ĉʬfٰW@/6HЍdBBLnj^c٥uN1a 5M7bQsͼ%nW2>b4H&iA?LHSAf/DͺWG^Kx;݋l|_,%m8 fx,& 5X{fsmrPZK?Q6g,榤I9`m\.I/;29T`Ry S԰/:glbGC7l+q^Gj庪~{Y-Uİ$/[ luGd(aBYH.PG B2/EQ}-}ĬBY4D:s&F2,SNT+B\1GYjD޻H~IMd.˴Ό&&C|><;fnGv=u2'٠QK! ]A(> 2hZ߼yYp/NL茶}}d.oijvko?ۭ;ti[(Y !3[3p1Y(Bb |'gwC(M'[QpqT2:ytvB&0` SX`3? l2]h@db3߿8:#34>C240NHe{73u[]{3v`E,AG,a Dӟ4h ,fpD!@gZ`_f/gq~Q;Ukn㍟oEB-A3T>\3RKrLwʊɀ"dܬ)jEz'z>fhep?͇|De5{fe>_{r6v][Y k@b#W oxq'tͼcKL53+`48,e3P܉I{3U ZjϥVlYp|d=z( Q=? ̇ydI>|9Sq?j謽OEw)>z%T&+?0Ƚw rM$*]oɊM4K3_ƚ6ҔllFX1 G~/|Qqp~ 1]0ݙtt} 6-jf*irsѲk}07dP~@< 1@nv[bcr7=aON0Cʠhb3)Mr.?|iA|~32<0L%yeJ X׌Y>cB$xf~c;c6c׷$AI{[unnoI4kjfoln3A3ƥYZ f4ubTf~ao&`<7΃Yo.bۺtLMo]dӍ-&.jf1:c3Kdg$e~ z4YЙ"b(ꉽtWGN:yq4@` nչ)=a{@+f~\2K'=e\&e LOLs.f7bFH *ƾh=Eeq3ܐ dpLg2P]̀4ߣ? ~ ~:١~a=f k vQ4e, K"fl1|&B B-' :YN,",nWф騢^H)!;C++.~\2`(KV\ɔp@UK}s;7!sLC%ZOY g A[B&0 -cJ?UA*ӹPɤ)w.>J)+bz3ŭO@dSrm~A9?_JdD徯٭ɩ뇞\ C[{?\>Ӛ5e!v*rތ?LI1 0%5,+@Zf?T]~Q2'JmTb';͆bh#&D !GVLhaGƸ=}]5dhd (gP*cB".qu&#&h2b >\&Cd45O>9o͈l m |KR 4݃Ĺڊl ".3ԈpN rI!, Az8*3ig?A"jf[7nl:kگ@o%MhlT 3Cu1+7`.L WH z(aoܶǻ(-13ppwDR=l3 ^n #Bd3s Y$YFTOG0AS5737r#q3ʳ 34kJ23z5L-wGXq+Z»0g`7hc.ĕ<2j\[5r?ƋAg_gOfS&TWRnMqE ve*#6Jʠ$ ڒbqߒQ)A=e qZt7ZQ QUANO 57k'n? jnRHPIGj)j{H;Y 4PQ.Z!z&57@i 5vSP$UJ$1 (V5p)M e-$>1E sEVh͔Έ#ٛa?RIFLșʙY,.*tCq) ӝK;vbn\L;peeg<_αsYP+`80F}~tp2[L\leLaMAjH0fk7sQތpE}>LLefŬY`A,p4ov30:6:}xfmn.ΕPӂOp2 _!\z+ 2}z%|v:I$ԝ$L© z>HDN1`4qi Ce`" l&xcD q.j#S[% tcx!;8"T񈶕$F3'#+=&\\9H'Q!SN=*_Q5X|5yTEaaIMPS_=wTLa_IUFSTQ1\Ƨ_15f%kJؤٌ0vXvE/vaOƕ>Zύv4wj9K,sf'fʻs;;BqّHd,% sZx|NEͬY: g<<ܽ+J`bO i*pg2H k `W 3 -Ȍ gh`t Pléל n|?`cgY!kź-™{lasm:ve 3 F3\/#\}A=h &2Ȅ,HŽgu}?o@V0ɋ~zo?d6?k`C#X(h\fg^63xPqM74a #ʈ|y8q# c*5Ap ѱN-9 \1p.>iĦ3wb˵(Uf3 %-_W(0kJ3ERQ4'jXY2%KLU_˻bUf3I&RS+sDt*`Z g`2kkv޿Ffzo9EGb5u@Rljˉλ-0bSb]bIܧUDTE\q!JDԦi9n*/~J3mhJ< sc%P B#z(."]4Y4R1RTjhe{2kXýB_m3Kơ36|]jl" @Tδ-JѬ<$Yhdʫ{0yÝ w?:G\VR(L4>j4 6nY.cl%pwx}q`r1>4e'kff2G2<5QHj)]׊ כ7Ԧzyջf  Z fL7 ʠ`304llɩOh;u">szvwV:N3/۷[ڷmkx^ӓ'-zk،uh(-%0[Km١~(YQ6֯Y`?Heaŋ70yڧ'anڧDfn@dž5n3]CkK=\unX$Mc垽v3 3?qԦWvuQBͅu&OtK13y9o'M510Ə^0h'L~2pn&ǯԮopsoff)7Aizz gGd5̎um00)dmBӣLK]3iўgUIθ.lvJ+nw˸@k1 E^!g6J0CJ5NV! dfVpi3$vmQ^SC6u洚$m&R^&Ͻ>U8HY1kd33vBD1C2$+3+"^ sKZR 8QI-Mlsq"5x_+hY~R2XRMU42D@&9,;&%geGܳHJ%6CGהG#eYձr9<4YQW"nfBf& ,U>ccZ_dqTS&fS502Y۬uT;GM-cS%=~8;^D a`3,2ć9XLlE˓i"SDe|DhcA @3vզwKD c׋u™|`^]]uėL&+$/-fۍti}H1Hp3Y,,81CsjԩO|ɩgO8ݱ U(F|u;f5FvcY1iZ eܖF@~#r.^WgE =ƙ f%ڵOۯaTp[?ojatN%֙eY2 ̢Se3Lȍ]/6#>;;'^?t-/7,b^Q>"nd%TIq 4`JSfeY9Sυx1z"&&fSÄt)C _,ۖWBJҤ.Rbޤ(5@)DQCLIL_+jҒHTCS e1oBUL%_4t#5fۙ&ϾUT7JȲҟLp_;d(PK5%8ZJݧb?L%W[|s_c]]yC4pؓ?1hSS| B>UZ4+1VBl뢩DufόDʀT@Jej+.DLX+Zl 37ilh*r UQ'1U)*-7yD\fAKw!\C r1)B92hd4\=Ќ2@c 3o:lW:f:!M3An 0jN w=Nj_7C]e_͛WWYjft!ne+̇<),>, sd̬̑f4ߟg3~ B׵u Ԏ[NĆUB "!!!њwM2I#`ƣ--B 3u+u%'ciiMn&7%}$v_z7{@K( [:Yȵ2on&Y̼(39t,En  n7|;_NDd Yͼ{>sh׌'Hsf]Bf[Yjvl/bgF9R@gJ,rWCj#Ҟf_g90`ΦA3LG}elIhQD8UBiBaQ/90=-r^O TeW#! V{xW)4T ɤK\f62 hC|n{,f)Ϙ/5c(0Pq ґA1ReޣD*}F,K*Rul˧JسRمi;Fs=7cS{7jt~.pgXF WpOXy̳9XĚƅhswFqH4.4~qM{ bеA,ӛ˿KfDb+`Fso.v9m8М멄5vg򙪅U1*s`R2{b*3ͯ+=3L3.Cphs3("S)ie%30&1f|[x=Ԇ&"3Bex ucx zMEeTi FeRgNAe03D2eܧdv":U3!g?641cP$-@Fyμk˕h~LKT&™ #shK;m4fXL8# i%]Q9o6ӛՉՉYB^=?y9򲫥YK386lv=0[3O"8` `NX3_Klkf(@kk 3MU=Z7:]c̻w/ڡ4sgP3 AFZeݙ^ۙyڒ0i&Eٖ{`Q86a]Й)6Y  yOK~Y(O:r[>Lѽ|ѐ %$FӜZ/eJbV] ξO>Oj<LmvvE+fwʊ`1͎? Ti]-:S(1 .yrhͽg45x wt,s&47Ck0`>$~̈́3,k#4fz3,-i3Xrk7;su4/|ĪͨXUM.|przl{zrH&E$X>c ]UU*.lV6 BԨ$@w񯤍kRPvc& #Z`ZEfMTWGU) {͸]LY?, P) =s50& TÌ. Z );7RHˀ=1l/-|Q`.l#:i4ϴ Wźt/iY'2?<3_3-' 3bJ-WE4l4мdrh N[P%,#5XBAZiOד6ʹ3Lvy A@*f53̾|sjϳ?la6Ct .=oYC"zn_錘tcDC)8ĜaYCƝrlMl*dc]+aGP 6Bg?Jiz34+soƥBD "4M #dT4%AUDz?Ⱥ.ETL^Mʟ7ޖZl}c̓[m*.zלN]:qO!<_gS)N17?e|LfМ2)Q3 NEo_T3ZeWs29tɜJ p'a Ji'i/2Ҡ4IܖfVs :%! :C80!fk3ڠtzb3 B|`JQ#cƁP|9l!\S~F?U:^Ep00Խu䳾26 (SњiqlG͔*|9O AD^*Se4'bhx83gd@sͧ nT`9͍. BM֠pJV5Ь ߸!0õee.vj9!ur&rJr|~hǯH˜YW%#aqϺGu#qWe\`J^| Sl`VҶ7-~CRUhL<ꜗT8ȔQ43~c%' 5eEl`~%GuLZ'}ߺyTZ=dy@//gSC0euch4mwTY mȸOp!{IifE @kv*}0PH9/C$x˜?'Q+a->Oh:<%0jr͑w*9DsY! L,&-Di0L;tH_A#\IDM IDAT&M_ JgW'aiy󑮧Dg1ݣD26=Ygb*gp YAYYह %td 3e4>﯈5}]7wu3fG﷊Μroә5g3,6LБa@2,™Eo&Py!kf>s {KDeDČ lf¹0q\d,3옜DpYޑ@RT,".e`fXq%^PK0@" ξ?>yo;ebbW&]j޿ցcSTfspA/Tqay%]J&"dl-ގ|)1T!B P6c>3Ŗn _TgL&e,*r ,115BgWSB*تWϱJq=~Xب+̺FX6?PT!g}ri=֔U_祝b1W̺ń*|%*ee 8}@e.2Ff )0xs1wg \1U3E4xŪy(e%g#x3/Ja;3=ddz٣2K @o]V~~jL:?8pASf3k_({1)N2!㒍>9a_WƏƷsh C$qq= 5t^0$';:t!I5ܬ$Ip&q_%dW /buwkFG̍MT+YlܺymӘp[>e8ŪV2](Pp03S!3,_:>fXz207XJŬh )?VX8yϛ٪[U6U(~hқCyD hVRy g&H-պDUQR釭M]ikZE^evahCl& Z3I4SeU:+".LIҬhfYhJ(Usʿ0xۭ H7hz dYOJ2UA62lI@݌{84;3<!~QdT1>}q2NO E?|<ʠyvll8Yf&|{dfe(WOR2Z{ŽƆnVK1Ej lo[Z7Dlu6%B hr3` q TPQcFi)L; b3Z`ODZ/-1DLƛv4~D[+Nۄ7 etqE (IGƘB@&>Ctg=ͮAl3TzНiyhً;uOFt}k滺 ns 7{5 fv&7s*Zl3_aB3gOfiy7Q2;o|rW.n :b I%o rI)R).&1t!z 2@b3>g3x^vo)&dL?t Lu gt޿? v ݙ "™׆XE7<(ko=1'Tba[*a4&xޖm{27Rt0!f 6 m~c9ռ3 a 6'cO5Г=H}j_M;pɪ\XŶVxh#mmЈ-Oev$e <1>a$|y~4>{IjIC"L̞HNk/(lIOÀk f)TBhMFQ!6zTMb3QRf꯬W@E5M"Ψ+h3QI !:o2Q n>:6UC9 YJ6v3#* Y:1Qfl9瘈ϢhfOP5 9\b3c3ϔlYA\,Dfc3*ݏ+ ARUҥ7oZ[[Z3#(0 ̌*10鼞hɛI6ۜX6"՞8={*if誛UuDf04 tĂR c7!3t!Pa"Fӆ|g6MMЛh4*]Vj#ݛ9"Ѽψd‚%iQ QЄNRf30Mz gb]}޶3ŸY+)5\5';BRff?NN:< kof@V/ H[J*]t/@f·}oOHUsKۂ2Sca4J?QEE,x|RYYHMAuǀ3Bj!Ӛz466 9c>þ:8LPb 2n~Dfa-X-d=DO@s܊qt f.WU 3 h|Sӌ~9 - WIQ,h%}dڍ#q8/mFЌyƓL}͉%X2}gH= 8kR5+Fy l+}(hwFj.`$s9t_3_793v0W2WlrZ_Wԁaڣq\tl>>K,8'ɘR(:*e[A? @t,R .^9sD&-4˚ȸcB]@hƓeCefР1˕R/ (SRM4]h|qC7З8_vQC9 ̩83)P\vN;đ"lcH%@`&`)_=̩XĔgrG2k!b؇ :3bGQ֋J e 75r2ۄ3Gwj3Lf"HcRJx#QI'яAu̖&.ә Ow77s*U K`L˗#-P5y1C3utnEbJs]2܏LeI c,q͞Y _@~Y*.(@gF>xP=z¶; 38u#Lot23en̈́5q)k : $yhhyΝ!=Αg;bfFqJ{BC?''%1vp-ψbâWD 9G{ꅎiJ_mDGl"3zҽ)3x ƪnbU/u=5eSv4s{58pf Ul ڍ)3bVR4\Et秃sky5 Y#R\rk |.W=2p&u3a*͙5o19*k7ODo\XF{eHFc0Wb윉o^^xdao+j/Mڥ/VCȨ)]#@qƆ+5wpulVhkz9W[+X`/s ڵj][u2ՖQ3Q\(MDHEfl>P,xǯ25rC2mmKYlͬ>Tͪ3?Ryz!9r [ PNn ol0o@ eLZ0Ƈqt)Egv_ (1W:>." nfǬ8 OZeL L;&k(9J7R3_`"^gzsysztfuvGfA?)Nbٙ$Lhf*obtfuv5־3yٳ13353#3/F3ڙhIW:- fx#|bMT i႙jZh=:/Ahńɻ4`3٦Ne+8Az & l,Nu,D28$S3: ZSJglIpphOfևQ"|G0G@dГFJH qc3a?}:i U"Tr1+>]%lڀ)Mu?83 OoM8I!(ΦEvO8Fm:v*g`eЙ@}g6j^^[elfL['&>7]ˑ2#6BWLZ m 9^)3pvi|4b @1#fK@G'lR 2DZ2~auZF qJqu QzG0{^(.\90>\c,@0゙ۚ4 j9k>+>u:{Xc[_`qn'sv.hZDJZ"+so*'3-P"THUTJrůjY9PSXFLY2TUKw"}U.@L^/r_WkVVʽ5t` FRv&42LAIQb' ِ^#q$۔؛azhLE-z~d< 10o옄I#?]\б.lg.]:>~3@ Cd<34(b 2]J jitߴƤ778 :3͞˗lӑ30tۧ(Y <@F>\izXa6Kpz&nDzi3whFQi݋wgL7hr/=y0% 6vaT! .wD3d_dxbf; bp^&Lf:9_5|m3;Ci`R=z3ąP*;_Wx gKDOhngM64G і@8r,. J]o$8+h |z6ؿ 1O6M48p~4)$ѠETV IDATnzFFMDk,VT*E3UzsE(OaW3kLƎ*:3jxęT[l)ukJn ֶn xT 2Jf=J2gf؋q&0#;  ) !ӟe!:sF}豘`c΢L~}Y̜hf3yjOm -w!ysz3̛߶gatO`xYlgU m~" gW'V.sY3$yŋ1'u#u8uw?#3O8l@BjaEzLOfܫX֥TbʹLSSӃFbnnʹ0Լ!N 25bU5;?wuvg636:1^[RBx $wAeBIz/y^VaYHF УԀs\#I/M2;^AǜO3ԗ8} ̆.8*Cv^>=84:}׷Yatyu e^2]Fy4``Ccl )âLhB U#|w^ϖyL4u,hGq$M., У7>r3Ӷa7F{ }Q'df#fyO!o9u<àO썚ƴhb  'b3ԫˌدaL1ظ36ߖe T ǡRߦu񽩚2decMWhZl,x^я 5z忮>ͺȑj5aI _o vޥfg\2ɭ~*bqf ?*hy?7eqfc,o&6w2kkx6 Kūɢ3ocZWb-rfzo[JeiO5f93 )x Ŏ"@\*"-1v1D9z3G ܽ|p әCoe8Y3Np$ˤmIrf61<'BA\&gfyv/{T VnbfdNPъOt'?M0\;zTFcg@h4LszЦYT^@e?. =)MP6݋:AhiG};wuny4]ȓܣO wFef2&U3ǫGۖٸp03܅`Ɍz[#GWuf?:t?h[4P3B3 1qqtO#!g8ah̜ZXd/C-~56Qcڥů@@9ȚQlU3“X#Yj㦏vhl\&B-MWn5l`si޻^g/+ׇt{t&bZc{G ܘf3`P 2|OhMkUf.vTb+b3Fצa:0ff  @'Ȝ6LOK]([?4e5 =>[@NlưC$6 g `40o?ݰ_c] -`XuLe&P ;hz_5S( >6@R3z޶#jRT˕EG4<ZSF=\OTf3-o_Y<UU3͔qQs2rn \T?}쟧e67J@cS.gb)2 V{{23HhjV؅gLE1g0/kO@Q=Kv=-"ŽXKT,b1pa@b~[D{GfX\/e1sQѥっ7(i}C淭G?̴b]LR47 N4}zֹ^]pf/\e]3;hBef[3` OXN(~4.c3-=+0Ȍroܵع YMpg]SޤLg2 u4I4Mn9SR,-4#~ frg6f-œd_? t $j>Cl0.]+ cmvܠ#͞bcg΂ )"2ozAȬՀҭ!ٵBi+צ=F2>gMq8Km@癸(٦1<#x{bIo9kVsݴ?2Fp.f g/,^fb昽s3xsb@lƞY/AcYc wcal&}*P\(ka?X0 #cb8al2Lu# 6^w_Ţ1W[zcɜH]7= Y7#zt^靹U4庒~.rEͲ,+KJfh̘f"\V"Q3jHU#B*< aϛf*Y4]mxy@GA2#9~`f/ed=Ӻ53uhSSiƊ=ǣtcj;"5w7dܚfm v5Ì!~$f_"r EQ!.Fs^,wvt |ys o[E03$t`-21 |dVj XYnvNcVlvBB1.AfN8H0ClA݃;`y=RQ1,/UnӦқILA g#@&eIv2 g fb#px:3g%ez9 \d0 ;XJ @F3%fb Fgɝ |6)0I+sy–I:u󒭃#4O3 iprٌY|(⠅@'3+,ϩEjf%4Q5.jLr_1 z8`(pƾZes\Tfl@#fRX4j q[(sq|q73CjS  pKcUa$HpCwpYe>q%DtJWPα`b1[^1r ~J"HOdĖ1zh(/W 21UZE.k{Ic{d*V4scdo2|.vh.C߬X wnՄ3UsqF9! o<1DdWzC RxEм'ϴڸk =v1e /35 o䜚1_4e^gT`<ea;sڮLJy?2~*;p͑9l T9B.a%"h fúDl66#2qW:M$>Zf}=jfU16cW ^\e&#h̼JL+g<  h99j!aIa,#,d<gvNa5΀9 g figO`j?9~C:;;'󰳾 F鴗`UI)eD33]5~f.NPsƁR=fB!"P$a+TQKz͈xyyR`TRG9яa g<++QjkXcWd!JC_`m~AaL0` `ޛ^Lcv $sO flLc5ܟ!E4pd>tQ3-Xs5%'S|fk/ mݠ/*ݳ%G'HJ}nVUk-㆕5#>aTb}lﹸ:xVmy;ڿ2],XCUz:_HEަ a]>꫕'P"*sg~slY4@K\2\lfq/6#*2t\TuǬz卍[8޶^̗ķA|^v$ximB"3+;}g3oż&fؖ68vA>9$1 kNt2z.J\sO38δp̋4G5ͱɘf'gP3ȉR߳xfpWyLj?w ~t~2SS fZZ^ E̪03PNl>љC[;^Zx`fvB4mB%2ͼhFDל Kןa8YaHi2,A1OvtL?lyt1Ùy&X7;m3ÐHa ٸ8M`.2 ը<>ƙ?3'l?:$mt!Y<CJpRl;gL&Gl،9̈́Cŧ3()6d 3 K 3Cb94`,"чj$]b袝U> ݔ-VYx>A|dPeq-8j'Mk?BFWt[u*iuݪU[œGsOU#(*Kܛsre9J `rfjzGdEE(`ksl@׆ٛjKy<-NqlRPѺK##1k.s*I3V8~AljjZ,P69`.m]15Ӈ8.I}crb  pCaM̀r&s28)h} Jgnљ0l B:#̙LnlU&T&H *3 L˳gh}G3?(R|NtY!Y33ƨ/ʘ W$08s" ZF>&kq&δϴ)'J5:.dg27AhXyKRϧP:z=g, q_7dmTf9ozm#@Ṫhttt#o-BҜm>{rl&S8@ч ^ lXT{?* YR:^ÇH1Keב5-ScӚSM){6!t>V5D@a O)=hEk3ƛ5@h@4QZ4DtOd\X6dsIz^Ʋ}91ݴ*K WR|dn_\-TW1mlJu5EbV)k6ƼpU!R.}dͯa/3qiK;_p~n2#3.hZ3ݨ9wd2u9~Jo L5Jv˝GɌG\v\[! q<=帀q8@ s^ XjvM[h%-^*_ H pő/X0_"qͤEAd^2tvFyloKd9]ͷf2= ن3NneV;'6КUe4:dPzBE f8@Z MCBLk{;6H `N~W Efvر&gjzC#*5 f2Wg_3Hw< KͺG$7̭jkaÃU(Ev53^a9ZlLd@#39PRC"F"c:4Dգ%#Znie4@6~6.Ps#63FsJ{9x1U4fA>@=R1&PP0k 0ppC/LsR\4 q6gjv6aIqYf6UqQ!ڳ MϨqk{f]|fiбK1ejbZkO#{KXb\4{ϯiwUys~QW^\g\_VyXX4fFRʪ \ 5, IY_F*,zn\O:f|>3X*3Lc֙ph.#,yfef\33,Ƹ%ݩ+pYa<~LR^[^BpyJnlƝ[MNǣdє.4>7voLH -OsjcʩSh>`DrdL)dV~`3pI@wZi0)AquKiT&p.2>~6:;ttA{&әfY&M0֙\Mom,3l43:I9ѳH\yق斖 (x⾛{3pτ "C:VIs >{4<مV  @4pq[k ЬC|&Kf,W;\j}g&pf"Ngp1JUt: c䛡LgU3wl@eJf5\f@exhDiAE)_(;:X̜Gff:VޥAlސ &fvK8πdxOrBX7 ѽ*gZ:.'Ð `_ccXeԽ~؁lWkarǧvY!gCZmg X9l P#Z34ՌތF[K|oPcKʙJu1"z^8L\>2u= {rspq=E D X{? `à +P-EV E=8`$s+CC&G{cYa4k9EMK5™"JU\^e迠 f0,Áf.!3oLU7 >Tt4=w7;ߏ{OR0dP%33,jƌ&&3z IDATbt{HGެ4鴣>Q& C!/|FS^.Tɝ2uq::9y5˩auvR9{ BA@36' \)engLhnprMaL5E\,fi&+gygĒV9NSiRyB)ml4l,jX[޺L V 5 L#Xy &|մE Bc،2UMTݸpynG]lc;zF cl-E:eR]6#FxvI ^`uE^73s{fs= cq ? 3e`&W~ :73 .t!*(3zFD"US6ֆg-ml؉q+K0 p/1w^儙cifԈO(Bk 5NM<̉2V)И7)fFoDX/*#v\2 .B<^'ͧ&1bv3RÏLGAe3R7h2VkGw͛d谓KhH$1ДeLڒhʤ+s岟7''..rhOF!F:HA@dOyfFf8\"jQdehjɸ}ieOT{髷lF0<ٙ,;鞱͈vLABfzփgĊ4LH*h7 <632\/㐁RX2Hɇ^12D^!r4I:<_.<g<g! !4WuMF?RTLl𙇑{{TKE4~ Ok KN˴ENs& s5B`)A=֩ќL=pVK4,NzqoIlxlnl+.&XF!Bc|"xXXa^S `5k,F`x=ҕ9ԌblI1ư;0kPGܞjVN5O7cVǧZE05 ,fQfJ-ˣa%Yus9&NPiy#պ3Kn4ZFĞLF"MP5U*g|ƞfe{ \ʟ}3 ͜R\I3s]5/|o.pApxΕ+fȍsp&arlj0xIFigf8Sf塁Mit-<ƊAkSU#fpb]߭(k;`Ӂ*c2C /:x86؛90I /1(Xei4}D 30zug:ٲ9͉C0Mh 7Yş|ÙDɬ zfvm7{@x'_?ïX{g.I3=zҁb:Wx{pn8g.Q!WsNDh~M{K7KsliTE5 Mq f_$ PHhp.f:]& Aq%d|D^Ϝz^)J9 ٸp뒣[O-ń_s֚;!;gX 0:es|Z5w_\*`KL_ l&s5Sh@m1c{v_LnA :K)N>0?uG5Qc9jF|fw-WlE>gWY7WĬ1#k55* zUap.,p ֌KL3]LjИ h0iE3ì2 n . f뼲;<>xLwN4s73fO?.tA)8 ,0fSRNuzx6GjxtFΠhEl%:<~)w :%z3~/Gh 9 Bcx3o `˧Ҡx3OW2GͷrLf3#+606ş ieϯ{\}AeZfϴK k~"rźl6 f=b:>3[UCSӵͺCB#tFf'0x7Lxx^~  !4& M H0C C<Ɋ3-nVU3Y2g24I f@iScb U/̚Cya_A\ ~3i$Qmc|FË e)!K 2i*ao V4L 36*0՜_&mxʦ=ֽ{UB 0y|k3yZmCha2(r8!] *ftfz&6|}KV;@qFFCشHZZc1oZ4@(}%8 .[dzf*Y] 5OZbfxcfvvf[)PRIgܩa,Cx5ք G36QV ;sYSEx滋1l=L ؛ł}tnN\9-].+  csoe_:W6)$A_ "/ h82_MS| 7%p׸͘F?@ xHHWsρuyuHqSsm*`Wߘ8᫿QHS6ĝY(]eD_pYSH %CP'8L0sʕw89q19͚8] z3,6mhLrJr !hy_yp ؍{{(PgʬgO{$Bt8BXfjƾfWqHj4h@ XQ蘐˻wlrop∐p>3IPCmD|&-& a8sq/^myFL3b]#x] vyp?Q7#U3^{hCå3F5sh<ʩ*i2I貈VNl6Uq&ZI&u#p(h]< E4$)؈ z o,:| KNsh$S!&h*foΙ1Kg2 PVD fL4c 1Par,.Gg\ *d¢o dX)Mz=rUTbf"2@B+pH YP7} JD|jxƊ=+af1e1<۰/-M%Xr=A|WK!m1,W66IfFA{5"+X `&>jeϧؐV_?)Ds?H]j. Q3k}-smƀ ;،. GsrFa/r}Af" ~ ~c7+xj?;Z˳i< b#=yaнADcDcP l>f[Œ:h=}N'9q Үf5,߆ݿ3U+8ef2Lp4eߴi@Fݯ dg܄+ U8gvslyA3l0*8fzJ^@eD0UOÛ5,;QM gz-6^F r۵I$V`#&:CEGg7v`dmJ! i3]Gׇxf-qNBWDD:( RM3kEYLŜ`ꧮVq yN9z†_lIODCjbjյW\jNɹy7f>1&o'y뾮 WXm9]Ld&^\ͥ3{0Aӧ5sYc8LzL& |)N |YL ݳ_%O>UO {b01}wԇHAgz{3#3#ܞ1;5fESjӘY*320h4;dw&E u7e2Cg 3#B]?Kќi|:KFhiX`c2Aifʊ)HsPfn tpLfBPf 5<‰VPѕnjYHva8W:1\!g34?B :;+Lq@,͗lR6LE9 ɢFhP+!;/'eQw&gg?XaX8CE,v ED:lHͥ驖,/c(8\C u/} '`f#^[VO1̠=Z[к5N0c2>ى(=3H]Cd!!@6g ]/Q_J/8ytlu4lefբZ!/'637'QOQ"p7f5ߝcLj>+?IYcoRMVne|J4 v׵."U9(pfI|9D Iݍ`OT&ϻW6:2MZ[kϠt U!`)bF4H8j:~d+cNa{3Q7[noδ(3iT8%Mdq`z3i2O&dU3fv&vwwa&ffH̘<ԃ\yф BMS29ӻaAcp̌ Ds iLKgf!`2>S}p4 sJfEhdp# ND)@RƧy Ew7d\BZ& fA$89'3Ȉz e dI]jb+Ԙ 49`pьϵ!cPh%ƪz臰?x {g\իhtTW.ngltWXnbG69@ d0Āfܢ3Cu_t/l^׽m!2O9$ 8%̯9 @4G+>qho]Y Ŋ:1gW;qxtoqk$،:?vk5M*ֻ CBeX (XTYF O)Qwo p{A-g n+DEӴ;[\K֫xg2 sݻ84QC-E?K`xk$ߊ\-I #'Q]S;ЈI 8ZΖq)M0lL}Rj"[A}vE@`8NQ~]S]ɁgC29T6%uᗠEQXa3`8sFiT@!}ļ*.ee~С׺47A̎]pkfNEͬB[BLZff2oP|i`e-l=TZq*Dh@fx@;;6."3c Yv^,J-Dcd`eZ>`ԅjjNyf×,W׮Btx/~ ӧ᧍tFH3+ˮFcvbv?i%؝70al@gB<"2(liɽ^3Z353iJR`E &xn"az0(3iu:K21$m:ˆ :5yKP<3\w7S:C&OlbKmxCXVƽ8c=KSG8cӚfېfƐIA.=d>YKroRwl;ƈ6.yB)ͥ"=l憐"nckج!5cS5uTs~Wf?zLQը/UsdptA iN\GVmӅ.0ղSs>.ct1]Є +8H9El,V9%J?.@V>_Dc_Eq4W7Cp0v/Sq \gy&,r2s/!zgyڢOq"_ttń-LqvBiظ9xquGqvM)-b|5ߦrb$11mIBܦ.dK.Shu[WAA[k5ne[$Yn]:*| km+݊^2NkxSwN<:fgAMg|:`i>gESM=+8Uөi%>+>ӦOk+qb/EzֳƾN6wdܸS3 EW鹔;PLM[7kj}7<ㄹq%2E43&DOЙͼ17~f', _zsFO1zYސys~FQ(s:b_Ow qob-CCEPwHͺbZO 2%:ya$^$>7Ziv ]Z3A01R3Zl×(DY>$ha/33H?{@mNL6N0mx21dL8 6  `b$ÃJ.\ 7!_a*sšӰz"#,g&2P>ê#!̈́D_fAicf%*caW W"}H F @ |wv "E@ 4f SpZC& Z\lvL[P l2OU" b`Lֆ2Ztm< e.1(MU$a bg d`2\C3L[+>8mCbS erhu"h@m6(5EvYlj*\:MS F`C)mReyaS2=;R6Q(e#^KrEnGK9B3\C|&&(WU/_qŴĢ@xd1= >q[t"^7hisRw')ON숮2mì6)l]aDgBYQp )3\=Ì&\PfH hDղ>z-;ā CitceĵG[޻xGԬqF2,jIVM, Y] -=CʚEW3Zm K^ݩف; 2lXТxh?8rQƈtnL?ݫؿ<|8Ӿ޾u`X|0&xtࠓ'\9ym5vODŌf %&g`rXyHq舎/JB,;4:Șu%D3;LgcxFTp#JI0 ͜?2+A8\R"$0zg#hָ3wɌLq"d0XMd Bo#aʷ-6K*k 0c~0 ( !C 0|njÍf |rwOǴfNd8$@. 6a%gf-=ӝGABaM38(<zfޜ(J/>R<(f42 3C-m-fZx4g!g%aQJ&ߵ\nJE7\VԽ~9|w*)oksə2ϣh?.*.mjMٯ*Cm@HBk^gV:]ZYfbFd@\֥/t2sqF{cD!0f&;7;sgS!B]blvL tHYlHf 9=fs32K^ `hO5Et0$2lj7'y@ӀLjFnӫq15Mi>6".>N3 Rc+_HDjclLr2B@@eq vj1C@,ӧOѥMB~o~0d] Ξ L>ܬ?hv?0iY 45C'fW0=s3z3#f١fCSgw!@@S4٣azCpw8Ĉ0B:.4.g첸Rkf5 3(:hA.W#93<ҙX8AY4hhh]!Av~xr3vv\9P~W\02P )v^:# Y<A =n 库y!3pEI!eѥa##lfh>HdutT+2WX cC2tf(Wsn3>3)s<ź:"4tf\8j6+;"F,B%0+<4C__k%,l_NoQ̆8v^DmYqQ7'bfB2d'2?g3ZK3K+9Be̖`Fx 8MmCHeB~N&>C>75浉5q`"Q9DFse}n`GÌYi2IEY5 L37w2B 6s0|`&^О1Qdu /f,Ab':Hv ʬS: B,3bәlIl*}04jƛYg1( 4{c &gR TQͩN^?G0#(^g;Ϭ,1$2C|%gv/K @m=DGz\؏5[p{&-}jEY@Ԍ|f i\lbR6^Pj}5Xffp%\f۫jXuEQӧ0F"5"1(= Z'kZoƼ2ʑz1Coe W 5;x3Lof0.f%dZ c2f֛MV7 30Y 2#X`f Р`F5S+3i5.3Y |͌DN\p|Bo\"hHKm5b1-DSR",\^xԠ*p"8 LCO>-?:z.ɀ=Dxq 3Q4ul(NpC_蔐&4hLbC\(Ӎ Ib۠hղixf,7#F@f$ # ;[ B)@L U!# -Sf5OyjZє}}gPG덊'H fH"&⫓b=k;Lq%b= T"T)嬌vzc At\oy߷7mD-|xU=ul:lgV+'EԜ  /g‰BZI_)qF *VUz3M׭-SCu*pÞv{w4&@4sz # 630` T8 03$q#]Z2m3ɼ!rҼ WQ5YMP4{^㮨pqw Yș] BkjR;>HeE'DcR(Y. fhȡY^_ozGH&ÃiF@Zl1 T ƠqfAΜq '3htJ M.f!θ7:C1C-_OBfcL $fT@bt3Ɣ{hSS4y|>umm=h.<ϐl h;3YZVVY|Y? Ewє3eOv@E5tMΎHD{::hmQ3,k/=ԀF9eM ZV9+COHRP^:ѐ)t2[z@9h2dy[Xvf@ H0 5EE08QLZʣ'fowʁ섢7D's@L,vޚ){P}(vkpLw,&2dK3oT=5` sep mv3ITypƔOM㚇6ϟGofЛ;,5 :1bIaB֡OЛ\f G,X&cij?ߧ7Ѡ]7xv8Žn&A8d`IxmkO&i&O&ʌ63!C* n|hG+}ܛ;տ2rpĜR*;RCaz3l9CA=tᡰ `B`9C_2Ј@Q AKb8j& fA,!:>Ch#;xeq'fЖIqŌa)`r k|٘*@kE3ģd,( W Y3~pYm\t5 WQA&g~j E3;i楻Y2O$yzzhzkrdX 2q&EϹnMPN٠&:siǏj6 ;GE ͈`_i?m{@| B\B;3yc˛!*-@y^|;Q4;??+w<@D1؉tw:>e_EĢ/sX&4]|O}:˾'sOW/ݦKW*}R;_N^bpͱ<,ê3lp!/M/ a#NFk1jfS--u3ћw(FTfqnt.33< Pi}od &4dҐcn[ 漴%HIp0=PL1S|OXϒ<:SasqՌvC;#:PAKy$E-]+fy2jõ/ߧ5 z{ﺃ8Mю .LkfЧ'f? Nz!6S?Ҕg3o^R3f4 Pha ̈́L/if?g,Iaa>)6Ԍlf. wgΛȬ0Yjݙ f0Z @ t : سYpytPRDN(mܙ 45YTRlFlª!љ= 8G[$  зgy)fYrV]B w&m=3$!bwA?f4^Κ R3|&bvh%=Mzd)6ގm0J@t:YrfLs[$Nòf L]wm8ىjџa ;_ߎ*)1X` _LYo"-QYfqC}fP mV2*g\ߚD@2+y4Q߼4oi kXY4z<Ϭw&OdW!Zm9Eg9OL9磅X!da2ww)Ee~H4NxܣNܛ5 +Neu ĊѾIʇD9χ.YGrjU YffУ) Ţ̙a31Lg2c &@4kƦόӃfNy&eK͞92 3zwǂa=3=$ry8`H& `{{hǏXE3U[\fjp0O۾^mmqp̭ufr +Q Exg!OdΝNwݧ`F{M-[TLo(V4O1ӭ3*lr*3S@PC2YbZ_YWKp f&sq63ClӵQŏ+EQ9 9}Eq8ތ)ZJ=Wƒ7-^)~.^;8> u*ݛW}?LnS}`7vybwRYGM1xJ݊AS3S|Ltj)jbœұ&T%̖G(ٹA \02*S7rOh.fge~,fFL͠^6؝Lu3 }K`9_ f<ЏތͶc3mmruCk!++*X`smRqRf—К9B 3ܛ!Al1!Lvf9˽˽dugvτww! Yk~bL4ƬHlM6w̋&n@N`l@32Rx{8K0s ߙC 5:цi fp޶qV3kT?:~꣦/F$98hQf3YX@l`aebY16TR0H!\fEq].K5slmfd@hfE eeƂ1 ŀfC͌+tރ;"3S0-ЃVC^Pݚn6m9AHd^im6G  \ s4(H;k cfLdǢl&F8~յ~Qa9{b1Diհ֌f6׵U=AgU&qk/q߻>&޴yPQr&.V"z5 >tr΢Bz܌^D;&o7(o+x(7,ugEYQ f3Ng %^{*>xRc2nRcz^j9]Ɨf3d[z|,^yK@uA5 *ck%y,! /Q U`d2mո٧{\>;<\D`R<_plg8Ɲ`f) p,[d0} E/_~9!e8qІ ek1! 7cVfa4Jfn>̈́1MMW9 n?Os:cjsv2d5l،*P&hf`)N Q͌DոttiUSa.։oFβWoV|I 9rJ]N#iGEE,Q#PS"5vg̦8 -Y]󮳊ߕ1vʜ$bBl&;P @**8NպIlR*܎_h4Uo4esBlj$'pߟ g,TIO)+9T`jUy@"̗NO,N-62~O35[M̘ 6!'$Ñ3%Ɩd;SB@,OX UنBm}ȔΘ&:nTGdfКlx@Va- 0fn0ƈQ%k!F32dgd``ׂtqC~o|ɵjbDg33p {!Y&Bp#lv948D`eSee%pJ 3tLS6=;iq}+,p6ThMpUMdEtbeP3ܞ3<֚ M K\{@^v+<2*S0J@j,*Z3BB`pak5p&=Tl4` Ɍ9'e90ጡ2O2_~k#< 4Jp*)QO"g!B3TF4{Yrq=6y_se/MQ6t ]zU8#aExpleX \a>B4ݜQ]=*fQep) UH{t*|I.-HyʨϠXB٬t\-{,BbY+.X-Gؘ>H6S1K3M1l3+5:O">7#ܙEH32,ǩ:ܠ)t;SۇrRJ_u$b2}70Gh"氩c2d\)11(\}VIA5p~ޣ/e!r֜Y'41͈NA&xD3q@؅8̌KR @n&25Y@ff9{p'tAУAs36L&{2cH2D$eCFm~Ct2˜ 3.gGFC6qE=Iwkd)ۙ3giL?9jFtc!k}L@34ʓ3<5ob,|4RW/=@. KOg;g&' I3#kPom/GJtOwFw&}ŧ[xƢcwJC>Cb*g5Dϵ>-由(F~=g?mS^,)OSܭ^)MF(g;5ѸrNSH+5S9/9Wa)*J<љuwC}ڎzԌuĦ~DMA"Z1Q'Pe("d Qn0S3z' 9|s?d8)X3"8 k͊ZS1|pkV ŃR_ܚ9USuuuuxڧg~|z[n4AgXΟ1)wf%9xIV֜2@;))*`Œ'=͔ܪ_Ltd7{Kږ ,byl]lʒ)̤B a(L lf4fix`1޾~e3>M04FNg6Ch0QtgXzkBeA!hV|ә?DofA ho #FlhÆr'gʙ# p{  /*u:NGӉZ34.0q`~+\ Fd ҠyEE A32 HfhXÙ3r04!QŶ@X#4ĪW.2*PSƀ OЉ?iíI +bT0ExH 6vwx`U|O8؄fv g*W qXnh,1yo;6HtzuB*ўѩ!tg;#|Q9g>k{ 3u-v":Sߺk)kCT ƐA'Q3Zj#>OOig}}jL'8t~7IĊ6K2XW% *ʚlɋ\mP92ss90N h|ˮ m&nՌh|$^+932KAH5Y3d\6̤33HiX@cضl6\^;a͛υ n6l::1J*c+Ьtd3tSFxcļ1RPhn2M}rMYivATb@_Mzz!:Ӫ[fIf^ЁNeӆ5ϙfM|VKlc3oFdGG/CPx0 Jf 2ZoJEtƕĤVș#@֤!F "&s!fXLWJ0耀{Ԡh4ˀuLiX>]&],Cp9&0srZ?,5~AbA+i)Tg6iAk2M7cYHSy^b6/= Wr,F5DS!5ێ }g_^X!:CTf0f8^BTgbh](f-H B1ɎY6GKc~E_d侾?ǝ݇ho%jl4k"8Sce7Pe7P^\Z$hR.Z-fvV{:f@B f^p*(Zf IgY?33ol&aq#[.L,._-֍Vڵk\.QaDS4h0@!a%7;a0ntdT$_J_gYq ˩B:/\\֬n}|]Ф]{&-D]0*c3{:}eL \#4{H.fH0헫o$O>u 1pAűn#7czͬ1#9dfWP4;5}DnTsYS TlF+jCQjD+ КSpCMjV]}G5Ghlej%YJ+-̀_ђjt`9E'̄,عyhrs G. jNĈ&~ͺC54`;i%}lAS&L2l6@{РWƸ%w" l`6~x39vcZpsX֣Mp~  &zS 4&a1>TfT8fC?]^Qac3:ƦxV35k}P}x[v.: v0hS/xeUgCo_pQWTI]V5T Y=@-{DiZK Rgm::^Cfwa֜ͬTj/2Qs.kijm韩Jβύ˔&f' i,hE4hԌŐzKPɺ9Q?-ڟ=$NYlYd/k?]V}k3P:ز[yu?ɘ`1^ L+jeIq4C tf (_hY+eIm_ٚnm*~O_wv*v*] 2 4!&RoB2Il+ D8C`xcwûO{OW.$FK:M뀘5b5kDkZƄqu}kv!_ল8 efDgfrE}}_}&n_\L5^>#fZEe=D0kC١4D{Dg8xBt!؅ LAr΀Y LVQ4#vkIcw0v!$P1[C"GK>nN&xKEE-o @I2 UO8ì#1=<mAo3M~,gϳ7/KIjƳ2,HMNn0?Ϳ׮XcBJ3c-Sl^}]!J){KyLvgTnU3wӢfHET9iX9rf̬ڋUʳeDzOQɃv`E'3%2#0@ŗ.12wLIb7f1bN1u#e/_!F6h~U乕",9.7SD0$ VD{ʀڟXk^f0yÊE(Af6?x?\^Om-V9C0Ej-0?zГg@C{f@d ~ 6af!Ileldkk|?Vvi'ֲBcAP<ٷ,# eVG#+q:0`!ق3OµhЄe/|f͛M˕\:X_gR][ a9l%:ӻ xWnTVrͬ^fgʰhT(c@j{Eak䰌sNi8Fo~4PJ׌{xqrf3ٚ!tj+—ݙ`%@'p~fp- nLWadP48.t4N K5֛!+̾eaI{HC6`܈iOﯬ i^nt3./ IB(-^Ax+h;.tel"Vae$$[BucaI&xasƘ\wcMY5c:ÉS$}~UU]"8HQ30jھ/?3mmvD6O19֯/ޚ!g9&;ξ,A]m)Qn۟詖u7K꼸ljuu=E^3PNvjnbK*S8A-ҬL؉PcHf.4Hf"TZz/XDf 4K i/h`4& ̀yBizoK3/ rbBSL&3;y.giv|-zzGflur)MH晣2(@b7ڪ?*"4ln'Ab3,5 :4.-b<@gg63s ˵EqjY5I_&j։&O)]S֧鈗]߷x˼^eI';iJէ}yEse8B$j. 5*;Q߯i⹻x! FMZfu41EUQi8FSb1MWlLLpPʙTvh)VAV_+Hۇ"(x6sMn]jf4`hAյk\qb{"3 34p 4gBcw.gkcQ6l`@xP&V5X\;֏Oݲw[Y8/+2{{i~ш nG4)},XP-#Cg)h̀3Y4|행άc 8>&!Y_Y\WȠjATf\(pK9yQL4#12hvB?>|ˣ>`f|c_T>!VF38ɰ,%R&#;zt3=I 2'g4kyzq1 b' 0&˚hiXq њ9 Ppi)h15H t 1S!L+&݇Hn1%Vx9˜d΋KBP,+bɒt +e.Ahup7hol,qBE, ^(z\Be_mXp4 MON l3^6HHc X՜k_\zUK @@ 2kvozUm߱v[ `Xia:O 8M͚,ߝ;26Ft]Ԧum'4^k ҭ->YREx|U. +!M!|urKD+ZM966YzoFcS!\15$Q3MfL`ɶe@mݕҶi:C>>X.\![R?RFzң'4gRF#3+BvpODj"Ksݱ^4 eKkZ e{++Aa66̎ް@Tfıq}VI%fXP fpxyAG2+3/2a}T*_ d%$fM9v(uf!f3;sš4 g@jиh|gZWV lNuv@@4R3}BxkrF<<>Ff+_YẁGπm2f`Q1?X\8-kf 4  @@pR, i2Oۆ7fUӸ%WWH> @L{G v׸0'nSIz ;/_up5y^>L -8ĔЧͺ9w]mѹhow\yq 4% " 15.ClL;. #BQEI‡LqH ~Ԁ8g&3,:C=ӊA\?30#5g` $4?1̑W^3G> tɓ'ee,l7D7 W1u]W\$qezzc݅GP>pMT҈ll¥[Vl,`MT`fOSH!5VIva2-2e6exsG|9V;٢^?@ H^~PC4޸ɘ){Ms81ʕό ͤpiV0Ed3e2OCb{g!Mު?Sx0Z3P43X,3?3p@r[,p Olә$0;)q!NIzZcpXp1FT&% nBN$T |$μk\Y}/{~ ļ-aiZP6?_/'-Lތ3Dhxh9sgM|f6 ^oѽo9N kĸ d@o.~B8qefso16O9?<a ;љr9`au"7T0fkc8˘1괙5B (uu،sѲ04 T#6jFczP2S\1Sg8lMD@7+Hx:75vUM; DbhG73mF˜wmj=Hr1U .-4bfw" pD;7f\ЕiM¼jc!.c#iaZӖJitfl 1] Zig牒\;#ٝTh8kgh0t*f3٢Y' fz,|8͞];#3g:g W9QG\p;i&:c8r2TϘDDgBe>CYɘ4ѕO Pt:/3VKfUvR Փr(R, W\>&|Vv-t3YXWL<,- 7 ?ZMhrb)8d>#}IM. pA5ÌTV6ykHzgcECP֔*j7VE,$QGH,nʎ9sP `V&qoLrLV8Ƃ^oprLJK.T&r̵>ќ5VI .ݐ+k*$&bZ4,kΨ֙fIͰ@f*sYTʼJ%« 4YPa6&{@xT#Yf>WF+ a |f,uط°¢fVY; Dg8)(.`.Tj 1tdYIWs'/3;c]mj=]=]]}'o_燾DlmUQddK)G#<,l= # Z'R4U"NQ:=?}ދ{*"4L-{E-P6ki9 oZ>M-߀\TC̶sy6""|ٮԶ0hB̎KMEt&4f@NUpLUoNbS1̙4Yѥ?!z3,1Ce82;4HbL PE L;d 7Ks @;1D*̼Z6QyV(ڻ椛E@ڵ(Nmhaz,YÇ9inZtH&Lr1@&w l *ľ2<6A[~c'em[S)&EܔdUGS3Հ {_XKM7zBt\7dr7f$E`$9!ѝiU4ѦAՌ"46vl1=!O*~-ލH h9v4ĜvRn̰ ִλLΆx)3h!:333 ha731|e^,5G3AgN =TX`蓽#X0̡h׵ ]U%[AdʂRyI;uFfP%aq0?IKf:qICR5~'Y ]c;,>%UՎ Acﴢ޺ r[)(-5Kh3f+!J%Y]Q33K|2{.OVނ\F< UB@suc Y఩J)Nu$+~$d8gcVYi a0$e`DWFI vVN'n~р(B6d=F~s-gwѣ; *d3bYuDL12ﲤ*f/ˢ'$áx QH*Sz2Ƶh4=Fc}>WN^{K. @3'"jp[f0ÎZF:2pg&nS4F|zay ٷo$a={5`7 i  AE 0EyT32ƙ,_7c'X@t&HK9+xgֹCg[V:9CЙ3]Sx_PWҟL_ ~FlDQ͜UL͠"c+X 1 354LBkP8̤Q1 Qf3؄|&L+Fw/)tn k'd`7 ֔p3*T8K)Z3MåNHL /)zɛMzkG D3!5v f "3ueBElF99d`o]0=qfR#iW.>PĞl>s5>sJ9V" "C=5V>o,k^]UbGT Ԑf9\aq-Ou}untxKF,^{7sivBרÿQj` t%~aؼKRƍ ͛E1sm@d4Y3ˈҙE̬5ǽ*VqF^,D;w fFElt;-~400PL;V9Ț笰3߽K .OgŤn YX":%ZH"W JJ? XDDe8]d[qd-Nccd`%ZV2oLҞQ4Q3~M0{|Pooi"4`zf{` I4]{l@b*j!"vE[cY0vcc 0[ѼN\c'lf.FOO0AIX^΄gpfBY71lllmu8n %0;LNa[N ћwhGf%S_p}lVgTNcٟeW6P4#0P~hh&ә "J Eg!F:NGi&4iLDYGb+X>0 b2dU h@e,F&MRPlP g?@fC7!h0? :r&h2f(]AjsM?>׋ gY~ɪ#Wf 䤠3sCTo25ݘ|،9\r)̜O͌<6Lݒ>C}"-cYYSfwF³5t\[b|@rF gYl+)k b33 ";ݓe?Yv "Vfh|VRak?/ BH}N/xTe|"U}]`|Ƭژ)7fs5__fh?'HBob6U#Хb˞Y-Iyw*vf3[GGG'y3=i̿.z⁇#1;C|@3MRi+f8.Phhz7`Kbqx}w!aޝc3)⑙tڦWŝV+*~ٵ5 F9,B$EV92B_`8Zb2SDhf8zAY ;SE|fsv(j^jgE/^.thWHEBzl2C" @T3sWok782C\hi}w[0 EB ;b3 L}f'6s[iV<Iѧ]BgM)3?S:Pphn1Þ4iд!Y L㬖N2-2sVM]{]D?qFׄɌ-M0p!v( SIEɄX˔pB!Ai9 $n71- bMtg>F DL  5jJd6BY0Nы3%@M:f,<)ӻ3<3#|3?󟁙 L@cV6w,g*\!z،4Tʮ @|\n`dr氮"3f._iڗ@Icx_,h&}g@͐2;*ttфtl^ ʲ0:޷,䃍`3!f d$è1je5ke؛0Fcd!Tl3'G3ԇOi ]=Ӂ2?z#2W>|TS4WAs. DzD2+ىEOpNvܕ(Eڄ>^s:ێazR/ ?s֚aC%"r1aYF(z3i%FJF(edL?qjFJb6aL] 4]f 4b7Ag蛖" R`ͼ3{MfD[Pab3Bl""4qʹń"lmg o)l| JVΈљư@kF CY,- Ա.Kh=n֌Ҙx -F(v` ZLh"%%iϖhF_댡3m:Iش7od֛ b$#Z2MF]VF\3b"Ɍ/MI5GFX9ba; 3@380-%tl,6V|3;UJՌx'D1_ج4;':D4gf\~?6SP6S(ALk6QI7'gD'iȲ0#z3R{f35ʹ#]fdF F$!@'6JcnP$063!n>V^k^!"|nDѬ*#W}#A1Yf S4tK g ҠЌ9$k@viY_ r׌V[~b3eS%=b1mPrd^:?20v3rZ+S.2Ьtf5#2BxHdI1cL&/4ӫi$Y5bV&ߝ9E}sQ3aW c#Jl&fy43;Hk",$37Ĵ-\ĵV4gD2(Ra.7ݲY'ª"0u L9s3Bux30p]mCB+R %Eo*˪L?g9G-!șdKbg<ӭ0WY[ւٍ XѴ BKl/iLN ;BG܇ZCkFihP bF#c# /P$[Y&RҗŅhɀz]}>qȺA͒L팴qJrSLIH>+4/fVꓼ.I}PѕVIC~Pj^,Ț>',7ҷ8p #?b;{ɜmH{r/7_uF34:jg3seӣՠ܆#==w-=)~=0z5|, 2yz 84,i@b+LGa+Rfd oJW.qYt&*+K$gnSR3G@3(q y3n"3uqѵwA-9辏Agh35k/k89{76هf!Fy?z2BjRn[f,8v⢉Hi S4LУA 4z}j܀Aw{Gqh岙 21=w c (:̓-{:c:Y3GL2xσ^0XY1c̑@l2(3l dpن%|K #ȓis/eޟnybS زI.^._ ].xn{S]Gi@\!)p))M 9! Aߜ##K@+EoG\qcg1s-p7I╇좛^@,ЉB_Wՙ)f7.?b6f}&HB3jWyO@3m~ysSO34N# 1Z2khAerf" r&)MeBLhtwu`PL!N[C kĎ6 >zx:A L(ʠGf;E0b:ɌVMI6)yT>#Bfl Ic;, "aX빭6 dg l4Yъ?٩̻IvB IsR|)f|q ;\׿'f,鉃14P5[>192^hj19#BN^ŪJV#lo|~~-c4-r_ ]!*ȎsL#";dyOf.gFQrem& %5,?$ӬN˨&?̻GU jzPv~b3eafBC(cg'ywLw(] fhCs"}u&o\LB\ؚ HMT~B~$> LR04CkMO@:۴xqxeWc^Ne23Ff8([eh3;RG;B(W._vu31Gqg?(i_݅h97l^ Ab6b.H[EgLlm0xLf3-Z3 Ă}wB "@*gLkp݌( ɮ3J`U::4hm>Xb,3 9f4Y줟s%~a$B> l]jnGi-^_H3kvu8ejVio/a6:vH1Z-st;TWW&a1NY!MJ3RJߟ31IwC*̾E/(4>&^9͖`B*Cb(]M?TQP%/`f ΐ$xpsuu1 ?s@h菸y;-yfW+`3(a|fhHRN'ת qE[E~d?)-_=zT*^n_D^rB7Y]D(9ʹFCվ ?Myf-,Π7̰,#)#3Aj0'sL2y7gٍ׻ <;7\yzfWd}3͆+CO13?*@qMO]CgGGM@'CCuCwgiöӰ#rm 쾉+-3J %O3! IDAT)>LQkM]f"a.[R"yM)έy8`P33LMd 7ɚ6xL.]b )(׹9N,ֳY ƤZy@h:Z 5Y@ ` >sgW{UHrܝ2 #،fz,w} |ͮ_GȑO<4̸k S<7LP ~ozM(0rA7{r0Yy<[|F}Kζx26?&V8 љ/kkkk(}D%xM?Z#u;#SF"csO4,k=,pE3lDg]v44a;؊EbnDg0 1NPOn"P`fBÇ \ ]nf(ol g ytD3/Y;πx28s#nXϵg6z31`3OᠩN@d9fu{.Ke`n4ȕF.[(m`Dff;QWg g؄e:'rڨ֙6]3;'9\'ib+T#R-Bn4`w kiܛ!HsŖj5Y8WNrXCbDe޵16wY, `iH6"5f*3NVqfpGКݝL2SgRRfG|t5W i?ZsLb̄F$#t::$Y ټx` ɾm,C :2y}IRvϚI9΁y%ҫ` ;d[sU[&J$*(O6,erpFʲjF43#T&4h 3)]Ħp&rГ6ɉz1'GGO67ӯ* @1fwjtN`ܿaba6kxmgDՊ}7ܭ7oB#eM>q'>I0;Q 7hRͩmq~_]%Vs>ƙ{jvzm*hs~XFLiGb` S's>F?f8;H--Y")D؇MLgL"S-S9LHpLy.z3];8 L`ƳmTjЈ3lu͐8lMws߲Gg3fzh2hҰˆ)%ↈ-uꀦQUDPta!~-Tf#H%"eO3϶`n$:3L=f4\L E88H4L#Mcˉt\bd[6 KCZ4wSU¨S2`4&(bz=L7*D& 1i&ŇFl  g8V5sћwM:eGGMO񵁏rfD ͊⏉ܹ~׊X݁̑+٪yI МfT=XBܺ-\SOsMQׄ$>}r<~x'*ru-ڗs # |a@A1Ud=WTpCqxjV+]TQ y>[<fj4(Nu2',h4y?Y44Y?:1%ӄ32Df]9bkpɆY>Xj tBcawW 14~ZI>NJ2ˡcȌm5Jm=޷q|_*љ{.酵C{ѵx4eƙ)JDlJ4.Nf&E*)#s)֗ c1љ2 "{]P5lnv{{<:e?EÎKB ]L1EoS\31+)~=88qǰ6+fWjF3|錔V G Rm ɲ*d/@ZAom/e»[ufxvb<ȫE{L+W!݂gdaCuFV/gkx D*72Mr_7{+,fT+\z&L2 /3e#e|&#"hd5[DzaYj~z[eefpE霹KdΙG ++ֆ5.W5Vgt39YôJ)Q6sdx+"tfbe%ܙ|n̕ODD3L$׶Em$Um_?~/qpzE-2Ɨ1mUWㄱ7jF`i, EOGFsәt>rxB ,4Mn fxk{x QQ"q1&N9Nnz6Cč>amTD@):ӳaH2_Y] w@ٓ䨌7/mm4'JvYΕ-y ge9ͺ)֚Ng#g?Ktn;; @غ# ^FkhBhҌ8ɱphMV_L,Z{DgJ,VZ9f0$hPngkCwfIĞ&QuQ[Vx,&ƭ20 ^` <ίPa ىMTDj3΀ʰY+O$9؉HDg,<= N:O䀦U33=E:,\`@f ILHOk}WI}cyn\"oƄUn05K y~Kun e_ޠA8G 8bŗ%hЅ=yl =y&(gdY;QF"G})flk&) 8aL~fT Uf Y3^ CF'nM[8gT+ț!.aז |z0eZc: 0fesa.565jkn njϿØ'hmgx΀hr,J`UIl&tdz&9ե10{~(=t,/ǣS7sXS2qr5)#4'7b.ư,grsf /L/L]۷6 ncv53v|À"Br;3(<,X/Ǽ|:3;hF?0Dg7j z3u'&@sfK#vhKokYO,`ڂt"|LuTf/ 6;Cjٌf |i )LhNM)Quuyt6 i,$e3Ẅ́N µ3@flG,-+=t6Hp.rD]Dۿ=Na3(hFכ)=$)I-3M %Rg&Wnjpvn+geD vSKg60 vD NCs8KM5^(_tX~Vl)阙!vө2N:e3z:С). Zܱ׈<֚"PO862߉%u}^Y f0IpHCPTz&L7CAIgo;C$0 F6C1z\\Ro1~g[F"uᑐ+("^&)h!0F"d^ q'ye1ߣ%VIʭ=Q?krggB2peiqYQfxXY`4cfz3jW9 yUa*͙ʚj Ȝ?z B>1`_=NC N\2 cfenLx( َ 3l$2ˬ c-OO۰oSZ2W A@i&z_9W;79Nfh;~"-_c{Rșpfh҄terpgr*hRo>/P4UCg5cRZ pެ5QW:7<Ԝy Ai2Z^1[oby'/Hakh߳[.V' r0u\&I W@5[CK!y KS K'jRtáU  a&Z]!Y}/T][rk5U%]cR[k:/ ΠZsH>~:KチRYPa]xLҕn̊9k,g eY̜ofĽIxhbX@dpu2lqr)±Zt@ZXOߛGG7~@efe2c^*mJ4Xfόu9f|, T2(1w+hTb?@jj>!t)ѷ @~$%.6P7{P paF4{LR6DpI#tE$?*c;3:>?!7~L&mA崩ecxf/v  )6 ʡ 0yց1|api{`.574C[VAh0 4|=éτfN|&dujVtf:\ֶ }kv7ʷL[3[/N09I `~SP-!:CD8MIN23Д(:vМA TW4(0 u%̔h9ZkLwT% [ \%n7g0ƠRI;~Ll T6 "ʙIƚz3B4z+MH&@L,F|!+:}Q:!pI(?;۔;s`f`5f7[EFI៉E~XqD8)=Rt+QhU`\X'g' o2iǵgБZ .VZIv}eT]Rdn</Iscj\ғOgX}y?`ѸB.K67蝃 rhb̞ MdUS%7ҧ%dok>;CRm"( rY $QL r"# :YܡsrWB EW)D+!d_# Igs(Ľ$5גf%473._ ƂK:P\5[+"h-.͙͙l-dJ[Óa^ftzz?fNܙym霰LOO$'_&dv 2&t 0fge3Ԛw8{P' \q%0 ZRLi>ҁP7W kmZZ=lsCh f>šc3WӇE{F%#_Fwbjd2<42pd1IS*/8JCWyx#g4ǏoyQb2 ھma;çp3L_@ νa; gb߾}f3xM`Mcs{挝 3"(d@xC0yyR(<8U F U Fuwy Mƙ Z3 @ <+Ve9%30%u{TȜL-jAfūWFmz6k:S'͠8#:Sb#8FͬEMknDRn+GjeВ% s'؍Sϝ4AC k+'֌fo=(VF91ڏ =x6/m_%_!KĬ&!4lpމYgVpEyNɆ L`~%BBy4pz8tS:ЙYn!BgS'I9XH׫ d%Xג>$=!4X3.d@Y9CK-! hB ђdjȒ^>t-`x?hJ`0$|o:*f/K(A0Yజ TjaYvdJh٧ iVֹvx1$Xk2A/Dh068rH3!pIs;4d0Y" I}HUF0 \FCfܞ ¥mep;#{|%,3{M`J33#,4myf\4)U숦7[1{u PIkn\=Ht3! Ntf p52vVM@ B͝3`dCug!8bt#B o[ Se V3è>OO&*mmmDbVdYg8ܕj_ܹJ0 5ۥ_,,,,c.7Ve|3a3*."4aRpm{[ء53A;xa:S$&h/bFs%f/wD l M֬g0 О IgTAC Sҏs)5LhYv4WWkFb3F2ўi3LW(I0!|].GLK%J)2C.SƪMl"n(%*Du̝bEa=YZDh3O A~ yU/t;#QY= PR"9Iݬ eigZ0;2U:Qs3O\tTg 4h&P:'9R\lA J 3GftqYLY@ G>ⵞ`gԌf5%?)n͙>kA$ewGz(׌\!t#_ /3H|t*Ģ*PHw R&\OBkH ;BD 9vr -;fV+F?mOej}O6)&Z kdOR_$gKlDhwTTXC>?|<_ Bm_0k 5SaFr3Q5S8 b@2  |Vn󞖒C[et{'1,3J5a̕Dk|fX DfɺXXϜ }]#܎hʍ V3n0dDBmyALOH=D͖Pf56J0xhWGbށ{>ݻrw6<{1N]F )SxfmЭl|fU${{f--EX3,UP(ijPqm|9ۛp f(AT!b9z }]AhQ1 7eJ.j@u8͙y@3;S'^A~"!aB383%tGQveB](-CjFfL79sqM4ϦKgu%hfFٜYEmuP4KJ"'iƚv[*ٍG˄&-Z3<Ċt*jɊɆE3sz[f`2 w1_~IBtK31>^vb܏iRܚjg qW3* Ӫ` i?Cٌc&fFQ8Cn5NP2<1"4g `f抡J5șGϝ;737nxL(kC,$f,! '|ct\27.ƀ8ftH 3`O@ 0W<}̷ 5W n6JPrm Q#z9H oP* |`/30ʴ"E3mNWL2g>\"A,n8t+h1NqR0Xưԇ̺%0*w 8dt3L،L)3 @&4{ξ7#3(l|fF8 Di^u$Hɝ"SP y٪Z!敓a23QVOpx zdYfm  IQ7kh 2ѡQ4t":Ӥq1۝LYLU qD[$1oK%>y cҧT˞Ќ$XjcG>tgzeC/.u.Er8s?Fݍ\ApkS2M?7n#/(=zqp`/͎_lWB]fR{j-p'Ε@$ϔ^ {м#DE9fisX'%A` a6ҕo!$ƙ!  ^dkwat0!Xbd^P hK:gm&Yqzl|~ &T0ĉ b3M飿f2\H~CSoCӂw|ߵsv\f1J(77HbOV߬&1#̘11+=j|ͽ }q~1a!i&"3BffBeKkZC"ᬤlh41}*Y1ڧ \J.&Omm,L)LHƙ6mNWǾr>~@{?qwfCS^[Fa <Q;qw=((23r3?Jѩ T1^B̆XMoɍ5!6CmgWrńc$3\)bu0g@ ` lx~ʾ}k{suصpZќ9|~ͮr;`p0<9. a:fIĬ!y×- ә pxvg hY|yJ韝2bdFLAmFuuy3Ԅ@7b"PEˠ7V ngNCʌKn9htPTK8Cl=bg&!CF2 „lF4(JAz۴bXnFdf; zL8y3rFԚ4;@hRa ɗż:+fb죹# An5Ӛlf3\*g*U34wq3‰; y(:XYJٌ͈L7LX,w{{ =30'GG!5xU*/6Ɨ+ J32ᰤ3\k!i#M$->Is߂54W,ZIҐ%TJXuAXMpS+O;YWi*iC”#DS*.9k8B`FHgRWެMLKxm(ZU gJf,UHVz{ɏDmD\;.eBI2ܖ$ mLP3K.ͺ҂%"`JQRO4G?D'*PO7n߫5`(DrHfD*0z0*dKog'+ᆔ1d/02/32* 33#=zB3`qPC'38aTCfs:sU3EPDB 5"vLUVhl{4tPS=HB#hhk[E$~h*32}zp{@s3ϵ3 o7'x&_"6ߛ}A?35'_O< d 3umqs  0.Q:u24r7xFP" 1ͮfе RBsdcNT9Qh+g}ex/E˗/f&4wdQoOgw }>55Df^<B3F5SltvQԔ1B PУeA&6gJזqltHҜg8gT@kJJ"<< @ޖhҤ!PJe>tV.!HƦue3XV=g8lis MnN܊3ॉ}0)6wwBPfdiP&TKN!hXMfZjZ]5 &_Xoٺ0':aBhV41+<[ǓʜZ39L?t 56:/ v7i];*ݜZ$Vn2LH㰖  GdJ7eO\RԊƱ1? 2W䠡6 27Νkt\Y8kH-Yל5 AM. iD1}q),UYRq ,O3'}nՔҾkIsT|O|cRc1R_BW쳲ԯ+ 4!ɺT:NoI@[3_ĵR.uB}j Iɘ/9yC?@Lf]abαEȬ2{3$ՙ&;\+`F.Ld2ě n1#1@ Qf7w&tg 5kBٌ6eS30PBJJ7+4'OДGCH[bDd&;mbU<%qkh:p(͡㇎.̈3sq2a-\G} ]&).syq& "9[3zR qod^| S3v,(yx>9rfxrwjeN$*<:Alڌ(ͮS@$|Fl!"R/{/_@w^dţ* tfAJٌ;40kV13uYq^!M#`l]f7c֝f&qy倊T`l(qro 싈JĤ% 2vcO7 p2kLUr +. H[8>[ϼ4"?Sj9d6bHf+XtJtX7 zxx@`µ*^Õ28)k1 X~ jg*֚骸d-2sv"t LPtZ7_M84tF.ca'g4By0)@ = *fh\)M@tu3Cp~T3TKD p3)zfM'5Lg9|.۩8*_OT:YG' g`>L e߾*0[!*Sbݿ^A;8_Od\q KMx~Һ='y[! JTG]")׹6eO}])%f/Yw` :M*㟜 :Cg,~))RtYJT@ }.Lw~; ℘8cwooL ™;2/C8ӱʇFyQʂ3r.yСCCf WT\&MwϝcqΠ7uqalbf&n4<„)~Dt#:c cQq&3-qLi#]ҺއLRyr<'2$f&a6΄٬̰Z%A fkFy1͊a1B41=Íd1di 6З1a`km% #}f?lgg :3"t!(=dMMzexΔ5`Ok%yFQpsF` fB3 g)@Fi}n "*c&!64cc0('M4ܴr et< 1^Lqzz-pFfܥѲ @P Xv8=_7)ht3Ch&zLk lh2CA;VuB f,3ff/הB,h-иrOtfW 066PtwO[@'/lnGsfhT@)04eZ-!r'zЪ0^bIkuD4XmCHEQ NԀg+E + 24wf iߨ<4@sfp9BfV*3.ie #ŔAhEpXJݙj;1%pANsg| B:x>YgG˯4  oj F4HmHlx;?&b*`HsoOe%h~ d\b89EZOr=N.6;"֗Lx3ȿ7|^Y,e#}-`Yyh9N9YV톛Y{;e#3NyU ݄2v Ba.':s g,sլ@".͉w*]Sqؚs¬ln`hS+ѕ@l ff&  B:^6 7{jfxNl~}24hfF<~hKZYDd\5! 1'af//36o2z?0F Yd>3_a,`1 џ)E3]kBOz̘áDoPmB~"38E'32K+K$~ZEm-{  :`JiqՌxȌ@̡!${NhĀ!ab1$.l $!M\Ǚt}Pͅ5|iMU(sPvhǠuctfwvJ$tt#7O0>hnn?`eǟq=GElowqs308d,s+6e㛦)æ dzfd͟Y DgX"DixSeƿ=Ϳ Oab&3f`df{{wٙ02:EhhhB`A5{pwC\9   4h*ܞ?T]Ksƴ\(s.Y et2a -&tg޳f*7x33L} (3OEuM IDATpx8 t2$$/9Ctax ns$f280\T᧋UV1c#-ag=-% 6>M0t3άyIX~8fM6+B&%9CSh5#eղ ]$:S/ܠWS#6y na ^66ۃ]]iϒ[i΍#'KtḊa?UٴȻgOpAotDӅx?9Cgg7)GulU6# dJ"]6?R64efLNenp';3cbe|v&f#idd$;&{'}t d?<Kx>pfj $f)+Q6C 99Zu<̀挡[C9"0Pq)lab"n 43\3KC 0:h+hh3h͈RqyJ1HTNYD3r31[׬ךӚ":;/0"4٪YMHtfѡ!BI0$@s4f4jj`@A '/+9tA<]~WЄ$@(u,..LiWh .p|vCLrئTyD\dWgAA 0 `ڨD{m2覙U&?*s3:fD/@V~kh_0YUU|)9vp7_xN Qijum>ݙ)zzB R?: 68(f-3{O{yS+S=n~ų?noag ܳ;|9(Sڳ˸!\n$x= $aM')iRo2T0!4RB-ӏ?~֎LΟ~ jf3_|9"&3;;^qp8# knY !2Fq4iǍDxȜK#9e38θ 4ti# Ck1.2es "3.a3N„fxX3c!!c׌Xr4 e贔ae331ed&S C5PHzL )b* 7ggĥsL1YWЛC P'+2pY2ӤKDj}|y9a:Q P*64[!f,L# fC_Fe1̳y3fPyD3,g`rƳ4H<<@ @23'eLj !P@\T@ S@pL+^[rWy܉aNzte\^EU@pLx UOi\ Fl0+m_^n30hxLu*123fbhP$(KWk7SdOC@PUtw4iLc3#gX܋,'%ںC69)omh9 Pef ynrSi,_I7"ڏq&o/Tf* g&nmiS3 3@  J+}:y `U`L>f-OXm檁4偙*2P6|91Qds22+ixU&Tq3Dgg?ƈDՆRjޟ3 \=JPCdP3ǽF8:<0 š =(P3L."-J'*U3kU!xKx$3/: :0 >'Cb8%ynfa! 5m%B+thWBa0tr:4ony. {[ ;+@7+iB `)`fb$˚;fF&M.1H>43tKJ2sKfaI_6plf6E3IqMH\P/ T f ^"xYd3 r7ѭVY >*#ϲ Up)u;1vJgh<a;LJ>4x5NʤXS!RtUd@0#BͤR'3dM9RnhϠ0iMț%ٔh <;=2_SPI k6s.v?o\7e|Y+vYF6?lˏe6H7ϼa>oݔ2I,f؟Ȫh8R|nOuBg?N  R8=ljޙQIcʾORfqcFy=6ޚOD'{5<";!33S!Sp|n3@3%eZVhb4/=p f *faXw掿^vX3kSH1 xf+fʀD ׎EgVS gsFr \\Ċ6~ -..}O2jST)T5 5\53gB\,,Q4~2wcQ'5=51Ʉ)K bΰVgfEc\h]4cF}qf<:4ƕrvɺBHuw-9ER'4%_̯ږa6W͋MxD.9)yΨIgOS24Rkf4BlƢ1.)$&4q !wy -i\D)?.*ѫ ƌWPy1&y0~ C{ }X,Sq-tʬX-pW:NgWgINLxY ZL!3;N2 Ji ҩ2*+oXMAEse3I5MA5薮LC.}vl>H_|".yܠu3A7ydӎ=7bO}pw]{3Öfm bkQm':wu[vnAW`S[ra[na;;ݖwRn*f{1 > dcf$udm@Ou@ͳ?OZ+v<)4u4z"B}q?{HXB/cC䔓R,&$?/G3$a<*  _I24e~t{dOXZafnnl3}f 5{z{~zs3{@f8I5']6Xe<3:Cu5K ȒZDVՄa Kfx .46П3@gBgә38llF5p`Em&>S60fКf\i[uQTQ:*IM:h1_T4VEdQ3͠RLc2!u([` yY0Oh?Q80O|&Ttil:4bL3lgK!XMi x\x3\a{%4ߴw&OH4l ̼ #BYF)YLCrC$fHRp7<P3I2IEw+`DS"ܛ "&GOǿWhhcx$ }UzpA# /Jo`Cs icK9nx~f: ju/dU _˂4"㹔 f2U0'&f/d, ;Ԡ6&F83y腇f Ϊi pT2 :љN1>xΒɧ0C9p&Iᴔ{O+=Nʧgwl/ܚ{{O^޳@ͅ \~G.U?K='~)Bٓ̂M]{+w9--\!Trs_ݵI;SyWOM}=vAX6D&KG<"/Y{1{֓.Q8(,%ņϸJ/J(q]͆UUm?#U8\WtM5aE ffǬ2y:{4vh HQ&ű9$@ vvwٓי=3@GM/wl y}NaǾ|DŽ1c ,*ft,/ye ύiQ8^>y yPUᩪVT0x ^ag wbefa@kM mDhfK,Q  3c(%[kF™~Lap0!H+Cٌݘ`oƘ?1qE3 $Y IH3#Ͱ fe.c$AeeB 1 RAH|g+uk\F8F3stELb6wDgnlfkS=# q]~( g&;CP9iո B5ͤ uAo~N]fGD`rh %E@΃(uN) 6f 3LghAX+8MehQW K(ӳ ǒ&x1@!YHMU_hNӄJF9d3 En`&!RL'u+嘵ƒu<@!:"i?.e+W!Dlff(&CZT8#̀`.Ѷ%z3&qdyRm9i||ZE}矅ED&'rk1g{AfiT1xU[XgֺUʗe8EWlY~3Nf:)KxPAO?Sҙ=kNV? [\QQ+8aTenpg ^)ተ!3Dgzaf(rWKNm왩vÃܠApANs@ λf{d>4T) (D8^THy{޾#!0`'e=uv9F[Zv^baFIːя.!z{'!t3DTaѣM6M[G|sʑ4߼xҥoz^ ɽ+\ǭ;$US҂4xLM|l_0.EHSR|I9 9=;"ڡ2T=|gyt>bpgF~kCȗ_<)5a,3LЌ`{D%!fL3D}=Ezyhl*829 UP%θ݉v%&hϼg6 QmCXc@ cf12&tgПc:J;j5ȏ[V&0V41I.0 wpF(zČ̊jC UF> *flR3Le+1F$sh0(3#\f܊^3# 5Uph" fҠnV3raaN,[@hMˬaR68@üi dly#E>b/47A}Ƥ&* "2pe͐W7`Zɜl3j<9qeDB01SE/c(ƓʈDE7«eLh.fLݧu)`,ͥ`xV8W= g>=ldFGP!ajfNd6VEb_C K>@ 'iUέɚNNTIy QFn`9 ƪR '6`I ft@m620)hJr3t檸;Cj֩߸c?rьL.:8TF!=f1%?=LW@e L=!]ʈHC#^Y^lHS4M^zn>rp^;HYK!>!zlUflwtbC)))KVzEs=+fNctÙNq"k+|'8s&C¡bfgh?vH֑WΝ јKAk㳳AG>04e ˙_k^4`B̚f%͉&V`@D7_9@f C7E*n-ɻsT7NМ4'4'wcO{UfpYPUx$BedfvDr{Fzp|USs˥:(!brMtp#Ye/Q` IDATHA̰y*j@H*tz pp/;V+JQ.C;.$**?_ѠO?aմA4JqL3hf? i'3i꿁%fUoեBzeëi vRݐ,G PB y`Hp&}Țb7Ýgs~gOyqRs6Y/H!۾G8(w9R w BH@sS O#虧8#*ݘLRo7%P`g3vI$!E =r7df=ܙ{3w4 "˧7̈́ڙu=f:VkGGH#8T b\qFDh+{3ܻ_}U3`FႤ3 B\=`gjԩ:cbƉ#^Awq^,n{i̴p8tHgc5$wfUB-g0MiS\Q &3kĨ Y]ӇA?TT*Fg;2wdjHA԰:Tyy4ܛy]T# ^!Hk+$H' h ،~67^}b /3_;Eь !z)PEIm~Lڧ]y;ava}"̿3m,WO.pcoE#j;Oj4x'߾`~mxK?#_%C^PPLL~cnkzޯ1(wM3ˊ:FDx͝ CSzhӱ5G]9z$E]u3?)z3RoFB8l?I=vvܳP3{{kD2 7|PlbgWE7gkveCyZ*<`E Jc^71wUgxNt%Wj56۹83m3VF-lM *31q566ߟ\4Z46:S× fiie3iq84Lt\H'"ts@a+z23zn?hKt"n3/ښo242>MI鰟ls lXltSF\|f{ Nry%2?kZ AOl k?1',o~Γɚ\g4~$^/'O{1z3B 4=9140c9shL=NP ZzS,Q)U@C~L[h pa)Y@4v{x62G"Yg!fS=/A:9g/et 'i-g&zݞsU*"481D; c_ضmmdKS\p*1i+JN^J@Bnc My%E ǔ<#tzVbQpBa*΄eyeσ ]Y1 d׬pFwx ȈV1zvt_3@9X@L7+ Ț|4hfB?VlS f$:̗B#6X"; ^SxўPŰ@&' Ƞ" N%%h|ÚII :2ۨ'3Q&/\s*at)5pUQ;&P6ieN}}͙ELr~yY3;KvbS?F|_#¡8嬒̃LB@s ݄?sxX7<pLB5fEAxM8}cClhhUo11ChML>fhs%e5e 3k0̄:ɰID4E#5i!3"Mp"P1{Z\4dx2 ^It~Qz"]e0,þ>3uŢ:be$ALJxM1|K,sDcRpPGoӗD/p;2'6h#Tjẙ:MLf~+H^7d)K'M1UǵυX@=M>ΈL'}4~I(TtҨlU(pʬLv@98v3ua׮]}( ) l#}њw F=D&lf qR`7*$>RgUB/H4[Ut$H~}K%z33l5CkV84&fЏѴk/ej3 B]g6# SPtnv*eGͳO/ P%3h `-_{mP]svem[Rҟ9.*sYJaIG^ydݱ~.I)eƭK1e= zGc5٠o\w1ͷ}/͹tDךC̙;klR wY\; ߞ8҅4'b<ٺv'x楯g_Fs'SejII]<3<*P!М=&HkR~&. åRp)0}+ KJ"3ퟵQ*B_䓄Ti!/n> lHR3"5&*f7̌eAV_i__i dTJ~5A] pB\(LA@ vNqE淆6h^fhk{=hM 3BnFd 'DӆK-̈́d+q!9"L6ͦᴙaӄyb !M\6m3o7nu˹cfy6 Xţ3bʭ}.%"@Pl/*TfLfnI3::u dt._}~?A 1 464rr/`Hh Lxԡ &١DL 4+llB3*o""7SI]bNƼsIҘc#|g0K4]͓N6!=1e@S>}H":ԉT o/&g !_T? 9[0%rʖ"oY͌ɂe1Sʪf\ V;:zw3\ :3jDGUs><'LѨmcJ#iL{cm{ 8dk×O@KKErWqG"$%ݦ֙̈]G{'glΖ(َKRv{?~ZL{<=IOFz̕0vɷg=Ib+[-sa+Wn^ߚ~Ox>&'c Gcnh~O1߻n ߥoY;M|'惵?c1X&ێH6NM5gNrof]rgvH2 fbl&،KdRLNod b43SI\c3 3ݨԈL<"fǡ 5 n| 64S32 M$ @G8þl);հ>H-~Lax|&"Acfg.܌Y˘i$hq?H@ ~ 6 ɲ$WRDh\ް0 fa(חZ3Zb"V 1cEFd pS 9FdOUb*5# ݅wj)3b>yf;Ùnb4yB,Ub_Sbwl(oF͌Cb,===z37ـ56٧~'\ӃN)Oݾtfǎ۷wG증U/l<7~ܞwwf^}.F4d6Sڭ˿Ǜ4OYgOďZ4 'g5k/ƟXğhio zĉ5 ИNǯixވz>:JOFcj*-᩶R|s3)2l1o$6U3B363P "RmJl6? <@aﶴ={ONuU,3Ic/~9zLPe!h$#Dekg}(jL>ƫC,k7ϸ<:~. ~.ʶm3ltnBr&g 3 a63!Z4cXO6bĻpU&srQ-r "#gP!&1&3ʓ3ܔyNop.V9@yp?$93u3$ʬ$A$2D&dKHɌ.MfyB-Zΰ[&\͖i 0SΊ8<0Aõ38V/?lLa鱾JP @ g YLogg[ʼ£0a#h5bV3 g]}𬁤I0225#oPx*g P$kt`kLth\.VQzE2Naq:du9sWЈY>NpIb2t\ti-f^ !ЖuZv3JrkY  FY^?rÖ5"ir0r95Ca < V c НfI\]J0C1ә>@ @լ;/?On ~86@/XAps qwM$K#",f"Eьd*ӅXXE3n$fhQ,Fv45䌢˕B{e3 6\\RCR \f*K%Mgbn>R쿉 ` #3@ \5 =Re@P,( v@saĕe*` Ob11y"Tnmd^8t诅B@NlrԔ2G˜Y%s15 }~/Mv4+t# P"T;C~J;+Z7_św 3Sy4g:NwOuPe}#G'&PS}lKAҥ_ݹtΑώ4^sN ~7x/޽#tׅ;~u̽_tҥ"n׬#"a)Rn ;{ {~嵬wӠcǘ?w}ׯk_q߭55+wֈ٬Y#vmu&`e IDAT`ڿ{ӫkM f*[3@ULϡjՌLeRiMOBƿW{7lgޞ탹&6i@/b$/GbfvPɽ:A)!ɱK΁ԌR]0tp52 Q.b|Ul;C;0wfxƶmqضm hD 3324a< aoVKZ! ̓02pƤUEFk҆@M0I|В-o\{Fe5 B42ӥ}bdЄàrTXBAg8*1&4׸TNdD|sp.=~C4uŏ7:w { 0a}$b8.iƀ fX`-RM$$MLU3l+RGAL8]I ./P2Wzƅ…!MZf2dBԋ& a |i`c2W&ΙhVW7d`: OJdA ZC:fЋa4@f0VZbSN:Ⲗ_XH@,P>ǙtlQ+fr+59Ӭ7)p@섧ofD! љDTgg ,?"@R!F €xx,xg'-_{fqNGx QL۹5cם G3>#k;|frњ,Gf<133̐%tfxf>}]-3Q564=S2>Ij s?+|Ӵ!-W8@a&VyB/[ZmESN q1elc @ š i͑аv&$69N0Uҟ\}Hbmj_j3:Z-&,goߠ%F5#(2e$Lxa,\5D&eF/F/-s z0Xj3l.l4 :)`WA4lܞfpA'ya ! 1PG\1fDJ̀Lwc}fi%$3n&9QiF٥2 ( MTwikpitxg0Y z 21 cK3-V LHؕ+ rZ\ XV`o Љ>v_ ufz9sf胮Vp3v.!"c ̋R,i j2RL2f2ՒZ`*עjR3oȄ_ԛ ܞn 4Мt 6Cwt7oo\xY d2>6o?t@>U W/+-oћo[|VyCi|o$(;kI&2![FlfH@Si 4n FPA_iҿZAuAg=9sl174O7.j z,\!ɱ_ &;b_}{ F3ʵ3BK@Zeet ߳?#Dl7y3l)ѩ@SB Av$Q9Pyf{# `es_SI섄|aY5aPe3p|MVE`O5f' *CVUDDW2yZ3 e۸-22774Mdф@Xm-.9%$*W/kk Sj- I3aV‰d/p#@kt&y+,Q4D&X)[e,LڒQb0n *)[0+ϯN/xf i™DiΣrjP7{\eЖX#[.8gl&Ct6>̞3S5G_~Y7hx~OBPls`㓸ͷrVlE?q]=_t]4k/ՓY/|s쥠O=s&=fkVW|n_FS3Ǜ>8t,k.[8Yļ.}tx q2)Dm*g,(Yћїl]@aDlE3;[HABX#KCM6ȇ:YAff¶hOaD(ii~O7Hӑ/GDӧ_<ͮ[0uP)w37HCd?_pӪ=SoCZ}lլ5a*w)\a,m2YkV6SV61gBFL qsZАrR"K1E44EÑHS$/Ll"kD@f /oo2әp~2 ?sˈ9 HZD ( yօ[ [hpLf_5J th/_*yyƒOP\/{aq!A$9K3l2gXQHĀfz&Fg$:Cg 2TpY< 3rF[#՞ݷ h%`aOIgЯ=W/(iCtP/ҵ9o>y׈7L-SRXIG  0 njVZ++-E'  n V3< C@XY~3xLn9`<75#5va8 #] lm8!߽qftwU"hFkz| FnfN.ҡ2fr@5Tr=su>\*4 Œfi 0N@Qh0a r R B 4HJ#yx>qD 9VRg qNR Fn@Fgv޽3{o}k5F'͓̾,'kز?E4(٪?恍5tt\c{a & - @RUH|gźdE?9Sn+EE˼*H$渚+='3w9z`K-V A\ sEep'#u DJjZQ5rjeKocbܡj!`#y(8\CL2B%wx9U@zTٌЌkPfRʌf`f+ƜT̮͊mm/͈ 82ʒ?E̓dfʠ3sټn윉.t@{3oeJ?$d>~HG_wC(Ni6LMMM] QFb3DeFV Wr xZX ZNjިQhϔ~Cm]yn(^K(*tg(2ǯāw[lq"LpAMXnn7{)2n!.)ʘbI0%V2d&7,?8w2w |%|$>})-8Xp\9sW|ԨMƓ3ܫ\sq&8KA1$46񙡡Ȝ}f.k(ւLLepKtps@X@$͡5nB{E32N= EnE""83"1,F/`ЍQXrf%L,o+k@P&n`7?XʂYd1t_NN*䨨4b2p~]͎mvdKvfaL9( @4],eΓ 9 sM<]#3/'8LSV3.>ãp\4lÀfj 3;8Zp&R62?+){~Y0#mI!V>bEVWѬ,L||>%r𼭡̦wfn2O2Z5٫d EWP6{7C 06w@63W<' ITiFdF=U6S<>33) ]gpD3G Et6+oN97l:EXtjCcP; Q+W][Nsљkf0y~D,`) )1ԕ '"0'tlbNL\pɨc f,.x.\m{<×2ӂ+ 4R6e4d!>>]\vFlfs1;*+_O5viZh13>7/oh3gQ{nF5C wDxD,{gLhFw[c1*#:8:ehhW5&- CQ:#ĉJqKL՜Imٕ~3榶O7^eY1ڴoYWo?k$m0?)7\1WC"MLg==#B&zBl=~ǯݨR7Gg+!{ܕyNkh\w_)*:l5UXV$x4nHlL-jg1u ~m]a/_Mpn*^8|tÛ ~apu=H iÏB)0<-0Lx?לgrwlBhx4*H-5c2J33eQccQq/cq ЉК 0)f (Pn'7g6("TL-vĚ 85:]!|F iFtET593v**AȊYd3 6Cp1{2ㅳ<+CC| df *g %G.'pdh;o3 fb^'wv3gPxfXJ&3S53~^4"`@b.cV88CDq3l^zY5i$OhFDI$=CQx^[IBm /fFyquiHMӠxTBvť6MNE1Ŵl4Nf:oL -YNg<z 2+zX g^X?:7[3(=RW^݌aLDfu%`Q~/WM>kތW y}i]+v]`-6^# )DMȵF t>$ K^ƴ&W:ћјFg<mF0*mFF4 30Ek12S<ݜqzlˊf6I?zgNF3M[>O2ɓOK/ Lfg.WKG9c@fDg^<3 7[.a-9 oq<;əS4DjAA#W+GѢYym-ZB19e-:3(?: ƙ׹rYunR@a1qQ; c˸W3ZZB23qhҌfآl&iB:b5HA4" _ܥ}. \a4%22:#]XӚ)>s84$d?&i™Ӯilk9AM2%GфYԨ\5|fbl"ͪ2Qf XzjgWfVBf$c~̈́Dy YPp-7qbu H\7"B̊vL ED"+,g/H"FyL/erCo’37.5ܘ@VƐ)^qrOY ܙъfL`9dH]3ХaK4ss&q> /P5C[`lI%tƫbURe57dIȼs`'3{sMuiHdIu;O#D1!ّ1\ ^Sz{%Hvu¤n_i^:o Ugư 7AkJѪo{ͿJF(Ιpi殍%eѬ`3/hXbƝ+ ykM>a^ioJ~[x]$"xF<8ꁃAZᶇܯ|fmJgF5v'-%.yʂ&^\f֢rE+͸Ʀ:4 n54}m1 "!&̚؛2~'''obXphKڬBiޅ {fК|4Mq"%OHl': BꩠN52؃Ak@6iЬ,X{{-g;3f׿D(@DuYr5Q$>38"4v'Xcj;nVeD S28Y| 9!@ʍSbf2Z?|:a[ p1[̈́.&F/Ckə͠3i6T/ >&Q|z &lNiL1|GaH&JsbtYEX٣96P35jz#Q]49֫v&*4q$i V z=>JL  tn-s3:f@fM3X?'gJ\3IInc4QPԵPy樂֡ȋ`a BmnL-6%2?{ɲ|挗S3#yN hEͰtf? q2Ck(q|+3>~Eɗg.vu\uTsPIk& X|faf X8 A 욝L# ⺲vʵ5R5Ftfx3AC1,: Цh,I.@cr!#R䇐b8)?LE@0K 1-C,\1z\[]Fe7e MؠNhM2r_ys1g\i`w&8#b<Mo2V[l:KН;hVfK4=zX1n2xa_*gDW IFt @ͬ9uR1 ,lfBWյά!֥ϮBl]p,ALUԸrdOL#2Fmm~ fR41o԰}ITLDsK<,1rR}H7cscg8<O@fȎ@FgJ nhcjdm16 c(c"=V1ϼ_Ǚ=m&cƷ\eVaS?qnHު-癟yWfD\R4rب6]")u@+u~jׯqg5rfm7mbTL`kwZ1z&$QMb3 >?dqs ӄ3{3Zl֩R5&{hkdYg`F4uldV[[ O_.}gM#@Bg}=0" abRRaFBNA_ch4!r4Uղe͢4ΈKf6Ee<_V FBvz-ьdhO?'t.C2hhi ({<]*v܅E2_{f! 8c_%>Y@Pt fDf68O5f4݉ghFVJfa(9ehuCˀ06ts(iUg8ҎIe3n׌ō ӉAe"LX8]< JeҗAAF5h ffLp f 4Q4iu'œY GOb+-< g>nqixp.Q\6CTd%3"ByC7 T_FuhJcE=14V  8 sh . Z g3i t2d9ٌZ(u͌@MAA,g!M7!j*ЛEdUD,.VT jI_NΆ$/d-CfVleDޞZޡ;R\#v6KDA Us)y7JopeT<2/LV L&LgΩ7`ÕY+A(4iBA!-3SSL%!1@ҜٓnU4瞶Vz yh|m1Y[433/7ͯ~?ٚ_Vh#c~{oÑ_}_aɞfE\=ᘛyf:&0U0< ,%E^kܡyu@CTf#?\Xx+ $f_pńŦHItZ(._Qs+%<-\yi5)߿7hXýJ4Sfܩo ih^:lH_s$_߱cǖ @+<_ni&ͰfBq໬f]2lfg^+矗A7è=omW.,dECYTgfEF1F@ 3\,[WFeٗ4Ye BniM:hFE>:͍0M@ġIí:EAh19\`EdҦq L\QQh ^ǀ#*f2Vf 238ҙ g94--ANڥfp 4'1/$Er"4Z rf}4EFjEofb" eDbbwN2Kwcː,t&6TdҥQ-wl܈IVs@X55H n쨗`NApaqJ,FW!f`C:b: h:yR Èvgqr%?y aB(ۛ.k. /  90]AfR8\ib昻Lh̅.Mp3nfL0) 3 LԍsX}o~ͽ:g #=*d,֎ "Sp3F$&&83,5ؠh%:J:LEdp|6u9Eflh涞i환Шfq]6^J3VdDXfwE`W}}2?T3g'-m9MτAseLE2,XYy+KjЯ@p7?fv_;04$Egt[o95 0\%2JdfDTv{{/#+f 0f;Lhq;5,zUkfր @PF]n"sFgR&2ѩWvF_IXB`9mY F\Q٧QhTN mmHȅufj]mM[Jc;3{2yzihM+644Cֳ-@Ȗۗ0fر~7><ß}#ch؏xfdq썙7|vl+$9o0#qƧQ5s 1_nÇUo~3l Yu%o qj/emIaJ`@%Mf45 b4t]ď{.㟷G|nP 5+WDs!)gBͩ t әNgի \AW٫.pnf5aa3gq:ee|rP&f`lP9+ύEa#稸qNȅ W,Й\B` 500q112& `JVZ.+Aϱ^~BipCCBfkDF17KdxS$l|dFPrZ#b31(Lʄ [*233sqFdZ ˮt Nوqqc%@ZPN}P73iE/̙ny*s[8fYxй? Wluy!ͬ{o.漮<O׾K2J/{"3qI3'S3l 3p fK_"2|?ۜ;RPzBo=[bЛ17էZ9|͚zv2~j8i Ts "[_6}E #[Rq fp`rzc;y=VOڞLx_n߭<9sL4gdl]VEuS[Wʘ^YnƻEfT2Z%d<2)N^{VჇ8tyC]6ltdF"ez],dLb݉ 1F;M< 4\ttt@2ok]G̢Ђδ/wO3wi5bvfJPɘY2F9),ʮ\4C&E!1h\dVS)8]ϛgtoAhUh'Ͳo9NٿT~g㩠);1IWƕj i@dV5_gggBCɄ*(t&xR9M@4$0IXSZT.n +c1jߡZbоc7Q $88sU&d 'cM35lE9o>n'gI g&~dzh Yh"l3͂:zYFv PFbD^Fp6 7JFh͌)?'iJAAiu8*C822/С53 3 z3 wjHڔGZK01=9wrDGs7z 3/Y3 Lie27$jT*ze-YtvUjd<#3Sf::{OK̥Id?"Ԛ;effr͌'g-/%}dLb4g~χ7m5/'m7~j`-;ĖsdoKzju"ٌ756Ӡ:2[O&}s.xmۉ*ck٪^fLNJq{l֙UP6 Me{[|x/3^yh2ޣw.fM ey["~>+ID<#ۿ{ngJJJlín 8c W Tt'FcB(j BV 34fo?Cf4ev3^)gKf4K~j4Hf=/uv9xX;Zwտkܙ"|97hm)[xm;wGs t,(Y2@grBFˀk϶5XӵÓ5Ԑ^+E7M1F*`->ow̨ fj&)b/U33?L$0 Js6"ߎ%B3%4SYp8!I;;:,,ȟ޻n$M̺ByV'^kz2=}S(ҝ֙] 'v7p Й3=ќ%楗 vޑviv/Ø_}ϫ^Úe!FD wH >Rb0%ifљ5HغcǶ7A\p+,e7MLIN!֒;R*)N07g jf/NtWXwĭzv0es͂+Vkf3<)Q6ˬx/>} dxcEߟI/7 v^+R4o@M&( D)13lpW6 2&(d?ᚪh$XР_ǀu}u2=~(L lo~.uGY`l:4xaaaY LƕƝfpnШ f+mҌSD {f %>gpa3g0L Ul,fQ^`73U#]`  Lj ! C%O`Hbˠ7βX/>SSs @ BL!4u\$Mr ALw3:L΀̄=\| sh\9 R4c۳{Б]CLɚ_ T0C,kc`X frعnN cgݑ2\+`.L_ MyČ2*s.,oPOK&F< '3tlAŌ`f&gNoْK1՜tmughiߢD տmA)0O{M+mի> f/X&RLɮ 675k4[>Nz?-/֙o>O‚fULVWn-Z*7 9_ުUzϾ`3.y+R(uu+|/mHp%$$C˼Ϟ m2LT&,q_g?l<,)}wJwgB\'8*9#A̒:3_U"ff3{h,^OUЛ16f̦7s@-`,Q @-d&2yD$jfmͰY ?eOɏa&&n̠7SyJJ%3QI3>7 C9s <;a;Cd?x>C  p#3ͼ:Hj+k7[[@p9 1l~\2f 3'"3'8ޞC9`4@𕮗4PƱ&n,70QÈXC,܊$Lk2$IpG[ВPΰ2ti“px65Ӟl6͙ܰ3@<93ɜkL*X<vi(`"Iqո`gjرQqe8 רqMM0f\Te,KK`'kʀPP `4Vt1)=L͠V>]2u t T1.a+}*D_frbxfn^|J֕01sLF+fQF3 t~h5+W{6|/ϿA ֎{6tX\øypËĤ( r'Q s8ݝ))a%n !;l*J+*Q.E Fǿfv똗Xi-XM~X4L_8_7S^B :WS̏v}frYUvxf d$yA|L! _O珏@hez"+"k!(z U;4APد꯶+C7SZCɜx'_*@e_Ng2@ ~3:ZV6Ȟ(;|>J%*C8Lz+Fc w[׺-,- #˚Q)#Jc wY%b00M35g§ Y јiDejLclͶfz T 4ܜTB/>> NjڙI<2f9JPL{krP3@uQ,n԰`S4M#CAq2PǍ hqm@Zjb~2rN;ѡ!uk]kA+jbЕ95C;Ȍ.h *u;Yr0YV3c&@k<n=.!LAcaDODGD.,pьPɄ&fD\ZzT"hӞa wyx"NPv FnKlggW`QT' =ZX, dRSΠg] fDkZ[4 gZnQ0C6Ĩ0R3Bg&fgN(;hԌŠ`Y IDATwhjAgd<XHbI1BC` P~ЗK=np[ ѬVPb@䌪ALJgjEg|UJKW̄0>/&#lgD fհX$gƹCǒ|=鞿zN픪53LpaUP9n3 -VT,qPf g8  0Q/ˇL`AL4KVb1$ڗPf\5!f3CX32!4M315? 2yZ%,ey1gf.'liMI/f%B_ɒȲObN%L31Lf3/kW3c7M?)ŪsF3:f;b1W'BBտݖiIYCZpϟ*4yvʖf]m5cggٹj:9ƛWmؾ߹F^?>m\qg߬=ZSvoo?wfﭻZ4#i3(])rxDa=0S ˾so{o?+uFSqf1GXgXpw@΁ZY~'%X>۱HdF4n}pJ/ Kh[ m-%/:l'eF7,a0QOSriǭ4NP3Yhf5c6W2gO+U/2& .z0tmj2\c;CḮ4}h\pႿ99afGrVplţGC07#5*CW8ZfW^ۉ4lRߺ}!"S3B҇F &jF`&Xج`S2, /հ9w 3%c~]8w H?h yd%5#qb 3+Kx8XJ44 'يIssxq3|2g3L]0(|JJiǴNQ3;5@#Wvl9`qP *` 40f\c xGH3H<LX;qxEO3nH#9GQVp n.7!:3 #D  1AՌ+hP.; Gُ `1wٰ:zq)G/{z1GB(,d5y13CެyX3G fnT#3F&;f-cl0/'G{&x``_$!9̝ԓDg"%'P"]?z))9)`)S6^7M=!t=5 yf15X{"dm l"#{ Iٽ===hZXHkɤkec ==&+Բ nLZGm1!dq~J/>/.m}CN˯}3ܹswh7Ͼ,3Zm|:@J:w]g?0<܈:"к{ͣG=8^RpaJ; ]pѭtGEEb#8bQ pp![Z2թXb*Q%u%uhVlfYgfYͣX5}Z ` gTSl9x/gǓ@g俈PF'ݩڌg7Wц7 ;53j<>(;;ǣ˔d}sl f""?c8x֊L7f:AY T{]E3t w."s,Hy$2! gvDoF?NxLf!Zi7vh: dbC^pzMT??}wߝ~i}Uu!w.:vf[`m/:SRGd&{གྷG>1p0>E߭p8:'))au;;QW;aЙ% h$/FiVFgJ,tjx &~?5@)UӄikVSwʙgmqBstfFH_Sz>O/lɥfC&z3Mb2mJ++!7$6.Li0ϼr?SV ѢY:P Prw!#iN j5#^sZ6 Ѝ_n2)A__ "(7seRDGҊ3H lrAn&^< fp {)QdLJfF goW f›҈@bf XҙUhЈp sfrYPF Z&7Ch瞢!`8m#Q+ˈ9C5eUGgOG838fYZ\sHXLeav7nLALEąYYU%qLX39mAe]<ApA/Kj٬0 4p~6N;yyB9u..|3x˖4ã/0%>`3- 2j|28j>/,o?%}j1ˮe+˲T9Ktx|xt>G~W6_ڶ>^׈$ڛ!o0<@e5tm 7>uCKG{‘߻› 5.!{-q m[b\ &r 8SR ]:™݋&3h‚/xpJ0@i:J:,˭XlA/xX%)6*@SddDi6cmCѳhS=ri h d95#bC 7ִ\i/Xɜp9Oxe# ͤ7îf|v23!"S9q87 ZSo,x_.4af沰%@ScTȣUP3Ӥ̄DV51LF6_FT&@%9HilьL+36c)Q*I/xh nh,/}Emr6:6A᪙`B['@]FyqL Gi7jbl|'+ }ƍ)Cpg[}}̭LSf: f)P `Ff3@e*hy  `A~Vx .׎klt-tA`(%2Zx+0;ed˙CC8b<;cۑM+fðC0<nԘE,3ҖaR3љ@69ˁ ^eBjƪf4 3M/t26̓4e[Ɩ}}}~~?w?_b?~ym}Bwq;GN}sddg0f_8_BBG{%pc f=7~e_maN1Qa5*zB}Xgp3@"K8Vl̀1#_ B ?}8gZ]#@̳Ŝyɫ?RfSh/L{hr2Pe _f^[ @r|YMU鿖aƒ3L}&[#]d3\|Y$Hj_JS =78|3=](.ЃE™hBD4ffl$sՉL* L+>h)!BnlTf>pQ0AJвQ(Is@( H QZɌiL'u8 Qܸ:neJr +1B "`I6 qY](: d2f8YY` YQG 8}g0K3Jfyo&}41 H1a ^h@ kdo"4;]x@7ԉJy>fgp 7G$$ډX5FWPP+q!M,ј=!10Y7hrf3!<J^_rl +Ʉ.ayɬs"3=JT4B%&'B͎?듌f64LRa |2JxS%9lK1[b`Nj~7w|TbVA2,љ?]1/>|Ƈ<\;%DN 3v{ff]q4|x%/e՝ g֛2 C4*#r-KB7JcqI%ŵľ}fFU Ez++j252`RD?h;0{wNwh>yyǭq[1d>e͞=O-W6Ts`ģqm+j߀̎DaaqxLHJ×v8#0PF `3 t/eGH: "_{솨HV-//ygꙗphl`Yl/KĨ/ve؛a8J9VlLЙ]f{+9N`Z[$YP 6ڢ/_..ޢ%FrF3z-Jfm~P4Gb {>vfy[VVPLi>;{~>4  љ?`j=.-;?RW>ö́CQ#n0Ρ3k~q1 DD+f1K:37À&,,]=h4H y4Pm}+b &U2 e'D5᭙*g*JB- fƘfYlVpkfB u]XSR4wg[B3euh*4 Xp\й!h!j1\A33 d  9pL'9 )26>LvGBLhd 8 xss9@ergsu"T7f5|oa}ƘYYM,1Nh[܄RY LԌ,b6OF' 3e@3 $H:  g>[I0/_X"pr8a/! /҉2ETeGLOxҤ,gNd׿}of?NWEur>~~Q5GMWgyn4/岙(Ƞ<8dѧnKqYj##xbp̑2#ك9]Tdv0dlf`A2eaSJ+@wYΔ34129(4#[pW @}:L1!IKOmfP0#BrDf2o*4q Z3l&[)f3 I3 lOG~|+ 㙌4Wrbpf|hAfbV KwL*Z4kQWW،P4ҬMXVN ^&jf0G`3kP0󏀎g4' GlDBRb2بtNdG̔Mk F$kd,#܀;);3pcR e-TnA%wqS^ff(1 S0= 3Q)fϙ6II.0 .PDWFƌ teX -j3jL(G1Rkck0ʴ紛G+Q;~`fk;֖PD!BןG%6/c5}udkqx` Aͥ8`g) 8-#1ۃ@BC&rx4z2c VsglO҇WPə >! b 0:b@ee3OvĀ,К 9,6u#4zںXB468]ʀ3t-$@tg?p._^_ქ יn˒W[O~!E=S |>wFӏg3ozݘ4eG?}OM&M5{|3g=0}m@CHЖRmfUO򣊈hOd6'UO?)d4ךar& `fqAĢ`$# hΤəmhn{Ң_X!fc hּ, ge:Ci*ӚN5ܨ9\|) <3ܛٜ՝iYh֤XeHhesf*)5ִ^[QDhgXk&3P91׏~~ss1([OLx嵇P7&:rM~PLRZ[ xlcW3Ps.ysZNqA p2|_*UQR? Z33 ,7K4s™F#i<"y$J H1aqG>Fxg67GQP٠F@tM TIr. ̈́}0Y!jz[ [18 G?33Ja ЭUC 8crXN Dtf4BHқ-—|2ck03HO͜񒱈qVUZ 6K\?3ܜcYuuLЙXpK4#|y8M Ffa/s26 ' ]#p#HfIT@ CT&f of s&@`#w9 4|X ,H )A>pDL.K.;p\3`mht& tlm҆ @s-zU d03Npߝ}B-Mw _vVX%2Aey7/^B)ZtvV2ow5~BOW": IDATjuvݖg\:RutzHuMo^{fNg>?zFT[vh^t5stKEM~RҸ2Sdv{<'w7? dOՁφ,#*&^#;|3\H D ..9V&I%|͙KC3.3 fCHKGflL43pcl3Yxys`y̒fץ50YVkR3_dS &f.@h 3loM˴ 2p5 i3љƹl$ifCmK<!gá.ކOsHm r;ϲ֌PE;GPsHXʹf9AN)͌(|3cJ@S`F̣Q`L;ef>H!̓#3&K,nDL;3w-Ib tT T8l$b? ȎBovJP3US˥3!RJE~ |hDrФAݬTꊣjF$Я 1CxL,G]?1r" ?SIf;Qͨ#dJsYC~3B4R͈kCHO odRGC' uhޅ c芩Ϟ& #=|laZ ș'雜)ǫ>X"M" OgY/etZ`1c1Ё_ ThA=f1ڠN=d8鸿Ͼ3Ţ̌35:ZB703]]+^A𕶻^fjEGionIN @t/)l[OaЄ;"Awt-}iv;I/!jc9ΰ|(gM6諯y/q_mФo9ms۳g7]xsofW!f_qhnP9!%,覧EH|X~?~n~Y|[T:v\=.¥Ä1ȔJW˪<15qF̗{3EE"TfP*_!3˪dǛ #)f/AK<yMR:s8fj.chDFpܽ;-msk,|wŊ @hSq( ˙ O*M" #Yv3뒷&չưm5/B(CN!j09p7̪` "g@F >SW>FX$fMfuaÚK ? ]Ktg-j=@k;mf3hC3p8@ IFE_]I_!rf#14*Vb 6*9RМ 3I(N29%WLȊS?U=")!B$tM*QM KgF/eLGMc],x46%#NQˌ^3\5δ9@GDwQōYqwXV]$%-yZ晐 S3!ܘa{22(>L(+4\nQ&1&̙S}|_`Mmؘzp2f.&Nfhd\BxE|,rfѬ%cK ba'jt2<5d]edD(1+e֣/N- _ v` fee>/9atVKl52qHv{]ڼٹ}ye~AI N#^ZlN4dI7OHN)|]jٙl GՒxgǃ`&/לAꆟhC3{O=:t|rto|7Dg|5E0s˫t(ۛܨѳO,Oy߾5Opo Au&;ށOПqiUyݡ-_~ٿ}?1o a I40macy~jeTuPR$9b !%P~>|etuqp6JmfRdY`6Y㙊L@(vdߌ%Uj>費s5php&L$'i_{3) ! >lj"45MB3yڵ,VCrLBH6Đ7z#3vM3fP9s<8; cCDf͛I8Snf4eLdƟˏX̲Rh7m;pBaכ lgS fx4WiP#[d,|#_:QDB3K*S ^)pZ3z}sT3/̨8 1m& gVL,vhXpv˜$禦Sz_%IJ"Ad@pD-L yпR:attez6~),G ,~)Zh;b@%3X{:Hb}l$fkXѠYFcjD:L LFf3gf&[ *FapF2dZdלçtf02Rș{{ 3r 39=sٌWn&cPz_cB)[ +3Q oF@ř&nv δ7у3v?X⨾p/XҪoHۛfF8Z#ݶ;[[?g$GFp n֥K74ZS-o87%< 8d/*ܺ;W_}oS'=sn8=^Wnٻ(85gXidž3/nǷfCH}nv'G=zj>;p/4xģIfrBIm6jCjW cP,BJ\ǎ;mga[cԨ$<͖:f.Ӛ-Sy ͎o̢{&Rm8i'K=k  wfz_>z̆fm#S.ÔLsɔrw:Z32Dhp+,Y!OTz\;$yїŨ7Xj!:hnف:ў!>ᙛjXp=T&hLfcJ]B:&BLXEG`{44DΦl| = t瓚"HϞ>ml'}UnB#_BJUݬܭLLL^{5RS^6kՙoT?x!GUT;o;bt0H۫-ծ27f05deY,ݢh&$SC"3wqGf"IDWɖR͈_[0pz4N9Lr@xҪ49t-XfW J A3Lp4pgNsšMBvm`9o['@H2jj >f]P f11ٙhT@>`y6\&DZf/c *`׌!7DL\'ath0>S6b "&DF1aL;:*# gTY "HK GRx\NSI43F)xLj33/. jR5"IvKβ"E R:0YymFcfd 3#|C7o60W`M;fgu'Yve Jk|#蚅0Yέ51,A$Ͱ @Lt+{.FlRHHáfl Жh!hUf&325L06@Y?::?_8osB;;P $pm!xƱQ `3'{po}_џO򨑪>6=yϏ[:3=}Q5%6㏒1iʑPn$hYK6θ] u"3CCA6O}P~ ˺Q2CActmoT|m6AiƳ_ V ,,t츴!(?l-7h0se)zs3l4<"vƹT ,[}3JںuYGf?sEE2$/hTHv*LP&y8>1޼l.rLp:n 3بړHAgfȚp#`G KBL1Yx_A0׈gR>:gѐŋ3'i2A$r&O͜:ZМ:9 )@ŦUuhDoơMcVGK{Z)0冋8k,ÌC\kq6&kл+uCH-вCofi3}7*<{&l}޿o?ŧ>jF ŽVMwZ}}YfL1it w72÷Um:'n6wklk|}]̭̿Oomb37lZ2u(2[:(etNK5k pόvAh֎L7[{L—ȼ|51ﭚ ?6ٟYl6^E<uro>~ ;Wף7t&/рI~0㕙DH@PN .mE[ tU3dV4#[4f \4Ўk4 UC8Cbl($u}u; 53 wgini9Dk+!Mޡ<+ědU8ͮ_/a-d(1QfB, B3G"hIJ0MLfpE2cü >7afh N3ǢGDFEs" n4k͈9%,83t9)tsAJXQfg fC yaD8(C8# @ƌL L/Dg1h{- G8TsfL1+ГAN edqLdbC. iYmF ( *"YӘl)s-3c`&cP'+BH̲{Q6)^]o2<˞,DTv; Nŷ,lL#*km1slf_fEX (sefzML"}P EN6jNN&.]tuw̗2K!Ḁ07I8VB\d⃣, 4t;;-SK,E 8r18=c?8f>_56t=Wm$D(tW//޷|};*za:؂̀aw8fBGjF,lMe$C{jN{= ^;Nwl̀3t!X]5R]Hܦ!78K H,QiFwPH܎ 3ڋ6`\4Yy \ yuxh&~-0TiO,[ d~s$Yfjf" >Ñ3a'Oًb5=X=UGr,Z]r # `?$Wb0f&coz fa?CDiV1gE`u gh!P0z+4!6[u"o f( cKdJ#A+$(Je23h. m  љf#TJVexFvdq22pưqR1/gH(UY*3/Ԥ6T.^Saf"iܧi":8U F3*tf ?J hQ!Xy+JOkfQQՌ XƅA\(ijnwҬ<= zv bR>( (Q)n<+OЀ4yyН֡ffcƤ };0F2W$pA0轀e ]}$"RFМL>O"!E6\ PfW7οO S.Ѐd벡b&Jՙ,wѝ]6Di: t2י:XdgL3Ïzz)Ng::8`rlq9n(C2Zu`37$ {9Lx,܄q:;.z>f fؤ[}}w~G_{Ӧg6g/=3C5}|}_os߾U'OfqݙCj={lF8hãķjrf'Զ 숽$\JQen2VT'ۍ˄;(%Q;v9"nJjf~l",+k^ 1),̔(բ,~<ٺ1(ogܜArrO%_..f`6ӣhEd*]iѽ@7!f0 dL,c~ ojͥ;= IDATg85646oUhkueG, OgOdf^!˜C9݌;3$L~)aSԟ6\;I8p΢d|+NISStEo|1 `lKw\c$G5p| xMZdŦE (WeGqѡt9ye#[Af4T~ ՙ>)I RqnLN@::<p!o{Rեh\ 6y] ![M`AZtDe* g(Yo:Zk5N ez6Vʠ. U31F>_Fd<59R\fL$>1N;eY\?e#\53df!}]hl-V8 3R,(ˎBlb?+06+mH0WP4fA|&-)ZF93xe>S,6mCƖt| ^#U;OĘRኾ hG4k-GU&0X}#n.O< Jk4gl4^;jHwoզtLM}>5OfO횡'UQ+yUEۚm2b4s7߸!<̜_~ŧ4;4{jl$|j2xwϏO鳏)CT|㽲n{B@֍s F&J.[˶}{%*ꡫm;Kcqr \4ˌݎ\ATRdyiյ^:xy&;/0[[X4K_fV[3pow\4{3+\6q@3fY65=uuQr[He 3ؖYnɄ)c3ahnָ? BxLZ4AML L;bbvǽxh¬Y8½V+\9曐1?RKLR/':>J'`X,)2h{@p\[#OX 3>PѠ4cR/U(]\rQ14<%idTr/@P0ULU3TJS0OLG9 nh0+&ئF` ]Q[+Ug@mCWʸ^Z>G6z#iQgijb=Lx8Qψqh=ݩ3P³4bM"<VkHљK!)4?0FA2e`3P0̤+dp0Cf.G{!яEj&a ClF>w_ pqm7}q6:(ө;p!4f#p4pYYF)-+Nf{xKs3e־?905Ru#m#eD%v(q%V۪VVϝ/5o9=Tu4HS@ /GE* $]n UݫJ9Jܩܟ~g>R!rfhc~eb r1@k2TwmQUQA 1 c!q;ejP~^HQ{C@crA`K.Y5=!6[d_392( '޻'ѐy~skN#w %4,g4 \,f vf/-Lg4_t^5p&0@bx݈0F~PRxenCakl!fϞ? XCU<WABwp%N J7_G{Kg`d6ϓAtK(G ZS) 0FteS d$_DL`r0.a7"q`AD4;% X: Ur2XdFpkyʛy799(5 AM wlD? JQ0CgqJ$ _>CF565єя>*n{`"=RChLgI8s9T@]!DWwoߟbm!C :3)!)hrimt*šgè*IZ2ye˞AьhL1O2?2ʾiFlPf6x#L d>@G^.nat6-6 6' N*L ;*洀4 ϰݭiMMwL-Mj:RN ?\R1sNdi,>>*ah(٪fp'&e1vmg&3}σ 48gz 33[Q8,nvj=Wi4o 3O>Mnk5Qv.3TیnoWg1)c! t< ٶۡjw33^ q85sdR6;Yd3xo`C(8"J1ͱt攟_#}i;N A c3 .D`4T1s /iCYzf拾6SI֨ml;L㇪a[We@|0LhᾎЁXpؾxr_,N4XX`C;ᧉLbz4ׂВ/N8 ?s_Ct?nBARf2xp)@4 )ne@ e-b/F$e>8>R6B\6ETfbœBTDqL@ŋKgbli mN (@z F5_5axϔ.QLk2A!pX1C™@;醡6l}!QGmt TЋHr1͘?GChs%42t#aɳr,$ AehH|̼(*Ẍ́d9ղPȗH/1}11'Pf$[7%-vY0;#g%3f٢t=~,thStt;Hy1b˴kJ&5^2&NaIh3=m;mNBΠ7Ӯ2hj=PQѡY)ziAZCO~Ħ]t Đ6.cDMRxKO0Yݶə !ݎd3" g /,q Y\ZR4g 22tyL;3^Q4KK4Ggshʹֿ9d|9ZV4Èef\$3yvE0:)zE4Z7f%e25c~Wc!!2Cݘ[ WfGbg!jc]aѲEP]C6i=pӚ s*oVbkX81˿?b@'*'k U^ޜ!AXj%0"G/ňs4B+o "ʀ4{ʷ==',лi%V6G)7<Mc-`3jk7u9#KYuCth.?`cvm鈅t} fu *CBGy onLjMWw]$i?S6d\ѐ)ί<{ϒ6ǨaR aRpL]FcmeU;,e^چG!$KՌ!̩ԓdr^,'cF hd1e׬X^9Pb6'h&lֆ̀LuܠqH*A-|E1nol0T^94a*CrphO "vv{-H~Bx4hОW@# ld!VXɋF8fƍeeU\V)/3s+.݃2IњF|$fC,\`,f~NrL/aN3ta4De B]>vzoހ?V[ K'r_HaMBe[3rX,R6uMŗy8g4SѦdh` 6>ЌW?Xz)@s?WqQFr0L3('✽A\ ΋J/,8 ֻ2;Q4$c06խ2Ժ]s2s!]a16<}Z'lǦ\#`&_5ecH"cXKǎ#sfo>~("3hnsQf0)KݙePX4vk^kx6A3ď_cV˲bw?P&Z3L4sٌSY\4+Dxf[p ;]WW26:4ihe #s>͍@e i aBNhxP30ֵY1 4<|iaf3pBE.y&Z0?C(;`%Z5fdvЙŭaYjn "SaFh{RTR I–1*U\=Kx[d^pQű [^9|**hFDf0fvȜj>z<rB$Ej{7fÚ^/lpx23xLi //JL?xx ~7#G9)9))}?Rr?.X͜h#:6eLn޻unWUbi_N,vڇ^-_s\.R#GyD24Ŝ^>Aƚ{!s@4Q*ca$0W⅘#+7l @w0%oc7mHLH f<6c/ r?4[-QAg!ckfٞY$hAP%вL8O>h9 f~bϬ YOr^ Z> U3FYr殮n 77Ln966Y3aȕ+4W=S31s41Aث|. yFlf`enyGtub -?Dxsfyp9dQ纕&q q"p.q^ Fq3ijRleJO"^pvdN2P-+-7zEy2QLAN8E$\.*#ҁ4*g^JdbU,͔LeF$PG2"VֵVc.o&TVUVToضaövR$b0脱vy2kF8CKx>LĘq9c9!*CZyG a ^!!!hg,ʭIa^v0'd`.3f8Gj|d$z3}D͹Bs2ʜ,w-$ lPC:5ә\4 .:4Af_>豽{0gS%X+`P#2L"Y(hLݜmBV guM\"J_W,lVDe8TЭ~pnf:w^˜eͼzKRj1|se6|߷n0HMrU1ׅifb;v~w޷&7\l[2;r9ry C4nTXl&}?y2Tdh<*&vS oS:v L֓U6D=-ϗ W[~a7mig@;,͂.{QeQ<^~p IDATss&^%Yd0Y,s Y&l?fdE3"-E{^|6nˀ`Z|F@LEʻz w`mahIm4iA_L`3'iߕb\!B^ɪ]Y(1cBK#Bjk j?yXF<K\nd=6!`&&!@:m|n b20Z\膒Y1šSf0W/myX^FfC4S`$TI"Q*x )ʼn%qQF)Y|q),VϜA]77GhJά$8Ae0 ih#4@(EONl8cgWR!aC t4iY4h'3GG"#Ѩ,$d,Gh X@fJti\6\53k#IIܱc f3ťV bc/lP~Of,a 36G`gVTd6ۋfFzEr*#_^2#Bl Ʃ09,^qbr1Yx| !2S.=/^$n_f1-^XB]jMi 2mmr q?"2W5W D_` }cshUz蛈  N>/ʄ< 'F30`*6V3C3cP?t;k _K'99?@EbVQHbCl& *0^x*&uS0>ÍTGz3K<2 W~-iFI? .XcH)`"K@kY!<  \t6WLhJ|f qCsZp` m fQa)X!Q҈R;ؔBm/L]nJK-Kz4m"DiJrXKBkV Dk*q?M2)y82~LVpC?tr32CBW۠3Lh&'#a7ɥ2qP FGf!zOkK%ibpFkf3{gj| SPM56׉6@3Q&њIƛ`8YdX1i$aWzNK-,Z/ nniL18$oqLqZ{3RƇgtK:|Y«7K67~bUZfIxsn{gt~ uo?!z̓uǝ&i93h9|h[CDsj,~^r_K VGtݷoݲ9IeheTʡr[RGRyf4 CO ~;vi2jmTˆ{y轤y e!!QW[7 (>7Le},??4vYT1z?Ede͝YX"hL9Y^V @I5[3fj{Nf3i>xuny:5m)f_|XDo.\|?2a^t^3B=kb.L4Laaao f&^ΠlZ[U} e 7åld,`/!tiGG$+gnwZ| 9q f֎#{:f"zen9s'{$ 3UAj*Ux FQKK/gy,>,q{G%M IІhIxp<0Ƙ^`i,O)34rN*tLIٰr 4+NM,Mq&`A)yԿSB(533&'[&bL$8!L1z<qI2yL'O-W}!3Wô!"grJYJN\%kBΕd*ᐑD&3aD2 .}Dm&DdΣ' &l&{!0zfUde:g0Aq6g*0cϟ 8v,ر?t9'\[2G#Ud,82o&L$"*ŗ{¾6fM&([332: Q:l ,\sq% N Qx2;a#[p8u:| ?fUW[NW0G`JwpgJ|S'❝|4.CW zzdMɈU~v9,;tO-+f9#[ă9%2nр 33d1Cm6-VkE("gFyv52jTCI nq0~a'O;D"1e|T5TMeeeH%}ppUkJb),G de@LT΀3k/}l-9c29Y9ÚIY4hh;4^Xl+/&4hLn6-;4?Lv!hOm"*! #`Krba*%3g.ͳrF3ef@+:*zxj\W2,fsLfY`Th{72.|0x!##@GZ~w8nwڶ8 FQTa< CiHGHGO v6~t&'\tCt?巸w:o[$p}>1A3vC9s}=,m 43n!/3A5zOVy4O>)[^msT|MFd,f`8*jC@o'#?:;jhP+iG9 @;^g\lU2KFPW 9F3G #42YR~Tf[\Gg+3MI "3t|>,Yx! d .hvuїAk"*C_5ScI{o\m#&4id+110YHPs0$۪jwn̂neEeE)K2!0C+Zx%e;>$h*^˪8鴛NsQ3)4})Pg22T3 Sa3#i4yT>O.Аa3fQgBfƭTrB"g0'ML)N9D M, F<^Y\᭠"W3}РyQz 1]K30g.mQ  fQ!ќQBZMDVvb2I$1ؓ3?޿Uuu[j3=h"s`"++GZY{W=LeHJXHEZٿ222oA=ELh"LBV\W8Xƽ~z5zzow2o0C^3s_͹s@lЙ20z!f| 22l$Ñe" b99W4c\tr}[t 9QH/kMcfp ڭǔPf)v"c@ /lcb rdhWHђ#pi ?r{_u:pjlFӖ7.lI lDVP/e[FiMώ]!jVgTJru@Y>/aq -T22d5ЀX )-AFEvm{ĮŪfMkmz}wNIrrrKy>'6IoJ|">C2=CEbn>aGL!RͤZ\^~SR3[2 BbrFAI. ā)4r|fLnj컻ھf͠5 ]G e .b3t3 @1Ȁ0Y Ka1ݶ$( fJRn˴qk&'K2ywn.!y.Si،|ڰK aCdxh*<217y\C= 4򹭀7hW9^a. gXg f15㒦fRSf ZL3Iu3_ |$dŹf<zfP3!5Lw3{+7A٪iAFbԌ29&99d, 7_J2}_FD* 8PyEEYp` |u*3uY܃5_ʹ;;.Gΰ æ0tYgih Znc6 (?mA۬gf?&p3P[Hl1tr֝RM+*+gN@$6wJҁ =f6kYjg faj34?~FH=;3L}jXVvJ3 rzb^iUfz4#o3t:Nc7pf$j3;3Ag 6fL3On_C?l󍘁(j0\7vY$?rY#kYq&:335+n64K#5<9tDf:t>%B^͘8 m|bdG;c55kT[_3^9Gجq3@f[3b3/xI 47wު/$Ol\:6Q[;:5_Xx^)꼒hfG1,6Kǎ=}]GM<1 <;@/}0FR=&Y訳X38|^h^`)Bg$ۙ5Iӌ蔀ٌXtF;5>zrgadfطo>h a`f}}WV/ tڬ,YreA,L""]izT(^fJ(iH\D` +PyG6&~Y5WD2>_nUgव+I8l䬈!Y+Tvv׮ÂQܟ5ɈI)Z/˟rwD0BAyEß1n\B6)1߲4sf\. L ۖ)N5rpF(fZĬѥm\ JKd l&OX9#,3#3Rl*љH0y&aˌܤѠ&ݦ8dB5D&arZ"3U}7=z(4T(:k `gԃPEa&*JhgԌ 0ӧҚđm#\K2,# e3 7\%kh E2fhsEx:Mc3e*%n̂kJepXer "39[?\Z) }21ǭ"f5fSf fYA hL%\FåCg^;u7 3=wl` .׬]U3:L" AߑʱIJSeְӕEl(jd& u65;w饗FV?Ƹfձ+n3'|+M/զ͉BJkj9QWUәiYxIWK)B0J'XJC&r3R;Bj"j SuS&_ev{ts8>7nVXtP q|>z^z;>J>=x h:7.} 1A= `IirDȝȆ2YӖ %|xnM=^3)5w1/=l']e]L8#Lop z9L%x$! ;f`=hdn%>Gd$!B󛆆wÁ6#)## i! y+k/#"JgմRWlŮ5Fr8yhl{D< jz}T#QThи5%uLJ2=%E3Js*0)55sGkeטL#T IDATy۔C ҅<C;άբX% :)/ګkӚh kmRsÚ5ZfX{Jc~X1ͳB,f,ƈPsehԈqΌ6>G3ghNzݎae;z5=E1 !@/O;1jȘ&>pˌ귿 ޸9 #.s %tYZ&G;!n<M<Ud漄<^wex]2 Lv7/v vb fXE-3df\2˧SK1fb{붙dfaw!$?f ,3B|@ahaaa%,#0z<_,Mܽ+ff;Iz鉽LpyUSplspYkhKS]T嵩XSUCήهϬܛM|CJ4UF:դd6iw՚RXrL?^)O߳\ˉCXLTU%6!DiUo f$NF0XU۞j1P ,cԺԎHȼmnEov8/Қp"Ѕ§'lGH&h ޡ`O\I)}lvX'׼f,!Nʷ&A$-،e͒Y9 3ך2ͯϺ$ EU2)~0FfzW/Bwi5]ĆG79f z23xƄ^ mD_ 1J[QL(c%sfAj;{g!%34JH_ʳB|l茧XQ'j9[FfEU]7gRcK}bNj3AI|ɔ+cGy UdIU2K80yU` XOGLPX2M|&& ufNgc ;h ;We2L,\סaS(5%Y@f&k h\1c AUinqJ?>@1cܦ@C3:#C3D2v$ޯHR τB)M7̴Nf1J-NC34f>*WeȃU7x4 YEx 2/C;r`&̉g!"˂2fWY&!N$7hl0`ߐ23b$IiR_ eٻfY3 @ FfܕL@df+p& h^kF0<8u-+.f|NO&8i^޻~}j {N+nN,=e. 9 "l{aI ˮ3}jO-l?-ܧj]WW}= ih8PP_8^g foN'z36u$ut4%Vұ~Kd7vti*Hp_|ߑHxA;/ձG"nᎻ|lb4&ob4ot>\:05SaEod(ǗpfAp^gdS3T\m! 1bvA~s/cZ&4shfH@sou7KTom(YHׁ^i荡0ZuJ%! 4ٽ %Ctf2fQ6kh yoPL?s=,zNU_UUUX `B7Nd+E=:[5xYxHMX f*!u hTdJ2Si)L4f1g;do Ծpi0A]qgDgO_do(e^!+s %Emʀ2@Z`GDp2Pzs,0sJ2E)6 0 \(6H3<63:E`S%d--361 1 hgl`2,fyf<1cqfxwPyfF/fl`Yf`{wG }uay`fe ZyoߵIj+fcPk{8f¡. ~.S)\>X՞>! <84A%KRꡫwΤZw_o~[ܚhR(_?y=_'7"1qZ}muTe/}Ӵ?s;IKq?k>AXάS|! 'O*h9VGAcG;+̫̈́H2nƽh0l,1)dA#`gϷ "3SHf7p}B?&&sR*d 3eH+Z٬Ka]qZZ< 13SkVTL: !@!q;)-30dxD ^(WDEo#7ё#*# jG,ˣGZHL\^s 1­8T1̝kR1 hfn858 CX<-#/uwAr9"‘fblbk3Z)˼hg;'WYizfUqngRģUw5$f^JcS ^ÔFҜxg|>:5y$љg 2L]K2m56&T$qg[jD5R)]:Dh4H3fj`}[@LC j81#Z]e⃪ďī$P7Kh%sL<eaP:è UKaK^.s`[HK@ͼ U9.O$8ebFt,.V)}eȒP fh(  t.cCAњ\aTt{;{.ԛ v5K7`!!ֽoL=M] U#Źs0i+*h&ҷusH~k{;hؿM!;;f֊X܇'<܉AwX*``}l]YZlY^dkr35fafm-o8#fh\@ă=Duu̬>b37UƭΔ 2#eHjnĴtf*3@ n(2I{ʄ'υ5 OW ;y)?_+[5UiUBiS +zpHQ&0ԟ튪zggd9둚X  Ag% v5xhpǜT!Iϲ&]x3S .[q+K8u4S9¸Tu Tʴ٠>g -͛ќt`H3o0+B B'A+gpDgNqSFeB}Zƚg܌=7XܩIz/q{B&T5< gNC5j#g>``[ 3hlfX#2ޮf]52qy!jN?7QA?}%ЙxI<.1LrDbiN e23E41H3niK!*|,I18Qos7dL3lɟ`hG_Yzb1eⲘt|7zb03⛬@MgU!F3{kk/_9g{_q[q踱~jYv\'.d)A3 H~̸#>˧-tUo,|j1E]GKvΔvy>.Y):~2*`{zw :)TrMci_H޽XP=písx3!RBq|I>hk eeGg<>k͊}czfY<kx#fXҚf5#,%0V,!3LG67}Y,+W{W\w1w/H]Bƽ%a:יKa}bZu:XSTtUz?W {fQ5_ʄ#6<`BGu'/]ɿ_Y3^Y3[xB|Ab4 iQ0A-lף]g+D f.5\3{3c΢l`. ?vrK"&1윟IeqJ j2C|Ջ4{izuY2 3S<9٩sH h 5gfM.b%,hEl\7U̳LZ 5vl-x8 L# kf ŀf|bg3ӘD58hӡggv>qUJ5Y|ׇk!]z3"4vQDhp3poCl_&&oEUf#9\43GG@X_Ţd=ٜeY[LH*y J3bf#xE ΰGfcrxh%),? X6 36}G0ћ&3\c@w e![ ko sɬ(sYwG͌w˵{%itd>G| S.6мuXˍo /WuΠ5}㉅6wHϦL!ۡ794tY[,.߇*Mi y/Dg%ѦqHGZ_oEL%7Wp աT?9 rJBHVczobECg>zk [/S3`YpՌKY[3kSti25W)eDeaʬ8KphN_ [?{nKLeXf&uhVz$3<%[9hf 5 65Cs m fee+ɘ_$33 M70!8SHCwFZX)B:?e֚V !`Cci2qd),rL\n} i\΄Bg̘ı/=J XHOsMCwlyI|Uy*BȼeQzHÁLN aQJQ~t#06ó3վz0B|fiddWIQSZExS_@e$.-0LyA!|faAd6ڀ5҂(f>x:^"1@\f{V‚MC& &z0`MjFd ?Nu18( ܚ+"h98J'!#[{Q6黎*&GΟ̵E?^c J4WssU(x}WZNq}ϭZb⫖_?fr鯾bb8ƞsΟz<&KT H#Gi 5)USu?+oo9M[K-!r=h̼X뉵IS^?kPLZ'*@ʬ='\s|>sd @̤|ÕW5m3钡&fAjg`Ϝlք ;"(MXz љދgb[7迸rM8oE3Sse𗁎Z%x9 Ӏ8oЛ!07אNtͶ!';9Z魙(Qbla@1C< ,*QQo Љ"SSNX( b<7MT $(aO83S8°'LH$L SHfzi, Q5:[B{fJ(24, |'ѥsṀƵL`/h@H:Ad #dY73A`PH,f13sCóW_3<;OiQӣiti%+`.k. n5w]jbYjp%RP s)P&.qtB/  ؒ `s7}\;k;v˱{Hw(6Q(\u~* kX\,SWαY-9V g([QpA֣B9oeS/Q1֏y7ѻ}1M1w3#9vjk?/!Mp"k&e΀L,Ś5^*hǨ "w4ٴo_+8:Lj ^ԇ Q2[:|fː4f5+c^z݋ZK f4ޘnv5=.&+ f%1F IDATf& '<ݡ𡡡o~ F9>8~lLѪpZqhp1FL{&]m7YK! OODO/ Hgxgv( 3^L8423 f0tfıpՋ(&& ]#߮I3FS^db3!bTH$_3QjxR.]«By&G1Q M,HK[>nI0_i[.py.lNJ)mVݐLdqT(MEwD >}ML|jqb cU\LpZ3Eř|Ϙϧ'UJLȭNbeFUSs:GFc3La^{Au䰙 ]@&<?OhZ$ly`&bm&̵⾨&GwEѬL;3̕+}t;n 1줮n @f[*ل9U [ft(LF}w@>:mC۶ yjFF|VqFgڝa4Ji71ѡ' hʠh$5zDO0xQ3Q(4E<ʉʠPɤa,C'hdr۷oO2Xoh haofiK"8˺ZoK3,.8Tj4&u2E(4+^ Mi&dqGFTt+%B9%Iܡ F (AuhCҪR2cTK9#KbT%G pf\"$czП!T񲏿p䪙'A2 37@ hFI hdIl@֗ ws0Xw." K9?d3?g03V1Sc}4wfll 7RT>;H0{ߦM/E `\;7 ;\.K"-& }sI;\O~nnwr9gzt{NGձӵI}&׺ڍu66.C33$ٌV?qX~MO*+oT{w 2s5szHUvH/q\fح`fE,u9d6X9'|KoDaX̻Bl q}Qz"OO2\c<#pַ! a} 84bjN``2oOA׼֠hײ6!{c3YwD1uuyE gta#M1>fκQAOtJ Zdfp55(j0-3!Ma7CC`35sss6&Sۣ`r>Ue!χ'1nh jJhyFpԩ U:& n[2Ӓ)_0δ;3 !.`Bh L&E%3Wiіr_KE˳n=t]#٘ٙɥByhj_Tfme',Lc,e g5OٳPgDf&NҔ$ۀ $3;%2[_Z7\U#4Mo]͠D^OT&ONJEP42xra "3@+--(>w1y؟e9Zw!xF2 6Yc-Zymgf9GkL)ctʌIס5efa)cf7fkFg[1gp$*ftb.s 5eźbn un2Af̛׮ܽ{ӎΠj`3TluִRdhUiqe\͖ʕRj.3d^֩4UcAj=nss{soeI%5rc}Yl'+VP#e3cnٮسr@ݯ8]ڣPy~' !6Wee23ӌy*f+!"1Y(H;QZpuG_+~[zf 's}";QQQjJ5s)0f k7b H"3%98:Y ^!3^j@fv Wc/fP$f?]+ @:P'|EdmF38Lt`[d%ˊek4f{ FX3&CxySf$X.Dj7aK3. fhfU2Hf# oډ!23c3dm _ _˫Z,_# m%Pt/Qĕ.oL`+f; j.[ 8]'4fh&Jf0|Q7劎N 96^9P0P'_)^/ĭw\_ L̄|=n_L1m@L!EgP` Q;ms+hW?2Bd7W5}81F.`bN!5?th^B}1OPBp\QI>^{mi®YLh)#,g&F'I“f&"LgX֎fѨY,dNP g?^Chv^JcZH33h:rYe&7kf7'4Jfu%Ҝ|e$Ù8^8dPEx!y f0A34n(Hi9|5pr3@":8HAK,WyO{T^9DZpAiP.(JPKey5zKJYɊ̈cf2 b.z3*r03d+ km lI&g ,FQv ˀbJd-Lf63{%4Ř `@FD (h93Pf8Mv޽o&0Y\Ք& IBn"~Q ;ˎWJO9TN^[G0PfZ3R#@U5'A0 (ceΥIww(N Ş=TSk(!i:K+tnp&ɭb3LgqiU =/zݡF q%[}wv$bV߱\O_ >HL<QOג)4W/fR{Dt涰q2Hٙ.9oY$0̈DS^)Pb4ƲYlV{/][%fR&2.l0AnlX4h!061_cfd x̆{4k`&Q  >"ǘ,}sĸn!`& L(A :QZe;,Ex qF{A5!MNR 3gKOF`(,; Ċƙx*Lg X5(I@#pr&oS|f&aMe)Lf`jFD g_+fw?IF (gՀ̬3k*mV0p^,5rw1ʞ 93 Q63D% (qLL רTU KaTȈQz/ez+a1;Jܺ K9%Q321-Y+vuAŶf6tJP{rDZ! -x8l6 MHc^ 1fcΛ0tJLcM22ۖSxblYLW2d݃p& ft7`fk60\n_3uI훛҅5JR*×Ygi.OAYjKKIy9#- 7cЙ>%˥ko'㒼K^=4Bq%Ty'IҜv8 ;/+>aR~،8o$P -L|M`<Ƙ!wZq;+g =y p[;gV-箁tn Q+~ ;̂egS bxe$+31,DYfY˓82a;k@6@T_3"جK2 tIE319& ;vn}qD fXl+6Hi,2 swޅf3_{pMmZL'KQv6Z.P &x0UZRT"#]@W:ET햰'"NSf6ƣ~Ij0)v̯W|\>yn%Ms2Є2l_z00~y`2 8֌hqC Md ! g[G `{|A@c)D=Q3G"ɹ[5ʩ[-+KGCRgGlI5CiJ .rYyM2P4s(cF\oI[kdk53f7CT&N$\0+$[WػJ so(Kf$ɞsbWĬfLgMu/%᛬<%IVe|^Cm`"s"k4>Ѯin*ꊭR0W7i` vcTƨ~:ۧ0-nDMG0G71i [6qZ܃pъhLvL|fa1iEjp3<.#Y8<1fx_=AdOe: jf; ;Vnz/(AdFri `IDn,v8DlF 6F)7g3ܚGArFbFc,g艸t&Aw?C}2ԇgBeD.~7}Leƕ^[$+ J.zSf%cHģĔ/0Rb -3KBZ6",?YbGƴf?{lJq*g41,c0<h449I?IoCgu̅0Ai(]2XAaMÛo{Gwoڽ>LX^sFrn+Uù{bJ,%bq=~MJuĺ82A%~\沅8]\-OXڐZsc{N\H#PI;@8s-2i̅ /gvbff2$LfR hQ:Ax۶m6F0 ]܄1ehPc,F-c:Ȉbq=ta:MB(gyQ_?BR6^x9tho:! hvϔ`R3piHf. B19zkTqеx7HݳaKP%K`)Jv (SBН1Y"-= ,3i[xi- eXe\X4lJ6IV,+ϹAEץc.c(b.ϓ IDAT`'ae؃D xa2s ̘193ʃ7F{Dz3f6>q/bűA,11 =̪ήuŖg;DXKlUd+A;\{Q\M= $e,FwѬMQ4E6¨v?~dy iڦgKlOaier;_ՖG/FǏ[///߿XL) .OLbbEc zbL魴﬜DIL?'`Q`6ٌlHm0Ќ\7/)}z'h.dٝ;k3s8)l@HV. ֬XlV&Ą&fѥ;M[XX72b蔐G tI.JF7 hP=y8NO19C˶#߇7z )3nV˄ VňL>?? ع7ţ{(ٍ|,k8dB^YR!F#a he3 άKn1 E` 1^LhBȍ ԦL˔) &$s>@-  4-kf2XՠgK8?&PUʅ3F Q6qX5Bbrl~P&~ggDg=< g);iƉqJ3b@( QvB$LNNFRzigpS~`T?%`BW1:1EDc ay x45׼RX0ۼ?d )̬cVfqr01137Gp1I} q5,IDӠ+U> >) fY)+C@ Qn3$0kɏ fs98f:Y]L̠Q0 ;H3x7==-<M*Bh<@?gqC}؏̼gZy$t:(rXM?Ro%b^:7*ypd^% b wlhHbC|Űf6.ab:b327<_[Yj똃 PP G`2e:dk?Ͽd-%pLY{rMe0 SQɘZFYuF Ct4޽4wLg嗿W-.]=IpY5\UB-8Zf˖[X paf; 緰tW&j8rdʄPAdXYJ3nz5OY;Jo3i3cpʬ9~ǟǴc?9q.8LޙOx{ĉc'{ƞ$E9J;X}&4@е5 |oKv0@Df)kH;`L)6]q[9YYHdܛY3h.c6wҕ0b8n[qRPAe 4+ݒPA߆@b8il&y)9Lrûph Apf> lfÍ[n}!A 0U9aMg`ʫ X7tz*Idq!BCj a&"L9RsH#IDCf/ffCpGkK`,gA4J7qh%)sLSLLȉ‘qfh'&e 3;3 H4kd5T9l 0 WfRQnc|P T(0*l!fЊz;"WS?rw&<09q$KMo,lZ@e57oD{ΰ3%r Ѹ#2f<Fdžks5*x`ELu.RG7Ii&k̲2V<ɽd)cZ\6^#@)ZxnX3Ѡ1<\È]C b- t  >?2ow ǤfKF7EBMݥ9`a!36cB7o $ce6׮7hmo^|oYG+S(.Y.W!fILr` wb1#Ld^S04j |,Ohޠ Y=c?o?&JK~86Qw511wW^[^\\^Qޏ&~4Q31qeG"f"B{s8jjZjOOԌLcwtl!4Hq D5&g4,+K,d2Y4A)jvBΌUN"XњyIl0SFl+)K*.b]T!3gD 1n:Y klޜ%=/y*,afZSC8??`laIω|.?jthژ m?Q ^c@ Mq04H &TANh!Q8 C% 1%bjrJ4QPbX,VD"^eS,r6:D,.Ɏ|S,q Wl`ՙt8~' B \: ̳8](44?ϰÙjV0!E1g}4J`B㮏pp`AC,aB+k_KxQttciȘjLQbn(3\4#"%)٬FxY%_܎W 2GEyz(F16b"{^%EE$PY8Rdnw@]#a:ʒqu&5AlDOY[x~_D{}yuւP0oSeTfE-6W Fh˜b hp(*6k`f,m-p(,]\H]2t)G\:Z̀YQuDݚJ'3em~8Cš-/‹!? ,=;wŪvL4S8/YhvEfgɿ 3J3πl[q3#^R&4c(HSSS7nl7$A6oߺu'7>uX֭[|VVփcߚxIӟLpqC}n&ٳ wM,59M41@y๤5LV <8<2oYW5=0; x,2o7}__|CDe6 v3|9N3(}!son n(0ј,C(2Jq{`v y߾s2TLj"2CvwP#DNˍ{g TS1&dK^)rKi< @egt5EҘ)"cnF'>:.Q4,.tx-X@fV6:4qNfiD2y1glS+Pm8~nLZH 햹x|9Π]TF$jss  PS2ȱ(aFkf JfJha <3>r6x`%fA.<a:C]1Mhz{EDDD E g=qV &?z/ߨ^=yŐq92\lXa4Zø2oO-6È -֤By4VK3 gKHUf\榾0C2F,W3ʍtaJArЖY,UŔR,km-$\i%ٴI'JoZ^DаD bn^kxaq$$;>$9NL~+l&ӝ99>]=B Z_ "˶q3 lE"i |{- C&\A^Lb738Z Ǧ<1*#۷Vˉc_Zp $Zo'5ϲ#@n"M'nʷr^;N0㯿'UDY iBM셷 nnrsna&Jfٙ|`ͨhhLfG&~N<) &(z 𦸿%3ư@2<^4Ntm] S?D/P9 f@84ΡlV?Ot(ϬpŠfsA @tfq<%Ed_'PPf.UE5dBx(QbpPi,J3D'pfDt A e\'39nh!͠ifFy͸tEm fg 53UD. :}3`:2>2,ϰJ?K"36}{deҹT [Tnz_~wGŝ|ŎC L3;WW}- g2? Ý@gfD*@lga4,/&3* p\35kUBmĤ]cz>0T&ɔ}߿.S ;y2ceO܀::{/&eJZ/SSոu Q fXv8yfo#ь f6*}ށuKEc3خMdAk 9gQ? 1\e19B>HLTlfn||,x <> hhdܹcgtTĉf=ƎXӄD, `P|?p8@&f630_{cѧ)MKK b"y @"i<*~NVedBz.M8fb!̊#M@YyH y˔({%2ɝc7xqIfn=> 5j4k73īӚ.sgYL&Uu.]n#Bh0Xi!Ku,><+J#hL4gDfkvqJ43 d8L1Ѕ۽}Q#™q2~ܣd< | mBP-3j* oZ!Dr&1B1< 4@a0.eTՒACc`~}%!44DgZdeS!I]Ie*ӷ,T[~ IDAT5;7.͵wN5V6;JDm+aRtv1r Mdy2=lY6T6N&69v gŊ&k]ihشoY" @S3OJ dAt^>:zfaFf&4igt(fd=V_^23LBi@8zܢKG0~|{,g%?<8ʿ%eoNe3RAT&b1?w5?|.f1#^aY2P/ _9LLL\B^nͼ V:;替Ϳ N(ThpuMcY ki5Cdb86-ƐnM&8C ڗz L gppS2;d2w&Pٱ6x7A]H^&lfsfN0xhdfP#B鬘?-?#u4Ġ?iAb3inuEuU@(@!:Y< ڃLV6]Q73zZr31H?`hXȍ?'zE,5ӔgvGgus/]0McAZ. 7nm3\xUbqdh3ܧj` !.` 4,}!DB!Z&:}g'8xxhxt\'UOf|y3X3AH1$͚2xt0 , (8&g֠ c1}p>Yl}f(1jS_b0Y`7;2HG\fq _Z̫LHD\XmSF-Kj2 m.xgeZa?i5I =|en:sVsI%ӐsjEmvjHay@Sjj[OXS.Y 6wp8:GVT$u(2ub9ˎ8csi}=N8^e6/ =)љ[pu(ў9}3rܧ9tbNJ #E.IfY ӗ+"\/Бep{X d/ );ͷ.?v_o~#Vpzҿ3e=8(Z浘er+K39t3x.Бvoh;"͒Ќ je-f3w7|mcf!׶V6nFP{iƐ --DН}0} ipnt 9D+ӑҧ5&?.s}Ҕ Rjel1;ԌmPbfgdXV:E LLZb"Dg1E4.)2)1)b{˸iiP+[q:YFPnzn)2Q13Q\gngh dAS 28/fbXHJcu(úTr2L\FE y %x[.PКxVor9suSĘ9†録-z2@ #`Hf1/(]RѳonѣqCCO^OwV8VׄV͙K3q a{FV)Z3g\Gd6 l鶹[l:42QA`s0ic`,KjW户92̪:6 "yd>V3=\Dm,пXZeƉ@cqB$`LrLP0к)!aӕ| l{3Ν#UJ: 93ad]"ӕxj5:R. q#MMt:;K" #~N߭S]-<ۤʚT"]u)d qtJ 9 )}3w^ P\u滺PcKoU Bdhpbfc.G8P^hXP|fʝUR% 1Gf?VduYάnjwfmu2%\Eu#D3_}7lxƙ6"M9]HOi6}ʾĚ3y W`4tĈf+݆GW D?g< fL&87o A`f? f @=6v4y?1,lp2{&#w+ 4b_JSO'ҩ)3i'd//e3VAL`PW7 ;tWVN _=Y٪3[:1}٪J%qȾmm:̅3ؘC#! ̈́*FPM#0 @ٌ@ h )]KMb&COa]:#\,@xd ͔h`w2p:C-ѠyߵkL5,htVMXcgcf>p@,p~PА>8XA0x3*QәYY&uf/Y+fPkO+c3ʣB虉E][9{FuCy57lŢAR G#D$fm4ݘmHK7%.Ӹ\ԅ0&*XD dFje7@g`sfΝ7 b;:`MMiЫiͱj;A5;*/fJCfV3pmg-3dXep ٔ6YO L"!)J s3a5u*Qztuqkxʾc&q(7:憼gEfy:W7nfppwkNd]s2ֲAJZĭ`GFe~fnù]n5s95 6e67N@8Ps[2K7`k42O3%]Y <% _7z0 q~;Z"n8h|E<*ՏGCzLx4,?@*͌53`RӍ2Xq֭A0;-<1 Δ %@&2' 2 ,cV \/#0A 1jUs yc1WdӚEL2p6 E  P/1 K0Eg,TfgYҖwILDkZ|n s6=ഄANt*e-EXgp` UgЦ әM6'"7RFbfZC6T Ό<ϧatn>Ug2lE2xsM^gW3ϐpԷt=bZP +gZd!n4LF43q0(MHwɯ&go" vrjjLϘ<+yc?zO(Sxprv&%h"w^oșg~T.NHҬz 3VPEk!g>]„5 !)o.0H.N?{mb-K0xt  [~ dͶhP4#*Qe!ypƠgPH35zh;d:&MB5gwfL.qv:ҹ LP8xg6f35b6_3ҙb:Ri!E+\4ˤէΤiٴ4iD\DT]iΪK|et"j0j٦ce31y>SOH*4.ܸqs3#&ؔųyEI-gПS1g̺6f]1]`,0 JhըmkT2W{4*aÙ dd.,ҽtZ&|L''??ǿ?Ͽ]<=<,x.V(֟c ,ZFe({  tI1 (0)ᙘq4Tݘ*} e\6D> FLϾ}h}XvzcSP QL4NuD/9 W֚e8LE{7Îf3#zaMBŻ=cW-?-=2{3 ! Ѕ\i6f2(Ntqwjt`A+2@@ ο/"wI(UaZ3ΞݔY!45ۢgr%6llUiĦ h :;>f0QfS>m=NdœN(zQLhէH9 [9'qOǧOWW ?>]f_ClC 0qL9m;3waKn fMM$!Gf^j$لM͝UhM%oe#ҷ fP3!ٷ+/&;7hM25v ;izP1o^Q ]j/_38،lvV&']U~U*eVsVnZZQ%1ی.-.24-n4k0a9Î%C/qiA |g`` IDATƈ`pI,30YfVaәŢyU !..!?( aNaB&~gf.S\4 QfjO7NKVj02ID_&47L4J 2H9/t&k~~8C@Җ;pFsW:Jjg&oS̔yFg/n` :53OUi٘'35<g™ I?*]{ +1 P,t~x}~4WΈD  ̌&NʳA3Vq=/%aF֌P,YB `0r0nv sq2J܌ä<cz̠l @i3}Ʉ-))})#\82/+KO0a\F 1}.IJr4{o{{Rr҅mR3 3rB l:Yi=X (\rtGK/i{eMuyAP{q?V?!NŁ8 SHxhSWCڲc3N-HkN,'(Y@ fL(`<*3 /[ӳ& K|[*ʦϸ<+~7^;y|}PVPP: XfbcF5֌ 55i^ =\ Mo WrD!fLe\ǖ jHj6/0ЅQ?kʀ<c4Qy8s̥#+<wz2y?m#f`B/+fhYuUg>UaaU9J O>p:317*2c,QTd߇̄fI$F1ȃPβx| e%%UUϪNk'гSDٱ>&7C,~ ,M^*Sx6/f3)qЖdSe"1,B&ͼҢ=3Ylu3Z٣F8#kpy+3q 4thM%~=8Ll;2LhDVrĘP&c1^BЦzͨ1fjcYYğBC<&):OMAuV:1Lhfjffb|&S٫ߨ&\W30AD7ѩq1>gidgz8z=Q.}*њT˜<-uג65óngݸj&*c]6p 2z$CX3LUpg(<^I}K` C4^Â9"1K*hZԛK<&\(gL\E @$fGh!!)L!9 f2 $Pf̋I33%~dy=̗^vVq%d5g9=/xpof+go:4+ w假ee@gLaI_<.~f~]eχe& 4z"]&|qT^|S0 4cC&S$1{%b4qNgZvxm _.ͪVH>g*\G|PYh͠5! VgjD3[$h"Ư#WpK!OUKlF,ˈaf nM2*aY0D}RI]^Y ^\Y0xf`&a'gvn l)Ȍ"6]΀y9䢙b.b1Af0yjb߁m&g@kv؟qehA&?_ףvFK} qy g8Eפf6M%#=N(ʊd3?-gG(c6ts.iИhf6VIޙ5d~%be1~ݔI s\<:0c00 | G0,!"38̆/fQAڤ1YTicФ!bI3Ë́pZjg8cDsƪ2co0DG%;zO~xltH?0=4af4z3UkْJ?.ehDFcXrazӵ%3 p&"T]%/ \2[+ KT3Q31fȥܰOoʽ eP)yb-FcqqC7]Z3;KX(蔁L2(e#`pmK@{^|鬫Kιz?',֭C H*s4X2`A 83LdI@s`N_J(3Џa[̚peŭʾvcUY}ܸq"?͊(v Ԑ IaaEߟ>4 o^ m'_[}J4XVDTX~޿[#Ag;c/-L|jza33DXq~]:tLgev0:iO7Λ6Ҵ rfDA#5Bg3<5LGy. TLAif$BtEm dl@g*k^UĞ.͍s3,4LAs Cx3WtCixĄOMnV<3=3N b ck fllљj{1l 63lwsnTi'<O0СCDe|xFXN]/ cW\ .x&/8 2Z>aXZrW"idds2c"YPf B̃e;HVa[;0aYIV!HA&`̂1ܑ m_{ ah  ; VdP6㡙rewI/zy!ƻԅ&2CVad-l=Y:ͪVrrJJ7s+ m[)zFh(`,C.aW:$KjwpYIVOoeY߼U6/JެZo6VـLTfF3t|u/@oVRW>e=4E "fdkOt!字"^%4k2WDaܬYaL0C[КXPԡYk B_\_c6nc%});O'0H3،F\Y) Ƙngd`Z24hh[@ 3<++GlJo z0{MdϠXSO9CϙgS kvOYi&yܟa3/nPϠ=iPA<>Ύ1=1SL)Ae,0m(MN sz4#צE,U[yl868ER>5uqt!4p glfXҬD^re.9xЙ9-D5F9@is !k4lېB2{:t9|#aL.U34!5Jn4™213Ҭf e"vB;`JDo4h{ԩS\C k@`0,{xR1]Nu-!qKfID&ChA E3,B68+P˲4Ea,/ ^ ,^2<F2Gc"J [* e `0{C6ݼys!6uc!z2 -gN%!*sV3$mi:':ZN3? 5/=TG޷nI| y֑3k@^DYWyOt=?st/~!|yRӟQy~g~hpz37+Ci21uoo=(8eֳ[[nm[UY&ǫ&U:85=Fxp 򫈉Ɵ Dd}gg $ R!`L}A8%^ٟӜF󊓙L󺪙lBs0sI9:UМf 5K2\5]/za*Lmtv&v&mOb2*\2dѴJE96Z2BmD`bY nEdƳ?tgtt&0FҙanX744|(MCÍ7;RS5t g쨚AN?vA 3P `40AMO?AMhnͤէadFL4i9Sf?It]e19HqB e3 Ι G%^4:5c*8s˚g1#|`6(nf)%Ce<%SЋ]f3ĶIhnk6k,, Ot" HB3ó3qlqOlDIZ8M1fn .%3Z"]R3h>4!cUY2hV~h<2Sz^R ]1B93hSe4jl,"%8.1LZ&hYJ]`зr ÃOp7%4id[5" P, HzE_֗d11q!ټy!׍ ;l '$@˼ 233 L֮HG[8IO}ps/瞼iGtkHNNΪbOJXsO羫{ѣ߃~*=[}˺[846THA36dxf ~zL'>0-Yٸ)#brꙩHͯ@솎ٯqkugzSHm_)˱?^:A@K"Fw.\ c3LeP0^, wR[W[ۙ9d sx+~,kJx6 EDGy AСG>C51` lnXBoLo5fQ{cA{Ah3;,%>Ùͳ7&LqL1cbǤCoΕ3zOMj3U?_T/6gC}e -S 9ϥ3b,*ҴALf wePKAg5;{OYqT-TL6:MVafwJ@FvN)2mj,wFfbyTT)]DObZSMZ81SO+ggfGcz& Jgh-zzW=2 jhWۉ@mdwoongkG0L߇= }:9 ]Hu [R-Z]K. ][i\`01[4YBC&Yq6S ÀҢg*QX̂ М5Y(4<\ "Cj#01wl#LEڅ(fnPkN$Iަv"3ej'׷fStpmK͓$fTٚ17Q[K|UDG>G+ Qk\_H;E>ek)S 5AGT@o"2AWhV<-%})6BhbmOOAǿ}6og~5Q5^#gi*{tav_dggL,Sdgg%o"}}'P!0[j064c58 ̿׌:`TƩGNp\*r@7Y5't&tܚNa*Sȶf뭜`k 3L/igߴKyKy-K.6Z[27vd7v)&Nsgfd49pqgEv;SDi,7 $6F{iS1 gfk\f2Z 2e.Hi Ź 2Rۯiy^FF3wHxWie2\ٽ–wCŜvìNnghEzwWu$f 8m tntLns^壓+qni4dmorl{7b[ӑ|Q=^jINbnxGG_N7ӝcUR3~~OGwqftfe:g2d&''f囦noz+;D_WnȦ'76>1UYPv?$LZS"#NT=|GHxf|޿ύ`9߀ *fSi32@ږQ1U=/2Y7;]R5<6#PVg8̯xlM2l IDATdC.pcP2KlO ЙK 9 9gTey/24_nKJ?Q,0W f|<:٨  a0Bz1(34o| ~*2Й7;d~!~&tcwUŽ;8>8#֙ix2N~bs<ę8#Lgr]ss)!w{Αk͝wctX%0~K5`fڔMox8E9ZN%8`j|I9Y}ObZ {dznU.["j&~5`t?p6 h$/]mi`8r8{11))SpĢelF#riF,2*N Xp ǚN͌p`?*Yg3lYjmwq{n}o/нٸu# T-_C+P1Cg53%8eTbSЦ]u'w niun;D.q3.rzhW5N4{8;9WQD[%2vV6oCj|0ܛ{/]H,,TZ|yZPcKyYX{ /=(pcCXkLn`3e(.53-=rHL1,hk#S@ Kdk5vĊc?Njr&+NL8h%ͪ9euqmϵnI dA3g´Jڌ*3%grs&] ]kfג ~4/Ѵ|Z `3SJkfn. nJcLO! sZs4ajfx%~{ovN}nǑ۴ fr~S˒!94TߣEPC]vTea8ya gtgШ T}f}|B$?0,{s1㌌`T@WaUqȲ%[TY?/𮎬}bAQ†L4C {aCrq3 &d 7FcyXPȍvH8q",W͈va f&Z':3I*0Z$z\Kh֑ʻ:M*s`1N νkN!Wie;ܹj<\sfbz-3<r6Y:Vh fVGX4i  r05;9`&64n[!L3 hks5—{% ^b zjj2T!\qC*j"!dA~l u525 )Yk׮Y [+?3/H̛  ,e:JatRhNf3W8ψbPn bC RoL$# ?,ciy!u =弥eM# P&cZC!:Pp0KppǃidP:X m>d6tdfvt|P2`K_] 4͇g!eLCSXp?LV4=" @e N:. ;8 cmȠ\;EhQB ]tn.msyr iq0 >k+?<4y_3E?v^4sL@l2]\fN)3s,@Mmj K2\[4Y.dfsRJ[/sy׋S11Ȣ ә ҩZs{ƾ+:uR5Au3e6-/iƆhlotJ)ds /Krx{!!! fWvu / T=toȑ#<r{9}ǏOQ,t&؀1-F#bl5F c.ՅfANZ9P}߈fnؽ<\fȖ~9vT͌Yf 38y'(P0 ݡ1A0 [31offT]b (#i1i=<<f6`f^ ôfN3LK +ɔ\zù^M9>*yf%GqFU8eғU0_ ar1I> t!yZ^P/LDi^7K.ZE@9 3$F3G™ T͠< nCkEt9&*H_}l;#%4 P.fc6Ocjh88lf%7Q0CegnKla&x%lkU˄Hig3Hu7hĔ͚aϡ-,dW%0[A_!7]X,CS 25Y2cz M߽H.ef:CY\aOѶx *fD_o7}f cñRD*M}}0^2K auIs5jUn`q e?̅3::m&~.,Y:kVdfa\FKڊ"Y) ݡ㖮*Tv=fU0X '^AwGO\LM`yo(NK'd TV`-=Όh& n9(s hhn`PHb4{0<{,!ؠꞾD/%|M_¥)z6]/ѳ{?l rdDS$? 0ώ(6LIYF.sz?|,Ә V4w 6hfH eʾD)`u%Lg1c~Cpf!9Mb,ؔLZ vl&!-kpUCT[ \s#43th4c)3s r1dŐl9c*Îf\4E&+A23(n Zvzkgu%c6sW-xA=@l2`D[|>3hBM$coL{􂟽4bJd26u_ 0ҬF i3 3׿wYПa*sf !MecV>&Dd6d:C0!|!pN趷{ (Yta3er҉FoV+{ 0@9gcf*:s'nn{֏;+X ,w[+_;0c}H cEdfw]u2E/1A^oBb]-Cq"B.Ԥ@G,y&4sJ|d:B$Z!~&AVYX3pJ{-4WoqOFd$2.pf.AՒAVf31V@Vf Jt d l803D̆'e1#IbJ`xhYI$V r7•1C+6;;i=NNBN50gYbb\i}6_1UbL̚K& /6~@(_~tIȎKGnjjGC358̚5#} }p xBPPTg3\52YEki2) J׌2@z $*ӠLz^ {Sޙ߿L0H}yNKAɛI!MH7 es3(f`5b35UDg֌P33= J#$Vŏga?fY&Dm"i| +љ=2Án_)2=}ëWnv3@ ]#2$./ҧL"4Ag.R6G\V7+?LgJ>f`4X_;Сa}svcf#g7wXcY1dJ$gc!h֌p 3@Lt3pыk@ 4p~KYh2fj22TZg$^7o7g-~jXAG)ڰ-q :/g!B Z9MM3 ol;s{v{;J٭5ff_Z\$յ3lw/ўebÏt?|fhy}4x̓_@2^@0]E,OGfe+_41<) `"뜓Gᦩg\:fI>otrPV `n( IDATP-iF*7&'']XSSX[3~'LUj43c1ǖc0)x96n`ģeYMƒBc G5\ jE,3YC(9F@f :d*A1C *Jh0zC ! df`17-TM©OReҚR(b'܋^]_:~xa(!r"Ljb `f&r8o&Tl]=?{D?ͰyLl&FVӞaTB37fLv@3"KcZ0%?Ķ6C%bi-/m8xhFhgr Ĉ͌z3:޻pg<5` ~F,gpW2\9 *4}5D_=n ψ͖ yFdN8?cLZoZ3ی~p=~pp Sz`;q-StgXЌYzģJ=Q1MJռRs4ˠ_r^|Lv|;Th̙1973~󲀀f ղqvM4[bR;lbL\BL_&b+2g8G5gFTY!"35YXSX{q!U 4@&>m} :`1~V3b~c6ʈ%te,~rq,qVڴ`^ AgbJF i_l8e|H!(HM(Q?K#KϿv<3kE ei$7A GY94jzT+ B9U( kiD& 4<1#bƏ˳cl 0QИ_X7i(WP7ʈ'@>Sͮ3<-<Z40f~pKUPҨ 2Xf qVX5Jp3 ܇ hKl`[/wLs\/eWTpjǵLtbZq=͌Mg2F5o}}3kKq~{ Ui OUB(R"45W-5D|JKV\')(\!>om&r1+`5cI 20'n85?YU7LJIkl_(*r{vN$Fbg~&6QIpJWƩ̜0uםVcӬܱ! ֕S'؉fV0KL'2ZΌ83JTfrf&,CGl%`%R@O π` h8"Q5ѷ9 x}L(d3+gP͓b0a2ਁLa!Cyxi͓}> }C AFo1;>#?Hp.! fO#Mۯ e( 1ėL< *A-츣,4?ʤ1FsTV4O3V5DŌ.S5 Qo&Oxd-k3G{zn8=ٺy'{t)0_.|fu苇O^%>3F02?3D 5 Fr`4B<@f\?#>0*,_b͖02Þf {ҖÈ+-kќ0:@hp8PҧݘyL1 DDb1 $`82jnCjKL)ZZb g( .H a 1E[,(] Yb,,FrL:U(0<kQUC>´L=ɘ?#F9$5T 8!-z3$>CdF3qtf<@dg3 2f#/sjiOt2*&aUzfqI?Gy;soShRgʇ@َ| 2hEiR'˔EHfq&i//a~ǴNSa_Psڑ&cCD}%b.L0-32 y^h9Ji(&j}HxĮ:饛Q%S1:ZCLW̙ɩ3/BbF qfY]8<*fl]ɺ"k:<>ݯcQS3;1 ٪nQ}АHFB1›p a p3h`Fͪ:ȴHF*g3A9mw wD fGl\-}1B1D6 tÅ(GLatx$fI[RwXP:c]kie^74 n L Q$C.81nۍ/.`j5m„fd XiALɚ}yY2_&gHƵ2crPB>ɓ5G`vY50A 1iq&YL$3q_3vI^a  ie M!1Vh<ВY9E:2Pda B3 hxB'+kk/-55(WKѠ- Ӡ};-O0"}D&90G'㌶nL1N¡SCu8z=&\\khK!R87v%=Mv5f#htvwy?523}K:F6q on77>0#5Ƞf6%zf,t.\ftj_ɥ4g,uAMW ̲΀w2Zw%fTsV l@,L<&KƘfAtDh0`IpC'YL`QI[Y;cdľ4mzө{3 g34(Y1ϨfU'=QKeRQB3gV&k1IT303e9@p8 熂UxUk;ե Xȭb*w-.x ֆs{} ={zo(8>|9gnhrD2 1| yZ(tB*L 1@#P auJhEoT#i1,IL|ɀ.2[4Z|ld3%iNM((c3 5 kd+S3.t;ͧ㤏N0B%^̳YSgJkclZ1 e3h͠9sX yyeL܈p߰A 4Ąa~\fUkHhru 4K Kvm6s;F)-1Қt&g5f2߿ P<'"-0wAesGBf,֢ nT \f fA%c6F8YEsvCʬw''{ S-ИmiV,cM/fe2y76"`^2W5|&bo3с)_|9fo/\(hLddd?3+4D=ڔ.,/䱿ü\/XxotߚϔL([h7!J8M8N ]N'D l(8Ʉ}!ggY;8 :^dՇ ^fNq-Ma95]&ȱvsib![5yM tgFWh55U;d^a-*f53,NLEg{CӓPdBެN;3pϻ˺9ݛWn]+ a=PA@p08?FkceNnq#~FW$ nfܕIMJcw:F 76ٛtROe@ Ì̔ (fSvdғ4KŽ_ 74އ S 2b)t 3'>'|vz l3%4,4ۍ jV<֢]bC3nlO|M_h <9 +sF3=tf !sjtUgQ|ƿZ:6so W*`A8 g&"Fd)AW$#I`i:dន a dNDdKgt.3+}HPIXvmzq gXZFòN:/$|cȀclDjFW*P/X[S G{FF @0tB\h0`* &Č"J"e ,D&w(prNnSm3y 0- I8B2I`9V" 2@-~IS3vmHREFڣX:X!fǦA J{QO^"dacQg2)Oul|xm4c3 lFBQ5Č  f69h/xy9!N:}xLӾ3"b4{{ג<7c3V\# 3Wu׉~s=kGD _ s# 1`\N^_O*G/PQɳgSHgu2lA~<ٶrcnAG[.q]ፃ 1ZgF!A}if=dZ-(εMfJ:cz2Эl%F?쉞Afv4Lfa037y4qI|W5]x [ˠ^UZDld07cHdf1 ;Yll7o ش~}B}_f2.Aj &rE@b}pZVR'H3{r:5s2:ˀ YD\6/ĖŐIdcNjܕa'Gk JX2Ld&x-2 h#MKgDs Q4VXS> IDAThᬁhe""3JLUTam ʌ ? g_/s7`~`n/pZy O q4̙ f&:V}5 4ܸ'֗&_Gٹ49;}C:ϝۢ]kk j>j'}OT6ՁhM`f/_KCJ+2#9n;ޔFfʴPٱrY(X$ Í 0Vf3oLby`la3cɝgHkcOS6oc쳳gbn&4փ=3E9{{Dڇ+fVrp!6sH˾֬_]޸q|ʳY9@HN df͔LS3t~3B׾,Le@d7 ᑙli0G#>3mmfx@Sٔ1Hwḫ#&Ӣlʹ`32sl0FG|X$њ n !i)'( 4[ n ͠V]=V`D?X  A:3`.6j SݻDbPc #wBv6(ƙ. q*fq|39S7 5F4ophv `F__`,We30u5q!MQ՟Y-qnϬ3|{+,Vڗ &#Bft,0X  TH iEv,X8JfˈN9^2C:SܜGbRe5mV< n^F( !M+̼&] Y3+SSZ3 ;BL!id\@F$;W.%s0?<]pqfzBϬ =a'P7+?lCz|mCԹ;FRs4&f I9Х]^ o`!TOA4ay8HॽQfKfbML%ޔ͔,k" &ݦLzpϛLxY , L,@fЃB Wl,`*ىP!fF3g<0y*o=o&-eOAiV^јk>CEjf F2a!;|{@>K61D Q.dFLeu3ˤSܞ/q c%iۥzQoUJgt" P`z` ^3 *CW/LP 8vDŽw[.mh`$(5̖ڍ`ll}3N\9 (!+3X ӭn` 31e0K D%/%]+4EJȴp[M^qvM nnw& g @Cry[T/1"@iW!Ip?)T&}FV[+&Z 8P1s㵱?,; @A{Bp05efCF@`k3A7J6: s3Oj.NNrO&fCˈYt Gʂ`u ҕAͼ Y5ǀĕU0Atz+Qe_ll&/!n !˘  xn]I2xc slpVaix .j?jcbfON:߂~M2h̀@F,/2(Lsf20`|4wBfc41%250&3314E 0Yf5 h<^SY?^ĞEU,2㌙V]ir8+`(N$@M ӊ^ ZCNX2; ϮUjT *H='1F<3(t3䜁EshƘz3ǁ$+Ќ^fP4{SrQ9swL-}ID/ҷk㽖|^*v#;+}],Z؜ c5nח3?r&SNLHͿ7Pc *DžKZvLqF/.͕2 &fT,v(|k:/L™X!=SSoNܨ͛ZFWV$bfbf:b*LH9* 6-~vZa4Eu1I3⢽⃽Hl5smpP|-R7Oh3?o8 e^'#9Rb+1D#ܤ)r&o&"&)ju9ӳӃq cc~02J//.իLv1wY63v03 11$%f7R後G7DzXjluIT&l2d2RRӔ3b.G3Cp&m[Em[bjT•3A:YDdl6Ohb!J<3 H2aeŧ%q% :4)VgM4pfww0l11pL61wl J8a |,63s!Nv=Z3p &ꏾu V MM~Հ pi@fv 0 U0fy yH2^[aɂAf8+/[Rg%=A;춤h퉰8J"ʴKɒ(}"2l$iBܬ0T&Z3SZ1 N̰Zfw1K5O[p's)U1dmŶ*c2YvCͦOg <Ů>)hgP+;hW *6853ʀД!\&@o@*ƙ͍ʻ}&aǜmήo|d,#*Q(q hV^D OY:!)))!:s:Co^"o%+~bVhk $MN:Q K"AiJQ0XҦ2V1L?H yiCIn[ϭtx-~p_ϻo. zͮ[ov&=:U zApmi2ΙMP41:C,5oBl3ي"3z2]ٟy:Ulϰ-j>?9\<{It,@]}Z+LANqp }ܘ `4f`ɻ~YX,/G# J).BSrJ~Y?ԿTZZ.\ JgKb7àԾFFg>Q58dFt$33V8bcl d|\RH½š،ҕq*QvƜ n r. e%4_Qèem1i ;)f%qa[3HlY6j5剾C`E3 JS>O`AV>H.q.QT [&N+E ͸qǸCtf3zCTr krLv~ R!yU&g M09bA9mZWj+F 37^+/u/3MW5+01 [_YAZ 6ˆMڜP$xXOr/HMUdeR=NJ̮,49vٓ?FfIkմ xY3<<ѥ'4U @kzl&k&l^GHчbZ˜)3-jX%sn̪Rdf'Oq<1r39Fs[[&&Øbq9H4ec(Me3V_ؖ^thee#&OTU3ew:|z_tzo6b9zH31tt4t|w45>8:=|)wi{M1 q<9ѥk cM*DT<4C1)m\IrBl Djej eF1C/0@ 3Q(l<ٹ(lc4^M#̲%kgְ+lV,/*Kfvm񙑃kõHn^&2_b0̗8~]ps /_>7 Ya2(uE&\%yWIDg=U?*f ~coq%TZfmfwL,2 5C3kbH`2~2fZ%&c|KOmX@ai!hֈ8ψ H{%3f$,|nݐοIs7[hl?2d"3՜\ͬ&?8N }&F4"}FE+9@[fAؐc8Z6. 131no;f&c|;hllHa. $cN\ : MFn*^USEg@&.E8aPj y%yҞ ` ޶5:uI{QQ- 3xb-ɦ 6I:D`l .0 :4!|)fZ+$TМNq`@2/4{nFm6Wi&MS;E+aT0 R31_wGܙ:D_hH(^:63 Ck r2=1Br4e"CӀǶq1AnTP3DQ1~˪qytmt4a!#l4GAx?zOOzO;:??zݣ8wk;}tL_YJB4ǫhώ SLF})+C;HJj],]5 p*7!4^Nit Dc3o0yg7qgg9ɝpldv5Cj,#BCflʜ[bΣ1ma dfb3/]FY.,,f̈˵<1Zj-NsJK/](]"A.A HB3&2ۅp̒i.lϨ2 9h` Z!d5}ˮC `% !2`C،[L 01` 5ĥq%δ`n khW6 c3-c94f2O~zRQ8+@m}6a]|+pH2L067z0gcS4Zaά PL}=D/2e:u 23aV4Nf 00&i%?1BvvnBEN\Ad2PbG[J;3|zpzf VM/o caۗ8_$.R0A"!c#|kmlBNyss%ۼc6]Q3CMq1d601f;@_?Fd בOt :'i 7?.(O_8C@hEG[3p]HJEڱV֊}6`N';mܷaÄ eǸ qZi͜^URc3!,?5 4傛`WqxGmdJHnee@ejdPF̹ ܻGdΝ;\1K̜  @-9t{Ictg8kywl`6]MW:{Ӣ$D!gʙ ǒlnRt g!ib:,2;gZ[;HWD`mtf}r.@ϳe\]ךi4懏Ѯг? }e!Bf#GQ}#w5zDX֧s [GGG۷Nѧo}(w;BdΎˏ^ iR8>h"3O,)\ ;scn*팋 E3IJ3){،@̈́;F78,O,Dљ]4]6Gf432Z=cW`Еϻ,k%z(11F(#ݘa2ƍ 6ǶzMfh%z3LZx B%; WHgwP :0@c׌6dH&8L]077ԛ X5 g6n1GD]V!liLfKKr"3Q _Gø A 64 (tʹo0 v^3tnC.Jqr+h I.qatЏiMR jtJ&NZ"J2z:+. CEfS0Uv#y47>)>\ AL# ܚƚ&Wj/NNN^,}#rgc6SrI4=r'=Z+!p>?nS7O^L)YPB+wqŌ@3ch@#f s4d≦x\M]"TbC\+xtT:N =utу͸9jV>::o~յM5r96Wgͤ'f!)3 21ZTˌWU93 3SM0_D fYg'^cᄇ;4X}?V dEOgZ늒PD ņȞA,0\šy kDAh4/eѥL*(wrr a 1=Q`V_E,n)p=XĤ257f!g4fəQ<4C~ G!,*3 T_t0ca@dFSA$er;0&:CͶPo)wX&ĠK@lpk0v2NfS3 45YK(㈕cCY}SӏK?q?MMʀlo _;0lo of57y8Gjtq)!Eky%4&4E]~Ct5"3pT  `37Ӻg3 a]X2E|ĵ1;C.mٹ)WJ(AO di4t*yݖ@e/"jlFtބ4w$]ua (  ncu[-q^-teŋӜH WF8̠w-=rgH$q(?RdG#J?|mcsjc^qn ?קgro7Gʷc#)c򙛩LQG`W75wC]"34wzQ L[N u~K $,# EYwLQ gh0(eeS;<65PV%xGa55uٌme ÙФQ3í3s7grә09aO~g+LBooΊ$#:L=<eg"6e@/򈽀JЊ: )%Btnؗl5{;l6oLk0-3LhأY3eqH2 ehC-LX| 2>6V]3`@Uf2Yf`‚fL418ӣj6"-XZӢͤq@pf0Ws3&62z=,qw0PcT ͧ@h6Dd0spW&Vmldzch ]7ƍ#= l؄2Woކc2UU+*;ana`/+#!Rd1*GKp.]t4 S2v*">S)B(9[kZe V4kP:CQM=6NA }Pl9f҂gҊI(S3wZV/./Z+;=pǼ^E1>IkxYPCBS<)3ePB^e%ыà2223kkk!4 uwm`@CۃѝZ즣\Mk)#b>ʆ>5khhOEW. B@.&U2/ 9itڥo $ 4ɤ2 UYUtH˟3KG3ի/ZU7{ҋYѧO_UU :蓎hvsį5Njl.TG&Ec~ڔ&+ʹ$2e*kVS1)yN 3`3,๙{a!+'2 C3f֒/ =v<ψ7VO+:ӧ{Aсa`%f:U:Co}6C ` BC@s2/_':sI3\+/u2No/ `',qse9h/HҌc0"FB]:}'*,mF 1SNM.=cMo6S<+#RtfZ&̚fE S/pM7u |D/e¨?` ԀO6I`#!-t|w( dM Aƌu6PLT f/vd`BΎq2Dy"?fweAּ@m1 Di `9*ˢw=u5V\׆HP'z(}E]&2gV/T T5өs*a^z43go?zln>`W>-zzS.E>4!rr"%ȄᆡƲ(JSX et5,4/\.˾M} /ل.1|CtT4g \Mfq&!1ٌ`3S>l 2%- °L5pxK4[0y >\֣ůj=kWYR33gnwتZ:0WkiՎ1bXoWB>z fj3hNM#^11ۛm٩ 1l.}#]|i,p (Mɜ!.s~(.p W3e֣W 0!<345ikD_tD:}zuG_鞄, \_8I*B( @Em1umۅЈpNT&iJpقlb(bycXbRZ'Buqˢ&?;31T Bp{J0BvTCî?)D4B*Ss5[t~ C4 !kn7}?O|ys(E7hmm E*A~~'$'cTmEcp\c*.>R"c=GyG8w`c(s ekG'dYc~3Ќ2}iEѷ3znWAf)FJ}I1ZoޠbNYRg [<ޫ4XcJ9-`||z[|/}:3ɱnne#vTh~$x\4LaN+mXAi?1{~ 3-3sM:OqӀ5! {-ǃ3Fw6v> +NkOj /j|f )l|Dz&3 &ebsM3W\4KM"fWb6ok153r/OGj7qfΒVjZ g._NznOO,-UBJ HDQ$}&erlTOn 6Ì@Lh MfdYvdvf??ܝ5d7Q1zÊAKF#4pgf&·nvȲYU:FF1Haso/ gK)X мzMYY~,痬 /)_D Fb4 EˏNxx<OG׃YLkB%pdDN VCl|Lav=S2Ǯ8v0Ƙx5M(x۷OOOb:8i_9P9fΤE0Ls*-a^";0 _3r )8ɼN'agZ.h$Įc=YG:3]MXh H1bmRM(&F,45^ al[`N) TڹYc}6?6mƱ'm!^SLF0Ǵa&yU0 ň͇[>/[11 gkXɜ% @p CX#4ڻ7b,ǃOj<Bc-'fε؊? 01HdUli%[G ]#ִlvټ2WΫFl FӼni"Jn6 fG`&n<|ag rJ7\Р@DFPD#Ѝ 6q N63m̓G&5RjYᕬeAЙ_Zz31W#G:vvXe0fEN--?&x\ь!pt8F5 w0eH #+H_nzdOߺ &3OGNJꎟ#.s:42 Ooe6TFP5{Ff3"_5.T нЗ|r *om;0s-%0c\!2l@ibb6Xz3p0ee/1)[a![fAVgf0G3/=},ׁ/n^Sֻ1&6sa0@lJN+H/`\) CpR@MŘ 0=(Q,OTqL ݭպhEN i䕒{3RbrFjw1@32cv/f// _C4ff 25.A0>@bs168#+ig;\2C f(*.htYQD6_C,̬UTA8\Af4рCT^^t2b9Lm]LL`~,u@]Me/@l&S*]x|jOE!g6Th7:e 1pk0xA TՒx(VS[L[8Hc`Dtf唩Kε2bAe!gc|]Wwk979*'f;F#}< ϻ2C' i\zpƒom1pGM20\* ́0,;|9x y/1tA,;;1eqXrf -{b3- 8yjL Ƥm1}Es3yJ k ͙+|D۲36pRi%9fikl,$2^!a a-^"(e}^)NgiFKbffgsL6 ށ^dLfКQ(m-l'i lJ*j:Nt7)x}fMlzmk/1i54vJ񮷔5cیِ`撙Z79 >ћX/|5׎`<ηżAs3OXs#l9shm1|!}R<6T:P ТY5JVGQ=Ҍ\f_7z!>̭[9hn87':O[ j戴M0&'"v etdBMv09?Ie+z,5j g:o5d}OC\&Fd02/q5/2l9%B$ Lpa"mi&h% X g1 f  i1[- OQ@fEtVT@ ӡ c򬕻*gtkY gdP:'6e"?l} `ce3p `O8`-?Ȅ{]k=Ț+LU!{ Jf"_C"SP{,nfP$HXZ -_+~tQ6v^aԟ~ 4K!ܥݾ};ohJ&Ivu&'q&9 QQ#t7%k˓`?ҏ3麟)L?&2ko QJ&03Ukj@z4rhQ Ј1tQPLJQ1ܷ_ ̾|A"@fMZ(5E\(suH;#6&*ZAKf20HSL5& 2ԈLNx*l5(Bw'ߠ` jTh&$x^z㜆evX,kPi q r =牴g_`:vf RR?f<6cL }Uw{`ӓjp`\Snd{_i3 E]4"O1?Cb5L1\g#\;_ęҸ33I")Y]5bs0){(;]6ؔ1WaU[3R a_5aFtgTƦ-ivl][ PZo i;{kqV=2r D!׶ч363~;'581m5Zffنהkfٻp [lu{KEBt.R#37fޠ Q@tQgzz_W͙]u\E 7lM,4ћ/3,"g2䑺ۖSz}5w,RBz.MR$Ÿ`3tͼH(se3P:U~7ZzL3b37 abnjsOd/ S`;A@(N4VZ:M<^^wf%mRGg.8zvtvXᾁ}D\ CLM_ p2b`bEN)l0.v m.rRaSR1KaE'kE,Jr2%m2jl5@IxM3+wLTp,!tt%G̅3tDBd:Ȝ!|դsђUhvͲ&^V&"MP~DojUHDFNTE QNont/?::E*Lp! ieҸz45%"&XKV]%BL 2+?*̐+&4VXk$=eNF]'>w|1LS=v]a!̆Ψr]>q7E% &nVx7`>tYemMi~>Xe 6g F}tZGm0h]hgfzY!7,*7RjfQs,v٤ ͠7c.# 1l7ØS32+vERݷǠm[ sA/eeą@?ǒY4r n<#14U"DdF*jԀ Av ,Y-)}"  lJ~y+Oa? cJPn[TFjVjYA 3+YE@,5< 254vy\fte222.0c5M cqXd݇ |92}yKz1G/ӇOZYN01&U^YC nt@g \p?(ȃk0gfCdQ3d2f9\X˰ЭK`2_1pƙ2TĐS,Ԉf1')bNdry.q.ZQ"=;EY!Ltd}Gx fQ N1 ET 'A,h\£/y$ L.F񥐙f,t@L`9fA9 -rٓЦ fDg*#ܞY@lL0&1e b&u386Qz HSFdw4++j JBDdBK<.C"2_ 42Mc,, k!q2\'1 \Pwl-<#&uw&ɞ#_9)7hWi\ξRʴO5lw1cew󦉦Z)۔lv5x1,a.#㘳.}$qcYa-3RlWfybt Sm\A{gS4}w =Kn]tj`˓ʪoMQMM9r.K+ډzmM9aq{='^noms)lPHh3>W fddf An6b:AEPD+جo}&gArM:Wpь3yl5fE3aH (hfo){Uc4V]g3f9I;unOdqhb5[fB-rffx?d;9F?}yYY9/z4\J?{ \&6eӂf~~N95 o0P>Z_@`2?|^?҅ڄ5sk}^ǏYmNi8)ǑQ\@7!m Ps."\Aӕ̨G|Kܟ1 PJcxE4fUWL`BKm}aQ3?z1iv:\7 gY^.&N% #bɁ핿%)ׯ_;zQANRY$J'ᩧVUf7þ3UO_W֞|E9kJ6:~SY[3ݬrWUh&c֛5gmh,U[0g21=#gTL_g.Bhv,D&Qd:Άgd!9(18#2 hn(cqhLzJvIz56QL[[9祥qtE- E*uad8|LvzEߟC܋&9GP,J=kLj µbtK.01>ֆok9Es2Q#KP7%7]MHey[T`dQBM.ͥ2 Fh@>AdEPÈk?wizLBkʄs ĹZ"q^455"l[ӱdX53F/muEp/r.1rxua1lS`L) adxd  s= ˔sZ3+O8\hK6qrV5AО=ZO=ff̸jy_惑St5 1J@]to*Y?Bt33O ,ؠ[ UUhB! $Aѣ_ gGy Mz GP׎.W[oƜ.™ e22C:g8.5 #!!w[dwƸN]4FLw7egf蜘}Q&Rc#t8~M8e?9W0f:pNO=hPڕ̱f1'P͊94#mͨbd{oXeZ$]˂Ѡ7Ӳx7&-KVⱫ\ϻ?u742;!ingSN&M3z3z|X# Mg9%O!CNi}]\[7rh}?qedŃÃρ39mvIiJ+0w&n"n"42T}7iizCtFtr D(SUQ?bX<-\ Yrm 4v3ZNQDn`jDMepfLtlކ @8p WtfK5ЗA|T3B w !'?QNk#z" a|hw 6}5rh渹U3Lˁw5wٱ(lY3Kp˳9qIG h(D8/~ D6^˙z4hL3!H Q:2"BWS6VfhLD.$Bs/{*\qOuOG h<@kh0'<:Zc0UX6̄**nU40!]R2C c%e/cΠ`F0S\!f0+I@tRv>&;\hI+C IDAT4r@& $tSŔ?qAmduXF1O?荟%ONY,!G#SaLL|;eL3Ney{fv"++5xC6l))mkۏ;O1f6W/Lv?u{Ê0όid,CX߭m~BkZ gguMlTiOEHY>0V]ŀ&"=fQ7ɹf'skfpn3<$n߹ࢿ~~[ҫ$ @lAwl}^G3Kt ` ~hݹoٳ4j"EJ ׹iƭj$Lp/-7âQ\b{ n܄fC|Ma+bP7hpn1pF@m`p钰뇊(@,iGMߢsy2)6FvC{Kg%_|kq|x:I03.đ5ZE̿9 4J2YNM4RO,4ޢU=!,9 ꥫl#go BC?w{{wX)9(!#pl*c<29u43t%dhذ6 M 4AhJ10@y t3Ӕ!|!X$)[$(!1nc3fb/vuRq6b[-/\CpeL4c>)0%!܁،3]XH'Aom.cpQ<6b>G C,1JD_ƕ]LIL 1} lu[|?Sc6^#a-}o4ez92#2bFHw,V@K^3<ޟ%"YmI3E9:*62K&KKzZ;K񖆨{K%%G$wqͷ9CvIJ4W 6G g'7r/^Z73Qr&ōK)7Q7aq:Spn AMFC(Ysqʦa0B&=oLd.:}>.5W pe z"}EVܱy~f4% @M\ K<ɵ[k̈R@PoYzcuG RqNAĿu3i.4pzl8bz'pFbr2~}5l-<'=ae dd_G}Șٱ@eBžч Ό\t[H8 >#Lyǽr4{{3B0!^y&ǻB\YjweUȓ&tja 0Ռ y{R򺢢Io3%%p,!1Fֈ Ʉ0FA:kj J-GYqSH!1F[&:5rt {\! #KtgEo2!nqG M%q7-yܗ *;D 0 e 1)1QlUc~Cpw|'O*+IEKI?FfX삳xY,42OEFxT6v@ {fDv:{خFҨ"⫂hژJg[_^nvTG|tIȋFݟmAVYt; Ʉc,D?6:OQ~\_8lAY?p_¿Nov̛pV, kKɌc1f0$`V@(nLfR='c07A ])4O^&M2 fb3\51͑║˩џ '=zKHī 6v%$BcjS\Z:Gg1..4W~#*a7?|p22.@?7DB1˄N *ҝ"փ qvk04YvBtuʲeSkNWvT9z6Ѡp6lmg@69.u_QEi!4lvXhi9F/>ҍ[\[\4A{P sV@ya're3!?-fLbǘCc4<8±tfk`5."2fƗXY̡:GpFߨJtXhO=XY+e ϳ#޾]io xKBϷy6D|W_e.JdS @Bk&FnX&4"9U3-p  l0 J%1PetD i^ڿehtL? >48 eI%3[" R>gwiGD>IÉ]0Vm_ʧtd눲I@ŒYzjՌʦM7a5D ha>3LbbfuuLr/OI)1`45=5cr ׏-xKAgӀz_Q8GF0z`sgJ|@I=t4{P|`ϗbWl}鬛^brFbf)2Wc\E H9g%˰“E6;DͶ,5t0EF#pZ3AjNw؊2O3i=o~R.9QVCqgJ**{6qsgO&rR&n2bp}zy<ӧH͆n w7T~"j~,'ffg*:.s:ixgۥY!gBy>p6uy׌4K/>Ьe/3ZS\'%25 /4{`i|U6Dleppr\zFhzY3qgh#x* b*G٬ugfAά!]v}},NaD/z 3"V2euqy68_F }q [cʅ%o#m мhV=35/xx c25l:H\(^iЬEZgECWkb8i QFUZ,ræm4:@-8/cZs~ޖDTz01rw MSz94_[悰#\hz8OOuJЙ̇XN6`f~rT [V䃇 KGGPȬY1 fn'wЕߵ A]];ϻ u 2X@1zIXH58z،;'74ܕ/@&W e`b{P9M9P|¶sf6>{ 7vPJDol۟L(TzhK-=h^R6 P)S&x2xa4,6z6[6Ь2j&)Wi.ffN7K]s @0ߺcS%2AaXp4.s߾$ RPCf[>-Ґ1nזTCGgR>K >IkhN=G54g?hv?}\I9?Q}}#۫f_|u̦1 ű6,fTLe}`&o>0˱X%UoKu¿Sǵp]v(S7y0+֬;s_h̷EQcHfwhbIzUVsQ2ݫ" ۶>gffn͌ ̾h׺;3w|P^0oO69璝} 1%H +,ccv8 OcP *,i,E2Bn2WP\v`=&eKn.ȽDмȕ'k͗/$5EK(]LjKu|,uD[fapd⚈Vg2@FJKI#a=xЊe5qYиD3,g`53/8@E2pr̳! .gtg4fg kfg(sYv4=O?=~Qr$6&@g^k;[Տ+w?J:͈@xڌ>.^ott/]4Pb[:K ]pk 322e+j-_ë񥸸$&YK  u|y`J3C &0xN8~#GVE4*3 n%`љ34BXlRfΤ='myJ`/6L=U6HeVq4ٴ_hjNQ~|i+#iƭ8g-v@Ko$Vé+~o7^JLǪRJVMњɒmaaL/ sL.SgD x5ht33ъn867ųX"֮`;// cرK!=+1GǣqW)t21D?jiH{rLEʹ݃ OlHK1?mC=塡oi^EH6^ސ-1HR Ӽ촤2d7=-f+0 rځ#=G&{d5ZX{&Du ;f6pjw%$>E_o9:24H03eKX*:4t򐶻4999M9ښn0,9u|_eagf΂vD&Tga`Qü:a #L<-RJ Nx,XYjʕBd#bc|F#myy)f\bjv1y! l\=@ߋ)mMQ ^ zڢEmM.CreZSpAFzjf5fːO)*NҍrUCz쬆)P"AmV .M-;YJ -)PkqߍL*[Ls&\ &1*C0/_ſdevv.7YM|0u=O=~^fr |0*sV3?"aLL<"|Tu1ft4 ##LhެFFC,pFt4WD W^?Ӗs(5ٖK+JKGjo[&%p+X[DacǡCPWgQGF4#J@"#0OcIp$ \8ze1y-hゲW 3b;xp;2LTL)Wue0?M)=ЛG>![JjJĕ03r)2RɜizU|6OIOa˳1#E3`:bPsi3KsR3-`r+1Ň]V[DZ L(Yl6KYZ2ҟ4,u,k{u^բz#2 3z34]/_- A㷸 Onc~>mp݆p#GFaW~WC4zS6Lչ~ˬ\Z4|̱IL)i4Fo~vњHst%ixvQN̄!4 U &-Gʙ{DN2gMM$fv<9>>3>su—;wffv3)9יsND2\gv.Jx1kN1YSBƣ-gSD&|[oA2o&@df2,HT. <# KJej9]+7!H E(K=&)aS.xQgʟVra2b5rSJg2]Fe6!&H\e/V[dEVa#>q>mLPͱ,}v}^`iR#A֩Sg{3er#$6:S^!Q{<ڽ{U!k~@R5%N`6PT {itDgP1cp"6%79[%fB!ݪNBLv@ecx 3Rlímŵ#GЮlU$Q6[֢ףfwvծ~hǡ;hurkH.4a~?$ECOt!*Cx~0kWo-yZΉ-3B, pld8lO:D1]zNˍ>x[A,6:qzaI})rI򵍱I_1%%dك>W1nR|uްn͒ul 09"hd@ã@pFc|Zf9:m-&^ܛE{YC^^VV~I,Y=V5|#9^pD\7>V7 \je8G?;trh-/ W,\]D CL Y΄7:ФQtG IDAT$A\Gs؁c<)2늯]+͙ @XpJ6sjjfe(nw\їB |&CqKgݔ=Oؽ 89 D+xpb'!Mk>)(h"AY[ә㼙|?ݘsDOvddq.;ezYߗ,L- {ElgFB/aKPaG}"04I5a1Bd0KtzkM+U/KA²zfTQ bd 4}l>܋WhlClf4.)&Q/qR31~~ ?uf0d5 2frM{>_{ Ĭ=679C{ ؽݪ`K$@%$9kf }½ʔʈx fTƈ`KYdYq}vE2]DY];Qh;8׌8?3ؘ]22;#HfpHh@xAgq.0iܹx/222>1q#t*e:Xw.8"^\yDϰq=@ (@F#Gf`i䩗z^$2qe3l#F5b!n!q&dIΚepq!=V *l͜4|6]e2b$J`[ٳ'_OSsqek}&m @ |YA=4{=z{c*]U&rq(OD"{_U :˙l^e@y ͦO_y]zf&a2e/7ՎW~b_pFdz':%@-.hC]vqhЎ.]C Q?d\Lf0#gw$StϑDŽfw[A1x86Dac.3 2n{ZLUl`y8 LڒN>RSKI4+N Ɠv"F>v%)ѧ@fo8ӬјQڂYf_O{ˈGǟc|+K-dqL/hJk6W&Fg`8 )3;9l(|zSi Ѩ-[4{ٰ?mhppli@I3n7h'OD (j Χ@"׍-(aԖf6Vbg +I1˚fzAI 3lM<) 0==Pf><0tkœx@SsQљ9Hmvc bACR+**^L)Ek.g99Aqz7srNxg<{qMmM2MDws#T_^> dM;L8&œ9'@؜)1g5i1PÇpNg0X5%2/Dfc$0_w%g@LB>ܧ*skeuǀhjjD< 2Hl(IXOkrC>kLIH.#srL3 v,Өx}͊&TnUT* .{ Td /Lkk}="dRq+#Z})p*۱c:殮aB O!b9]peDc3b.FgzGcdmß@hbZbZ`G\&; cnS@<YARhwf9*6TE)>xef{@[gj[[^K_MQRMK-gJR[@ji+=,oJR{A_@s{8O^N]יlph>v7ٲ<-Sd:@s"kmv j3tg9kr_\;CKa#ˇAˇO,'z:[~Om `ѻ- G`Q-9^V;vln6^8mve)l4Q3B ̆Z?L۹5y@:#׬47=a_3<3y3ůٙSuNBC(S+,+uF|FGlw<_$-FF %dpk2TE %&5mϠ(hjz܆&BzTA1\#qYAx:Lg5Ȳ6é=;Ԟ=[[[3.9/%Bo83Sry-% } p(sLɤ⤤۵F1GX,2g&b- g*r123LDfWd:)0wAzY3D蔗[2`ژMd-W4+w"+w`CÒl[!x^ dg/E?. f R eX"LfެA-1JSԂ,ֶ(UF凝wշ={\ ?U ~6m"t-+fZ\!ˇR,5_6k8Q͂|(0+7 hfvAfp(|Mip]|TJ:7r-wHI~ĦS@־/=9yX3#Ěnĕbx:< 2# gd&2Q%y4O$v6ԩIgO]&_O!`\V 4Egy8Ȝin3=Ld=pYƇ"NsQdMCZ#-{ZS5EFuUlwk*o_~W _~+/nc~7cy/!pulE`3w3);8xuڧWK=`KTջE?l>f>45MQ&l9#jx&?pg=s,3q}3ߌ 4/|hJafv7'^Ho|V=/~PeTͧϙju; Y: ^ɳL|5߯FJd"$xxs5?2Q1EdY^dHLO-8[PwZ6, *'JHقrf2p@15 {gP4`x_$CUK*&+Xݏ o8;suo^WYַڿٷ L!PU;~C j!q%aКܑj>5䎨{|ժbR&+tsW8jaB ȠC i>pK|dJ֛?Ciп^lWNvPfSJr*"L\nE&S v[6vtv#Ja\!Y AH%Tb:"${e;Efxc4x8Ikc`ưsxxf۶o^JY>Ѕ `4frT 92Dg]֟o[[gO3 1{nN Me'Ne_83l U21u(hXEc3gTyDc sL32*DPQƨ"<,>C`&t3ر'Ld|ca Z:fa~EciX `c™6o=z4 fIE2II)S&0gJQQ|ݫc_у_&qz1b7MCf13Xœ$f3jؐ=|_7SV^ jd"C| G̊<ӊa5mބfۢ-w9m="i*!邭ǿ˺ʴphU{᎛THgEl1 4NpKfu,ff)j&^aѼh?nJNgЬK2hp€&":s*- /a>q1 f<qA CjxJIgh^^Z-㖊1fcmu3~ng?k[h 3 d8vΌԌ##L@1!쌈=a 8WQiVVb/D=Xpܣ-kE~[c0ȇTYpA2(gL! dP#ay 29s22Evtcb_zC])zN'gTy̼EBngxKbG\J N%/R8vֱɦ`|/6kyZ.7Mf1LVݷy]醹lF~Jt A ˙MCFI }.|3h!6岩ĩo:tHl-nƑ͓<>2x !K;!"_7Nz> fhQ.Yca(sOht}h46b3хi-c6.=)m+&͊?K0ىĖL\/i1٫Ǭ 7]H@/iHˈEnX;)j a&P`ĆOǠ%"N#x8e@6E9z 3MVUX!`3Ni+3'̙):𗕭z/^o7!7a-!aǎ?LfY0.9ftcj 4>3fn,#GY'tyJ@>זVICBה`JOJ+]zz/Bp!:?tnMksB- Z[[=xf<@u尌Bi4 '}G Oqf̫&M*>3, iў9[^^,/F4#P]c\4#y (A{5PjIa1Z3G3b69n6QAyFxe:,-s)/0m_9muHª6TQ "E~ 9hKp!/B |[%Tą J kTkаwE+B b1ǜ&C30-|G=6obQVQA"dAf[_52ʀ_:lK!OƼ۠X8S0U6N'4ecCgܕ"i ׸nlHO?K4KA:BGG9v=4`-]5ᵎm@={Fof߀ OgNieel4{f( \4Sδ̜[v#䐛2\|mwV"_Foxb*f!3G7gȹ{֚oeGBBEZ$,.&$s450 @Nvy,X?mg,6)hϪ%%w#;l&.I ?DKjRJ{ZzJ[ y)XJ~̢~Z fV"Ŷ?E";f3G}0tT|zu!.?yLȚY=+EŠG }zN\Rz쫯B&3kk)YϜA45K3hd89cy;5hihl+3w]L Mc( 6fAoF.hѴ`Տ׍gd̜q2m6`U\9?AT #T@OcH^lBͬi $6EUIC*2DV xe@1IFXp3hk@0gDR(^(x1"젹|f`0]~.В ]M^$MdeW Ę<sQGN!nsM`/9, ML}W8o. L7Č-I:De,|qS e΀ܦMP=?0sڵ־ o0 f'.$ml;iҲNP3 1ofna+o_75$`SUhWqlibl"h${1EAacN3WVhǜP&&#WDoَ|vDeLJe.4EP0We10 2YtdIN5MOwB|UCo_qՅ8N[Vo|Q̑uw&dIllҳlS.0ܝD͛Nq ,ݻw"9ugƌ02^b3k+cjҺ%dK|!Y 11E3ffO%pn!InFFCal Wg%Y[gPA ʶ;PD|XDꚕDZJ01M&ѤL#L=-Nj 0-)`9UPR[GKLmw9i陾?xAs+Wy&93֘vMYq\JSuY43zV&8`4r& KX}" \+tffyRh2?Ùg5\47>uhJjҒ'f ww"? ȧeZ? -(*XgJme!:/G,Hs}z5D1?3Ob?Zμʌ9gF DfQКIz5@VLf.LVm)L-&X+g͜!rA '4 \ "F$5_,̤U-- TATjyI8tL>:=hS͌9f! ;Nhqnt*]:Ɓ?aBpnGZ3b7+ r7 W6 oۦ& !NS=cuGHɸC#dZ7*҉c)i BcT*EFLr8] f|AcviPKJ<U*]`.ʮěo&> aSq8q~">K(xŚye3QD~Nl1a8`) jd?c;gp˵5}ҕt߃Ƕ@Lb)[5A"οyd >HmnbE&Y{Lx=l)3hP"BDlpYEl]˄1-c[ZdhoUV_Xf~J ]"2UDvΕHd`ܕaPi[YBh )tj"ùs~ؗNfMcQ٦5 ae R O*c&cr:evY\+Vf9{ʴ Z'V4m|tsfuy#֋m l&bd"5WDLQsfLBp`ҠVkB4@LT)fZZ&BLAgg4\$aħs!_ =\d1Ix?Z&ɘ\ʧ㫅?M4!'>fZyA<~? I/t$LuZ=^[$b;Aso}`Mc&^ȼg~ A3G &:?[eJٴS͜:u&{EgfL2s3"3ApSqDALm$`jrjl06뜋NH3O,s!3/"(ulAऎL1:Aw9܎pLnG1f0 깑jLmpR (@%7UL2ę2"PإU>z;@Hu\1b{!9 ((s)1R$䨤 {Ln^ptϨ-:r.Gs7|ytP%j!Dۅ{:O& 9E w.9j\9H0Cu&\$ua]涵k_B3x4JT"KڣD"3h mVl=zDfytr(`eΈ7V]M JP2'yXDw%D\FM 196E<:WhJV4t#@p2`EA+pZ6hZB/.)1z2^W1þeIX  Cg}lzqCl ~Cv=Eέl4{q{=Ç?kχO>Ş} \7Йaj%Ɯ| KMpm,iH#Ol?NUǤYd|MLUO9{F&)H 8 TyimMp,fXc&<69YNg~]'™P%xu p` p"gf|<fBXA} VJhV J4zc}/^E\-1SY4a⿌PFcؔJ/l̢G7LD4mu'@!OM/@6#jpYJ?jӂy*nچԘW9ҙ 63|S}q?5Lzf #!&O]&8N*[m 'N<)N<|ßɓ|>yoO]ܻ|^ Yg9i`]YӜ;^gu]okۍ|{:3H GjkYՖqˢCg`<0 wW̬biDIW1cɱ tY2h1F7ܜ~ Lf.<^_763ASa%p W;ѨGp~ F f&],Y'<=NRUcU< 1ǩVk֬@#fkONsHZTS\3Jf!~Αxl3#7WT8<.dۢ£1|LAlzO},Z f(1~,UY=4w4;x wy<@xw\Wjdh lv[rXȾf \?XZ {hbूX̨T6WLj 4wT2'̡9Tuj XSpi*9ѨG,YDŽvvwpQ,cLX$C/7z rn4_\Ԕ| F%ޒp7h}j2\fx"KD5]3V乕"w oLY ֒T3]yfZ_sǡJ;zP_@8nfnB39fcɢs@ Z-SL dr/ '+~D__O$RͯR*_.V8ÒSd? VIU hkT1} d.Kb%z)tiX B߭+\cԅ~Q>L^1G>)EHӍA I IDAT8b_9&1`0TR:pH؁,  7,3Zu-O|ɓ[ ۙ7o~L>: >} Ldf/,l&(-1:BG5G!1_51/a:>MC ŶtfP6YJmd2Df<!120F^ʠlfSijdb?$]-:0P0p`0V®&p01R%Ƭ*rܬ>2_OM[HxqqO` Jd㙁$)JfgvzXYvڗ$ms<Aր'fY~QcB ?(Q shg8le&|ʲxc |k0_i'O6w~=X\\I94А|dt6c5A#p.&ƑX܋RJ3Ɋٛcq;p Pm“T}D]# t @Nnk8H;6ȃ:OȾS4fY*axwU3B{<܌(=El2EIYog6Q5C4H.m_֌l Z`ůFgv%Uć!.shKfЙd` =3wh`2q62aB#' #QBD+ùx^FC<EPSP0aKȦMLE#f33l; 𱨤t.[:YbʀMH.!Q{Nbԓͫ %0ڰFGw3f1Aߨ0ֆQ>-NĔAG =1/.JtW4ϱEW8h0K:GPPh0wZap̣??vbïZŦlj 3Ɩ9Ps u;r+tn`n~zg"IdVv!>FY 5PƞLkd9Bˆ25[P[^X2929skuiBK׉__0i~3ig`iEl|O:`xLh$#Mkb' ).K5G8ƥG/ܗIn#&S5z%mzqҼ{2ĞSqc&S~*KQNۃ_{y0%:Z OҮZ=F~ΚmnDQ- 6yi  :K1zF<~ܩE-]eٝo,x6nt[<}OfwjY 34C*gn&ʈ@7oퟺk?o:|ġC'_>|OO~qO?=yWNW֙m59`֪7ϞK=͜GҶo#:cK@Y/V6fw %I;Hu %@-L @@r3*ftm p/Gc2'Q4O^،2˓G4cE.H2/ jMN.uikf_M3̙3 ¡ jfafb9 {έ%(ЖL! n˲-Ѡ c&CM2st,Lx!CLNXA-xZ9ل6srs745mB fd͜S64l)5jT"6(dDp h3[a6CO*I43K>.6 (OaI+=ESĨ L4ħqvi篓mfPI6G@+5T3ӏW<  FMEBE[X-B5YAa];#zMՠ"3LbwVrVƜȁPKkرm E1YNPOJĠ&A fBC(e9![ 3XqkglֺP*3-U]_,  Hi1Nf<3?&01~ZzYrVm^(%԰C1 ]-H:9S)YҔ+˔ouG'&:OB"cnWO²cgAOjl =,  8%!RhViY~ 5&dO}ŋ/OeaMeəП3e2iVQHFC/~7Akѓm?n&؍V LЅ 6G%iKm X<7P493//GGGO\Y;bXM(&:iƙuK({ɦ]ƌKgU2ick{6Ie3c3ɚ4%i|LrD:sre/ w3%/CfF_-1^}qIIDe Ng=Q03Pggܲ cV7@a$?xVr-1E ǠIlFkw܌=@o~ܻe }m}}?~Ds_)'^_}Ŵ~_?Sco?Lm&DA?&g >5_f֙QÙO+G}5H_D`|)z3),XeLN && Pk  6Z~5@U97;@Gbb%lS^f MRAOX`M3 4f 7z\.=&$tYIjn@+/LPacfW_#nT0<9c6`-0^f2F_.jJG4_?1YèC31 ]{qXEI:x1ї"Q 3/*OUDӦѷDcSRQ3ŪD.!љ@O=8vħ'O?L sOb8qxLJp';ybjsbunlVl@<`p.pNyu]k>N02mD0%4HQp?:{Z؉LEQ&.c"vuf[s38+jGO oգ'xd/fOl H4f`Sp6齢LƙAX 0~2J8476YpHQ/ݙGfv59zf~቙0h^Z~ױZ^^XV֨'*Ϩ7u3ahS_g6sy4FuP? ݛs1@m7734vMC`Vj2ўH7H8pLfU2998,gŬDљz)3caLY3e9Bˌ BkB{lVܔffFL`Cc۲8ia{Ԅ[Q{J9Za1A†1P`:t.M^];-tMرdFeHf!F37K; |!;wՄ33vfaaā4.,f8yL8S# {on&L qh*lζf9ybъh.=~|~[ѕ=4Y%K`5Ktb0tؠ)!)W+'_݉3yMF"1 4pk`BƋqhk, !ӛ/J**(8F˜ҬڬRRJ{cjwB}/{/{ŋ'~œ/ulyu32C9DnZ7ڹFx_k[Dm BԲڞ`120i 40bo08mcE٠4c /U5&0y^fQyY*O` ƜOGQvuff{/33JgZrsJIkL)4hv/6LcaYkWcvOV>׊G-up I4Vchl|,'gnsG_?˗ѣWՍ;upԅb6i0 7fFiFgxF1]8@Wma\<hNʚJƃ*4.9 Y a%& Kӟr|2v+<@D'5n_a#dP&mT6TM%H@딉Ni{'ISh ;)-vJrpꘋb\73#$REbL`>]ˬĚ&c;1p&ȡr~Npt3]2T*Ƕ!h~֡k0%⥮N#޼'{lon,,Bo Dh=5`F!2|4-[ZZffП\u-n֜`' A?FaM^H245#Ű BofŦldG^3,ezY20eZJ֯ 81OA@ qp7VB!_-*P^/FikW ,`%3"1tUkLgY^'}}9obq_{g~EbBҍnq OY̤Ckshc!F|Om=əupmP.3l&Ba04i3f;Nr6HUu!1.b)$eh' (cQ#g5>|9#PĎңMQtC=q̡$F%i"DLS؝p@01h0ک,Js<K2S5 )=BD4T%ß/e5cD蒔vxL@aL9 e輰U :pjaf94l\Bţp3"j^R.H'4Wt_X|2ΰ- 425C sMw *;9hp1bX, IDAT̆t_2p #&s A MxHxwpV^h&U̬Zp0Qͩ 0Ԍ++P|fh14U_!q]~~ua?qmcj2;zk!ЙiYXήP/Y3qe˰lnQ=y3?&59U3i!c*f+^f cOhDT3Y2DVkdQ2EbL:p6mULfԂR0EyNQEkHwǿ2A2NvD7Gdp:fc>9g(ϸ?~:conD ȎZߓҳdJ8S6\;L^3&'lIE֩6trjX%݇@N̈́QXՎHZcCˏ٣4hi$$K慢r3 wx0S*Rpr3/( *#3 3^>(AM$ ́׫h b |yf Q ֜>$fjXN2s0$9_"d rhHTA7U61Kit3Dd! h1Ј4U\qqH`j(T.2B_7F(pƵ&ڳq hl"`k,iJ6uLg R&ʌ#gA-I,'{#QBj[ z=ĒVtlՉg'6gx<'yjnP1'=>kǚR}΍nU砭VgLBu㴩(Ek|]5- GǷfgQ?KOc09}~};E̚vp!P0Ɯk\A%d./Wa:ف׹Gvsu4TybZ]Q[sx.29 50(=3ճ^:amK48l]Ц&Unpzӈj${ ФAț]bm53vGLe qժ͚mѬQͳW׼m^T eF3^ eJsAkJ{RUcj4Ngǣxx6Z;ӛk?觋ndfaϵ3yk79fϹ_.Z  kgc =o\%`l&_ƙiD ` &gE3Z^o[g.o>lbbfeY<S6PIc1HU$TՖ&%%L™WK8љ 53  f 3њAA.]hD`CjUUUa#^?pUdWHE bog2 f gF `6_Q/ori@f6\GFgTr *M!a4'0"gFFX=!eҮQZ2 .eQ +&r.a)dfOB!1)9؂y;j^n]ݻ}WȗãIȦ{`Hי#F͑:$o I?A]z녿U&悎 jX\_S5'_ h)oSS}Jg!áGG5E{3HA :BrEJzJIl=z& 'țTpLQ+˘s34tzfzzqk/}L,W0/=m;_ڶƶ/蟷go[ҚBN'h/!hGDli'u)f f3^]~Q41}#.Y P(C[gZ,fE͘;Uv}Tƹ'^W/cSf af(3|:15#,K.BLlևx^ڽ^h`8sBߢ532C簙;Jex0S)(@nŖ!hņLZPuvdxR1 WFFS*0 ڮn…7Di] +c&(lH.ʼn ~R=)cduE=h@WLM;goPb ׸6")bJ3d-H`_gWo"mXunujsXSnqXLp vWr* ۃee)  E3p*ZݕYշK7|[Gq B0 hJc7]!lrd328"d&i H$`ezI S4%Z$x41 YQ0FFn ha= aD)}POb!nX'`q1嬣CNs[$xf4YZ̏6?=P^a]J/w()xDɉ7SDmTW:m:љf4I*"P5llltA `vz_P.dtI2ZJJfJjgO xLYӭ&—{Z;k BjͳDgاkx1fxSջe3N\0CYk+<235\*k%Y#La6ýLum(^P$9 7m/kEaf3å{KDGhF49KeBx.\<bQ-"H$vU( DGuZavE9Wm*L jE3x̽P sT%fiUtc3—( !)]:1S H.C[;I/Ÿiз}]PYE-Y֌.+Da3<@l8hyrH(%'Bf\I06.#Qc#(2$2!|@'M't0'mnװti",.ct?mb]5|˗WR9]1/aYF,Nc ta;C~;Y8e3B` djY$*ɚ' sLMF  z=N47795=;K~3z?,`7N@nQ,OrrA*)"҂JKZߢ>۷0A 1|~ .22$\$WfQ"辛LEk~kZ^2exB&0ܓQ`'\F\F-]*kh1\(T wW@ N &޸+ nb6udꬱ6`!~h\/< mm8 3_jHվԉoLV]P4S_RTaLs1:cxP7oZ gq374jXI,{:<"C Bg o5ZM=`ǝ `&QsZ|}"@q9*O9Nk"YRnS IDAT>/&MDFL} ?㡙&7e8q Lӓ*R>C 8 R&P?`fEn.%Q*\L o2BPRq-B 9FmgEfS7~ٶVW{_=7SMz%3cz`A``Θy~PUS<( a@z#d}lR6g@j+ uК 3+gG3"$9^9́v͘9,h`h:SSUu*vfY2`~:eĖΌ }xw ^?q& fElV(;"2g f5ԀkAe᪙@[GFe:XoƝ!Ą PSǪfA  7^5# C|bXxƆp/iO$2h4Lge0h#_u%fQa>cJIƵհ=Q m2!M>lvEĜiIЪF xG@crc`Fr[U81lTEUfu1U P\Л8L< R0vCi˵,ޑȏ\!BSzC4~KfCfD," a)K=jb/lpXt7&<Bt+ZY?~yeK/=rzs=歏{Gf׋KK;w+MCL<:th\2qP黺aDYF#3;wyǶC%3Z>~``Gcgb@o%-wٌscs9,3r%bf <t~Wi!*ԚYw~Y0ڡݣ>;tSsj١CMz*g/̆fњsJu2NO܊ U0jk]ke@gZ>ĉP5B 4YHm}Lf.YYWјp͛l4޷C;=^'y-,\9s)fZ,@38dDEge IpqaS+0Q"LXbZ2S/} $\|e8 s"xr6`Qfr (Nj7cf 0. ,H?$\0t%M;PU7y䆅`UK1S&V3+*3̠h^,5%+304JƤQ+f8&Ax[V8,h4Jd &LBз {A̺xv$D :4 ֠?#9F( cmWQ6AZb3S;ά،5ca3wq3˛^oihdeOYS,(MI’GC@=%5;JfggZfh-LLVNЫ}ft+㘜rr29&#:uـQ}nuȹ GuUٌo[DeLu6emE`8*44NbY9Yq)3?[`iDM~ƶS3MK7[iOM]i85_wK;_/!tvjFffcڳ+|plƙNk>NgA@Lޙ~B=>b̳};{ܱcdbxc!BlK:NzC|;[SUy3y 'j 3eÈ% AYk\5#>:|СC3^pCbj!L3xWPˀ4G\f+2s[5"d܌.w)2:m'aLLG&9(M܀ 0(} F? Ӛ3W`*bLy0 "MIGSz2޸nN,gRg*K!Viw! +8Cr,a6G c&q+<_CȲS.!tKTbi\G-֠ hҥP6ុ`JY^v9d%x*z ة pp)fŒ!0RS#Kl/&GĮ3,;m*F)MRPpO#f1*`A&cX7qu&9t+LbvN̵d#L8 /׻D)me4i,ewSݝF` h0Ф:8˙ L5WL)tCl67Ǚoc^r@E`dSjSYLS3F+go0n5͌&oDl;FZn}||,lfY)5b CKj*zHNl~@Hw{)veM_i0wYlzqLnUfWy٥i(sPs0 7MWVv7ЍVWMΥ%%y'H`ɼ3+eiHnf64QƁ4/|iXp^N3^،WΔݺ50}(P5#]p:BvzoV\hD,ȯ(ugU"U17 ̝S{ !/lf6`P;w-wB̝S5"4P2̬fĨLuUeP0AkF4el,hf1`fp&a_FL%/m]= BbP5 AѼwao%E 3ʦ)a jЪA@c6;f:Xd `R V@  ƄY.7Ķ(#d<ÓZ2H_[˲v-"rm4hh%4B~ASbł_L׫؞/ D˘4Z`(15SJ@y3>]jO6J&##ߝ.z3Р_%?1^pcD$&e0_I$x|f]Fm T!̡ 9D[5 Y_ L$K_C[ȌoU?]ѱԗ/kOLOCPgӵZ@XZ&gb6po?ЄP}3\;C,65|fT6vQ${l&_Dxkljͨ=N f`vLe f5UͲSsPHyF։Tn\mh ә3 oC'4Ub446fپ e0xG(bt`u5Ӻ6 L^_` 6Q?yM2ng09s.bY{]-FF2L`ONVV? '53]'^`3l$jСqMM0gq = sFW܉rYi!2/(8T5e (Fy4|G CtcĴ"},"A`4[P>tMLYj]Jbhir   ,΋EB>S&1UhIeS0f(Jb%̧11H xp"=JsSO;4K5aff2?,2B%A,z1:Pe9Dvtn"7DW.%m4\ a2bgjS/So:Nܟ>YMΤkk;T06gd]ms|snȲ-$N!r~deeb3M`ƧMtkOSSOALno|Lxª><ɵar5>Y3P-͟h0_~= /o?[8܋qQF#1~vp&wy̮}yo&/"A{QTTD@@4/U^Ӌ3!2>p?:87^fAߡ 13Ř'h3_DL(v3CgQ*joHcpL}СȌ6&ƾH}>)%mFLʰ]eftf5d -3;Q4[keC|C)~:aMj/g:1N[M7%B"nHЊ`vˆ6  j!&|5l4$t&>M؁T],7DQo@ͤ/q9EZm+*{8>f8OԨlYpSeH͌ke ݙy8sh;9R36Gk`9U6OԦCUtt af3hpq.|Qgw33qi 1fA'ͅ7avV1kL)H5(Q yă4\"OWƹ=i\,%\ bvҵQ8G# ;ZŽ+`Y~֐!*MTL`fwh9| U,pB(Z68$&.[3h9 A'pڹ$fR-g%@&e]jiIVHe-iq]~X/Nk>@ Q0)a$8OpF&Ѷw?>|p@֘dFvb,.CZ!poFeCg"ng\65&E \q.Fc6S?-v$5 YAjP'UK?,&`nncb,98Z4"̜3.-jV-,cnv`yiWkNo\]݌;ci5mU z7ᝲλsBk::9ixfwP~~G>ȪO 3V8$W$f"88]>JK.>а.nh(N+>Pl8tXiI\3 Of֓0,,B̈́ FH@`ک=9֑1o#.ӣ2os?#`9]\oSj@ƚU!()iv HP(M{Ob<ӒU4:tC?5(~ڷd3ly(/dN 2s^flfh6Lfr[%nƬ LgNDlqm4/:BGC E/vWc0!)D&,hɡC['3#FXQ9䌮FYth$m5J1 ƀqW$E5]f2C.xq d+4CX2ۿhyB&ΜfYNҊ\Me35fТ\/sp6.qU 6C.#%xTB(T.+oj$Y}ɕ @׫^~iy1-=`\:Δ&Dx"AFʁD$$:D^5M LJDfJf$p̂' \fIf?:a &.M Pc:uqzB6&7h.VU t&zh|ΤjN j RoO2SN3)vi9}bŒpj^_Xw# %}F]h8腓U;OM&ٺGW6W8\:'j䲁'~:x P`0A޲`!?L!b3!ؚT[3dLl >C1gz#I78n@{aJ;Nqڠ). h?iH7zq3b0{?wcX,gcDsi*o̠7 AޮqlS39owؕL6;kvp죻D1o2hf6>h7LwNaηY{ |"lhcWT6x0pKfw1GAh^kj-~fhe=y_y]fi#GZP4gfMͬ|Cilܥl6Ei h/эj[u|Fh` BCDGPC(Cs[-B2k)lh3o&xv<'qѯ\TLWflg9,0Õtn/:p`κV_>q0d鳥%?cB^f kƌ1V'q3ֻXӃ;8~N 3-^KۓaoDV3lw;4knb8Nƹz IDATܧj{~Ҙ\zC]f(BS/=Uhflkg١&15Ջb4sN.h%4BG4`3M-G&Q3LZ[E kZXځдaxf `]y`3XtpLvA 툶@d±gtA3 fc$H4.W GhMb]qw&E$t2Ml yeRU%ThnW)u2TЪPTB* ~zeI )pp%ceRpƍ%$;WQ%FRVoBM夠ҫ^zȼetG`~-Z珎,[F*wM};8[cazYG+dnEn\bQb`|;&|XT#yK_lN(S3 Ȫ$ ( Gsb{ioDקG(뚛(6:L! J; 012ON¦vȜmn<5Ѻ&W2[1vk^A fi`&2†Ä2:C0fJ.c cB3nQT@0ѕ|p/:Ꙓ$Yh]H=̤ 2cNJBJN8゛s!)";fa+i ?2\LBdHKrߕbrg6& O%aD 8)srȘ%Fr\Zk!:@q9")'C]Փt0ͭ/9X쩛x܉ls/c7R= :3N[eH^wJge f3ynvc&y[2S4O,e%қɳF`fsmwd-f׮^9!s ς CwϜ͏Z55Uv3k]fk 7jNg@ ۔M]m6 n@feU@]PwU@6]8 W)DEpF3n$y?}!Z3Pq_TaK] !vft31HznPj%$RMiP6w s6eUIL: NLAjVPґ3PؠȈ;tq$/?9ϟc/;3+*,thz5zebd?dy%@h}Oߏy1zq4`Re.Qy_0zL|AzSЀ@πN̡^b[C{D Lˡ~[!sС;z񉂲9XIf(T[f69٧j te4kw!iE7<@ 2f?cN1Q-[ilfYQW 3]pHl8{EV7| ,Wkf8D3p_HZ! pz4f ?5d{Y6IM2u]gftDopЛbi$P! s(⠙ i:2 98@f֚ɎeAp jCf\3)nѤq˚XPDE3Ĉn@iÅ2aœ}bvuaW|0M4Y$EU(TEAAIg34SSS5Lc 4\Bk& /bS'O4a-.~@˪T->ɥtif6XMem0l$ZћXEfHb$hC ) @1 #en䮿'"e 4_=aa53L<<eD `.4fnW9>eq3(%¢TfѻsnM':4؜;FW6_+45@s3f/ cjצߞNAx3qw:kvy0𛩎elLel#3g> 5[9ñ̦ڳ|fj."6KztPbY.:)ø![vAxqf"hJ,&#Dzrnn z2_'"jh#6Sf)/1ƃ<2l&(ybYz3=r[:BJENDLdc$ A_?tk#@~ iڋ\ҹx}!b33tiN41O8bg"33 z]҃ut'{,}ϡa\ՙHTsvfydf΀ Kk.̶er2s392#L\uY@vRNܚB4}d? 1e n줨e(2չVșynEfD`[1qwMMhgb 2a&3pcΠA3Gtj67 m0kqq,C{EX>Њ5&n`/3#鳷ٔ @dJF\hh"<2M܃)On츴ZWE͏(d8LyT3X@ɬ̎ /.N[A@%,ČZU|9)4ZB`gHbj2 ` A ݯ8L2!H> x ‹=?a @5LbfwO?,-Ugf*P4@::۔%D w]3<醶 e3Љ0W^, @U3`IB) tpqU𕁤fDi{f@``ЇM:B,Im5s1:gf/-e3͂, uHqV1b!h" ERB̪ f5t{Zs`o0Nڅx_i+Η%? ͠R栋%0: 3K~f> ȹ彻;g\5|پhVFP5XB`4h(Q5a_P5s =sO]n0TKc6˄ m.OTr<8#\͎^;:a}}lǼѦQd l|G-At.*X*:9mgĴtaXG>sq A4#N3q%b c @t ы!Ʉ;d cDp´EDa8BEOع)Wgh8r O+Ѹb'"i4St.F㌤]^n<-*|5l6DBX2Wp~1 V€a @a`s[G_8_\Ex\Ax`pH0nAi|! 8PqZjƪSXmF ,7y?a΃y,$Œc:9ɣ.y%O漅CSJ+}vǼ1x:-;P4c62 OWB*9^}=a5 69, aJP?#_3zPPa%P?bK]0T&;"|b?׹hVgAf{^ZlTƊƀ;cf7\ :sBpz^ͮpކaʮ+ϭ Wsk׮a__,%tf̎`hOPp`JlFI̒ w85 3lƲc@o5;#Vwaїb`p'llL\W%ͽ.3aThC?֦Icaee5prk5D"ilk)B<Q\h[$5ZW9s)152ٜ M٢:wGZ$s*$K3\;S*j>|x;_L _]1E+SPULKBd5A{* $I<c"P",$u0h<*=zKB4c@=QqX)!dܭ/`*z @c*o<3w-Y\ild. 3@Ơ5&nCf Y/)B[g`~5߆pl9=6Agj]Q̨H ~ALmЙIep8qz;1yZǏ,}=~>lA͂2S[_`N& _3i^2-vnign8C^,޸!zlfb:puP#Aj!(a9ZAL;hAŭQ Йëw .ͫBrEM=a׷Xdl'ދ}lx=:-BM'񌾐 XH*U8` ^gޯNsɬASܞ>p@s@{{ iM5U>~y': !lP&L"n\`,Q{ wK;s?.$=Rd(ppSfSa IDAT%3#y&yn4t)s34Ø<ͺba% nlFqɊY05FrRyJV.ǨBK9"8QT\2V Y% |8pW?mqtN66-Sn'p?aI $f3BЬP(C*Mr3LN8oЅ0̙3W$Yk(OL. LJaV$$X,-C42ۍI<,Q{0؈j.):rIfPh,#f0D nN&x? P_?ti.-*)02hTϰ&ZUk&p=G7̡t+3n͠*Z3j]L CD`gx Lŋ̏cE&BfkܽQ|sƦF&Dj9d[f'4ًX; f h{\0smOo߃4b8 ʱOyIzis9D1C!.E'U~f8"u/?Vmh69Оn_io ]pmb?ǐ AH1HML岀}' 4K"e1  Vn860(*"Ax&gB>)H'އTo!JYf.9 o, lF0cyaFn|tvvf_#GdqȲ@@\Tb<T<3(qͬO` _k:4;CF9uH3L+H3b2S8:jS26.e7#yBP:wt0 53*e"v:U/Dy/FA"jacysi*JPYhI&TEYN_&`'ɐ#&22I 3.bd"*<.B0$Z!ɄhE͠[g giqgg&;萤bL DBۄ1UA41 W 5T 2#%dpT>nM&G,iTE0 &eF0[/em''¦4Ks@T(5[׭qxt)İ&7htΟ [g6|y͚.Mz%]J_8gef ,-:++AN$gI~331sh/R͸As0aPEfAfJq-zP }D.YfPsc^uC6ĹJvNo֝k<8?Pj3ߣNM7Um5#q&י!LX!!l*8S* \fQ*#G e^̀desM7Xkƙ3˴vdXfA+7zܛF\Z,5^b_yU&AgbBZiebl]jklYֿȿx"\/CʙhQh`! y 4`ٔ: :Ur"B(Wy5FDt3UdI) w1$r&IpkDkb2R$EN=.b<ÐUl8%li?ykة ~F7W=i\3g~oj ]o~"?=0)Җ-M=71;?2(mܠq@3fZg,}wń5Phhբff63 247rEؠhD o36FgYZ#犝e͠P)@C3Lfdvhh̝١!lnvlfz33߀oͭ2[J3Lg*S3'P6{ĽJEU37 70gJG{թTA?$.pNⱫ +Θ]H Đ(r/X0._\:≼6ZC' MI( jH98AP\C &0߃,Vxt_U3ыt A82\> нU 4LjC4M\!q0di#w< `x,s]0Y-s+4<,`aXA d5n6o*h[/(´,uGuZm-kkp4jltnCP?B!Oj_#ٷkv ٝ`yHHzQ."{pE{G tayУ st+jݍə1uLrCc_Ƹb7_+Ϸ}/|{?[@̼4f~G/?N= lKCl5Ȋ`P !8!}\Dҷ]oE .T$s(90lO;еf7Ӻ7`r'|̽lSw6+qG&ZFCXZ@r;E͐4nFp'@ZƉZ 7Z*9WЏ[4 GF͕nѭn116LA ֠`o>')t{؎{Mdz! FP݆Tgy0rP͠}dC~9Eoqj*J@ll¼,- frb˘1)RCpє>ں?aW 9(Dj"OXvk&J\drI,_ $9΀DqTZ by IFcڗwi^,h6$7klnƳWǚXcܥ/ҵ;4;avܷC%`LNvlBDX*f++he U3T )@%7g@pL0Nx@9WĚh#hJB3Wd:R$,ʹY 0Ҕ7rٳ@fe28~37<¶3Bf.śo0hSM&;1I/1`V䌑hH "c D=Ms:VUHΦ™&fAiD!0 بY*t4СP===S]=P-s|~wi,aLb~hm =[=60VCӌ7vF7 jkp ZUAs=9cns%b.Wzc="/Xlj cX[['3wo[u}MM2sY*Q ExIG9pcVHL52ܠAMh \ސQ/ɢSwNMMe$1 cX8S1$Pɡ+ShSsGCL.Gm7zM_dj^]R?RzFxʿɝJ4M~]{r=)4TU!Y|JZ>kr輲 հ$jBhoӼ .o. &א C [9Œfd}71[:}3<$p&x?3?u7e:,<=wsnKp(~}7\shT|[5f~AV8;@>LFk7_uuĚph9"Ix)`#Fٔlt5U<1yٳ'ޏ}Hja*q))'JB5k ff@5ŲY.6h>3EUWDT0:s&(a3}lf$ fS3-hpBK *[Qeg*3_ 4g/3sY@M#_ܹG E:h}3If z5:̘2Ie$:&k@j`llx3\fjbQ#Wb1a0ͰdCgtfgshAXFTdQe+]5 ap"C8Us?ftStք'UkMORwꥱjARC1P.10Qz@ biozr.NFQvaڌ88i 1 0@ ġb -~}aýp1khnj5bTF2J=ŦJQ 0Oe2>-d )؊BL"el584A I;I%S"d3i|ΐ_*rc(1U|y]澀Y>f ) C B^9PF>K8K3?xGYsC*OXf?hL0]6?Ŕ۶>DUb *.k+ B0C˨TeUBxKdfWr"Sdq/~2~?%'+,G X ݢ\&)ze3Dyln<4<;}+ee+u]+++_ز^o ~5t!3;T;jiδ%IO(h#pFktM:(bj5Df"GZGJx kl6agLnٹG_ O3 (H&A 1)t̬{=0kQf>۬O_?|UXh}}<.WΠ8p͌LQf^džYKfG=Lefˀ 慤YHlWuQg. xp&srX9 ^cpX$Q@Cy<ح̱Lhri5a<1҈^K8k5A1ȾfhL1`3h4ӑ! xEץ1"mLHSn3FGXYi#PnxJCO'6- Shnk#jN36`L6찉V+$T2BflNnl"U:o1h6 Yv; HUD-Їĝ_y6e!H틎a-LòӖv,q_Ll|oo"RQi2Pa#2Y|N&5IO sw`p@8e2e11\y Wc ׁ&&\0#ĺzsq-Mȸxliܯ[q Jsƥ;nUX+Rd`5W#ܩJ5W,_Ix'Z[%^JmMD%_3.jj= I[;~%27qsB0Vm3=u]k֭ \V:^;4nJUw%EI)$&L+- =NBqNMqFy]/?zQ岗;_|ԞoEĔo=x"q"Ka"4 ȈYP4k De&HYsIVy勃]phm٣ ,ʃir)fBm̬YfRr]k bnf#7Y7ζ6*lfЏKܥԣy69f25#f}~B\xZϼ~4׀0g 4-4Lf1yߧtj¦fڙ)岙dh5)l;Q1an 4(grЦ>]2>2x37n!kԁļM1#Db\>cVc++FL a< јh͢J}=  Tt:Z`. ^0bg'8olLhC@@lfizNc7i 0f^m r4Do1oDf`g 8&Z<,$}"q5"D@@l=7n FIvx>+G!h%mȇxi ykzk6ꄌ>0Ex@\3& _l5ޱ|Cz8&Ojh;\0\6:\V& /hvZl-/:9ZS8vSI2]J,-*eԂgԄ%W!ݡ7w Y$^%;%]Z VF+;4.mŮ*|=Dboe|dÅ7b3 $WНY bzë[^ \ =nI_^PYsOf^gv3Y&Fs;C,|{񩆧w4 `83KLb92rXub'}}HBh"vRf @f8Do&ȬZ)[9(\b3¬I'jgCbHʄQ3g9AM3ϡ3Dtf.\=B0sU5âb_1_=.aΌtKK2[Œ @(,yllZЕU=3g01Wm3Ιg4_mhi6I*f`;MEE }/h,}GGÛdn;P:elAA3/n ;#Ia`^PW#NB1fepfpblMzb$I=P&PuC4:\b"4Є Ç@CgiAdX<[h#Y'vnP%*,5 e84Xk=3c|uU=Il9k}*6VƁ輺zղ=a"1S`[J(pi f6A/v$ldl9-gr< 3UMbY)ӆ6[ZO0$03xy7g`u熮3"5W4k&C ` QMքRZ߹yfpS^O|nxUv.GW31qm ]?誔t/V~)]ukF{.\Q6+e{.:1͋p.ѫ6kf2;Jz";8熬X%?|}r6y"0UT)4ؚ)$ED/^ |[C>o3pxAݐM瓶lө=ڈz\;w0A#\"LI͖A Ie\FѬ͗^:Ko?_؀o,J ! ]9N%tPyLIٳ~{벮О`AIdXpY']PDS#h6К4q3*Q( Mu6Qz3o:DWpszfHn_g^/3oC363۔<31O*f"%̙B+{/T@˝umk,/ҋYO%c܀t޿%%3H$x~Ctdn33I&5n wAcfb^5 @myԆmZ۽ۅy0eVLԐ^aS 3 ȡfY.{{hP/nj4@4rʌ@qZZE_, 65!naI,1/&; kN6yOhFr,6w0G`/^0ZY+it`K2{y#:CTmyZFĔLidR+*gM옊ԣVL AU ǘLB$0Ngfu:u=KNfӄPi `E\.g@@ÚiFm70==D Yt,5RjO(ϣMmj"##iJvJ\so>'2`F !F!(G,yTz 8G \ZU.oh&:p`/a; &..-/#?) >! f~b3$YeMTッ}oF)oAl$|kQ U"THcQ[8ȚJ EA_A(3uϩ FVJfL+Ӽ ẏp} h^=6#[Wo<f3P$g>ə0μ.!PlfyJjvCf3^)є!ؙ$awn}~@ &{+-z"30j'ff`&a"!>ӑ1&e:d&i w _tlGG_$!{vt̑JIv@LfB M8ֱjMV 𦇁+g====YjRTi66da?0fۊJ@MSkV%И63A@5jJm`&ȶQ43 sv;έmUEY_0 ƭ7tYc@dDLQ,`0[3zj&̜d4 Ĉ ,AL`3`&Ё%̌ czg`=ujʿ^)d9IfQ6g:$̡?0\oA87k DshfKvܚѕ4.L/. eJq4?$6C;y1 iYBzs]Si)g ˵VkSDc\Yj\fEmov\x0?f( g4/.P<|U*BlFp,)7ELhB+#υ;+?-K\*FdGrbPIeD6Zܢgxmy:icӛfrR%1p*F(bv}+/oߣ[Df*k|М8F/ Jڹ`F0F ͠sYYYyћ8 Rz}Clydi:Fi}n6|ϹO6]%6skP%Njw&$>4/ >z{l6B<,kTjܘMZI^HDg9ն mΟݹ<7Li%HqjG^P%z{ ~L Ɣ1L.˜Kf 6y,Iz;JC?6]614^P$bV n#,%o:entbV״hC! XM5`gglgzrg7Ӡгb1bh#xgib[Pc3~OOuڠ,8hW"vnxȡQ'#PXѓ܆AnA4DCC[Cn./TIMbfŒ#& 3Ln|)*SOЗa7ؘ0kܲBa :ASh s.jS@4F:5:\P꾍Y]>^'u"{% kD)6 nN0:»nY?uVj5sfW@ϭ¬E\R#]_C5fᔉ⒈@jbd`MGkwoabKCvlh^z:3˜o/ŷ笓D9I3"sAs]kDH=Zyĉe] TFZ#уAhgWyW3l`9ʁf*Kg+_ʉ_xY̾(UҞՠټf5#IYגٝ; 3Зp[4ū2o}rBQ*@dəeU2gp>"elx s.l66fظb&F6C*޸s?lY^^5?1$DE3` 5W5 gWk&s&)td&c$Fc7F4i1]ɫ#y3 +:x!tFyX.4׫:CmMnxG٬#( TLggzl=遞i+cXACn l`o }Cgc0Fzż$tj)5`A ;d,Л8FoYid'LĒ3${zn'eaڰq>iLLʀ4)fESI |2O_hρhF&e6eJ/(n nE"Gaf=hةyj S $nId 98Us]%W]WnJghkQ3@ڰL B\PmcluϙuBbM ƭsO%$<dOU"DQjJyU;NTB ,߮%b6R#!9MKh]C"VX`3:րXqj jҾ}Nsь nQS4$ q"kD+񄿅l T@glj28<-Z@%!3-\oK,'81Ӛ439ǁdaiR'NN#w [yl:Kwbs%D"?|v3j\s~>e(t Qfl݈ޭg6 ͨcBѼ6*Lg )њb3C4C: G\ ͫW}M9eJ6D e<~K$gtL7{1 LD 3tCl! 0a-S.?珖v>8Q(~`H߲)3(JgZS>O @3gXlF@3Bu|V3xc)BT,2"XxmBK3n%|AƟonaaD>Q0DWf Ht,;iz{{8M|>dA~^Z⸖2M%01e6?44T?XbyÁ6Z>1D59Qš'KiX%祉Px,?xr[ډZ1 pPLJ?<϶uWWkJdN%j-9=\fq_Uu fNcLd"ͻJۑfOF庯q[!QiVnKĊޜfװƱhvо}Z4n{Zs}X߭.U9lRrmYe 5d)uO.P9aRgF*υCao1B dB[ ouz| _i S`|bR&Mڧaς(yxNs5ςf2A X :h3BόDѬѾ78F+Jrs PTi@ꦩ#IbR-cGҋzEe3.CL1v>:\4IN+ u;ݷb/1MDt eAu:yS,JhkBߧg{z&' m 7j=D}!d,ڞWTbM~ !;7{>|'哥_.Y[Xɒ@Դ*m%ZÒpRkk["l!"C85c5e`ܤ2'ˤ3%e"| ? n:i ]9 q 0X%r\1;4tqq;D~H|m9aÜ3(3 \;8nЋnJzi]EdSWhX{Veգ7>1oKjBxP!0fDM(ة71aCq U3 h$I 0Фe_FL hDպWK4J\&:+@I7ǎhtS4iq1C&AcqMtOҜ>ph8p˧O h{or1^S݃kDZhufZ swޛb+2Ѓ7_ ?R9iֆ;_|1Ҽtn :;OpqeiAUcZ#Nhq `4\8{.^Y;7gfaGC觨ݏЌÎ)|h]j ۃpGg˺nE$6s9Ұp_Rp&aofQ@Ш~48:;u7¡ua$fBOy:8{D39;j<Ƀ,uh`0L[`b+@]2H):Ϧ63iY0AL`__GT~A4chHHU^(5e@X3M;ᜳx9] y%z^bt£2JO2]y\Œ:~e|zH'TQK%D+fg,X_E`g/ywIH Ȑ{Y!RF<vh*+ 4OkCmp3pFX7!Rcc!.#,NT>BG+s cc f3a?F8 ;3HjլfgC3Ì ]64Q7{4L3QG4t&4ܿ)a16H _)Y3(]ڏ. )،. `g=y`{ӭN5KJŽL2I޽e+52p"p_FRt{y9U#55M!,c 0$iP/Ƅ~m6K} "kLKꥁVM&csArNt'q+*BaW:6B m #PYMҐ(64L&!\B ҘR3m.X0% qL}}BW92gr|:xſ0ȴ`N#mìkյ?zZ_ r0Mnem>$͜ θg?.ɫ(#g&JIiCJ-kƭt;Beĩ R34h:13y;|.C=a&Jg`CoLG&k%!"BDpBa6chϠ~xVtmƚT+e̸Z1SS\/#LP.4V33Vűs)Q6˦t90k.p̀Jb1^r˯ l3<0`®ME^z]\C9suDgri 1<òHEK=w/ak8FYbbh"ox$`fp}ppiк]ϑ˭ۗ_kEY<%-RX0/ˈE)͖~3=ssZw=cZw,HdOgڧ+lj,. 5ϥpV$S0gV~/)6Lg!`r`A0)#:-%9:3S~ /pdc ug *I*(hZs65֌j_xu%lVҙ(J0sPT>WfÈ5Xf^=B\c3p|&͵k ȈfV-Eev83G{|s3tƞfJ٬ݛxۙ0jJe}߶@0ٙ\^q%!7of'3Ms:)J@f+@fgn0o ؁pf4SYo mBWX\d v=J ehi@fR$!MPvb:L!/֦zšV]S 6M<< |Q֐>Ԁ^q !2SD )bəhU0:S Np)125EG6a3m+ƶB]zAgv'UyQQЙ)U)*80bnCyw.M,'ʚ-a#%ZK !Qb-!ƛ7hm;DXDdݸ{/ך/(Pfb7?P[ keGC\Nج6m6<b4&2ӵ.@MW}a tssZ/ݻ4I%f2? ~&q9J)[CrVSFhvN0wn"5Qoo~f]lJ!Rɲ{pp߾fP/a";w.#]jLA"9 gq&i0Y* M:ЬF## jfJ?\2R|7#)fB ff 2sB^y6hʄ&ٵkY9Clᖷ3 4f?3:)c3G@-\/oX2E[[w6m`[Wcj~> IAz+8D%R3!NǶ6FUa mKd;V(E3D¸t.Kj9H*CO@%m)YfŠ:1,T^I.cԁe}HM&x꧛n -dxLJ":bsQ,BJl"le83V&7o~9Ogan"3[2069u3`K}@v3Лo@T? Q4˵ Ƭ./fqdz3PaD=$،Xf_is*'fW{}J=]Qv|" ~~h ֿ=T1q5h":;~+&0ff6=]Л֬C0s\%.,#.„aq9Z.<..-Sϱ،7 d@qz) (_QYh>3p_TLPϔxfPзAFT8?5岕+!_ h>E={z5UhƄg$uƬf jsGe3_ tf.\{&'u0z:  (6=*31 1&8 Ķb2bqQ ,HR$>iId9)%9R(dXeoeX^rn]F\׏hCԥmT) שd>f6xVL6UfRSSٴm(m쟙Eu Η<  r_UT*Y/`C [XPtx9R5utwfг%ti3b@xVPW:Z-0h1AIX؄|ՀEv٫"@Lr<\AZr4vӲ#d0К&K*NZҺrfła1R?4l&T -AKDC$}2wh**g>hnmB3jvYaNy߱`O8VJ_c%:󝻶V{|Q{eggbY>pkg&$,cj[ ڲ}o>z'/:*yYƔZL5=JR@FRi5]]gWΞ= ;N_>،j&uFJc rR4s3КA|AŋbnMR3Q/gC3d6!sFf!^f&Y@T 6A36̀1̤ӛ ˍ;wWr ld2@p*f.f8kh@/xT 3،^:F@ 2VXa5^#$`d7EAqߥvF3&h2('R %g0J^ ̟+ sx fg`6KdÞ0"BaH͌1ئӬsWNȼBo]03Rb xAHh"zв,n̤L(eu#IѡF7*mz$ulJKgDI)2:u"0b2z 1b.(Af-L03 ThGxFGU!hX"W^4g Hľ @qDu>bx53#" \cOEW~x*gj\!ٮsA[6]{IxZ2qoGq-!ː?DoZU Lv\jm>ȫ=9bnt-H]GīUDpG+\t-ȆOJ~ij4j4rw˂ zm眕0Z= tFcX'U`1e]DdĔ&B,j@άwi Ȋ;Z"J 18ﴵs U EOxx]f`Bfux@iKg ğF-;ʴ2 GPjf \)̣R UoX)[GgDoF6hBiYU ~TqHṙY, Dw#,hѵkoi vQ1yWq }2/`&ec3p,'Ӈ?6rzҚTa6EHO̩{ۧhIoN1磯ѯ CiI~^zO d1zfK $^!{0cCL)GT 2, ,iF?IB 96&.( CQQF2g(/Иme!NC0s Kx X I3(^(E!}}Qwid1D~PI{Gӥ&o6i격,Aw~gSYlip+ZpҏWxlM91"fƽKS/ 3'dN`_67oޜ5 i3li CL K%rQhц͙Rv 7NC`^ױx]y9њ|[3()j@ $odщU<Ҫ*iQzlo}~nCaqz-},8&/rz*h]P 3}R-uƻ$AI Z3c攩#YJax-r=*6EZdveM憪r&7C Ctf끭8paþ;0M #FcHX] pyśy) iDt3\0J# ћt_bL 9?<516B ^D s&{v-ƘQL3&"LX.Vj?d8e} 3S21 Sb: F9ʡKS 0(K=aM)*#vNgZHc^f*GEfx8!n'$U.fS=\!rouO\~,7Wava%+ n4'鐂ah紱{5WY&\Rk%+%s$4p~^m4ϭWn--;?nTd| IGǚE$QntáM;|s2x^r)U)%XEw8D\c3hF͌`Fji4UZ#v%gҪ],! )45boO D /V-ÉfɌJaK&\rmࣳ+'=:J8 :cP 3IרJydt̏# IDATfDl&DT+_;;w*.B`qo,\'3ʼd.yݘ: L hMTQ4c=!/prշ~ؚf>a|Mt1)6GKY^n9|t55Xgwf JfณfDQH;cԽv [Uw}~W^oҏ'fQ9_nxFbHp(8DtEC+*z5{pc]3$HK)^N&?tG<'֏p,ʓ+37\b&k],bF,鴐m6~a4+= 6s:E0-WAH=+3(\cm dRz*)GHyM@$( aF8Sp&@IThy-&1՟Ŵ#VlB$cKJLȀ8ѡQ";aoI7 HY6uo*e3agS(S֬8TMLR3?&3MdC|%+4oIH*n/u9Cw@&E]L9>TmAg8 Olkp_]^Yyyp†(-_s-3f#fg/%VȲ#?/ʙC83 f٬h647n.q њPfP3cO>9 v37 .یR:W_fg3<3d&lf>#6 n,|fd4-Y_i¼̽)6y3}_߷moW?q6֚P9d\&Q,H_$eOSuZ8xo*a6C,@$➉U`>z:`)ózx_ʌLgmZ*9yrSlMom8~px|&t̗Fi"z6f`F~e,='u;XNک dR0.^;L&=lw ,Y4kP&'IAx5YSK@٬IOd0* D5pz2|Q&\2RCSN/ΰ(ِ/2e;]l7NǛ7gytA4( ^rt%D 2ggk]o`Ã3 ng/ ur4帗dwNsWv 0#؈ZL#6STf&['&!Qr&H^:͍AQL^*Q-f+`&8_+<9nt`e²lj7_?3=LDf%b]ՏFVȲv)ڌ-#,, [*(MD D3ҙX* lFtJXˤAKh1Uw(qW{ERG=y}3j>-'4e6$}3G<<3<Կ3 SIe?ZPЙEfseh)͘-n-xuݙuewW__O83n5F8j8UD}fР -0?:d&X狸ߍLz\45 h]C s@t='?rL3p;lpsag ]{|ɓ'7Ç>{rsz P!nôuĢe13`+,w\A Z瀛lm׸_`4)p @UZRX*`!(+4*c~ ̍<' '83`%edٲ(rgGeXufeBz2pƄY8L >v&Z zc :2%K oZf,&7@fLU{"D ј= fkhLsVj~:^LBDsLEuݗXO)Tsdo#6BSSc{q%sklLO0޿nMsd[WGܙ1LXT;NZiv+9O BOo/==9.e?2𶦭V_ۢp9ml򩞅TT2ٗtL^|y_E0 <5'և ̹99ݔL3J!FȌavDGXQsq̖T2BOWѸ֎~3]_<4IeIXJv?$Ш#z3Bќ@c!hdy}\Mj3;57QhĨ! PԺbjdƐ/q  ͮL`  ";-TvXeFTfuPpo-zD&GɌ(qC\ci16ivy`|_0 iS3OmFތ1n=c4ɌjHg3ٳN\{{O24x4s? ƙÂsE\GDŌ̢uf~?͂ߘN-t#XsY}|o'QVg.7e2uT~ cU/aHvfD ˞C Ah ]OVZ}nU`}GoWByVّpNĊ 8لl@mF7]̬"ϜW[^8;?Uϟ7?s}q r hL SD ߡON`weps,ckϔ3Du׸ 1 2 .Y^FZ<Bq:Gt$V"S(1vrnJاYfhe @IloӒ3AĪcV(V":SmgZ[ĎLe)H#0δ9Z+{&FTRq,]Mf33Hkx4zSڅ̚6ҴoqP7RC %ϺkñYez #|%& $xޒf}NflLH3^:M0)--soD>طL miG&4Z 37KYZog%N$:Bwf?4#3%eעj0S  C?S vzgUf O`äLg0s2< gY2C\4Q NE+p[|H  5/vlဖ5QxOHĊ0;0N`)R#N6m*@R,`^vo3#ہ#`f~zjYG Q(`_(i_p܁5>`a)`UVt TAL.>%RC;0r1 8sIT+<7lG]lf{(񯂐}Osvx/!bH<'8V&YJmf''g/,L/X=l^GljluČxZΤR_0Τ} tg`iךAfHo(6/WՁC/_:I61lfxIIM[4ܴQe-IAi6>~Ǔ DE3c$)( ClOꚟ3"v[i@MCA|ptFf3"7䵳k/#?ʊ3l n`hAh٨Ye 툱/`J?3W?ŀ&&gegUvՌYۆڼi0mQF.14Ik:ƴ4&lYo_Z?E089xRo*8 ?ywMhbg/_C'u4 5Ĺs\9TY֡}\XsgLs` 'E3Lo>~9`死g>gLdAOFu0ϳyq`mGM $r,/fN`^4h_3HbCt 5H 0\m:TLG%Jp̈J!ɬ~"Рs,3d\fd$@sf p&U/X-,ʹCZV*4`c1iGGT DeЕʴ 'N֙%^TX^ ɓJc72Xܞ}+ݎǕ:S9p:uSYd1 q$|ty8̬:B?=3>f6Ld*colfnCl旖.%ɤ'eH̔j^m(/R4Cs݁M3 ݹbx634-F1S2Gfxf&J|f.~no@S)0 gz0ۨYܡyBn̕æ+L_kUؖ؅Ì1*rhI񯱽ݾ#f0ܽ/π̘F&3,9&hNG!kLm_Х& EęN3° IDATK s*,F f\GG7_',b:w~Պę3ϯ~_N|᳉7a7b3+:r X'P(Q~p|n8g癘2t1U1B![ /ۅa ! _1BB!dc&:~-ӳ+Vׄ&B &fd߿*%fvRh=,2G L0A{@F NLpf$3"ļ EӔXZJ-LN'"3hO^\uL%=߀ $f3E YZƞr嗭$w1cNF<Й%qb_jE\}3B,fD.%D6pDimΙ[^^l&i>zy!L^^@H z@Lr11r` bt^2e/) 㙂͠R&3lv;zWgm1I"xfMѼ3$Ͱ'#g23μލ 3`Κ=zYG$֤2ۛ >}/ɴ >щ8O̰N k<jkܹ_UAb_z.%nt! TDlXT@ d+g[|-jL`2g`j1;O`2&b{]bFckBNH ZX#2Nl2 qfFF8N5@x{)a&^Md89h,F3Nրhp^E |vC ,yd8tB /\ :wf̨b/pdor-ݶBfy&06-yhYr{'|S\ <e]eyN\kaWPH&ߒ/i7/}͈-#Zp&IfR 3(3`.&Hpƚ[_,yDL2%P=3 cчŮ]}ٚ26Os3gEЁ0aGTJ հapXXbwߧeϨ=!Y&1Bc60Jrz=̜͘vͼf1y'W>uO4Ȝ zِ"gVE83 QTe:e l})Gfܕ)k8ӺBXKny/rެ/uSͭ g֊sS"gȭye?}K'j; =<nfb5l3cGOLРT.Lގ؛ubZٖlh؀36Ѡpł+351iKkUl{`2̨UedfB^8D`0 1cBSߡ >C4ZZiJf5/IHõULƤd"J9 Xg7g,~ʎtVN|jjy$t_g3v,^x9L\5?+8Fiu@G2^|>Kl0zKH1$# ҞD6f9[ZƦ`h@3f>{5Ly?ɗvͭ~ƊIvI/3< &+U<6syxב]7}BLɈ*c£&ҍYK$ygw#-7vt()ʾI6G?'OAs!+f fcYY4;+gN7'h޾vveó+0>#R4 W }tGS ܚ$԰yfBa# +3h,zfkIgہ@ ½Lf7fiSL/Ԉ+,<=IUǫctz?^y7SLī&.-%^tǵ )hg ZOcmf1V^!ess({?/Abf‡}ԔNtgAfLSK<fu3\y#2tF?Ap*C$ L D1hht54kv`:larL Bed2c3,:1PAܬ5!i&Y]ꭣ`٫_&G2?l2I1e#f 3pW ؘH圜} q"C <0Èа[M I$;xLea,fՌQh͠7N1'Lg,}p!GRֿ!H2Y5EKuW`l/7(jt ְ5]8$|a m@lAS&gZ?YL-W|պh/牜v>/6{-!6d'gmֺbLPB/sS?Y~u`F8C gnɺȶ -Ih 3Ug3vc`ngNB@0PkͳkcLE: fm_) J}l`8p4 'p{ iszIV0bCNGS4c0 ѷDZ$V`%68|hb-Ae2FSDi:P/Ylymf٨av.NH6igAn;4` j4N2a5Ξa FקZ%z7]tiX\. jlE\) ke27V`A}E 4i@nmAJXjKܕyPo>qr.Өݥ44ivӦLS֞%>;CQ6+0aIf@2+[Y H/87e{%{/̰#p{h JAȞfgWLjf優8D:VJ\I+@JMXv:O;f %)\H:X#tkTjREZ+ZZBx$I =RpM /?Hcy:D؋KU.*<[hwDfl0#e@{'rK Ia3C0ՇnLM/"oB{2:):CL'^J 3T͗kғ$i2fJ|R5'TC]]O’I-Е1DR^٪Ͷ%[dڱ#]]]`3_7J@[d،!p_i4iC3_p+OJ>#fHdp8 ] 32;1AtD+''ͬ):3Aٷ@f>p +CijZbMhc^&6jJHөtKN``:C:p#ow]>4&>!JmF@ .[-Br&DO^r.k7ol!yzso3 E1E32b}3c`].:z'fO̗\~ ٕg`l V Ifvn_2,~?AXS"Qxej fޣG!2W D" C`fe,ӛYe2)z v$\ѩST*VK*f6r3ߋ "iF_\??6x[1 Zs@3R4Tt6 wӎPg`JhyF!mW(v%xR珯~* fڦ#1*Ӛ3&8n9E0(qs-a)s_ZJ3u&v~ &:2ssK>Ai")7sX Q㪢62?u1K*QU s?fd,)w1 JooyMmѵ#4'o^e 闲A֛U۝k/8,5CX11оPfHrIc2h(ykUuȧ3jī$jfL6+p Sݙ9(CpS\|/+#z}+B}ECU-qe~N!b`&aI(wUq'H3"mIBV Śs<^WƮ:H7F4BqJBDwI.hޣ{0;)mGbylU3H<_$Q x6b'f6/LhQzYJU5*/ qP[].y6љ9Od CkJ z-/@F|3, SeFi3ؘ͜clFg"\y+"yI.խh̰!@cfqhgh7?aaQ3(ә*Z k迨B8s-et2L&t54hz7ڲVo Ep15:'5 Z#OG %zRq 1AP4sTאgNm$ 6Zϯ7.>va:nBa"/ fׂ Тx80:9ӳs32Ͽ[owZ]6E?QcδPӔsƶۗ5OY7eV1-7)`d  ȃ!ݟ;8Ƈ_.DeSe5E37꓎+.a%K5^eMdr& i'b#(۬cN$> llo[7ʹ &set(2SrF46̀4|^d6Xb!hɈDeJhgČ,U4 K-}Xso#bn .OaS׿s7UM^"CȄ1td2d1 4WʼT7BE{l[Jmi,Z,Yf1[I_E 'gNbyz^kmc1tFD |oo65S9PC *4؍ ΋#@Wε "<#}K6KJϟַZo/W 9a0V @!!]ڍ4X.0IeOV]š? 9.q"2L53C0v뺳r`N.ГWElef&8ߒelsi 0M@4hHՠ3 .{wx&O bf3,#d?f#a(t@ aM0e3YAc%(UYXC\+$ćL-kkm:%,#AhAG',Rɢ4(޴Wo{hnkU~T9 LNe3A`XC (r q22aNٖEr~3^ RH 3*ܣ\ƠJ ^MM˼y@5"V-Ϙ97WCٝktZx^?@;-em!^ہa츚:\Iu֑$ѳ;I:LP-J&VoMaQl,AZI*6IMiWo}N3ccf}ǃۃ {Ob3o Ddғ" Kd2JqL}[m 8gtxԡO =;; ߜtsof]tqݛ7O|wh&pOp:93_ޞv6cO3Q5c"}̔df>(3F͠7Æf,fT{Jc/߹sfLIi9#3ln&4"ߌ<6$'2wŰ&$Qe`3e^k2 ٶ6tꊕe$ql&F`f{;˔{{mak63l[`Us #ݿ# b!jg% Ӡ^fG54Y:p/FkunuG>imEi}"&t@ `&1/hmf#FBxJJ 󄸌ɕz}`-g4)&ʼnΉMcӏ 91& K pc 6DtfΡ\#ƒ{17YP4#yϊo3c(&Dr C"j`\Ii/.:@ VT!s,\?Z@ﮬ]oS67c*ML݋.9s XLlҽ{{{%֜WK,0D`QET¡1zf()hfe42 ?_myd}Hxt#NqAɽHUo_5^{$,rF%@7 f&=q)f{֌xNb|B IDAToENIY_5qfy*pWɫ)dZU+ R+ -0mȬX|3jǡfc|*iΫ ܜI'hG'-ScssHI &2FKH h<4lP2YYB} 훽W/<">s㋧>uCo_}hw`!6n |ǟ\w{d]osH3{#hAqHmo?;S~0gvKH231p6bnk33@+mk Fͮ l3n=Tx89A r1N?-WdJ$.CXz2YkCYk%$ XZ۝Nx VA+#/ 朝-4Y PQMl].K[u\(he1?@̇Lm^Y7]3:Ci5ViAdW4'Z.)d[<|U2Mt[F?Sc2qr^jkOwĘptzL7~4aD(LCVe+Im _Ly&"x {f2&O ALXJ'+'tmmY2egx /!3 t !P5koTaRC@#HCq7XqK [aOBeQJ[8|&j  :gu%X̿|qY?d^m '}7#"N, WS|ۨx%n2l/y+&kR55yk{AuVaL\YP֙74ĵ0ǛbBx#^V*w9npNELw4˭=W圔\7" py:tf-DgstS{ ~IItA`zeK>P5!̔Tn wu|:St#|rS|L򫁁7`TvCEw \%0't^#7t79u7M&C~FQ3|hƵ7)eC,on5#&a6sMŒ<)fׯ߹ڝ+/Ý;ׯAl;ll60Ǣ0v: X, 0F 2PƠ3 V4E)ZXd!Ն'O\ف!k1)L9\F>xA/z3~pjў-U}R/2oK/:pD'!ex0f 2?rQe?HCQ6WNHz03aCP]_ē9UY M{J+xēJ̈#<WBS%LjQʝHG\:e\*a2v'|EEI`M|_ZԸg2ZxWQzf6R@USjVlY ,Dő2 -Y&%P2Rp;.aH=8_QM68t-@S< D2E$ /L˱a@ɓngOG}ku G9S$R44f==/=#2qz_ $-yPΠ?c2E3=Ş*DfDk:;E?fc2Sa ðЋ= ` &)y| !2 5_`/,d! ˄asCdap2Cf Hj 1L℃zmmݓ~v[gY. ^ ">3(g'GL ^; ]J%J)Jl&:N4Uh J2sςvL]C~K?7hQd+ m3tSEof͙o1HXwXbkDȦdOM6/^Tca{^T&_~AqAjj3| P+ȇ(nqj}>Ib*OG/!Ϸ~饄yelGL%ĩfnIfR6,1Ad@()6ů2//Wp:;O/wNt݅' *{A2jJfM^9a96J͌&wnɩGc~x S7ɟ^| ,%Z94HcpaoqҾ%b2I'Ӳ";!Xx_Y](]nb3߼xE˅7NmgN,Q2}iVNr2u3fmHʗշmGI`_l?p__E4;*dLaY:ä yG [.=~31M&~T?3LAe8![̈U >N'nٽ9~h-2T͸{? `w|x׍]$͌?;qieeژ2 %jf2ASթ^3_lF Y@sΕ;}ʕVV>x]Le0O.AxP .Scgƅ2DHZ&_+p%5$b?t0w@%ON@v8rV^&|/@Cee30ij|4:JV5AejFdž8 e,b!DlKQ5J}o2[`nb2܄ѡ/c)telD2I$gm#@Z,^Lh=nq 8d=$_b8H{햨{7-kJ{ 0! c{WXb7d-ZEΈXJi1j3b>ި{ g4|[w~I}EA>d=!Cj8P$0i_K|C%tSN~m^]_Or3&03せȜ9`6`̟;fߒ(q/0;xJDћb}:<06!xNԔǔ_Ǝ3(yhU֌ |ͺY<|䇎{pfC 9 3kD{J__0  8ffsAaK۲.3Tf1I oED/{τ<ܷcF,a)c3qXaE@wƮ[%;a8! . fnsQKsAj3q^:[a2j[ۅb@6tz0N :Dv{e*$Xƨqd !>\ıXuk5/-C23д! &\l(MNwL%C] 8 2[؅j3bƽo颕KB"NLd{hMv^2B1τj.a`c.32Yxyp& GY,}Y+-:F KW0+jfd&7iJ, 4!fc;Lh_%q[Bpc25c*rjftD@|X} GzAX>h0kc&|iZ+>qmGҔikN238/Wrd|{A/lnN怒s)tKDIp~V2ײμ|[jӻ_ňO3sss[VRߝkR^ܪKR'Ԧ9|Y+yiƙ@q +a F%I F>\H`zW5S'54L5B 0#'| 6HwPJV3 52y 3pGe) " ffY}o|;5Sw9{UB۷Ew,f7g\9 !B#66N oh w`a>2ہ+s63kl-}>Z(% ^b4hbκզLڇYbČLw;spji,*j&SPRF_bqfE4mz r[&v=R-`V pX`eϲ-d j))ض V.0rL/邮F1e0 _tVdcg8ׄX7u 7(_TF=r} ܆MhgFet3 *KoeX-Uikxlt hY>:={@h ji @d~6 yE3"3P9#!*sLȀx9(A`|NԂy =+'ҌQJ?U pdi5w_Oz%mnM4e|"SxÔ;|,ϴpK Gjil@i0Ȑfgj(3AF#f@ٌ`|ffTͺ}VVnhl r̆1I`? *3AQf<[P>fUYE(: V#1e HGd˃fڈ\r3 -583e=h t'Z4d3 qX +.\1;-st])`dmlT# dBP [F&\.je\-5=A81&ssVj3'q<%]O* Gkԫ cf○Q-kk ߯s=C^s "\|P*U~yj赖ௌSe=\f+֠A XpſFC!*0!q ˽{9W}vƬ]&*32,z?C4[fY΂U<@L8#]cT 6x/]ybTC+< EfdBiKűPXIM xl?fZp!^[S<6%^g:I\U{3:X鵮ԶI{ж,]4oL;q :PTgr/:aJfB\(IE>Uy(ꡂ8>Yet$z1 |w}rR=s[$g}oo}*`"Omb$ &5_ol,ݓC·lL$eΓV3*whsB&&0q[?4~c1dtPTM,L{V;a7f3S5]RyI67Nd;O"LŒ卦̖gb8|3#4hۜf60O+rqF̖Di\7SkC GgC9CvYvहh,+>a|fE c{=^`3@;h\BXJWn y&dˡ#<?(]x6%gϦ,3xWo^df^3̨b4)+ׯ?`* =R"eu8.4 ܶ-)Pq60?Zvv"S?@ (M4Dm(*3SYd_&"r%{\ׅEܢOHqÂ,|1^(R\7}=I0>|[2A1 dBYP>s~͐5D>6c fwɘ]kXԲtI@4RQ-X"}چ2쒫O7oY;" @{2)bQfߪ6*(r90mqz=w$ 3P #6`N4|x?k./>Ty'Og0_[3a4£0+3nn(,"e-ƾf'Wd%wfs]A>SuS2!ӹA4uOsdv_(GѼ^FcO0|885:;3/}=~]8#رȳܘŊ~fq].u YGJ:,ftWSR p*ilW/3N+zET!þg:.y,Ex?"Q^iEE Mm-3UcWI6c2d%/Z$q&8.jϴ8W~@bMmc(@_↑ԇ*cv1IeBqdym[)3驻-)*1q*Y/L:LܞK\6#2&+# )#7!eUuf$4lA0B⁀c?Og/y e2Ӆ6X(ureݽ@@"3/+f"DMeC:>Yj~ГKq\$?[l5^oނ5\vn/l~P]x 8-5(He`:BTӘLF Dw*_+01GŲ* `Tl{dd۝w7f]p{/1 7ry|8Bg^<Y"!<'y>*St&'P͓O=)ןpLP+L].@fߦބ0qS;N^IޔM{mLûv^qzM[ ͬ]lfM X'V!<`X9e8 rAPj-=,ɵ ek+9b]Մ\J@ɨ(t' "?QAHp dL4m6ܥf9 źx?mr]>T\&c/f_ͤOpI? ة 8jԌ|*[k}[?\ʘ=_3c33?03Wox~&~oM?1.3g|x}ZbX0apY:ӮnB1H:tL:= ̼$[7b"P.]2wqXz| ?2/tΛQ|?y͓ r:b&2 gvoC# X`~) -,ύv`U3%ډmۆD̺0c3Y4?e? $3#1K:4V4x̕ȕbنglhAz*A3r /$̘,sM2hhL.s&n5v/H97@ ⊲f3,j ʗqOLS||]⒦T`q 5i /RUqf$ʀ3S{> $a1S4g93ԧIk̚Csdf֌<=t3=Q[(H?0dbȡǟ.2\#]MO#Xs箜23SNyBth. 9#4/ "3@zҌVkϟ\|b >D'3Oldm&] S3YP~7gtfi'CFmH7G)N,5w'{k?c Ljۛ8t(]nחvcIt&;=,E]=/WjiyQY:]9?~zoK{K53kNtA"jzzMZmn0{t޴ʜ:=of[]8F'YE(Y\qۤ)҈ kdb-iwu$F&+)|zWCH4Y ժ!uV@ 4"ill<+WS ଉ٦M@ L"=L mc*-TN jcHk*>8()"4Q}l%h rݮׂ9BZq"ap06K΢+JQ̌R.aVtcM1\y="9d{9j&?p.Gϸ#R|7n3Yx=O>_Ϭ,=6AVh̤+cΌ6`L ͙H ;QI:- RLm;NRֆ 3Qg&OKtG#GF˹|R#<co)ڈ}1:1\x׬$ IDAT_3K%!|*%NR\Ŷjz^iZ߮f^"FvC*Nb tGk%$p11,錉JV R_ Tú >% Eڌ[8 dN]4)#)@T=L`E̔~{GY 8#6}3?3\цA3O!8X|}ΜfFCo DrBI *lG[6&1K%8mB:b,)p ]}t{As;h9S8*$ ѷj4TQ_ g8E&j()lٳlZRh0MƄ"z!vz 4z33t 6/ a|L:@- n [nahߤt &OGiV`?B[,U")-gV1>5"5f3ErR~quI3.eB588(a6C3#̕+9Tq\ƀ~?3g~{gu 5OrfCj>ԁ$<@gAZft(Tg5o5?x,fCe $*F3 [˵\]-TM:V#PnO~A"ͫ VrOg|WHLXk =)[N$)BNpE 4A[LEL.z3I sJ3OM3*,"_zt fu 27FR0cOaL7 3ɌlX}eF[Y -Ȑb\W؞2=Th]nBtQ#e3P]PĕXj&dϘ9衐PڜŴTC{1x ?a YRM1wE0o xMfٶ(TskYc9\VsYb(/0d5^jYMpQcCK 1 ^s,Ƃ6 N,ؒW6ƣLZM-s!*l?J _k 퐋Cm~A 5]d S2 tbottDDƟGr3='lӣphI:$Ds|Zi}iJc`>͚(t2BLI=}O [dASN(FPV򞄂uc<̛JHcƅ5c/`mD1&iCb"2\Xے^!ՖH~BۣN?vVce7weI" qN. /v|nqX#C$p$7?qKZ`枷)fLi1ϋfw*BSˠk(A>3ia\ ި>i|>P2eh$8mDL:dGEֱ*ay v@njP醽%!R1JЩS Ȥvj-0 ćl#T_h WL[4R B+fYnR!E@tf@;zùX~@Cb;”W4d5?蚡F&? j0{FBÞM6+QXXcnRm_ԔTq?%ĿCEC!H#1e6jVxtSk1`5yaC57dO 1#3ԚL>9 Kh3 7s@#k(ElߚMo7#p*MZ59x 1K5}3jLWpCNLhA`<(qaC$S0n1%jJ1VQku6aZ(H~}դ,Wˆ?19J`n=\>tAգYۦ΢O׹"6bؘ,|;Iѫ' T%w"js""sve#|Г<ͨی163dY,1O;gsg#a)ESⳏ9eБfu1wEfvȟaGaRa=l +]#Eb m$ 7TbSnApg؅s:ˑ!kj#Ü@ i0ma YthϚW҄Q:d0U Peφ,dj왛vBF@BZh!/ o _nVޞyʻECNzV?$X-m1[*>YSg@TrhҙTU( ]:Z h C =*K4t C:]Ͳ4Sr#W4A\t!;#2ԃ\qfLYʏL;A ̄H`Qy ,`@z(xP/G>v[{d3{ V4Hm$DwFiv٤Xukŏ.c2N9͞o[6$7q8oU|H(ؚMr?n,:riV[eN shmeO{)4bD[u?Q~2RD(ն=cDψ&4ai3hh =G`4$2Ȟe~vt| ܴdDx)dS6XP*uM{,I]1ԥe!+/h=,Bl6e=4}3:SyA䅭4TU+Tb hSKR!VBEgUFO,daf==v+S8A5-Je# UԎFA& hrrzQ +?@~rD}1 |AH-[O((30gȗ?`vz}23wMYAaFNT$ix{oBMɼX:>8dzUzk=lazFBˆU(4ՎWwj{jǝנG_̘6g:tz ;򴗒]<`zْ(鑔iV*Vc[q[bMbi׼vNP䍬vf^ʿ/ի 9ͶTj֚]:~ί---]xo٪xjlOC'k%/2(CWrYBF$df4Ψ-oƹm` BB4=T6LfAҡw+Wȅ9dG e8L;4:g88&{tc߀́q&f?"MfA"kh.C\Obd\à?P7ɮ< QQY*4N%*["POV3'Pڿ',;TױƦXzнB`M-b(tn>`Jx05 RRJc\eHvA;VҐ: *#$1+ٕFҳpȖ!)-[tl7*/F\,1]HdE]sd FeI-gdb ~ﰰiX1jcL,͓5ii40l ;LŹ6f6<Ȋ)Xg )M*}C8csepb j0]گ*cO-ϸ&9 L`^-y2@e܂6:b Ά)x3|N*SCڌ%03hTl L6V?'ę&̌DωS5h0\DiߛyozO$0;^po绯~sek^*=.q_^Z/랿$acbf~UiIYgc~MK/ߜh4an tNX-_'dIk 2'޽c̦9_mϜ Ƙ|#N(͛G;GVieS9t`jnn洠dnʃSBn`)˯5Wuh[Jm^DK\#aZygG6YYZØ۹ν$sy2-GWvGqH4kr{K/ze}˚KtnQߓ wʛ'33M[vPvh^t$e5afuimoVFuf 4zrY?\~*,C +WJ mp.eh9LF e0UBWQ=)V0-pr'"o6 `K٪},ƌ=-6=9q$gMh5mde&Ьg?HMd_5w_ r48ASMŻ:>DGmEv *ʻ)֦x!eo/vlQY0H8fHFK~{)M+o" EhܿySШ8}Xi\:`._[f*e IDAT` m3V:X"dy5e26< L&P`?d/΃ i69Y.quVL2':FJl&ΦbNfaQ!:32 -u?l6HGtWYh>KkT{5׫%9Qd¾~‚:w%.N$ݙ>oX^]];+ߛ3~n\vgj79 ^{vN9*"{TgvVY\<0qqe %s;*u0@{eGbmN3:S@Hr&;W<#膝a/9ιJn޼ZZY+aTY|t\<\kX)B{@cgĚ-%SƝZYg<;M @?/-pg{IO=ciؠ)fbنiTqbn 'OP ?".VCOwO X#TQgFA9]4{jᲧ-G).PHfBw0骫(<0`tBn s192N&؇ Lߑ|X sQ~5='ͻ`5#3#J̖tV>~+ cg#š. {YRk4^yog΀,u0b&5&5]U,=m_n:|.{ m7Y zӺh89@%8L0lh_JB . ]dЫ,3UjMtj@_Sȓh?l:΄gvachviQ42 dz`3!gua4\q0s,`#1G ȁ ! 0ᨾS. e.dfkg3H}g ٷq9p{LePlÚ%-D$ݕf0's惟^ lfac/= /%V?V`FU{/e3ysg>},i7Vd].|D fyLln>NwiT(xJ/MD=",=R=;sSaR *D'L?Ӽl˽+X0x/0̨M"z)^ٳ)ju)ÇS s =s~jpiHMm/o~kdMĂ$i7'N:ؘMyv{⍊3Q&'hc?z# jG0S7:(3i52.Ԛ *c8,@93K+Mز/uê kfPiNECmԸUɞ^ΕbN0(z1."Dž%SA; =e ?&$-K77Xñ3dM+O3i;G+D磐U Y$1i0+HU떽Uә{(7{4v~A9gMW2R] +`0|W{B !i r2'BTKPuQA -0;X kAz&SI d: _į|- D ?B}o?[pkY-4"jFki0l&ʬZ#?\% Nf>FVZ̞3NSd/~g7zC3 1lAߙwLcrT d!:htAS]7#[N\DtDR0Xc`j W Gt n uhUi4Úꜵ?rhnnwғ@ai< j '# tt~DJ7C}ݬ·3+[ez@S1BanLYQC*-ƌ#M( ˩%eG+99M& HuSX T]8z DƜGĴ|AT!&S9p CP#PBhY rA.`fz`,j2.n\pS;ߪ2*q‹5e.Rgv;={fjq;-NIW a8c苟8Qh ͥ jqB^Hf<:\\Z]^jw'Ψm*Ĥ|4Yf&ݥ^1s>_,~Zj5*0;&25BV)V^obm d`9)g͇~gtj5bn_-ٵޛ29-i$ {v $Wa)uXZz; FQk;+1N}*toARVxf,ݥ>Ot``ȤH"_ߜְJ̒Ҏtg/628GcψlΌ0#9ASf6qb \Tfsi*?QQ򙊑-1ѼB7 `ʡ (NnyhfXBZ(T6TA&D S e[O. U ]WH!UF :PžVY.IJ ;JE>y F? zሄȑ^܁:r#GaRnTk *H,cfFꁤ`3A]``1ncEa/)P: H.IMAA$,(1) 6C!>L(猘,Dq!?MpІń,ۄ#'݂N˿@d{=xi>rYu|󳪢8(B ~#aRh`12mH)3RPwYڒP,0--8q.U 隓)#+_zTojߍҁF>_|Jl;iKv/wjḢזy|>y}#k `CS W7<Kt(0 JbiUI2*δղM΁<m;wؾsg޻dv`)h;˘*sа=Xxm*/wEcpneU{9 m/X m'; )dk]q|3Ls^_}\L!a֝kc+ *6…db;D-6 .f3w"K#3-[f6'F kKry^/靟<}R(~%F#("%6md6If׍Pi X[/v+GHMZ9і)?X \Z]vWL:r3?,---_XZ:z7Zc1F noO&Z?55wT#ȠLn}f7[.GslNzLpszSs1Нm;_w?ۼj)cI9JfN@̱LK3f٘ %na˸Nj~ƣ}v<}j31rOQb!ÚͳL.Th6S1-4|z/66HlQ@:k"w>3c vڢ:^H]B#lXI9taDCZ2a)E j킘a> eȧavԆ¬Ոi/"q7Á6 YViQJLFVM#r -CGh@ ĖJQ\,.KcBHB9.?^7̆--KGˬz&Yj1ޥddy~av E}2>>]A)E$ϲlldsN;˸^orV9DBۧƱnP'.%N(`QCdևRqm3T3?lDPnbĐ$ ھADwboc~ⶹo4b$yӧ}6^8~&C|㘓'?q->^O$FRٚo4p!3?Q̝",sZYo kq0 <0P̃8mGVGRU*Z#aد9 [0_-CG;;Z];C7WwȈ|]bNo"` vPZy ׏g|;.$!I|*cn-bncڭIVo6'3u2qk5{ 66}1F!ylX3Sԙpoj\1|2cըf3X@Ap!0f G&=D]16mG`ȥK'_v4*T A@@ZU bԃ WOu( ҴNaD yf3ZCɒU Zj.'_3 VJ_5f(Sт 6Nopte+(8@ @.N-euO[A p+aԆ[[bӢ|ИM!f-ԡ\ߦP.$1"/qUZY@nH a91f1Kcq"3Y] x@4[`3>PG1:Ԑxdh f9 E쥺l\GYEʲBAQ6p&[eXFIgϴ'|ksͫNIm~BHĸ(YzR?0̜߰W6I*OK׳Qp]hx0d()Cdb@s{ڶۃ b=VAl{nۭV/2Gdʊ-lo/ ~2||sBɃUevVnA.3!y4L 7q:{&?)ܿ|*G(~|;Ѕ75KPFBAH̞->v #'$Q92i?1rf^̼1 ̐SkvFYŏ9/Tf̳mfcQfyq(E] ې*3u|\+<pŎ: F*m̀d4WH hՂnvMN^5ZcȒ/&WOABiL䬖 4e-8J rUAFOXf15=7# YAnd!i$pKhel-PkAl$ߒ+3i $&ʑEp@[/_X*v.@T] Y3[2-,f^̳k.Krn?oBY]=5唈gz5#iLΌuy۠h&G2^GB_?ݧ} |.Xʚ8XB7`   IDATxH瀽[$ъ{) )4HHmH^ 9~ 1 7G&BkN.W_ [5>,zCauLבCԑ/"Bh? #N C4Hh\R#@ѻ!rޝנ2R3lQP'ɫWW%uĘݬmkط+q k'Q(D>`QEUm[k bZ}OsNhW\u=݈Dh`{izmj]$h)W;qN-k$W6α6p S;rX3m1% c@]ndب4{=:hiF`Ff>F Th>74kl#r EŒ\"@.VBܮ , uVǨ6DE+l~˲ȗk# 82Ȳ"p:0.gj u Lfp{]@X0(5& `X3\ Կ ffz:nSOC, 6T߇L\I̺Si(T$J5L\VfJpΐ!$2eԂ6DfM!xWpf4iOb2p}-]T"BeGU4&]&F-S ,'`wRbz7ﻻ!~+'K!n$c E| E吤 9eʋ28N,gCwvQ.JG!c"dQυ1+?zv C\88<;n_X.&1gLQdw\fT5Cg߆M2HvbL}%ڊEV[~W=3z+cݶ:{/ǽԮĦƒ\yq\7h-m[J.I>0tOxL~djZbqs~jQ.͏O7Nҙ2pewJ[/_rȍ~BulB󩤿Lbnܶ`~EUM-m#4LfҪb{E;?3$cs w;x:9vv.oo͛\=x41nFz aRp/|L̤,icO=f.m\ a5O7gLG3,04AG%̘Q9t2Co7|JZsiSe1yP6Qy$ $K(3F&mn,t)p~s9 ]AA%%i:ÌEf\_7 [L_ia@Tȡ ^NW((, ;Y[THR<4KC!j e9OJ˶ OA M"Cq>$^FtYތ2pcpY3M=Q,C)!LG{j$ ) ?{U .$B!r@яۧ(gдwο^3g<>7񥣹S .Sd"Xx#Lm_ps7l'Z؆Y9vv*QyMyܟ~}ߚ]_LUg#M?20|RŜț9GI6K6>I3M~b3E5?uPYDo&gHe}Vf¼̈4nL٬ id̃>2 "j#ª ;f 8A%eʤ8G}8jL:r, gI3AW?^('83CY4(fl3 B{]A!pm-Oe4aeV0OutfX}BܰʗWa5V4l y Ä.j(qjǐH5xij!ݺd% _wή,3o3LB 1&9D9衘B@Xܧu#`Xsʄ T]ܐR/$'S^UTF6g? 5 )1C&C1 k3.^3ھGY ) # 0J. ^@lOOvB K33)i/Nr {ވbb N%1$hظn/W _N>}{y|ܚ\jUxz|[[k'@ܝ<#w^Jfci5&!e*pz*Ֆ7{WK]}ٗK3\̾w\3zQ*dƷ^;g~kr;@';|VUʧ;<9Q6EoT.`36w;s0__B|:^Mmy@ow̙fNRfrwBSS ۊ԰)A|P Z:?a3 =W ;?&*:e`3y􃣝FE|˜-攎^&g@c2 s*>]`޽>23llЦ5op&i(ꛩ[:LAʈ*ф 0fs`0;iU%B:b1! GHc&;8M1x:*|t c$4C8c3pDsf9id1]+sk`L~RO e! '8Aܞ %oD0R8#PU/5nAi {:i 2O9`P"&B9 * p{#7v!E. G>*3-T٤@f&5iFk( 8_nl\on0l"<d>FR],lxOe# :"WEyr'rpQ&Yg,Gph3vn(x87Aԩ 8zهb(/fgVe02):)}wODmZנLsj!L;cB ~XݥmwG\&I%M1KR߯fKJdʴ%]ͣu$dZ.pFh5LV̚_l覬ߝv>i{.y7;7ZZӯ wY}ǬW~~KL!}R=Kbu'Xxe5j^wݟY;]p--M7w'L:dF9 ϽuR?΅X`F,m]hNY_NGͫ 3s9P/!Ź5H F1:G ;Jwy-FJz3w~H;w-흛3G7Jd?}͛3~O~ fԕȜE$̲D6Mk3-;fb-s|7x27%4?O63ЙϮgᴱؗ8&k̆P Q{qQfgP̊2s*`D!?Xe.3S vlfEzHB~#㗏!v96WgCFs38Ƀ )bI]p|%+k ̌d&5`X NЃe V )Ä>j0>;3L]]7 '7̔ H 1rF9Bk2@k/Rø@32=! љD Q̈́˦("mV?L*̀˟% 6.Axqiq#p62 Bk .12U=d)e_ 0,[$[ si@Ḋ0 7ܐ.A/CrA-|C:&^&yf!ø,5 ?Z.1w)kݭa{a0zMq06koFo-7 +&嬺m&&4#wO7qh4OSI(fw3yo>hַ~URIvwァl~Z5i.[F|5Y4,,aΙWI؜UM+V5E֖Y5͠W!cX2jp[\% SB*^|+Fl(gغ G"Ι7ȜԬbktإYLiv3 V֢/ֳ o8,0o >ZcT:U#"FFF1>Þ~* 2Od\̭s 3al`͔"+]0xŗ|HǶFV.r [\qX7, ' 3#~4bW'P"16ť#쭵_:gW'$0gz|ތA]7Cgt&M1Ao' ! Ҝ0R<.`fPzn񕖰+fWǏG_f KYz& `>\ՒA ".!o8NΞ,R؂g!X|3f|8Eb3 (L9@ ]ƮXmf' X3j}g,1:rg.@*>psnۢMh2piNG5&Qa^{(m~+gG1cveV,{J;* :# 2n TF'a.#Qa5!GݓY,TQ=q˞.o<\Y)Dn =?!Zӈ,Yp'j5nX?/md19dv`fT`fY(Y;qs1v9 *+@xo}=LJ;o*A)'?NnfƲ+D.[A+58O(,ʌo،2V-#i315p]|b63/|- !8jgLK+_Δx1GNm6A>x ߱o,݃/{L}P2i^6cjL/:/3H{3''аk o~}fi ɤ/X8{}=~>|XH#ᐙsќ 4c X j3)_?J sPBHF!xD‡bNʨIa e 5(Zy.GV(Vps P6겔u,FQ|[Wէ6Ԝб<&4$/8d6lF0o4'L"Ҳ_3HiXL!k=JFֱrB'6В4t o$I10cГsF4E:FjQA|Qc|ԃmrC]̅+t7S[Lnԙ02L1״;3g3Unp~6l0Y]b!f?@мtwTpI܁ugq:&IZtnPQAV͢OVxުObXTjBM^ e3āqx5n,#lSL# ƨBa<Ŭz/\ 2raAsҌ/px'ͼK*ٺw\kq̣ܤ-O`O$O D\m"،x/9tV6F/>p Kn]v=Z([3R3~ߥZ Kg)d͌ F"cq8f$ IDATfZ21/ogm6S>Yڼo mָys.B0M3ӚN΢|3S#j gT(ə9ͯƵX_zh=Cwz93>!qjwG.:$EL+$ư#ֶ ) 4.:=Xă1^B=MJYSc6ylbT&D}'cZaZS@*4H뗺D9!&`PF~(AgDbp]F6&wB{F뺀[b@\!& aU.brfE֘0!5tڈטj52DPΐXPU0>Sbr- hA>!QnIIE*HE;8LG-]`#eZh=Dk $?HhBf|&.:؃ Ů` 0,Z?1%1r_W|}1sv*텹f3dlZݪrf+ i5nUY(ќzb::lNp?RV֌)MkSy3;~meV>(o|J^o 擻c2UL w?orj>2}IkŗO6Wf]Ӕ/[ބ> 7:D@UYp6[^ gqK׌9y0Ҋƍt9ZZ<mzZ T*8"Xt#q03O.fDa:l rGS2cW &*4 93Dk\)!o&Z:-jOvVECZ.2 FK?*=]TCdyM t+ED ]pE6h\ \x2߀(|%zB@ȫx\җTKT*Q6)P5XcV>LJ;U ~*K|A2yӰ8Iِx'̄s gfmh{}BS o@A ίMV$iq/3ȃ2˧6q4 .­3T)}aeCS@MBDH"&l%q=<=7I/G+Q<$`e?DYI+J&bNj~ca2fhNȒ@l SML$@c Ǿc6XƎ LxԀUhN ~-n c(hEnR8P*4,UӊEj; 1 sؕ.cZx`K]K ]I]#z& :_Ӄom_EAHF5m(Wz2%uȞolZC{m~ÝA kęWp( q:feY,lIINYj2rx_8hA*u`"ddPlihY*8H8/72ɏJ.L N*! GAM=H-SJ 29•t7_g2D֌-cM.4 fkF}1箄pi~%M|*m= ^d*IÜ5Y`U*CZ7z\M5" ):it9颟nX!) Ee NI XBHI36#:=!Poȉ>V39eZ 1>7fTMilƻ~sjt|9oV>YE}G^1"oOD杶l- ~=q:nIawSXܲhܢk=`>Eg!agPl0E0O UB8^zj6_]ZVaÇ@lpr|$(МףW>x3(3\pkCsfl$f7G ͒P`X3N4C@#|9O'Iu *6( Men2E lPXlll6DTTYX Z's&S4!J 8ۉlp j=Йs&7Z 1_"sLf$T@&@]XBڵ4N=QDpX’,D4UQb ΤF5LT*G`E.MIIpL=u< "HuWÙ$ᡜI\TԨ@|( fDcs>2}}l Ai.]kL{Ǜ_uE] d9- 65OQVQj 2 ;@QP鑉sx K\:=[Hϳ'U(>AYu4j4!OKB(Ghe=87qrt+~6-X!YU\d2gA20qӵ=W\T-t]>Ojv~1B<>4ٽ0 }lG-fK63tpN-|g.]1 Ay;q6_cF(/2VuPg?;PBQzaiiScsmF,=,$Cv7̦Έ .оQ}ꗷm^t6qn)I:Myތ:o0z[|!i6Uf7oAsfcn2QIңm3 ,4яG+FЎi=o<ր@ڕ`1$D4`C>|Y)іu'~ bg#2GFx4\˚`{U`H,+L̤fŧ%XwJ=UE (j8I0+/U$O"a,˹eUD$ o2qH"7$&y H%M y@F:aΐvf 2dc7a.^S-\`PXC ~zZK u5OxӲ A [x(ص:](Z%_A`GiATM9}&AE)D]=Z>$ yȂ?5v{#B?=uO6{yӑ*wQa  H2#.3'a8*5]qdž%pU:}c72YAFx3^=eۇ>zb~fXѳKOBo/U-T`jYD~к{ljg\A]Qo!:4!$+ggϓ~I!=ּa} (c6~ٽ?}e"(w6!kṱw A6\bTbqhڌń&4w).k!#63J7݌-i83ܡI8BtNڌpTRT:i8etx EoB_xŻRzחmtn"*Jg&Adm2'В~vgdNTQݐə#fB&'LLR ?-o|?DIXsӛFwWꁗ iJrY&t0BHp0K!jZs'neAx St=i]$<*6Eh{{J p;jwdJ  ,{fru\rx<' @߶lT)z{+CgG1Ɋ 6̱L_DqC0H#pT}2;("BcDK .:ᅮzj 3T9@P!ISOh_)B s#0"~HXwu%l(2jx MEUtTo^ n-Q!h3*Nuޔ&YYT+ fR!iN eiPS #ji,!=!skKQc 4F46!æiJ *5uU#Bΐΐ*Zbe>l(]Nyb<=z5%G9Ahd!o ,J0蓕( F.UXqa0F Q$a'd$| wX,A;`fDrAΓNa%k]+/:עÞbDL] jik&"jrc:M}>uLǣ=k,-Wm VFAG-BZ^d[(θXyǏ ScLHjbnULXI̜mG=xajWen5E/*ܚ7Gs|^0y̆' ,{V'e"3V^1hLPLT3 4Θ̖_ICSDh|W"̄0-PW0@ @CH QLD耪i.( p '5:'YApI:z] t^vԎWz;/~":Dzl3A,l `\9zwig77?pU_@J׉<+~F5)rg_аkrVCM' %p <%P0L&35pZ?E:~ Yؒ*B.EfY#P&\ dnk:yx_\K] 3kJBL31lIULљLiǙ5N[BBYt]]Qr=#m5liŮY淸|"Pf>oS$WzQBުʼv6<%c3qǹU485xqJeDrYCk*k?aq_$ V.c6Tj5BU%+Rd ƤfdZjAOjaTJʘ;&x#@{xYֽ%!+y=DNhb?K`b(4]ѓ S|3BH#fQЊ> ~TFheTh>ܧ'K]=Xң E-6sã\J,(I^Q/_QjZ?D  13!KQ $p\~/U&Au<0jC~5˦ T-Vxٕ'|ZК|͚-_nafbI(~% Ø}bL e<+ʼ\O此!L6B+Xd1Čdj.+f<.&lCa2.'߯TA[ִle̷L&H_`&6e&&9RSSOf,=wlnrMN V5id @yӡSYU(=90puUh`-vт hwPfK``]WZ+|8&{gP90 njqGr2xì}XEAA4 AK%IG$#PX*(QL$AlM/1AL>:<.eTeӌ^xJ+k%xGφB33UrvH}v]kuc|F'?,go/uҀ"/J o-`%..ozߌXIo~!$6ƄlLqL$ wR4 Mя97'&Ѹh Hi/QMoɶդK >˚cM'g&Re7sN@n{72|X JbJ@O:`6 :L*t0O`2w F@Cx9>,r ]I X.tFZLSe(z`c};|tؚ>|Qz+r)O1_ TpMK!]U2m7:6sFa .ÆY̯{{{aI߱&5& Sl6L/Uo0jncM\[Kh1Wx[_F&V3ڏ4ɴ(yJRzOITcRXFTDs~ gm=ye\Z XfWlG. 7t,TieyfP8\!$V0h~ea@G-2z ^"B  GS/ 4;3 yEu(qy'nvdTGBd2;_e?[63L0yGF]HfB<ܕ鑖k׿ֶ0aLf6)4fNBl # /$RUrѩF$ʭ xudk7W2wUVIzFy3ֽ{id$ ="2P1ʼn N[V0 5 @enrp2yM%a1U|VȬne29!1R3.[<&#l;-SY P/Άu<~.̹_"S.KF(.6 * z=oʕr޺SqTFq~_rOE3BQ<2d>5cl\8F_O`b3߄ aXҢ_t:/Vo~Ca"`)@):&*&2 d_J-6'}LKDjݫ։x(@kF$fHx XM=Mo0.(f0cb_MJ3rMZOy769wz ?Pd7;R4>zttx Ga{;u{@hğ Π=3%a# I3+05aGIa]3(H{Eg :ԋKHl0a'FALF&ٸw fm|L^H|<܄KNeR g~I짜޽Z t@kt4: i< 5Hj:wȊ1(k0TùVTj뤹qցA{ Q-9 TAhh+^b>BqgaZ 3)3|L bN昲8m)]9qEWA)ќ( ;7x_?(WxQ΀c_l+L2}[fOF!D  /z #4OfĠMo+S!LhWV9|!3#g0t@;k%eJy+C OPhb0a%KʯBǻ ѭΣl214g>lp2uSu(@Q>i`Qސ|ɉǠbv~OFw73x0{8>I82oB6ZBCE(^wrfs7 M"DjXL0oKsN=Qto|}7Dm7*@&|d L:1{<9]ѡPOۺ=hS͌D]ʼH #`^tFð{K |x.Ĝʤ X)>|{=s5!́B?ΝNu;|6}x=~L?~tx)f2Zb@g䚟 v7wAK!I{9glu\7SԺh\]R}E:~A9~!|7G:&Y`#LL&jGAhZvλ~#S$95IzZޗ7Ede; @ aZ^]%AL m.0LRemѭɚM8Z:z$+SiMR ZSri8w?GE6`\ H#_#,jL Ӂ{DgzѕeХ0F+qwyses cF5̈Ǹ"PW12!eU(7;JYFpX͕-.aҲ.VˡB`#ffbSVϋռxqb3V1d ބ/Iwʙݑ|Vhje 3{F&=0co_p3WW/(o-Ҍ]x$=vbwk~a}{k5_ doѝ;jlpZ_4\=n$>se͞|>+\*89 ]y@d{/ؠ%xˣ#?g(TI%9:8i/Noq2jtM':t$#SXEGPEXqL"嬠&EO0@,C" I:ލ;;G;۹,wn#u2ׯm~Hdwn k_u"HD%)~U j~DI ڸ40{2 "*gY凫i–4+25*.tJ q(tIyeH a̲QpT `].zJ Wfn|$e؉wfκ8}vw'ǕKsrq1qj>Sg~2 wf>)}kYk-efhW `v'fB,dݪy[k#6*=df0Jp6鬗WII12 Oqۗ[ ;!D ɿ0B xGtO #H_-+6lq]v\5lHaK,>W Vʟѹ_n~2}ŧAuᷮ;sWa3ΙY6ؓ>} gJ6mt!6ۿiwΰ90&F(1Y_Ђ}p gT?`q3`g (͈&Lf"nt#zs¸v {fDn$X&41Ff>u>ir;%L.keXUs빃ᣫGW).W)ڿɵvZ_^}vѣgL}AstH3yZGwՂl1#:J^4 UoCKspZf+_)}_oW)+< @`V) Fւ].y*G$ t<)eDo0TnM\gW̴w;; uկ˕͹)zC I|per@'DLѬ רtF[.hk`6SJzCL ȠaY61Z8Be6:f4JGST/h*hN k7ǩFC( uF\?ER q%Y=xfV0^/3|~OQ6ݩ_+^.[#5gWo&%5e> +.O3Y#ݚɜy"T&C-ӌVxxe_YF|\"?\7#o9dO<Ā͙pODbȰcsaZ o*X/0e]  Tt a@^qh.lOΆ]z)˶ȘYC?413Uts\ XYl$<AHnv]<-i5>x&\G|6 C@b:z<)^P/)6 eD1DRrՅ"K]gA@Cc( -#HN9-ehO!_^=ha7G~Q A1i hboӇvy/8u6}p{{E83Y.+HgI IƊ?o։UKT'QS Π]we`t)|1kkNN϶9=HMLCTD+J'zmoNcw<#ry Nny}{c;E,FyOU6y(j#>+E1+~]*~;iX,l7] [JLe4ܣ?@ ސmkNx.uf0uTjzLC&;|8ԎhP{Bs1 :Df)n+ѺBZxHgJTNԻ6ٿVAȌBf0ɑ8Z d3j \d\OuQu~헆7轄˴* &)OYҖĖSyk7M3/]h5O +ο5Y I35q4 &ɉy}V>nM:F{xL&Mz1dL/2+W?,m&汫[+E"tyuyen^6d>Lœ+3n3g앉5s%E:J[U@l-6L%IwwUE}.Lw $،͌T3S 91wÌl1f'6#63983 4^BWFtN8xyfzc=*7K?C4HC 4dnj6J'h D Kuo@(XSt=(vyȜiuXolMRa($Rm]L@N 4{Ee,,'Z,b1/c(.uZ`/$%>Z <=˝QCb<vÄ4k0/W0鰌Eu?@2ET--9K=MyՂ$@@&ѡ 0>/JSڵE)f>ۂ2 (rrU:`3;W wHmh%q&'KSs;)U:˱h-A,V4%9\:]wk$x͒.p:.2( Z[dF'd!bhs͚} Q;i=VxP 0fCW-\QR3aJ%:0f^_}R_ 3fMl`J<ǜz`K+Ì7L*f>R؝g7N$=\aLWwWV;+ Axx ƓkM^,gBIi%,CxLʾx[ު^xw?soJgb~f~ #FRa^"ƚEa7#3QZlfv,'094wjv:? mr빯s;,O1υ迴J\fv6󑦘V35t\IC~#a7C_0dQkd_3_%-Q%%eGV1S^d0yqrCGGV 0џ3b׽Q=G=VL2Ǚ~יjub⭽r3kB +61rnHw89i ERV0[ˊ%o964)n )T7}Rx0L9fաj<4Z54Ojq()P=b^A ޚξ:wfmn7.n Ce3[#Q cpq9B<8I}ΚmV"7oc,,hX<(kj ZQ51_~.+}X4GEXLfM>ESD=̆(͜6Q9e_LVS(tԀ3gP8-1i>;/v:A]I<AN !r;9ZA- d6<ެ&Skhϔi1 \ML@/I$U6HWfII ]*.uC~~TygF/y[׷_Q%n YouXK7mԽen!X?w;" h }#D0` S,ݡ@F+0(; T S-+Y PVnZݽ> YIaPM$M<"kLE~0?}'ej谎63 1 9ePHBLdewl淬5WXl ZG\#P3ڛQ߼5ŢwV.4DN" 3 N`J@r"qVN@s#p\C6$֐5CN孲HDRA]$ۊ#iMQX]VRD]%hx 4|~&A2\npr!Rkol%j A<}1Gmobd8<9Y)a'_Oe 7pa9ZχюwgGC TbHdɲ#E*q$(t1dY7q6%d4Ԝþi@p\}v2?Cg__6GDsp*St qA.B< 3̪ D`ri2DƦG;yK1Ftu] zfUB.*iT8v@cxj~ށ=gȜ(0ȲH'˽IltPtȦ薡O$(߉8]w[0`SynЏƘq)4(:nQ$' onjbH"uTY-^@mHz`*¿as@ک8}*=QBJJ\= 5~$fTSW([ o(YD}ɅeVb8ߘ|N<2Ulxh%WXo̵Ked!$FCm "-Ch-wn.T{Ib*91bKe ('0kY4= Iysȱe4yi?\¶yAo,Bۧ?:!{y{C*?ŹFJ<#UpEO@逊3H(5~B='A&>0D?uqp{T?RS| x?c3W fy[u8)2 (1@Q_׊oCVNpI*3Q$LhzCk?CCeD<.` O 0&+a&$r'>Z5[ '+dVפB*Le`CpJTxq?bq~G H8:#6#tfyTq!!alO8Â4(?PRqHWhms*BЈ-z(h3n?鴊i׌%^Nu@g}uoyi/@&#'h߫* x&*]Y Ý$(DId6'yPf#҈'VO$-k6\?"tё 'Sj0~ļq㥛Ţ38t2/ĵŽ]^O~\F$ϖr'oŷQȏo{b9Kq*cOt*5a4kV!g%݈YS_,Z>S(dAX~/k]0f$T“daפ3^I %|bY35-¢ +d,k6yR{|mts)5  Fp#\.uĕ.xjq "D_N:}lLbyB =86I&]Ow$Y.}yV]2i$ʞx{^"#q޼8DN{&Xgst"eY$"e2[ WBLh])9MqlXʰ4\.^Mr7) ۴=*J2r3U+4W./P]hpTG.f>zspcĄsѸ]Y"@9 Ϲnm/7RUy#.LiL#h *hꎪ6bWrŃ1A+j1 @,ߎg#:rܞ`0hBĆ]gݒJ1jBRhҺ ?aMCxbcz|BI(õi2, ,UC|o-ZX\aǗG#!1A"ie@Д  7b4(Fۉ87Ӹ_A)ISNlBA=kF W薓<(F XqaG16A| <|^GY,!,qe2窅3J It(CWqʬ,ci12͹57BF,|D:NMtg?=dv:V'ܗ3|yfwhtzKJ@ qj{7wMgCaޝ9ڠѷ? MsW?c[x8Y9kq+Li5~4iU _1aoČgl[AΈU<3l,dFjJ9Ntu {оyJ>Ow'3،Tc?f7C@Ptk;{n`Js!C&s'Rsl.+X2hLs}bX5ͧIRljcTps3qOL5 M|4Ox=wwÙ~*Ov?'Ponn|}1eg?1Y fR+4 C؞5X" &h\j*3$?ʠh0" bt`RT x-誡ʅ $ ;-C! {^Xcu 'L"쮺; L w]PxID&6 ˰67F;kaMoY}7[n yttD,Ԗ[q囗/ioX?^>c 26N3A٧7|d`78*Gnw@(0 eC3Xs6[!B;88 F#B'WEz dAn@;ThXŁ f-˛1g`6Ë+~D˒})YI~)2a[Իta~ 7a[wVzakin!^T4!U:olns3wfhDLh'M"F7`j]z}`K['0&9r9ʾe @GاdJw2C~˭{{>}l,M!SF{i"OGB~錱uK+Gq1YܖD&2 [Ǿ\0߆$yt=/iٔjH)2b3 ~e5tj& Tp;hGR n!aMqȦDA W`l0̛ pq>F' b@5:beӯ;?tDAs{f&9$ol22VASaSFpI",}eA Bq[o#c MaU =giJ=R7!nWB?jӠ_ΌR?pCYF(7 pv"mcBpxBWwW!B@KYfUas>)e˃lk76v>tȭeqy3ys1$ɑNHgjW!tyϢBJ2˪ ĜR)dp"c9"nr*;uАwn}*NFM$F\KFI)oXӦTMeXT> B:$k1gNhR3]ԷE;KRgt~P.LVq懶ܿyb:wp@Zd 则("7L4ufIhoiiR/DiCuT7E֌boF@xfzHK^H/0̽ȉLBH+fC˝f2wHMa^G$hʯB6wb-c$m:k͟<_m7U+Ȍ*l9P`v.ܑs{$yGɔ;Fcl){}GnqֆO|Q 04#`&՜ NL9 T,vM'A6\κ5F!h} TE!62%SI+L ~P}ŧ$3,O)77CqE +WЙT>D /SvAv`&;СӞH*Q%IyQіhJ M0C8Ԇ*0kۦӛomm :ړq~#E SBdD@1x|Ѱ3 3Šd fWGleeTZ쉸t>y3^ CM:M.}5*/+7˄5 ΤI[LUnb0 ;vSgV -4e:z P (jzW! A|)i/Hf LY-5H@{7x،6hb1AV. ɧ3Iv>ǫڧ W=u; ̯N.[h7}qq@^bf]],z@h:DB̉)̦}!4.>5ټl i=W5&"65hHWtY72}f))5mS%꿣LdDD`Cj꿚_f*hr"lD8 _{+I !,IAO^c;c3?oKI,K™.t:(ܼ,;/co;3ICqr=3ff[]&UFX͙6HF0go ) K }߹yƪ7;0aC|(%8GL]wB;NVY?!A[&SW}ZY'|-9x^cg!W"Y 2.4N(% Z-Pχ  ek1J4ԺZ4:>(]uʃjZL-}\@ 9N}_`m#A@sBręBH4ݴ(ooa)az M o+1*#cI2A}xI8so%%ѯlx x cZQ04@W0Hɝ.vΈk <l\X zZ:X/bB tq^C"1h@E=@>xкI{v-%|tr,+>b1;Jp 3? j\pŕ!"ڙJxW+V@Cof.ʉV*uYL:f\vSWF,܊!i̹?g!+819cކ`+CXh R+DDɨthp$V1зe4Aq,PFy -x3%$>#;laiS /r{ })Z283RGS&hΰ& !|M_PE7]2|dR4nbDJ8bPӤ4.@k <.o!fvO{ IDATܜ#󋊳<qOi)TFFvǺ)kj DjBCkj+ QJ{Q~T ou13(ss%{O&:>,\ V!WDn!BvuQKжAF'"$DzMaMx;,a WsWBCX`El&K4 եLYиUR%Ʋ\6-LG%` 9t=SOgh/4i3ӝbuDFg2i/;赂P@y%w"I vc;> c5dݼ5 ni5 8Lc2bf,U]侾jOm/L$R2"u9se'"V1O68["00D#S T:cUzofwJu<&Fs`f2.m]%b7f3 hMQ:9y):F/n30ClNWAwg;wѾE9%܇erm=#g_3gzkX<%BOvZ kf#ffăז_2;] 1GR)rrZrͣ6on>J_՛:rCK> J2NA܅XbA@0F}1UO~@9bA'K7ܠ|0FȊ:1d.e.E XoP/'(m*Aa0F NU˃]j CuwnvKc&f& i! p+[Яv23&4 C<,`/- iB'JE_A?0 =K̚1-B15z?Pz~ bDЖBoRAYpEHOhFqOUl.:Yj"pĐEp=j gwŷetݤE`1OY_gAa#BgKP &dy! A=XއY1&SfpVB:,3%8,KM~!3ڜ/]D4hGگ4MJ=o x,'fj'<2_g{?$AkF_|b=BCS܌P"ZbЃZG3'.l XߙLN< z {飛9}Lx7{:@+aM2sfP "v,bsP>K̮ wjmrәÖ5ۖ21}UBdrP=CAZϲvJ_w߿/3a}T%B0ˮ}%`!0P91X[\T}of0$JH\Fɝ[e~`B܍Z:XR$Od ȇW.uXEt]'jbI[*0LV"y;@*e Q5>1VBP鯍K8*De"huwإtT@=e t`*{pBzoj0^&Q>ڨK2q /:C#>F%PQbvz-'+Ҩy*AuXqF³ pHOzg, Md7ܧti۽:\syQ 4fF05̉Tˤn\ruCXϙI?O?_^fR?i_baEl0 /v%+ hDG—~ _!K-*-цFk.1̟֡ɂ;k_3a91?̎Q^X#S {!MܙưbЌьxzw4Wύ/=a}6< ON}8+) 뗭v[B2ąh>jaNxه\IC8 U!8 nCfO2UCc14KdV @_^^^ GUaR+ Y,|>vgAA´$jKd앖;)Yaʫ'dF$?o00N"::OP6T+U_Vv6 BTƇAIlG9)Leh]ϒ*H$d0W#2ih| hjH=+jɤq"=-#N(MSٌHӠlLlA5'f:I+lq|F^CYb0zߌS(/H{ DzܤOʛ n/$"!,2J8XeR#q M`9oGj&>@`nQ|^?tYۉD|--v1r7r w\9:j[FǪ.{.# n(C)JqnUhWvU-Ob,3_2^"EdfFZ>D6Q| c@@|x; BJ:s6īh̾];lV̻w7epFQ 1vR3.IEZ g|ha]?=z;ɜF@AChbC%!~&˟T۫{g{-1M]I1ABR0a C}G~Y% _ 2X;:\F+C|\ dbq?/] J!H84)aax3,( [u9j7?Yy|8+.r@o@faT v藹%t_jNL26ʘ6b u1x4 1>LZxRWozi~*ٻ_"ȴtc<*ᢁ{ĻfFgPٗ7sBO<=y hk8 ,273[2!DmYBiw6s|:f>rY"} V%:ghpc'M2# <TnѼ9/ dwY<\TTr1GdF#Sd"O0ҳVˤ!r>*ICC+m,na,$~^pJZFe2B+OdDsc"ZmbAeԂ*r*|8VDz ͝}|YY90 %1Z$h (2&t-O;h_t.^Zwu5O8\M0sT* ^&:2wV`^WYfwb>0`nv {$=+4{o:„FVN!`X-rS0 Z>^&H24,˭FX6"Zs Ycb_ J1։T cjNO|˗_|pb)ℬg_~&nm5hxn #Ɓ$7xQ?fsQ'c0pNg- c{D]6x%%2c,Zg$Ƹz3 OϬf<-ᔀft<ilEW=&4+=.Mb4N ¥ [m2L9]|v%?P$bЇ.Q0$d~dg̶7簘.̎0n)t(BrDo! /ٛ%\k \.]RFC|aU. .Wj([5hwEA: Z3T5FTG ': KE!@`lEdQ_LSv%!Y˅1p@sYy~hukEж^rKV;: _^BmJvgSFoᎠYyf Hü7-mpaXsS6v09Pzrǿva_GKtܛn =8X=h,X ߄97Tc\㌧@^r6̱ԺSj`-)j2Ob2f3nn޿! V,wc4ds;SΘ7BSlmVVeM$a1G(fJ fI"7$4Ɋzey*lAE1ܗV2̀!*3evV.BdoqK"@ - Jhaxi.=nPFvihl%R5htwv%đQ*E…~Q"L1P9@ǽFV A}sfH4_WW#\!azvcZ)G3X9 <-/O0 m! a$1IRz@FKր _};L=4CY3`Wp_@d@f:%An e>ȹc3n'L{d a2ӳ0ڡ3ȋw~<|Ώ!ܳ]rf88H3 m~Hxr'<ԏ0= 3x|O,b/chtJď3eV̄%\yT?pe]qf3nf2l02052;wysA(n /hD\ c>|Vӏ>&_ X;1OyKl/?taF#kQiL2\TJڐoy{IWpgQwcA٢tgTj÷' г<.C{ui8FQ/=N*!b0)vR]iTA ;qQ\. i(*MC 2d9Y ! ,†y,Kh^r Ih\(ip. -nUVG65DepvP- 6a֎x%_I͈؟g>3UMdQ4'бŊz@%Lc'?Sn@n (W>|?-IbOМ"nyZbDy2h<V~dᙨ(- 8M[eN̍.-<ѳ#89=yԃ^ D֜O9ἲ=nݟ;'s\b<>YrkϿUs7삀ǹ:ffYp{q~;fٱ+#;F#h*f8f6dvh΀ 2( rEr-\9*X'F%DRٌ,@2FhnG!3+0L썶X!`wE\ n|PBUi IDAT+'5Xf+/Jݾ^!_hAlz8 ~>A31Hx6,%XrNv19@*q*J bX*]-S4'0s"H /D^Rh$HS%Wh%(3Ol601*KҜPrfǩE$wPHۑmyB f&/_2^;)tMZJ+hAT輠Tj_Ah0jPDFmu-8hΰ+vf%+b|N' b1:);CﵱK8fw˾HS/S4pاI mA:`Fs220`U+{XSNd`x72vU5*j4=?HRxشG6YB&8#}3~@qFH?w3ϙeJ0 9Xwޓ$qarSu}3ӹ\AV%nVCZh90<ƨb#3lcykUu`T-a;uǴn̎gφ2cY7?Sv&+0{3R3 \2Òlj'`f):0O4d&Rm.4ٛ&g-;xw3̐M.6$ns$fsр>覼Yet .7oy! LAgh2JWU}$8<0o7IeUo'6z/uq!V8^65ښ,ʪ. SM{ R2CNZME+Um{+sF|<5K JZ=$qhX%40#SRX#U~ =R.\⟍Z){h ^Avj2>x2>QoWPnƙ1DP0.afQY܂~zŵir 1! ?Y@3ts4a 3&9\sr4"'`E0M4 FcBh- -/n!{J[gxzGeL* bKif^o4%S~"ַn #ڬD=+n5g[ <6ZϬ,&+;Q]2ϖ"nwR s΅f&.:{ևԜI ~i;.?Xd  m#bNֺi)xhiD }ݦMx]5бxs;qX;9; M FVWu:Kf) c f{44DAḦΔJp:i<`3Km̙b3VCo4ֺ4H1slK J M 57{v5Vsxg7KIj l6,Z߃p,w%fCu5?xHB˂G8z3&?4*EuRn%Xy*fBi 2лDmlPEQ͹EĮz]>s$GFZH]Ԃ]vw?;``pֽ.[Bl 05(FSr66oz2nS6̔ ^_1 ТĊ* 2$4Aò95, ѳ,) Dd>5* _cd.s%CsfFF`iwl INI0qf/1bE$8x'95am gjr pMa: 4FY3F9x e%~Y 55"q 4I9^:d$LB1/"q$ܳ]՗ MwPWBT&|>B6e :) vXe_G UU@)5];8X|;.T)afij;޼>fl0 (cMFd$0ֈ0YIHn>,P*mtPG0 zm%^7_cDGew|  :f^^~.Džqחaiƭ_1! W,S2ӄh 4(O{+nFq8RΓ7#*)C@*`ѻ*3mFE$phMxZZ5榨67\ow|>3Eu5!bc^p-$-BkA4E`Xsgb&-K4?<<|#2~_*Q8ިcl @仵C,:OqLuޝڬkq܃04( I"E (9svL~!e{`r˫a ^y3$S4G1Yk)c\AQxˎ60@ jLE{oac)a1G/wh4藺JP ԟ]FA-JX,qFm.Rtql 0C f_6+CF!)Z [.' <_^(8 ۅ+mPfZR᎙ !v{Ԕm!4h2H0s_/,3;=c2@k̝)\ǹG0qG_5. ]AfpbSQha%-K(CTFV/?XEe;N//>>[]$^lb&X {Vf3+JΜ{iAZ?’͎^(p+P3^,cTAIg.X6 )ll,y҈DB%"d"ano)cf 6ˈy1xk-Bicj$'d:սL}yGݞq}\_8]m #f`L@ֿXg@$`D^]ƭ/̀XGͦYa}7aO7E߈jE3-Eh"0"VG03-s`0€v1}d|#nY,Oڃbjtj%~3YC ONLlx?_#۳+tC%(]gߗo^NB[{[ _3Ҕ2xC;R߱0%ĖU<.^-!w` 쏥ha;1 Mjɺ:K6OONC1`70o_'*z2+c#$9'b?\ć%fҧ+- 6 6nlrkEJ'R= efvfA3R[ӿ&6 MOd:^sirdcnjF*s p}Af1 ƾYЌoC/ܴE[իzDcoN0]?h%@KaD2l(.~ mBA1.0cr@B| CS^S|XB=%f!÷ffw4`9xN<@ O:f6-l"-KhFskSmfn c {̅YHK`]e#`Mg/JH[0ΚFhe 3S3>Aa$`*-ua6èv2c~okR8OI\&\5Jh(Qh pfwڍL CXm%Ŧ1wSbF삖3О94)krt,٩WB_iIha3+nf~Cjq|)S9NgS)%S4-FA&RQ: |L.SPf4 kLd1ZB ? z! grХe͆/ Q)-1ݘ]q- Lp 2xm9 m/:ma]0"݅*Z}R/ ̊J v!|7Fa8r2C⣾ |ו b4m|^v̈́X Pe q@8^`&mR@ӧf:sb08E"fkl<̌ wy'gUF&SUe.ĕXOxp6~^!yC3*W_X^bo4hfpMQǀo=d;̔biſ` ۻPw(-ҥͺUFlFڿKb Bjb:b4(ޞӟsbSi'2#02 E F跟::1 J.OrdOI0B#_}"K/2#"2Mނ!VKR`Ciьt&՛یV*t!3Bhļczl-lV(]~?3g# j'&K4qFgZ]]O"'Nz؋42tViZ=Lǥ&Jhj)4jvAW4? 6#)ˆ&$MQag3RhY64u&ɡBb ~F!Bt$J†]lf\]+hY6` y-m,O f U0diZ9 U­0jЦHv,ENsP?vr 2S*{(48E-:Z1&C ?V` K+[.RBY 48nvT}L`A ^ܧY` +S9Yg^fi%r⏢1F< ]?# * l̓o7eks_m CBM]lᢐ4$ġk.X;hY/}ŬgҴHH`z eN=؟1D fUe7fɵU'}]Xç=;8Xv8cpwߑh΁+u1-ϱUy g&>{J,)7W|AAXܥ)/ tqQ[-~gppRMFC^X\4Oc/?[~ RWsJp}jyM tgi[&?\ Tx`ڂӼ!"'+c%_sEf2igΔgUOo3˝\}2cKbZfpE8_Lbgl>S44O>=@h#R8KYCmfZq IDAT\[dxl Y21 $iF>H#R E%- L ħ*]Ĭ%L?\] s/5 +vH.K׭ф2քe+(X]Ai|eNCb&=4ª{%M$' ifcfά];f>PPS͠.+r# u~22i3)kù=ڔζ\<;?9,őAvym<œڞ}q3(mAGR4{L-d8]zyj<&G)81cHCf7)\0wyB=ff'hCh4 &i=h/&|8ٵqMc=a~=({}+\rsmY.03a( ShKmg}_D8/ q}sp˒C+ו2#MrM<<(pSIdF(.e2H`cqfX$tyy8ּ8\"b5IU)[>81 1݃ f+eb+~Ew!sXq)2v2f y3ٜx_xmLLG#mП=X߻T1ًO-EN^7]qyGSۍ^;n.=,_BOy/ Be?.k&ℙ-& Qxx;7 2NRva-=Xu>Ws;Z8gp<q€p/g+32eb))n_epxdEFK~š0uq&M6 4TLʐ&yh-Rd!)d22+7nXo c!˜Qsazfv&0)Q.dAX>AfٷzdUlX`6JMO`G Lk|zq#dh~P''m+_~A7* e,GːlѳzgW#vePݷ%ЀoγvϢ3Ngtf?VΨCl=Ъɀ^f$"-<5hv Oo-z~xgv%3i3lB\33=(yNSGsgwصfC?UmD:3½LІgs>XO F%3),ݲp , s4 q.) F24 !!lC- -$*0^څrV&X1؀ཆbX85CΙ;7N<_\L9''Vlf v8yNǁJh@w4P}qYgWc{!IPz3i "虛yd- g'if *c)\OѮ`#.RI (uME`k˸+3~!{PQ/ZՄP.˓ˣq"bζ7h(W6`py  yFƢl\tЯ(Yw*13ڥq:GFi UAn| 'E5*̒, +a -ģ#v,XPV|Xk F*etʨ:$7}Q`> ؎Ck!4 r`0)X\ @tRlM)\-Xˣ {D6hI8"1S@&ˍE/K<YS@,GII~ @eLbp)>͘.^2a'x0~4q7 $`44^qzZGs4AMΦ,lbݵVkNk#h7;:<?Xo@L9n 90ȟHb ?HsJg' bt8ʴgh`lC3{4? Sp gGvV̼,؈0$3orXAd34sřZ0~%7; j- ebV=R)؆^vdLbDNSV)Z4IvZLyx=qG̢EvÇa,o8[?=M0CEuH jE#."Im/ JD ڹ{X;Mndk̅7A4-B(ҶB /bjQ\}'N Y}ߝٖP(8qfs&9U:Y夀F9]O3=(UӃc4)Tkq {4%Hn`tx~6?u Qj.?8]{~mM>FSfe wm#Dmi颩Nx1JaJj*W6@S;!=ffɌ 3Ѹ 2Ifdf/IMՇ'Ef@pL7Eb,ǨpQ&7꺪CW$~*e|>'~yN7Oc0dd}lYlB:s9#YG2:/B%)f= VA6KaʐM[SSfG02Ub7eGF:[*RAċ8\ÙP0]$6#O7{'.,7ܬu^P>+›Zywsf07>-!Gzp'үBy}Nh}w+#VtZsyn«[9,ˡH>- :֖/KIɰ83d|cdub.^j_ &5IY@Dp!  @i'}mhQFFsTƶ iT3s^h7^o~ܲYֵ YN._jNPMUPMהd\E0јnI̟,NW s f5CE+O.C)cfJtjdGi {P˃AQ-!S„1Rޏ#1;(j a1H`J!&H4p L\~,NfJ2>Q/6},q)3(PQYtOTp|XY5T~h mkVjgzrʭ@%~r@N7Wx}qy_D !V̤z~Zq]Dm¶Bw*NИ`2jb%0Fcjv:@3oM֎E&&ЪTNCMEZTH[cyKu:nzUhs=od.y,6Ja.[^zܢ#X REy;hAZtWW|5{y"D[B?\ATU׿V"%XMn7g1VFEbu;B.J GI~ Z1B }~wVZ#$r_o}ImxyC)0'&KB RzZgrsQߛgmJ7'}.K5{gƚp_ pdAf]aD*5XSf}%(qd; ~<{S4鏧 4Df3l@'D:+(}̠蓣rʴ#xQM|-8oq+YQSt 'Ǎ4s @n8R5? ~>_DEݼlo7A  43dyd g*~k ӣ5ꩦshfҳ20d Mآ30 W$T 4A|F}~q(mR%8،Βs"6]#Ȃ/ T:ӏ|qfrc+t7]&-k}W]t=sg=͆aݢ]W d%[mc}-*?.iZ/f1E V'q.xX 5l@ɅR>{xd(i[<$>vJx-0,IKȞ f?_6*gBSP[87R|H= ͘QlNd=3[4UXy6.82޸nlTi+5™-T,dC 3H8E~ה oVCš.sGk2x@=0&|B&W#5a@/|C"u08s^5mAx|\#Ә0۱gH%dT} Z>_+&F9Avڠc~W(Ų@wz_zֻD9 ZdѮx({!L>6i[i[h:VkGĺ}X"?3< >jBc@9LaԳ;QLbfA$:~Ț%]8(I@F" ]2Bb+Q]cHYqO[v>Sx-۹Q~G0tfV3M։T HSO~vJ 'VOAFik_dva_~'߲^׈yX~lm~[h!+7ȡs‚(ޥjJ ѐ[Y*i{[,pdlOY}ܺkuVdDs̾􉪕BO\vv[1*8%Z6bT1wjI^fDrT;3n1T锘eY9BF IpIn@WPޜ#*Muሱf5JaVZ= NU2W5?!p3FtdoLb %㼬e2Z1?(Vr9QphՒ#8x7imSܛ>kNӦQN>nKE2D1h/qBDѐu;@;s y FkhX7dš "RW0[OO dN-8 ߙ͛o哝'/y.3cRm IDAT`׬ƛ*n΃<ϫ}GNӣStˌ)Ru7-0iBU 'djmd1K0o<np GƖϸeRГ8OXp96sW^[qWӘ[IyW6Lp`p;tlkZ𵏨k_d!ؐ,"ls!znl_n1W1|] i@d čDR{1ڤ'At5.rآ-%ކ]!P| t+^iC<~[+n U病KD^НW.?'!mhek ޮaÆ\pwU:cPN_m Mv utD,a dfC:#/k6FfwQfug^VWA&553 Έ[mAt}g~}8Z@CbNS3M^8WM^Ӫzr_CXN(3+?f1a{1!Tfr.t܇F294T;S>>a<\cj෢ifJ[FU3,Ag6۠1(gq6rX=T㱥\c.ӛ.$8\ M%퍻&dM?hUJP#. Gl]gh32' ]Bzd=}3ΞEtOF|> "'o|>7O\6߱Z( A(n>P!ؓn!dAN2O7׆5z?D_fAlyhI 0=[1[B&ahwѴslb&W— C~.5O4Q;;x_n,">x]܆aAz4Âw  Ks|whÌ}v?]9{"Qm,׷|@\ivKuh%)3- R3CݓY: wa4CrKEGN4=fIPg€2fu rP> Y^:a.l殴| s\^m%xWc²?9kE~j}/w7hCm3\Ma/Kٖ I\}?q/R Ϸß ҝ[.$m͛Ҍ.,7:Ř;֙3i @̉L/o 0&gfUC3"`r}8iP8ΆUN~6W $gajllw3X84 !3 +mt6@@4d> 'tDil*SQ1dFۣgNH hr*/#4#>;mL -qg6z4E.^e9UC>} e| jBQt<>hsg޲ʜcLt fSB<( r{6__\\_\^js?f3zgfK\J!rB|H-'!2ss:nk-̿7)`\(0G1jgtIiF Ci2Uocy2jObAP(nC>)n.a0%ՀdP jP`-ٲep1`n9TέFc!+se~H[ݨXsEZꮨ-J6kL%z!';weod XKEؑ z mҿD, ?8ðQ/kF"vʥEDZۙw5`1̠=mGcbbΆ JQcCH2ϙOL_d$bhil;h[?ΉuABwP@ H"7!hY\ $AD U4ޤ[ OkD{?DJrewaI y-),j@1GJ"O~!zt81yKUB@L0kFa醰V|Ykצf!hzD 2u[OG+5PڮWТl>M[=y9q(P`N^kmx2 [C߻%EkQyᆻhIG34DPd$$3$0cK4Sxc( }U(Mr&eZsii5O`_Bva)3T(M/b0MA#2z豒~*Ug09CHeҟ:l$9I?!WO8UAL@uȜO/^4bohlcO" nX%N9YrIx>tĥ\Yp~^l!"UϘM8CcjNGhtmAD'}~Qӑ0seǜLlo!BY~P+™ߝ_:򪹃mLEBf{'LbXJ VW@g|}t 8~5)"/{HL1cZdI)A#KC3g6wRu^`F_oj|4V'm6zY3K11j"E{!g̊6遹iT1/2R u%|٧J9U~gd z31^z66BdTe4f1lF =]νf\D--̒Dr G0zF/DE:*'tɋϒ@\gAU>q%kxΌ̝h>S9ͶϋTY8k^ :ff0Rl&j߼N8t~  FP`'Q O.l"­Xssp5#\]B( Cp6K5Ȝ繣6Mi̵3@*!=` $nekcS@k :_l7'ܮS  '~;58ĄȄ8[;(Ri>svX:LQsbCBgԄjARkor lC,9Q z2}`./x݀3W|~߾jo۫DSo/if^DB:meHa8LgnX# ݓp5k HD(sjTo0'A}R̝ ،@ j2I,Мb!6+>1qM/s)A<&_&YX2 Q.MΓ '{RdHY[ID)6N^$4ʂ=Ļ$'58Mك_#O`:|(4 by5Y%h NB !u[ wŝ#R!ִ@ǷOf/VZl"yeEDgn%s2 )O&BAȥŭH֏Y grxFgⳚ>WdJDۚUcG3ZavAQ[-ɍ6dGJf;J+AǏ|oꦹUzJ&gaqv1QtxԜdhN6xkI&7!2Ts~ʕ2qjSg!{<24L3:oe׆e,@Bf̗&51Iq\jK ʀԠLTqAT;iDg4'RM6raXx/YW%P3{u[LlDM3a|خ{g'e㈋E@'/&}^>4jɜ$6M8"g&N7vƜAs*d}Ozl7p"brDn֡޸.K{{ˏX[*|[ÅҊC|T)|ᡰGnm,sRT0YHW=s5N_6}?$d B";gK 3ܟIegZ/Iy:b+?YhRFAS3<6s٭fxzJM)Rrf)g)GYG[XjŶyUa2PNqp?5Q|m Ћj jXB<9Fbv|liAhg/" /'颋QYVҧC٠68 N6hnϯouM|S:! I%3B  fݷ~W߾9o_Bw?A9ţQ=gvOr\9WjzP)ydfcjJlؒ<4X3 Ypy{/t^WhYt; 1@ _(j)NBb&bP`rQP/euУA  hSI}p˰'[Vb#w^ N<*͜1N?*w,nO% t2xB+/cFAe̪C!B pEl8K+bV+3ß+6PV_8^,=^dz$F5&"Fr=|51"gbiJm h~ ڕk>Ĩm)™(l_|RPx>]?dw @ٌN4Y!j[\Ξ}vٯS+*ə3M ӓ H 8_+mf j+9g3X\&I1IxK<[:ro?5fpɈX @L~YYRT`n9rDzAlpuAu&QO^&gIoQCԈjkHhaPEo -ޞH%f(#.PGK%+"}ec"KHxEpf=hoFq!̻r2~;tq+*r되[:O3 c=$ FcwX_~V}NVp-'dp5VJh J|c+0Ī+[V!X#2gc8VBguNe52^<77X4VN:IX{>~C'c^sJV-NCOB#,?%ɀ3r` {Dv3u2s 7ĚS c^&̘qKEQ=Μp*|aDhsg1!"9!ΒC{lcV85޻G"O&+YD`iԬ=UÂ%T8Ǥȼa929Z02V~C1&@Ũ#S>21my2F=y#`19.<]_]bꎐgдW- 6h '7,p3 @ff=zA̯Уf\5l|6V:mL߇;4CQZi!k6qv: 0<4[YH,jl(R&X bdF/#sZLzQ֌LB\.Q )TlF퀚S}PRKLbhJi$<ڗ1 b R&I#ҞްGr.%鿾G /,aڗ^㘆HأcW:;@Њw8x:+ ~59њYas!܂z\Z"Xpq~슸vXV>'ݺD_h͖ܺ@%u辸_IAJ2 (nnr &L~'\ZvGB99iLXߋXF,}8l8îmqo+RdEXId8CRD\ެ&O|BԖ ,B"ⱜ rOf} Ў knY~ߢ"kf]+r-R]_>\ Yi=3>ILTIu>@5;Ӭrt/hvŋO+4zE<:-"4h2sGfj>;Tb _sB2Cz+?@#X,خkEw׹swE菹*"˼o TJN#tA)RN60`u,!YtJ G!D3& $G}Չ;cU|Bo} IDATɌQIhQyA%DeP$X3ԲL ɧ'krS,>ZspB49t9oZȡm>@lB[75_xB8dg3TE]iy&Ě!D]$"X=fda= 2=2Ț7,SS[ R70VO ilBrf(DMgKdk8G Q0M@`&,&ڿxLb`XM=2W `- O'L{=åWVpXUYPH%- z3v:,_4XEgEr%knN([&VPQS 2~(_c׼ID3n)_Zg;6_5ɰQckw%c~Ep ኖKK0% YPwahwl!}Z!v,|++- [.uZBIȅm6l11r\S|V;c oڀTb45ߜ-e&d{9Z U>fM·3ÌGV9+1C#rfx<$T-;>>*p2 yu*tvvk%o߼xfԚJq7pԗ̉ ]EoL[I 44cfhVfQ cLk< Uoj|~ǿq!>~ TJ7ȬD[+( Xno}_l|_b5 YDR.B.hRjmhm ~eY_'õ<I9},-@%$s\ey42Bƹ 1 3QNE 63H KXvH3kpٸI/:тA>Me)rݣngt5O&;ś5==En~|i0N3@ woXtU 'ܻzE n;yɩi"JfLqiR1Mŵ^*/BDVHN0,"fd\.+[ V~.:k3m1SJ0L.Cϋ-WDL8"T10Lq 6`<43WKzH;;'Ŗ/?_& \tH3Ǐ}׮E5Țvc|WBn˞%\{Jŋ?R+a -gs`0+&u1= i\N'6}}lX ƣ؈ e ? 1U Ii,fE/Y7mX$CW5Gra#[o&Di 1*$βB'Ggd3c=HaAWp.XlFC [IE_0 X{F7GOYG()E2  \so[J.e{څZ$ \nZEïs%Owl;9Lk298pf*Z+jB}0p9/kf@l3ٛ6w$Bפ6'8,F?iO]'AGA yf4djEtwvOONo׫A~ ?S]hI=X %sJ|Q@x0so7W;@le2Qf8.-:K"{˶ f>\rmTĭH¤ܺsXZ=%[|~aEʣ9 F'xɈLؘ3D+#Z_ 8ٍ'c'%bQjLWȚ̤BɸL6dyɄϼc1.Ԝ39ƭ*izG֟> #UFcЛڨ?Gke" gM@ʖH2^FU4ZauOIBgx{~y>ot^Ab dibXD,d&PV) fZAjXʔH[s~̅1< Ph$:# g^t)Oor^μ& krm[f~UTb.ǨܩZˇ[s?͑!6XgQh _q#|!o5fO(&5r: ʫ茋~YSXDl)RhcN4fG@ 0$QV53֊hXC%ì)3S"Zr4B Z,K9ΉGBպ%䥵3Q&.g?am)Sg*=9HαL&AG8YfZg蚰 4Sޝԕi4SSʙ`Qz=-#@݁ @dgOOiP4 U9h-_Bw _Op`ւj`P>g/7c &\c[:vWigNU<4ay~RTiνyLs5g&Nf0'lȷBx1B7#hҌLGNi"+hM6xj z1Z^2 4'N!LɌk>_MJA?rAaC+fOVW֎?myѾ$"';ONy|=`YʼPigpa E3qZ?& >?$̠?>`Fj+Ө,=VםDŽkw]wn~ٵ'+b^Cc>b--gլ,d-ȼ5 o[O_Ì4Hb]7gi1̫xg%Q$ .{:EN3h";S%y@)K4!N&ʘu[3_Z^u_ 8̟p㕣ոeo.˔Ѝ@fx  XvS#&3G•"9%OTh0e@H4ܙ*ޜB ԁ"4b3q{:%fNKIT!ađY-sƐG e '=gܬ˨^/RE%!zdsL(F $EFH1d%&EApyҚNMw:`1&Ъ*cq _7*?&Xvˮw\' uQ/?}ײ7v-?,㲿-| N>mZl I?k"7mc2bٕ^anMF|4$,|ATfq׬ wȂ_T]{,ŚewA.JEFM,)+] ]0+~=ݹRJUVat]VCZ9R*W\?+ZW30#ndcR$VR9lf{'yzng&5=0t eJlC599ˌLꪟE[YJ71j4Oן"|^AU%8nbpč? !RW\l@-FVynL1iA`&~s" ;(\TC9pD!4'Yx>:WE|m{{EeU 5iUTQ]ǜCB:>2 23$(:y{վܹQV%]$笹zd]zvl>^&4Hci>K21|%n7ic6  UD`7V6@Sgl¶{\h'GD)ȾQL ovVOvʞ.Gg ZPk9v 3p N$lݍ=27#P֞|[1/'*n>jg 9Z-Զc 4@Kx2kܢf}}=s+zNе άSCGh6@lPb8-F4_," s܇RKB'^.ۗWO.|y%rͽ~&b)`li՛5[o]'%LT L\h2j)G4U`?IWHiF&LR(uLCB{|ϋ{3'7/IuF)%(%2tA\Bnޔ¬dS'i*T mhMy)-qU6QU+W❈dLWbLE]<'}gYMQz$\&P wJ7ӎF'*g#}azSqTbMt4)jWW O^GZ7n:SKQ``苉 |&@mgt,j7Idj$ Iod[4XG9˜`GVwA =)Ԅ1gBXӜ)ŰjкDWmt&:~^: 3G 9Qڬý 9'E"':# ݁A _嗫p7 ȝqyuyA˫{3^7NvLH6X)rbfdtm2 0R[1-v!F )1Gc2;,e =fhFi mg80/%q$%H!th"6RmLR<KK{)}D﯐R ӏ"a^p5@"o`M^e4I̺t,LHBRԪvVEa͠=ooֻ1F`D=:@;cjduBY 8TkAuBK8י:B!R(t=C0 IDATIģvԦIM8NL3 mNF}f9SN6fuUEGdc- UU6 dC2:!_-w4];Hd2&A_jQ!8kw 7'k^I^!0N/Wt 9+^3elЗɴ c^U4z,)sH3+lܜD>:A(=eR3b RΙ+:yzof&ap`u3#G@DgP'8?tr%wzP6=c @z{rQ5D襤X:KH"16 &1w"WrMD2x?mx2y1&炍4R,$t[z"Lvq`c ^o 0{&Ӆ ,S7}X  #a6܌J~?YTY(C'd pl%20A?TTj 0b p”u *В0p#EW 4:yM>LudjE̩}tr=ߨ{,G.o׻ȭc̣SUp55q&cUZH;(TLn]?-@ځRѰWq B7/h~]L}xa9^]54]Ż=4gmz%Hl%$g;E(D?OP2r;Y+w) %;RGꑝZX͌kfSd(&42ĉ^G0{5{:כS~^o Su(q%eGR{ׯzB _BY?B}c^̜|_$aX5;,MۘWf-_l 0KEyO~8Yϸ}iK*&]O^JeQٝJhόbX0ÙG۸ IlÃ75{ZMOa3/b! _9 H̯GiD yP g@娚&g57j Ce€ ^-r7 (Y}a/GphD qCh9CĘ &NF?ChIvGQ7T9<>?.D^N1:e] J3w fvAh|z23($\.\ߜ|ZBC5UB~}Ip"5IEI14iIjVwZq62ƴLEfڏ`\vu\_EBCA_oGy\bXdJVʱI=~54N [|Q8&pxI,~2o -i#hc0nZb13|D~{^tF\c0s {TfyIL'AK6{k\37<) ?Exƻ_4u9<NST: Tp6AgUiss Avma#!@'}3*IDmj#ɰ,"["r>VTFGG1?"V=@?ZpգGĚT'>8G4HZ 3Os5Dj*0sBL '8&X3L7tJbg8g>)L fwQjΓhzhB +m Lzquѷ PLUyv"{m$5e왼.>IEz|(Sby~)S 25A9:KIUNة Aщ3duQH Ԧ8#Bܰ"%<}KжB uV QKcOb7gYNTI#@d&!L\'x6c/ `g,LDp{[`+g tB c:[j{e^,'xxzdr_ i=Mf .fJbFKgyAAē|Y7v;U5bN# $̄Dة7eEZ~o˿Y@.=&"}8ڍc4aJoDif?Ч>eMdvc[lRk ajxe!@/߀10f{i nZuU 2@eΉY&"OGωd8V(?Գ?A K Q6By[KPu>_MaֳZ֚na)먓[ts')kNeo\_-3!fvœwDjMT,ї@2b=5,9,BԠD\P_I&*\{xV[hޙi&u v5feF 20s/ St8D{=\|ڟ~[a#\+>/lX Ѷ9 Ų76 " Rv2"YO>cy6)+COLC\f l&ze`ţ^j#Z{t>EC(eSF@CAV^9~>g)8Jfvdz]@%֓g2ddd4Nf[3sٿO@kKG8 t#h~b,Jي4 Ҵ$܄e0/|;B ̓{*`7Dͪ}>̜p~ ޮ嵍lO`Fh')4" `0{+fg!DwӤkET鬬) 1e~K9CSS;WΕi.7ak^anP/C 6a=/xÊ!ЅhCV2@\<'&2-vT[ET h ?f1:8B^C v3\: *`{&⌜ا42 #du::SL?sV Wu7] <۳-5{^r9Sǯ&I~_Er0YTm2c܎dHtaf.殰WLg5"UaF3Y8S6V3άp&T0Y/W2-[1{/P`PǶ-+==Ossb͏|DkނOPGk A0/ ":-OshC`1ysyQW6ڛ\(m}ϧf.9i̡('|3͈_oQfri;I7ϿY)4 FM$K` dyԸD% kgF=Ӧ -;P;sUlsG~BY.fT@'e#Q1FيipcWa#=}IhipL4SbLplh3{G{ud22Cj'd! NFGQa3racG؞Gǥ05tO.2" P㪓L9^ m aIO/ 8M_&@?x 9cXԨ-Sn!HQ9P+ Kx$=G_\D] Сbr# .PجAEw$O{櫋c/#a8{Qݿ\@\T3:ui/c$d.q96~ EBaR{3ݜtvMXE Y.U* XfDb@]oKr7o5!$/fb6)]3Mc?/d|PRLg2SsÏř|<.6):X^Ǭjq/0(OĄhԊ,KUOV*h@`3 /NT\AԤ.(r #%3k05dY;S2'м.GN_ef|bˤONXl2iɎc6x2i]~(jB.iuRAu@*CsuE+B$9 ^J!\2+dcCΒ~B>'{t502%g!Ga3qY٥lU.Hs\#ZeT!xMǫ> ! |!':??Д9{2WW[Oί>ߋ-tsM$%Γa~X ։|8_H&3'J;<葱zIv*` KK⢥3ʪFq3hi1?&8AXv ./$9d4T@N &K 2r%(ǚ4c~b1t80s |Zj6[-.Y4!:d(P IM6CA$SƆ/)  ~A{&y wX#{=le.J`3xЃ?O'`һ*dN'~FUu :eRc']jĺִܗN6} ξa 33sbe,ɞLT~5ÑqQy#۴d "{x=E+SD䓕 8 9E(&>-D+۴J~v ڋsd3 6ڷUĖX&ʃː^i ^F/h6Qv/^Ҟ8 ujtIM|xr51]ʀ P}]~f~FK,6bƖ3t֎t˚U(=ZfH+3Dʜtsj5bIj=@cƑT 5Wk@Kfvjl&+.2iKep4ևŌś^Ud4@y(a7! qKo&2hZ,( hHSVq!Yc&);Ƃ1% M o%D8poD0{ސGH$\2% 2ojo 2~PE(={^u3^0>** +lBܱΒ'L<4֦]c4{q5if4fj#ݒo Rguad0iQp<e"3Yt}{=/z6#7f,\qFܺ!8"jVLg"U:3cؼK4oہѽ~Xƅ쩤3lcݛn7A^ڟ B9j k+YY8yY8X~OxYy_BS~n%_hَpizw}T.owhPXꦰFuB(B-2gO8 %WZ@,tYdMpBfqdlchX{X07!( Y̏dYaڔ뗌&<ؒ/5`<#,zDoL>=!%BrX0 sl*CBOOr IDATn>d$@8\7Oud/` CH^{\UR^㫫=+;#J="݂yܕsJ0 ͤ~.sBllCή2oXzAGnrߜqeR_Yq33"jḠ8$J+J↬:j8G,SE鸄rUPh<)g‰K$ⳄS4YKd+|=CP E.I'w"PUv m׈x`I[w#d [\Df{x2ڙ..ͺrY& j~@3wA@QBYf!S2ZgO*6[-(q0=RҌ7ЙFAs+g2{\S' e^&IIA-aA0~ YL^ki@M+lҖ, s8/l¨}nѰ<ʰ,Bd1 h#&2#%#gĦшHPi86}šCE8$8k)=ޤ{!?L*|79VVX`%̱k UROSC,3f=␃!]گY(@VlU̼:'yLHgίO.hynn಄ϫ鷗?8Xߔᔹ\/EmMJ,ڢg2.#0)uW1Pe=Io {YŚLfdinb|D6ڊ~e4nn-:8PF/0M̵Oa5MټUҜp>@z3߇z~<`Ng[=0A4ПMzU=e˽a45ւg%;j–s Y^F4A 2>#66!9vs˜@\7:F¢q1c>rܺ0_-vףC sWg?<٘tλv_mn.7!A P>g 34P| x@֓t<cjr$`O؂V/F6! \-%)fv?=w|W{26>ZnW7ۗ׽[/h 0[8~qL̬4U frjfg3 Ĕl33ȑCٳӏxʯ8y$TXo9jOLÑ49ϳd sD șNkchP96({@ eY.^@⠼@ sjgT!]ݨ 3%]#%Yy겿$Y!,h{/t\(ap %fk^ϔeo,[2?]O; [GGI:>2Ims!Izhn_  dj߈Ef9l%7}22ZO4Tsqf15{lL<٬PaYP(x~$O/o]j|*G86M6b 9dT 22VL^ iQ~KOt[1&l.a#4 sg&Ϡ5W3wT)(WqZ7!$lV82i1X`dD AHjDglE#\*`r@m Q !jZ$?3f38|ŌKϔ )P>(a`9ъcoVJI `N)`ȧ@Ě$lRв)-)*' z`'%@`Q yX@ϴ!/tAٲ%1 Qat$]!$$z~&2+pN.Ool@i6=lngQټ͏ݏM(};=ߗW˫hI $Ox%CINX ,l٦|جЩK P@.oN1l1d(q%Dָ-ʰjol%ًv?穎c$#`uHغn3H0qFiw69:YrI_y^;=|ɿyQymdiՊ ͧ.0ѥ91]qf"P܏Y`ʪq}3mlq׀,5gdښTo ,#@hNՋP*RLb:TuX %2`l`Ҩa5dt1VXc>F7eScX3y T%2O 9Gn9rL?G#xǸLl3s64ͨbe$L5s/Cm[TJqb ǩm6d@o6w8sVDJoF : sd PFB _C l@*`"`7( .A* r[Xsr؂$sPf6o=BޤĴ7l /]9 rV$aN!]tBDV pkHpԃt͗%)۝Fـxq{2̻dلen}j,7Uoqd'sHp ld#C*(px}!Q P>GXSh?$/kn~/N!Wr1͆G5>?Cŵ9|lfn&c%߾b X٥ D?wHw1xpϒ e;Pd 6=}kwz=3oP9'0ZT"e>~Fa2\|vٵ%2+R3Efdpx64m5m&\y0oXR30+3fqf!f(iX2P &!xv! xd†H=hA;?f!`DJ e%ǝ(a^Ďt8N[&$@.17-̣I飩7G(ƌGXS* Bf([ĒDNc,x3θ1h$u šd﮻ݏV#u' {;򪿹Ua? D$b-.{Z0@eb#;v(1!g0FG?3NIL h3,}fRzÐ1b8H8WB[/xϑ>2<"Blu6EsXXB9v3+d8.Ph9Vm]Q+*lVTe^pp&`6c#L猽d!`2'uu | +8s4IoΙ Hs8Q.֌f g^NwhϚͽ.TrnsyVC8\-Pt @Ǽ"ۖ-81_qB8G& _ddtHvJD ! 3Ԉg#@P9YxBMD:jĀh.C*ڽݴQf 2=Py_BEI#r^}r\81 Xx(=6dwvTZژRzٌH4SU0t7?{zO^ UVyԏ0/<(\Y"o"0nrLo%7c?Wv\ag nFJМ@ gprL8]3|j)" FB=X͗*)qA>˨9J# LKЏ @LE9I׌9mz4${=pFX'% I@ an:~~CW*!3PP=:) hC(l=$-PuګQutob0sY#N\7>5޽KRn764gI2$?,{ 8srt2ƄC4WdC he JaF IG1!H Yqcp$N,\Xf$;`CƘ nXDmN+FօsT[1-@L0-9ʞ2 qwi|#钜n__AV;2lc|Gǯ.k?–i@X'H:;̜A3UAw3Ib 1Y$2ywP 'I Q20;C:NpF3"X<UaMRD: dFC?У@l #m `;k lv E͂ < nZI2#:Φӟ Y =[f fyk12CHOǖe?dA GOo+P%T,9iv9lf4.B3pVSђRx5X7a**d |"tjVpL?y;nn*@OzUHTٖg}b^` [,H堰coA-@WPm^af륪tۗPiA9\.ՈAf]/ 47 \7C.*S8DnN1GA`Hk2|@/'ROSiZ|&ͺdh(dI5qx d0ƲY!]@WFĸĜaoIahԓ%<\IQs`^aߴ!Y 14ƣah(&776$|E 8tG :QO)EWjtZ}8V$Opl6^+m:$tր<޽.f^tt~4Nw}^™Ny3 ?<+Te9(KtW1;<Hbs!Țv@$rFeƣgf{/jlUvAOPbTYq$0E *Š2yac[&Xs< i78Y!ڎm|>n \Jȭvbz|N PuG]Z,f٦%6mаgqVYH1Б goZtȏ;Hޮ~惤'Qh-`COpf)c5/Z%O.i8opo Yk& >GŖ+X մQ'Ā @%UX5ČnRc72{Q~e`=@Ww`I%T1H )̪ 5E ڭDŌAy'kIN^fΧ2;9%9:jNmI?ޔFIT'_gpC+OΜ`c/D:ufd9+cGhrJs\h  Fxv eN=(TY2m;v{d\*fla:9,93P8$d"|'xp7D4\Y;y>'l̶W>w[nKx(1' !9I!p2MJ٢AP"4_?+ڱf1όgg,>y5L0%Àp0fJf~ԁ9  =R`"dA 3PfD8 2Vac̗Y]p5̂Ce[N,P[ d1:L%BTcqwj& A$_8uޔ1dv|0EM IDATX\5P 87 h|ݧ,}]|X??AYkG tQpd1%&.&fjD*JzVFQvߚRwwFEΨLLRmmWUL'܎ EˆAu֣]7:ƧS+Ok o%5 Jh,qqD#%+ z.ϐZ ,1JGƠ3!Sj&$̌I~fB 33'w%ec4ӐA%PJaT Nf3,[ӞAa.j1}~-1vVP(m[A ӫ6Dw02'U Z.}%Y%0 4gSӤ&Mom30s|`f ֟BJ_BP;rkߴxan[SQI27#\5p: 6aR\ l%_<Ev8fiNk9PffASEB=²Xl\j|0f С4`+׀\ΈAFAO6|d?RB% 3A)xj>_7{{PraHN֜ cehZ VQf:%cwltP_vـS+ r*@^@ &dQ8Yen95I(Fepǘn. >mFMd$DqW.z;1"ў~d*)uwͩ0aD5REVxL0̬2pG yR$vLknW,[:-g6 ( ̠DTrFgeTO^uwsl$Ty /3|J6@ T9RPy?ͥHc˹4 ̀|vA4cJsY\eIq I<+@G6Nl#IYnJr- TPf)1Mۂjön?BDT(Gadg0c5i8If TZ?O/b~ӏ6k@O;gfI9kzA-XCH@˓yMe|᳌Xї Am= =rGvjVی18NٞyX7WxFa+$ g2ͺCKv*42Gc ޙRDw$ϣ˯)?| #vjTؕhf䆃$8$u`!4h65F4S a5#=ޤK'if+C}r&8-:>c^7I0H @g:%2ǀv 4V%­;pv_>O(ѬwwgGI9jW 378iI)>yU]*fބMeҥ/AR=.izB\, 6FmD%E{,9~P;Ô4qؾ /=wL! 1,Pi0%ˆ:)c(P3N'U[X#V4b8lˉ<}1nq~Nm 4/Иnfpj =p(!|#p524y?}'Yg΀!]B3(rCK>YC837MCYh -3O%Fc ,QEePAF cD0n(u&GKMjf$q%Hq foԚt=@ڐ68Ys{(̵(3sjV5Ŝi)!ˠ.,\5(8?lΦl]OOv~g(,<3l65[%ӨfHk{GI#Q٨&OǔM- J8x34*FLc.H/H|ljm&?; "zn5jf(,;ױavVQNL!3oc 9Yߚ 4<0lrᙣur}k𻙪<9NFGo{₿M:7;cUafT3"͠#c K޿NC4PY_n%$ux"o g?4OH!1=$@ɭ>*(7 ׀blm %a /`)2 z&DVqrS)Sjg/I*Ю?x91[ɪC=es PCd펺]pnMnWjc=50pc:pp~(1iu՝>|8?'QSe.>և?%9;5u `.e6 Kq,fU{)9Je(ar?}%(Mݥ5ʹ`8iFyȢ芘ê!2Fu]Q3 V9/tGOߘoNd- Έ=E'O{'l) _xȏ A~{e-Ȧ- o0wdζ#w[2 .egg\@uFnQ<"i< &/Gڕ5(V * <`ͷif8cf @o%ِ#1Tq^R͆|`H'1أk<Uk<#о1e\^.#m@x3g1( {I $:?x m +ǧ 2^= W]4M&HS`K(d;qIww5h nݧ_~ӏ~HcaVrj+4Mr<)=:ԑQ J3`Ns4XuVfxBf+>`خbKuݧ jΧ8lz]<֙IQD6nr+㫞. + 7Si-^[Ś-,rC-:Yj^[}4җa.<#5&S 4@ix"ک$Qƿ}Qc&Ⱦ w1|P2iPs9R9$dz>GE1 jʍC6KKI^"5-,LʼnfX| N#4! styĚ^3s3XЗ^jPnssQ7ռ$ɌFEdv>!d^.|)fLY6 #byWp BoN_\me0 3'6.g@:44\1S,LCCrK,ƃT<-Mƒ{@&>/f9ܰb$gp6dmH21KMȣI%|e{˫U0̃g̀3Q&IW-(R I_6@F m)yY ^~I0/?ΏgwpN ڃ+4{/S?1-AI$yrMu`|vi}G[ d `NX@< T_fhIC>Dx(bY_ݾ6? @L33\d$c8f'Wo={y_f8DlDEd;ۏʖC֠۩yleOܾ ^*=yI&XՂh^Vsd,J Ф4f ΍ #+O y/qï_Y3D3s׭e񛵦nŷ ̶cE)"+fչVRy!,}<@;vKvP>TۨH*;!7ͭ\-I(F&c\Ι1EFޕk݊}ٜtts`Jl5h44BKl%{ fn{RS2NJ˒3. ,a6t%d`S"gҗd{7|yo"ˀ<ق$7!l/4JjrIvџ۝3sBN#kҎi듵4Fyzişlg4w>\f;G#2ANz7K*(~CIFjZ;ʈ(O(*3Hse05 @R%J8sev-OJ6Y#-tJ(ഈ` 1pȟRm1zۯޣ1b3 *M95qh%/g7,s-f8S͞t9XBrF9G )3,$0-h6/lE(YyěO|yfxWgUaF[jÏ-;{wV a oΌ1 drFŔ4%\ Hhm6V.AA)&6@3z l9 5 A9fpd3IrV& ́",ٜ!L{J 7 m@7 3:aVͫF8E x2O!1ؼIOh]_@Iˏ;gi>%Qh6{w}PfՅ̲IRTLXȱoNf`$UƢ_XKCH-nTv ZDS`GB.ı TA5Nb/ڸk*00gB+ A^Z3>|^(gI(,'aYT S?0zUslRQگeh%"Px#̠lΙ2BKglh*`s>Xg06s@CUH;@]-&A>9=Mb˘񄋇3sf/bx7GClajH74' : "@Vʱ2FH d,%TLx5uƕbɍ V6{.YL:j]א?(51D2Xat HyQQkp)Iuy"&#ɧ/) pPѤ x|,8V6T^4Q[,«^ͅߝMeKZ3*LpCM-A!I.h可~mXrJNklb`$8\;+*}\{~l8h?*f" evwwNejf lndfO9D{6<gQ!ƈ2ҜPr4@3;g| 3_>rN ,,ylI6 Iz8'LJ;uPUA fBB$kcH 3: CʀE!&lW]r@PBg*t`ILZv0L'~{~~/w|T0 IDAT;ڃhabZIFgSF ݸhFC:ߴ,t&P9IWI S`HDC꟩Y 1Y>{e};e@]8Ho|fZE,N 1߱v٦k LS?m2q(vWDXgs혯|5jXoCށM#TIza#f4)@kpBR bW"9Hѽ}}aAd,ǿji{lgz>'!y Ѱ 0j$[@|?<0hfəK2Pbg9،F ( !,#pJnI# p5ԋ3Zu&#r +tMP<$QD%Y gVn(\Nkz1f &Ow;;ٻY~}ՅJfe1`#Y+Й̡ĤJVǘq4"Y  0!JMm*?ʀUg#oa#.w){x3/GIKAo7onDrfQxeVUA ֹo,[[O4[=CUl ] ޵d[^py3L"{w\d Œg~G{ kW3"<Ԉ i)A0o_ҿ%{/i r`9&ٰ f)FtiXmsCni e~HV@ mJXpḿ1%EP.LΠT=Z &Pm6l/()v+/v7a A1~>ڹAmz}va1;ߙΧG룿 Hh7W =\sA3Ǩ30,3ʩa#Wr!Z 3z2ct혆;|RifdEp)nHf\ԌegyؠR%I (o9974_N>FvFL0/ly+:3@f(#r?gh(bA ,&*@X6%^_"1%} 83D+M8Y!J;MFrÌ31K.Gq`$v)KhF?= K )O2 Jfk*kv_4aL}^J a~ =hksּFGU=>ڠGyC\rlf׫ƭ6fġ#m)#zBȢBnb8,g]ASMYᅍjZuJ~\ŏl_PQkmO!(ls$>Ӓ?j/ܧ:|̓| j\5`KDO^2C[EQ\Fr4ѳ8w֟=ٺ ^%T~nѨV*] Tlg8E33K!@$]ҤΜ^g٘]:p5{H~,E]FgЫ;|8!1jscNB6e8Qd*Dcxâ l JJƂoB6[DqE;h `cbAQfrֹIK5e̒ wWkP롨A;fYcRSiK0(vO[׳5.|Js( 4i'XWD!\m@"3ɡ}@}'x CltYQCa0jTifd R t0\kg魓#<óÌKc(`+uxh,T.3Av Ť,#wlo<5 [='2w< *n5~c0äzO`%/TR)]T!dZ53wV,kЂ:njky1;;c[OmB Vo&I#fP?fc>cM?4yIW%;9tPWI9 D+4/za=ۆŚ׆0 aK*6b<6h0^ZYQ@Wd,t52nm3.IiuZ.g&Z&ii6gЗ?\\}|͚;tD.tV 7@ ,P](HgZyP)n;aAB6•3Զp(#Px2X pf]XyU)*kOqIB1 y`'s%( MY1 'yt'<="8Bb1*hrQDWYvƅGWh\cXm6@Z*2MMlxA#\\< ]YhʜρҩvI6C-l#B{ԖAꙷ14ψ31e@$P1_bH0oЋdJ|fa3c?z@KPZɪ{#(%Z2U۠7Zp 124ϔd̗fo6;LL}VC J-)K3A0$ә̽J!T%A3n<"ԗ!rY1-kh4&3DVFc3//er##·OQz($h@S ѓ8G/eH|T(_O?IN%ߝd<Wiו\wl ayEc̛5hTg3#~ Q*p-Mhl)4%eҿ)(g._ U6K e gk?b'Z5UfpIk0. %K|Mw!&@-B O$G` <%fv@3` 11Gfmg풲0Fҭa> fTs0>픧S6)8%&};F9X4:~nw;8a>BLb6=:jfݏדWzuuf./_^QaUM,x 9a@AYVxNpTk(,d"@`TIqII̽2aŐrZ!`){0}Y8Gfjb|6L]w(y eTT~^D<00N7ln"M+ C V0EvB7Jv_+0 mq& xtnV(LTْS&P~Q#zF ;rdTO3= Hg(uLi. g Ͱlj49 NC>g*3u+[ϨP+IDAXl0%$leacN7\ Q@%g uidihI0IWxdúd9t/1DBq?]MfM^fWc\ffy>Ϛ3gZS$dXCLS5K Alfj51A6e'?L_k%O=i\9:&9j6n:1&V+'Ep[\BdVP& s&ra!.uOM>7vkҳGvtfw"8=`ǝ?oRX7lle7[y*čFQW{fL+@nVH"UQ> vO?uv`+۲: U $wL AR$c2Safi4b[!sqdIΩI)fȥ҉mDS<䘒scL3nO8Y' dXTrq >~Fe[BYf(vT$xASvx0fzGȘ ̴V#o3-^R*j-Ē~(gnHÑ!CC=w"s_M` 0^q {dtёH/܌9A,w!:;*}#l?%0Am~)R?kV1i%T3\Ƒ2|i*\MG5G{n= GVk+k k˗p>Gt8={ ق@@!0 1g\RygʛyE(c.cL j33S@r$TfL*3ƥm,*?HN!Yav'24ӡtd ,5,l? w볝'.sPtKwsw9WcT:3<}zν^a56?+` J~Adg४|h0۷C3A9Vyِon.o%Lo M4 I ֚>y5rtj^>ly2 h9M$vlCI0g_fSPuPa3R.卪*D' LI&G Asr@6eյJϑY%ǘKfX=# 5 ;CRϊc^&:d͗L$ B%`ǸG f'5^n 2*m=*ƂF!f_lJg1$Ь5G7OGV;umTiy??gzvPߋ졞_#;ptT)acfh3 5;f`#zܽOè -81~QYӘ(NwF.gTK S[33 e`΂iGgp (\28dL\epf\, ^ i{ܠ`/Ě('U+9ԳKy5$Ҁݿ :v 4Aa3^gw/ώ\c̴jA)Sp: Kdg Wy=\X<=M9Ie3J^#R?etq gRRD1^I_-H1⨛nܒnT桌IVqwlZ[A J1B+Ek2U9CNʈq`EF/y~4#:$l" +{_yO-( pOxvQ;}ifs^f32u>HS1|od>G`P9,c8:3!NVIq8A&;{`5<#yhrأC0РlR$;#:D9hЏb6яyhJJ9,eBe21:-1PC Jgfu:T:mphDtWղL;I2QZ4$ӺNg@g902z_z8 euwmCU6(zؕ .jIn_ ߾TN)c1yz2sl"S1Nw924] LYXM&SGOEx )fU6QA9'dʹ5&w2/T+4%O5*B嬐(mE1k>F'h=^ hduR;6fޅR-Bc0 5 ըLnةp&É<)7Hk9&7{>>D6\`scr!3&.{jB.60NʤerFMJ TN3I9 PLc,#ni&% 9\cPN&(Μnrit Dgrh&Qz 2y3X@ggg NͿv_MZVI 3[`y3cԟ?;7T'f<xJ:g G8fc7zpsTlj4cM)gw 8XdAZ[|.9Xa`lV]ڙ3AFaDDzCe .v>@eH*gߡCgICgs Kf G*p&&af5>B^aFrP3)YRA4C <Ϡ6!l ;r@v@QU,7 SpfY 9fxx&3F>lLiN_ #Cpfd٧$|?O[/ϡjuM̤=llG"֘a>3ۊF1ǤO梧Xz ͐ܳV#Hx7i7>y9`9SyOnuҔÊ/\yww/_^}\E(<)iz6b?4&trx-T~~? f wzO㮀u-9׋cj3  a3r;#dδ O1$xa|&8Re2!;8@grg0l>P11K1\$̐+j pthQ[`^blzXJh@&?$PFc@ ,51?Fs@вB٦) %@$ Ͳn}Y6fnw% 8mOZ3Ǽ9/~=1k 1{rvB3VK80֠i\|`Ym.i&zư+%/L?.@6 p:3ԠhrPj <ܴoXwJ6ῇV.yQ.o{ 4L`, +|&~vCEBtzm&qIk7%'3gc]a3'Z3~:7ZO`62<2#.OlښMr\,) gPq55:*1Mc8iR 6.ek. Rl9; :H,*5dy54RWevM9mm2xsqJCcgG`MuNQnӚά/AK}ƐPQd!-+8S;Q̭! H35{zMd$tSHFIRfkrHWN ᨢ! =*<;=O.ZA%RTdZEdzuM dˋTjӌLeQH3I!)aE}v%BC5bQa?UZtOh!g-FJ~f\iJsI (CΠ\@g8_PھP>jeNONh 1gYQ%u%h0i oȽ, 6 @dįǽUA`/ѱ^vև0߃z|v^03tּܝtW< /(igƏxklɄb:Tzs `@5x%QtbW˫ۗ/{7DӲsڀ v(~=h٧$^/0<3Qwzy՝G{:1`@Kvg&afS,[bxb_6ubqlDE"9ٵrQ"s(F;+G/1t#o-D:pqo5{fꋳ /xҌjNg.f2LZZ=٬cH*dzH^ &z3030MB I-EjΗTc5)AYl$n`0 .T& ZjXYPIcI6)T6`[H1pi6XE{!]e”"O'n$jNLp7̪DH јw?윧هËãtgv8S3M&{2̀V3Kt&1`dǜK9(ȩB53EdPGc"n"y`axR,_ͨgPRaS%ZPQ2}P$ȓxq'xp'A13]>r-Ci?hp7\Z6?CQ,⽻ы8*=AU9c;k2Om!+do^@%mm[5p⶘I3x#Cc6=ފ(S$=mxB&9x'޿Hv&iJe E $OLH)i(Wlbb@jS0&()[5ܚvbH` r6I0464&` 7vӯX.n}.!,@IIt~)!Nhve)mͦ2/d3ty5:=xPуbjZǒi@|4OL5f#SxcG'( gGvqy h #<^\`KdP\AIBAAτu$A˹6YJ Zi ]XG(_$t^_HWb 3 6~flI{=n|mK3S2X۸\uK>ŰyP۱*-e@;PhKlHR NDIP gR>3QBx^CPaBybtEa XAl42"r(_fZ(TOw`p6au2zf1F ;FaKAΥ5kx;e‚ll小5='RƆK d2 "d J1Q,e^/o! s WIYoS{:;e,oej^_Khjnb 3(3?5(pUmM&+,aStCtfF#@6x>GZu]"|Ý,2j42GQh 3\g,Jf)@MÌ87%S!܁ȹ}z ^XWF)l*Y+?bdr{ss\|nϜsfq̦\\6֍F)2FJ!o1x׾|{كL/h +NF1WwZ[w!*s{yFߤ*v1_.3ҙb1A)FdF9(Yma6p7amuZw`iv~8>]5#hhz)4Iv'U{Jl2L>]I!$?i^Vm6(|\9BJ te3yLՌkKbb"}T53qRh'=xI+wԁtݟ;P{HL`j..cY[Pg oX.;qܝ#լaPivP*lWgҌ!%%pb#vjD]-xkWne0p;t\x)9bP,'zw͕)*_/ c+wԳ瘘^LWM:p]03#Uc7FݸcJnhב knStW/ q45ǘ 4'p¹hDqͥ 秡+֠ 3IJ=_ I!!%Z;doц0?P0ĥ&& s& v:Yy" Zb; e3 #5k&ifֽZx3C=$p-z O=yr63.'"h m:ΗP+X)2} xSce$dH5ryQ}hn%O r4 KƼ$bl CF 7sA.zCLkPʽ^ߤ,@2W 3ۭf?N1ydΓ z1]M%A&}]lNXhfDoJgE߆ >{]{J0?/AKFtΠF%RU$ />%{ Q 2i('cW(K[$xZԵa; H(F Dp)}AeXPՀҙ̽2+49ms0d3n{`^ZIէEOR*vgkUh/u8!+e"\߼PYVkuw;Ci&)LlU{y)d3 Ί)ۈ$_Tm+^:ߏ"H//ɽebnjR@ڶⵙ5Md|Ody.'Y2ߌ~2Y.l553罙E_o(fo&Dk^hjoav&7I&kQ&Sԭǡ,)> Mo ,<ςLt6{g~:=Xʫ#ңV5MKEwmn3gĘ,%l˒@X0o/F$jg`F$%=YUk2$R5û܁S5)9QrrmBUU^ValX4UGĊ*Rjsi%ѝub UcA23PĘ`[5kf!v`ƾ;a"OBR%BqI./ 2ASm_4(V63an/ؿ ,ilhsZȥ9΋<{R!ӌYR?gr._(t:=\D< ՟VHf=xdN~|d"ln2řWݢ_?f?,d'34sm&76RS}Adյ4T Ybɔ7ͤ^Ê0M*d Ťo[KAd-0TZ.F NT zT9 MDbA;P Y>EdUE.I 8;Fc[ֳk Єpc !XLakB;Hb/OeIHӨsr֡xAW~aCEQGF3yPf^͢ fό턫od\l7֯*,A"$ql#ҘM=!ai^\šAMcNLmᥬdGϧװnN_Ŝ2//QB4̌vvyl.6#7893L3}~|z3JAcvg6JHcbdQ`_*RkRU:!T*>Bslh+(mx(͊%(g3A쒳:d=ԦcF!tK!in|+)Q雷WnѐOl ULZ*q,'aX`N/j1*4>"$Y4?~C{,_ѻ \^e Y.-o8nk?Eu& n"֘ -H,LXgs [Nu fEq<`Ald4 <#) ;iUԧ:[?'< ny(;O7/ZYd1řk"H n#W޵M >9:ecdL5 YOCfҬY;#ӊ**TJidC|geSGt" 1]\#Kjt]MuÅl&1=l)Mb AwfӼ4}E֊imFx&AzZV6[lLv Y)O>L3d9|+$'HPju]ZS)*|4Ϝ^*jv`1 %@ԎBeCK1# V%(̈g[f(͜Ig#QG2qj܄zy@T. lA5ջF`<[}љ,6HH)VBR}jw`a2FeWW}$gڳGksZ?CcߜʤOWپ!!yF֙ i"c_"Ch 2\N(.Fe3l%2sL&;YE&eC'e;[Yths&3vy lXv*QNmif):3rV/űZ^&Jx{`Mj^Wg?޿Bﶓ n|=ln&nhWk~ϛM|df4,[_"͌X5Dff>2MӉQH'PmXѧc51h(;I5#]a)V2"THw{M3clU?YnX(J$'`jj_bƲDLV$O'{iGRU Έ$c}5#Mw BDmnԈMDH7$0ZQ0q B"~41f&]piLy.udIqK#rK2cr{!HO:Np"=vy?Gqf5Nߓw'דRǛ{afh7(yWf>g_Epſ噙x$52WΤ፾ak*5Q.ʂ ,K2l7%Nگr vj.<Ua{(O A,JqkGXt.("賯 Ow(Z&sP'C'Oݻ td(]$Ru{ #+Q_Hr\@ !ӱx[>hF !L{4`?/WБۧ[kZFh Afmd&94e2msrW6ݼ#B-Y 88d: 6^^7KG`n;% 2QvQ$׳׿O \/"\r!uhM ephu5%Y0N1I=txfO̞g3Ȕ٠T #ցvU.frm EV.1 \^q :eI͉g1zz58F!n&Qt2nkIM==]qWdҘ>l||$yf$QZ]Odlf6Rn?ҘTO 1(ovdfGϾz+o`S ͲU;1×T݀6KudQnP9c4Y(408b-ygj0@GIH27:Aߢ 0b& UF%1ZImM=Q#aj6.>%@ 9N@_pZd'ww3PHu:Y"DSԜAp 2:Xv~fHg6ZhCso}h)HiFK_?W]n >o|k"b3 Ī4"Őw6Fq/nay2 tT0ĵJO6Rf;+' И_Qxr K؃,p&N-₠$U=2\,PtNzo@J Ȋ8b'.jW/&6DAvXNjˍtW զclvrRxY+e˙(f,O؞1HkE"^ZLk=C96qMx#\ <[sK\I*4PCH3?E)D$dtRT]%-=)ķ<'e…y~QܹdP~6#Ϝe4fWj;%f;g-(-6sC4_77-I3ߑ#_h-y8HL4%wD[k[թ|UӺw4=m `ĒMSMh/Ǵͼ(;kf L*ϩ,% ,.x3HJ<jcta$!KأP-j tw<œK ^V1Vg\$B[u&h@K-Z;mX3YG\3HTg-֧t蠚ڙdY.kxh34Rp fwh]x4HojKtr>H #%Á9g1tcK3)t"Y0wܝܪXs" A^Ȟ ӨtrRWe'*O>}OxH0gg& 4#^W tf&n3-ȋBnZ735%-/?ov4e3״,sM4l5[,C3Blv>x_ns:otOnC:k'U"iLfyZBof/c~? u&ʄKRuY٬xg `@@CJ%eJl4<cjk5=tA"KMj>Uh;!XMV6P$Un-aG(q(7^y5Ccm_+?)m7vH' : 4@iIv4VfO1J߱zpochu9X[^ ҆8bGݪ֚m #>~⅛J5oB消4/do.c2lʙ#孌E*w`L3֠L0+%ݓ4|JDCm>gy䙙jlɤ #YnHc_O>ߓ 3&HB,d6O=CޘY68e?f6Ya9X[6?%$+ DAI4f ؆ gh~_,f&(Sę"š뜺_H,M)ƔqQaP$D~퇖Ԓ4 C?hweyˬÔi${|D@ɶ'wc7L7g1gse&Wf>\͌tη͒Ov7w3Qzِ]n=s7#n6nK9(Ffeo#igFJOo.Ͱ`S'(FtM$!a=đaSOΰ@,̆>gN^\=p2ʳu xޣ#&QYJlR^hr u1,AfDKIirz&>UCoֶ]Iցh F0I`I4ǫb_Q_eHe(6>?YLaU]'l0i8fenlo&^͒kWй6uD4"Cs;v4 Ͳș-a 0{$ M(-!Q^VtEE!hٮ0.Q*n.JFTéTF'T/ju NTuiZ-sM9boj.ɍ;|Eb(9Vaf]gySY3l{vPb\lXg'L l.'Yn`[So3tӬGQeɥ8)k92 eECvǗ[+J2/c9)HOYӗTfdczN[heggj;GY,77(f%8:y^\)v]4sƻ4B晤OT"X]%xkLp"VGPl6e]w ߙ㟨e.TgmmCDEfYS ,fףtE%p J<a!֏ XYgC3#X@ @W@I)TW!3x%.4L]x)&+prUT#uxe:"fm UfF51KsY8c g`\Pjư"yh􂇂%8${O$H\/jewCrK*w|UuolJ JQtq^=;ngO#͜^%˼fg~! wk `76\o;sm~ٌ&oHC?&lf;SL^6ó2A`+_a +8IHz$' #^U}L ɆfkIVKą@z8슦oQfIPu!Gp^FJOE{pMOR tzr;!#E a!& h1 9n7$;6HTT8bc@x=NMTTpA,:ދ\.Oy+U[@ٳ~3K0,Ҕiz;S ,)90#60 &pI"fD+7b%pgq';B*#7ol'59|{c %C|6};#?<\$P hyH3YiFWt (/iffd͇&?ЖC26|lhHQNٟ"G3m1Cͫ{Q U `FP8L1V=3 Uo:Tr-Jr20Cз9nP蒢TQE- aV ijM%~{> , ,&_[W,ALc8dӺZ48A9FI?@¶ qX4l$X|D3Rɗ0]^Pn(n(J9wIJ^Fafј%)\' HF>xA(f65K16 ׇh,ZËs.ͲqZOe18{~3jw(7&<2MtRdʲvyz i^Hy+fdrYϣ<3zd-7#2f_~y>'"ʙ֤:-ݗvF Eɾf}&y̤#&j1 ]CF$QO0bxwQP4ss,eF9@~j&@J3AU6,$Y M@*$d,}ʷ)A%@xW<ų}W}WQ.Zp?!8d{EkdO ۉ?kJYeEMwxfYtyyyGsw'^k2Dt[>GE)}QtwYX \ۗ,ʊ"&0kZ7z~o(3e둀6r>n&ڙf] \f ˞mŻ'2C^a5cd`WհCZWEiMc[0IMrDe{١y5ŜLQ\f +zan @9&D^iRR,AY ufՓJ3 R3YF)T-ytuPJ~яMHM**j1!=6 KoEŜD+ SancgѢLjjif@IFh+ IDATe14{XDRܰ-grfâWGOGaa[<_)'QT?-;̺Ob?i$3A"#&iI>_hfPNh_Kڌl]g+dEz٬|CfG!3ropDd!HتkWoP\nC:h+tŁoLEK;7sʪ5P|7ֿ)BE؎41:)U[feH3}+*{6(EEr_l7uv B6[ ea/ ?v' 'VI풄EO񧻓dwAOefdʙǢ6#Y]]03&s2z|όŘlz6LoF&lw)"cvyޙOyv&S+ a}#XiE XcXi:$SFEM~h,?U{`^%7嬸rzWl1pUqs2@0u* ir6evyL61!0hcK+Qgu?cW;(_\ĝ$  K$\&-,df(}*J4@24#՜]d94{blF3Ii6#!Ynɚyw[wfq$(4H;;b(L슬cv4S9͙ixTokx`?},aD`ԭlw~V %lb3y-ΆPfyـnش&T_ip`v; 3A6dC(ۅ1ʹ,sR-ؽgɼ* @_"~Fe2e3xmV=V1"tRL 1S }AFң"> RD0+1֙j%#SvB3 h.3"Д̜Z7 <}Ԍq|8#<<ɺk~B$|\=9RBڷO%OdSp'^3LҚ=P8}9N篣 xEZ3ҙV6#s|2 yl,3ߑng@s9Lt"7d&e·쀀<\ஙoջԏ]eݮy`KrrM-A7Mɷ&>= ;hbʺC-釛0yF,O1]HK]D6J8gIn d3;n:/Lxr$?t5G)EI2Pv(.qݓ , L; n}$}]֙_F^f!&ͮg/i ɮLL>4Q٭7;ZIt5޽⩙_HmvpZS\Gh3p^mՒ֐DvKu*^SGig.qw_61B#e5kn =9&&TQnEx H^-LfۣIdϖ2%LKL3.땩rMݦBٙ"CO"Y?W;EAHچg{p׉5jh:)"Zq%_+_1}&Kf, oҌiCB8"=1hTjڟ輢噲O 0 8f׿l9ۭ'v(܏f]r3-@gw<}eHse̳Ӌw ܉0Y7ѽHBhA0|ɦn!Lebq&**k&__9Pֵ@cd?iE{.j3]<3e5n5\<9e2_ܗL67$lvxiG39l6}͎fϳ ,DC33SX3_ޙ0S-}1FO):q@諾;crMZV>(Aufv03{EZLt% +N<E,ң d%: XUJ2d, uhe~-IG*6 i&{6cYvDBRQaa1!uWRҲ@Og°XlJ\`v`{XPJb&QtΠ%EreJI_njs rR pmݩ, ʑ"]*O(@ɏ=glW'C]G6y:폦g0vBI=S 5jk>s:70@ o~6V1؝ .@C[1>諰0`-%I4j nOdrl͞,5g#9f6Ifa(ʬwD87ݏ#d#f7pqY~YoGXOe].43fe?3;4f֒Fa]nJm$T:9ѼqNΙ @gHuQ$P\KTf+I 3[GL /c"ۆ:B^|א?#E%dH٢rc:w,jjb8Q-ٌI UgU &D!!m FhŦrQ~E-Pۡ {ϝ]MeI"/Se:'`oM#jRu gp<<70wվ;t?{BTç'@68%gyNlӜif5#!fό\C;Ra~OFl@ih.O0S:i.dsO%;GB6< geqwC?, eHo shlڢQe'ӓ)Py:oF |O3X~JD%`WJp%᳨ĉZ)'y:&M/sL Y2m~ Wo6 fyflfff?|y8$3ӊƇ%n MoK]m&pܠY((%~y2^IMg\ H0M'=دb)czRjYtv]A8!YaҚe)]`{LzQ̕,NV^IsVB]L&yzQtjNA+b\OpLOLƦ@Aڞ0~EIcv~ѧ"f&4/E˙mafv;czs)oݡF/M0 3ք -%rxVD 7Q'Ox䇓'jӲ#m4lG&H2fNk5iGg.Gf=`~\嵙 G[f܌-:MUm(NE0&(H2*GuA{O2Ni "!hsx2YyXbk(QI*0PP AǰeyjpN6S5rt#XA?-,V@1&&8qoJ0*%{8:Hk3Nff<63~9l{ (݇϶7=/Py =\ (NWO89.4ٹYfSEgHyݚ_Gy<3WyzfJv%)emkfE_eN3|>Ynsυ[.o f]<^<<T߻o\69%@kK* /]BRW &w/4ghGf<5l"ei©#6an@LeKcڴ* D)xјIJ%q Zm?E)#foT1`P(EJ3J|k`+WANBCYI̤s, x9џL[*pBX8cyK'Li]83Ķg*;pM@(};XCEu ܖhI3;Ӑ7ϓM1j~z9 a|Λ?*[L34ACe&Rl&;b}=fvDE L̂ ;g.3V}rsSxm%V?`\0nkf0df=.4DӐXlʜEv6{5Y=6`'jGJ!컢7rcrbڠGe&Pw#E#wt" db& 8p()KHLR%)NZ0hELxϿ-N#ߝ["{VQ5 De-gJ f8 1c"؍kGa@%S3AI3 F੝XO _#N: ?H&shfV(2I:ۥ59ZKH >Kc'_#-ogtFaedz^fG͛݇foƯl:~?]_O31sq|'f=x3[@ZH[v Uvi#)5[]MY3dͶL/ ٳ}&78'i;"0Fk/WNDfHHL=)0of1L!>R]fyl=ʙvM44;7E׻zwvh/v6h&[q8}wufhi6t^U*HJZ$V9!&8#"y}\L( ,+(L NB 3vB (A2ABewf (#" qAU^ &?;@̊#g˂O!,¯ J>b%υI5N㻼EmxLXuƮS$Ԟ ݃ QIQB%57@ytG/"~ )NrL˖2#'GH ܌ڙdifGyhFy$33OZ1_f#fwv4;3_nv#Lymf`?fas =]2ŝ\ EN Pw-K7I4)"|'$YRRUÝĐΤ3 e @dHS̄ ZnkHi%.REDz0tV%}`b8h2Q ;ồ#;Ye#[Kabiȋ_!h;YGG!^{!+XְvJLid]8إ#ָC>@8~tQLG"}12k迡zfI*֛]<,sVfϏEFyؚ(LYzgӛgƨS@jg f'43sF[f[Y PLuUa+ n/Gd55:ŒUfŹYپh͆P[@ ETtR;s2@GlhV$ + &trdP OP5&Y a&M&$ai8׼^/4T0ff.s`?_f({h%׬'qN,"jM֓k@AtXߧ M)Y{<~xaΉ#[-K Ec@f΅g@g֒LtD# {AE ru5Ǩ@^8p3Q b0QWLaEN)O ĉ >t4T|C ݳ^ҌpJ?|Mu ┙Yv> `@f<&N,/9~q ]ۇ$P^\0E6j~3Y|Wkldj-v/%d2Q g͒#2m2!slr,ɫf̜+[ =[j_r"`4< Kdc- /le&d\Mg~=Nr %vͣvF( ?{|+(9<jRO̷3+8(62,@Lw{C Nӗ`\6HI"_[,KCE%`?fif {ib@WDU5 ?[$'܄>ݑ#p(HI]z<->x9'-&ʋ` X"6uV$cׇ ˓6 =##a-H_CBS4&-2J6/:(΋mμ8}G&3+fĝn߂F@wtJP#j,; P&o%񖓨-OٳYYLu0ϚL}cx a-rgԙ:LS(?qNYy%k~MEހxL8rD ʐ&yy^=v=)m  d{l4D[ 2M@4h_ n^2D AJmJ\]2E.Tgy4t!-(q7ٞewdJu(ph黶cWEd0Y(h?vPԄ0dݨAu͛hBvoM36Ȏ^٤yQ0YmW#,vz\=ym&2[28C~3ggsf2x}3OIy. I\ quuH 4iqaQ#%|rRxn,bҼgaO4(VL5I|,T6\SK8[n8  U,DCj)׺9+KLFxsp|_uپl6H^Y43.g ;\q};u:8IO/0A|L#.`VCV4#9{8;{~( my^^]gu]В.z=6s(L NCNsDKgYysB3dp|e3W/dּtތ6dp̗;feF_G, pZf>o nae:kHzc/z\.ƀP':OYy!?Sue ǤȑxVk0Gbb Xu~ehr҇0\Ug]:ʯQ*%3M8Q\"#C?*8v'5C#/L]B׌w̓4ߌQ" QbeGW&tcF(gz kЇ(*֌I 3$<3+2ʙ I++Lv䷙jdpN4"ͼ;}wQ,f>j i##v:I眩}5@FrrMfFl5 z$}MqS( r}ޛ2Uz&WLl+).vy VX-'M$[&cH O~+W͕*yhFh*j ;U,u=fɌS䖢9u@?>;x7EJe78,KSE4_ H=TRSd Lާydb@S3$<8&;X)z;%Qf3I3wɬ84Tv4{Zl$۬5ˋ3fz|"Jj@"ɝ^&Լ`G߸Ŭyg @} ǀqsf /7+_');%R4p,5 `S3xK =TE$c #i(}YEAZRaETd6)DvK %:r`wy@6gޛ́欨Llq>RVӠgݕ;b!Fw\ޠO5@BSj|u>h\ا_xaifhγ3gGs #Gd?d@{άhm]gHlK v/WgȄf>y./Uz<cmQ+3 =@gY5CaPS6/>0? OAǃ'A wdd{\hqa^n=0o N]{$q,Etg ȌJ!&%9D0M"Ꮶs2}gY^4SL"Mt5f nxWEB5ƤyJ.["[wkڻPGl.^.Y1h͏diF{03z$Ҕ,wY3pj{ݟY̲bn|Pg3{+jDgRBdttջA\ ?%0-~IMgX2t>d!6Jl fC}#FkG}h*NDI;*AUd2D{|U5'(9yqq҅A&c 4 gl#pCbI`QسHtR3U|NK$_$Qi s#B/ kC B/&8E"H\D}:6U6$PWx {kn5ZHuå72bf)JN x%hLEIS@/&x[-ES3 VBM5فQKՑ[2=ͲRbT34G 6Bl/N_h L>ϯ+hwY}lny.fd7v9]/_' ^}]F,3ǧE`prɡAC/ W)[rufC9~ؙ̫f~%?8lYUJwioT^QM]:7tJpXD`CJ|5PQfr2 o&Иa/.rL3+Яԗ 2dF$Y,U+]$K@ׄ[,Ԍi¬ Ygt]// t؃ќ #`aa9)Mh]P(|Hr)$MyzO2س/bmm( cC=e`?lX+[ BWd&i\Q 'Зu0=y$:1ᡄř`O;Ҭy|"V#0C~ҌfvξlSZI͐֌&h΋3 Lvh%^EҞĨ5%]xKS&Tb2LCfU|ug>Qtՙ7tWH/HdUJ EX >T*[`Rո(h@P*9Y U{aAYjJW7Cvk.2/.4Kʳ V3 2LIY+@\Qlfqh1' WvDۡ[ 2nX"~=4_ \4CK4_yL9̾F&YH-y}4ov6n:~?>΋=ygx)-Ɇf3s ԜyЩM:s#*Q5ñ~Yof3pfz_z^cP{OSՏ:z_Kf<~q7K>d^N  AJB sgb`y˚dMTMf g" &ݰ2mќ}hfYfqIa} #{[d/ ݁Fvx?C:iHuAD.݅iΆCo`z68E.Ei6 41u3Stf/|7n\hhSnlV?e3hEޡ6dM_oD *J/8r8$T?j]8  ͜es 6g< 5j'5Zu941~0p9U_86F2VG1DdoO@آː(IUc2R8Sgt*K{ٌ,Ayf(:'jL5J |듁iE Bk5QMjepLv4~b.xf/88}Q)e٩yMʲAIDATlWg `N&nl~܍ m7355y3fi~/:mfAlx*"h(&Y+e6VOf~[fg֬L b̌f3CNݹk٧s!ѰG&}}n1A飂]:R.1 #5%vN*[V%J0&H%LEXCZ^%+/nmrbulDˮ{Ƣ.+Ffٶƃ)w3JA'<^kڤbƅ#U J&dBڠ >3\;Cṡ&,fgV_Gd&ag~YoS2el&!ftlMy737+fFV#a殗*JkS/ʹ 6ЊF>lUZVU-xufAYf0g`:AăрOLd3p,;ɯn'>x4]C,p\5VXW-H.g)@]͈DB*.zabY]1ce`?Ub#L46"4Yo`B!0zN؄\9Shfu6j/_Gv]gife6f3#Ǭ)-|HJI/$d7+\" *Z#b6 b3~J34 h\pS9΀0t)'zj965E_Gy~Jyy`2ޣ(xMm{to]՘l F&J6sv&09,S3)89̯@T H+^5]GfZCd>-eefd[+ r8pvqZtf<;"揫mfgBz:_YY\ea&0enfAy擻ߜEgHu0hl WmT$o2yqNIɬKf~zaf؄&D="i=H&FqOݾL_;khG4Ae:;g_}JwNnsYnf|ZNC oЌ/ۚ q4g2i.~ F3]B'㆛HKp#A ېɹA69s0DV| sV 3 xiƿX_pg-%4?SQ珯93 4W)mMK̳of5ǵ z`?B]RkVT2UQ W5MHcJiL٠]m>޿?R z>Τ5vteZDsH&Yh%8CU#(*-R̃(] ֦@ bySGvWkI!!Sgސ!WjSo󫶔m+D syq(z~^qL k^ӨKIfuCl6-yt3=V2x+_h̙LBﬓe)}[3ڪ'Tؚe /Q(c&5>E,͚ @ XR7 uPcOA) 8<<0JG*ڕ(IE-:ǎhTwx00uq;DiИf%xpfg 4ugy%3tnvn@8ʰݙ("YФ֊a1{:P\\Al z)!X}p\2L#4e yE<=h3P\3R4FoB2_gnvuyũͼ)cfޜGcxwy:8(vZUn',1J۝y{c*IDWo-{"`ΎGL̛f<n) DV*eDv|snJ-uu&("usbcqWjv'4Y =i$&͞J߱uHpOlg>&s~-`E |A9,l=^)+X 4rIKc0]5Ccml|u g38ó]PE/MKqh~,SD̳eafhϊ\.97lqtC13/?RՋ̒wKEa-AzKpq^ O \<&̯zvfΊ)Zlܥdum $D&@@zjK Gv6t5c[\zǷr.GKL,ntn9uRiOS܎ȣbfͿw:8t2|F=D8Z#ZH_E5w0@d¿H-`I+/۞ q~JMoEVN 5ҐR- $s h=dfs{Xz5sOSiYFh4mhS?X>׳嬄Y~y"qT?yuu[4Έ%+;{=bcLF@p:2Tf>$tkd=]T%ѪD42>Sfgof.i}mCc񚁆s:@"R-(dkϾMHp0V;6' himHR5{4t zW~i@@"H+TC5ZӞ)_[Z Z#Gdt7pz]7X%+bqN#11>a0>BR0XYO>!YݑWsYfo^l{%a8{I\3ZW4?_|+|:9]QMI3\.e탲g%̥Ez./XB54s8b34f6ᥰT{6m8LYީva33 # BkPBx^ 'a3$ *H2LXnWӘw.9Bi2&cIeyX\ i Pnf%;jBb\֧K4hPdp-ş'5)Mh|-@$(#Gi p씕T %#|Ħ\iͧch;8CahP1Ӑ5mfj'2duX/\,g23wtf7EДXie24//݈]:(U0N}ӊN Y+C5[ C-׽l,e1PKsꖡkfV3`Kc4d!ws*6dr!8k`m6NdLg1N,E1L َYVDV)>ݺC]ޕD̔7e*Q8n'%IHakr0IedDaD+ cch ~ z u !ΪnR55UaU%;ޟ 00OIIueec'sPcV޽ށ !$n  %&66'76(76)7>6*7\6+7w6,76-./501##2@88;99=?> www  <.H*\ȰB#BtHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI#8s$O8} @MC5*ХP &UOO^kρ] +V_zդeef-Zsu.]{[lޥ=,8%")UrP]BVxM˕+Ι8sgϑAΨڭz1oIu5Ӷ/6bپ4@@ ޝ"s)W-$ `O #}-mpkGs,P@+|BT뻤~~{X@|y_`dT 1TGF= z u!yYE(@b1Vp mEE!zuX``+|8y<ވW$݉e$w\6V9aS.Ɵqxא;"iN `܈w@Zfay[2eᑵg_cCJWz}&H'FJimi6eX*[tzfo:D|p'* iyb+^f *2y:"| G+v {[g򪭷ꦣ뫝&-U_N-y1x,,etb*$'y{,r;d"2;! UKL:9{ f0fsDpAj)1n-shGOHCqoQLqq1 og ?m4^Z}:y7rd;Ji0~s˳S]X\mTjwY $gk%^%[嬝7A ]-ծN+!]r nzsS_̱v{^W-~D37}$ #qfoW浑U9?Η9Mooʓ^A/ȡK. x#b %Ѓ!㖗ֵ9ה"J-B(<ܚr&Ls@5P Kޚ 6b096 A:ˢsBKq:b( r;`Ԓ'1b(5U.MYp}QCbnZrBzPU,nz7YXA-Iq5jfIT$1v=D\XS]P"SG8JZ=k`{il+&A(*U#W)c1wF4fpI:sc?4~,:IO$&Qͬb5~T%iesf0xMD-:CHqfKڶEǙHj0 pg[~k> :n=f {Z7]gG @xC7yk;w@0 ^W/xKՊv!|{Qm̄(xm0~k_ d~)x!l[x&ȃI<&,OIy쒵#+1la"Y A\\`%6߅5Lc w ,A;Tryqd'3y (|#9escpȗK4^dz-``[;kkk6ip'W:pPĈA~Z).shC>w nY_d 89o6}O3it_;];rR'׿t;zO:ؙuqO=Uǻr7ڜteX9wٝtN=K =Rkx.w;Cx F.>ܺC *^ܢO~).v~nUMֈ/~a{K~;;qx3~nsļ}v|}wCWpRs{~t{u'cg!|$Vw+7=g7r~n,QZV F"ḣ98xvG/N-:q.x{(e%ȃCx^.&~)Ay3/Zpׄ7TxDj|1VZ$-W-%N rz{BHzQ|l}h8ojSu"qqexǂ5LJ؇?HXboQO wH~8A؃(s灤8}Wߕv~j(qUaWPu\1Wzn׊(tHkƕ\OJzFHb;rm{v&7hLn帊@؂mvm߸OUqWxhNH8-gPkUVPHtsِ菮outFwG,9q3I]&y b/Ǧ3X6SbHI#@YIS$9iҘh`ؓcQ!eAZ Qxl䵖ZB3v"vrXȇLْƗ]iH`yX\d tƷ8xY'uAS%:Vq+6oiXBPWeX镦Ǚ锳)Cu\}E9ɛ) YmGmܡzٛ ՈkyP%J6"i5ٞ2)>!( gи yXXGȘY|&qayh * ):GڍEJ9PǠʟ e$JPCٜH0ڡ2V6ZԥwB>MڝFJHl'+JG9`ʣQhW\[]ʡ-P٠A:GcKzR!",pO*Xwڢy S_^*:Wwc6SIeH[iD Q8**a3:e*t=qR^#Ɯ:taZ`Ri3:0SJbj| JRq-jJvڬκߊ/E83VZ{ꮕjx*wՊj[lin*JA"oRLJگ*:zЕ /onLSR8"ۣJ 1)K k1#\65 @L-rq`Y[\*q6F9iʫ::ơ4(k.L[i˥YڵH+ L۴s¯Ŕ=RYZYG xK:G8zش: ;]{?;1q6&Q7){Țfv6wkjw]+-=Udn"+1^b(35ߕK:' "1VPıP+Rdrț Wk;\b6;[{¹?5״J#1ɹR)+K+Ǽ)1avTkeR+go2- |G1c&p%hR1n[n/>> %*^^䈾#b^ aeFP%^>>0NZb#-HZB۶|im"n=訒ZXn#AܵM>^zk}can&^ ]럞׍QY~ö%uOX KN} dB7r?Riv H!^(o[(".tZ3ON~0/\QSi~$S<a@DPB " D'Fx@#lX@d DP DRL `yN=}>$HaAeD D)jL0Ӌ0`MIrM'أb͞ED $֧ȏM=8@N?~,Y je};qbƍw}[Î^숑|-\VV1.uj֖P\u.,X#t6z)˨#709bF>OȻj]1\ ~$Kc%G^}hKytԫ._;wMT+o' BcAl8Ro-H ZC4迢l dE%ܐJI2.7Ch i,4z:@< F\d2&cLG0I2ˌG6ⲯ 0+Qd$L1)/1ƿr40*%4y3ƛȤXj1a291.$**.#j@5<&%YS3QQZt,يtBH(V,TCGUR<hIP>{IEhE` T=XevO؜E0[|ko/IE1pwZusZw"_ a^ZT$XeΌe>ӂx^m|m̐.X:;ޘ㠚L`g"fQQ&vK;+V#YgS̪f""" <.  A#*(B2q@ /zX"GMZ ydȔ"ANtxG֔i0&J:md3υC-z%MP#&%ISjԧ@"u)ȫ Ա7ZEK̢n߲(Q,ݻu4iǰakީyXs1ݸ9ݻlw5hSbVܳ1z%=ڲʉ_\Yo!w N㴅N^ƒג~njrWǜ-[W7syӟM|c3M߭+ے/^c$U8z VW5Ua٧x RQlUQٱ`tقmv9armas X!g%mK=]K䅙bxE7#j5fh?D&ڔeZP6 ߙXbQ28E9橧qxI%(3bA6`bfB! iU&Hpzݧc1J:\q*9`sҕ:J]sgRayM:ak)i!;$|[h-+[t:j_%m*S@̪D3DDD  <.*\Ȱ B #.|Q3hq"9v$h$F ?Dr$ɐ,Orc̍ UԸ3K5W)Δ'iޗ"qjO?翅Heye\_SWqG]gS^UNjyΩqW\)IPMH]u(n)ׇy'"NTV_~18X_ :pFe&`9|҇cYEDmiW]^YF 4TXyY9RR зfVNdbؖMrDMF%d!ш@nV'|ݹ^\5bWޡWrq>e,pBmgcwm ҧ)ZX `-8Ҫvh]WOӱ3mF tm'{'.鑱!Klz&Rz`Y{moҴ+߂Sh֩BKd=+PWzuR} H {d߹ Գ1aF'Ц$u-'p<X.*qG]%x}i׃83@Xz@ )4ũN.axFjeys%\I-`,)ۆģZV?X{ⷷZM-$H鴑+oGDvV)ޠZ}ks=깓5krdqI<1u@N^netJbw-ًUqfdܾYnX .Cl[5>Z]8$nI@zX}mKdNOu9)J)M^I & FISwsW~ CWjTI%ƧJm<vت:aN3%,Υ=N,l$)/0R~qG};QQRvqGicu5$'SJmKBI`Mw5@0_U-'=~KJcFw<SjY?ͺNSF|2\N*p.s4sniz+ѦMzI/RtsSۺ%&yS_uhD]VxoY T{*t8F:.P=5iZ$K93u} _@EJWw=?{k8_ޟw3kdCmiXJ񴛚Ӽ5oD^83Oib+[Z"%hG- X<{+U'eg {sSv:~9~';'dv⊰$c?k?sL5wH6$$uަiO;AtFʲ"UԵ4 f率%B'!bR!8 FBX@(sԧz_z3-sQL.ZQXe vw|59By⻔;ZjJ6Gh9s*FucJDY+׺'U ^;%SF 7:  jb)sBzLUKYv5Ǩ/fJCK%X,jjUEhvf"x3<M++$^yL2q ~8 K=<@1KnK i*H'vKlT[-zpzZU7L+۟ǚ3*HScz ')C v|HWJ,U"謾- rŲM'`eDOYBG碗lh $Ks8E@ۇʄlȫo.sC˨՘r,Œz=lLh0v^Ŀ/"ڬThcKDPS`˔b_qۊl<\4Jm+plHU7:}(,+OsȦyaalaȆU/ H ɜ*"u! ϋFcvT~!%㼭ª˸xGOBNts.7qHǪM-} Ԝjb=ᆯ\]!kZO86EZΓ܀:$fAlʳͷ)l&< X0К Mmz6CW3;N]+*X%*תXM~cZSu!YE"yqrL ehĚȌl}Etӽ|mݭMٝ})Gp.͡wFjbef _gJ%έ}Ӽϥ\ l0W@JJ.RZD˹N|ɨqZL zp (tif}|aDe6d潀4HZσ/.#MHL ~M-pt]l3Y٨1Yv{DPäٸ-.3Ԟ}qkq5PYIhRyCyEEeThʺDt/DH(xєyN]@ݫa=cPyeiH|U-;PۢȌȓ3zRΜǭHwZfvryeHt Q*O^Qn纷Pn^v^\+ڪfC3Dgy(NO;~i-pE}l+ɶ7T i94(Ɣ~7JW הi=U~.JOh /oݝBl5ma쫺DN6ؙ?!=}ko~aV5.yqÕ?dv"d[{>r{m0ER--.+ky7DO&nv%gt.:7C:+:TJ4D8 `p+'XbϽ#5Vȣ  2 l72@ r2-G.bL6viBlC )$ĸ"~C ,FpJH,@;AlB\cr R(8E܋Ƶ,LҬ0xM,43"=B$5(@Zɡ(C*L+\E2 vŠ43*:.ݬ !;U\Zb ֘L$@+FKQFR1,",/ɀ t1F,V #S%ΚpሖhEwZ_bط#E4CUxt* R'r8--=#գ  \86qrϥ΀u8d XV*+͢6( RIϤֆVH>9[:ĎPQ~ ݉MbRlPUV?\GF -#!zwZ &u>MvD#bY)XԴ*R堍g?.:S(4K-g U=/$u5mpDBeXl߭y.F wJwX"ȝ\U!419PI@`lr\]USS9( B+*8Pŀ @`΂3{)4 ^#ObK~!Pع]o*FCx 0-G1`$@R=Ё+R] xmwmO\&>:p7G9ݕr!xu;#nMu#+c$*“ؗH(;z [ "yȽ 3l|chƛ`CRXNq Eq)O TECA(4O.Dnv8y}ۤ"1 #F']i$S3]7Q'hD0ihYk_0ii;=%?f'4%G&}zQ"9Nj(Y )ƑH,./E/ >Sƈ>GZ?SzSޤ{'0Vccf֐BٵJJ#;ZFCW7̬y[pRCVY5"0h 3NvGyVgI]"i~C^oƗ|1~<6;nFB3_*쭛:5ҋҴَ1) 9"ˣ?$Ss' 2Cҹ<@u2+ܠx{?: )sK9BҲd|4sAl7R&;lb qBB[9 [B9!A/ !g:# ;8%1-m!@zi|먽ۭ*0w l%4U 2 t)|{>B9mi@A*D 6ă+F:E:M[¬p=c:?.AAB0CFЩ=-'P) "7YG#2 oɦ""K%P̴- >lP<>&BdM0_>44ÒQK/JCZ0vT vstPS458<25S/>y.WiFܿ)Il©kB-M,Dq1"T&էͣ$_;Q0Y A|ʙ͞a-V]``PG>|--Uaؕ<ȵjM΋-I V<>_ , .Lrb.n>r^G1C6 (cFd*zE8ʥoOG}We&=-ͨ-d#%D&SFTVUfVvW^ ̪ffD"݈D"ff"fDDDD"   .H*\ȰÇ#JHŋ3"d0cA6H#I L2G `4)Ś7KI]d P9;xr҃"CFeZ)ULo 3$ΗS4*ʮH[DPL=\i5Q8u)WA~5:iW0U`v$WY:~YrlqZ޹`Ͻ C[6j硊!7JњMdy-E1#vgRW|9v¿=2pYn%ٛ`)wZwV[v\^;.'aE kC`Cqf]xG`kyu} J\k&-H*T zvZjEQ W"V2vuԎreFJ'4Y։MDu\S%ԇB]LCM\U~Y'Fb`-9d=4cfj6PBIS~^)EGZ 餔Vj饖6 hib*ꨤj꩗r*Ц )n*kNj+ * Xטaˆ^ ј Faɥg҄Ew8g'#YGo[)cRl_єV~ֹ?ћY[Y)UntVwWVGbV5p #ith%gUoK^p\J1aj9&o^Y'ԑJgeN5F"T(U(U>X1t^aFy \C76Y&\wâq|NmlPr$&y8 siU^WM.>'j68U8}HBhX,6)g2̑+uVَ yub8h|u9-b:WMQ̕c3"yazYbgw9\c~t 3r~ }C D HI73G_X} Nrw'?`M'~iOXFQId1!B44 h8y>G2&F6iM4AfEHLWB#ޯ$1 p=,Q v ERVޖ1{K5;7[=eW խlU[ $]IJΊUE4ɱm庺nZLJ(>"^*ҿϹro#ގiPXidIv /[\])<Ε"#dUgҔRJv2JmMY2vJzI.Ͳ{gK)u@G=KHՑ逽75 -,(< юzmխPn\,Tհ͎v2*Ѝ~#ҵSOL LdV#^LZ|h^ b㽲 ʅY [|$+h +,W5v.B\3!3rMj|~yja2[ {DV/v:Hcc&[Enr7MfXLS̽L׹g2i {&4g}2X|$yE2kfɧL@k'49jpА3eM /]0#@I,R%`*^,#[6lLpYF2|}z&o*]!n"e1+nO{е8jjL$hF]dH7[YD{ۺ2k c-d}p5ͬqKZ Ѐ8'wDy {ئ9;Bŵ̔%" z)4qžWwIu )iu h|H))+qG9Eᡥh)iK '+8P,Jp,P (ȑ飶)ʎ-ٔiQ]*P ŇcoaęR7"G|f<1\m:ؒz()=z׊:ю:9+Kڤ( Ÿʆ)yRXw3!(Ňз *9 /H::IʏxJxhxg XNYwKWtCZ;)%nt5Z *  }PIg8hU8+{*^*"a:{H~G,ʝXJ&#ۯNQ;tyz0y~fةʎ-ʦʣyE|D(+7D722#Y{nDYGdj7k[.$K: eyp,7{8pu;|[B :+;-ɟin*Y8Ė}ZrF*lc4W\ԑ^j ä{1$r+LL.| DLW\ZH^LRC:u{GNQ̡]4yZ&˖*-[fTǔjߦ')EwLPt8,X[}Z`2h <܆h1Ec\ȋfryVoҙZm+`eXHtC}>bBA~v-bD8ho͡{ ~2[p*]w}9SXt!]{ؠw%h>'{r "Z^72ZB),vⵛ\1vb]yԯh!읷"CwnYzif[-fMMi$;ޏ7Zwh'Z}`Dgh6N:V:zd-qnE$Q|aVW.e=@ v# P-sFj`H$8eltiwMg>I HV9(Yj-*G!.ggq)^+{#WhLMHJMV1#5k$FNYkh=n)K0\M;k1S@{<~J ~&֬͗g7Vq ^ 5-gL){u筢yƌUeNs?6k@KʹWyaMj.XHUގo1MqQ]Wk{ ۬r^Bsocțn.z-71(wpU^FyJ̄kNE~R/2(˸ yqkmY¸Ro5E_p"Ã+R4 >z<3G>55m.|{b[N& <]l:CmɘXDb&:Aר9,40϶cb)^?S98r0:C@󃢇*(ѯ5骍~#~3?8exoa;L'aMB"J=Wrbebt=<~Ȫ{AANLE51RZ1[ؒ֟~dlد`TNĿͼܡR3_]!*:^tla, 6PP @Ĉ  40@@A 4eʔ*ON|%ܼQΊ<}(Ą 2<QЉ%I؀ǖL^iM#N;ج"TxZ/yƈbCj5V]"ٶ_Z@UZ$X*cQK}+Y.?2yP_#szѠ̃Hdnƫ`jen-[fz1w܁&ܚ+wSqSζ#Kmr1yF㬏4ܯ_o :ϏأFm`;#)ޞbno:ˆ8 .J p@"(<B1AԃDj[l@P;v3!|3m9ïlg->ȫ;R#7"Q 4qsJ"$j0ãʼ۪L.lL&7C(Mn6} 0zl(H-R @5Tl(@USM$5Ρv%MW DNP"j(PNL]P3T4L1 3M[S('0\μZ&ZvZ _*o<3` 'XٚNZH&8 ؀s c, TPu"Ts*l` _}<4J҄(`CهS UؒFCTd3*86;=g6XтtNgvQ$gsVe:k-z텾%;*i`/&Z.+z#f0;WtJ&`7%Xcq6|XϨ#oVe"/r1T4\ jB-hZ" *)j%R~_W_Mw wȷtR6yj?f Z돢0 Ą"-U(؈ǰxax~҈0$9g{ &(JP$!/w[X9VOp+lbHzvNLy8rq̃;yC$ejQ{x 2$.80x5 ,Y~~UŐHNo\ҜD<6i^͈`*% 93*ozG(HAxΌd$OIgRzF!mRYY2) 3p/!жf p? *ʔMc #^m6l ѝj!&@RcOP:ӑ$42~lSa@sF 6N^@%ǙD<tCN( %|Fn"IHZE X)8gr2EPbѪ`b`]} 'ZE}J (?ԨBq{㝬Ƭ̯"'D&8TlZT#ileDD2W2]ix~ !_Yj Vptp gHZ, LYo&b5SKFU3Lx$&[Y8$ DPffi6 3 ’EBgY 5pJϚ8 X8Džqj*xLkHثH-{/)zZY!LRd5U3%tz,=J^;*'sb1ص]IWH 2F=ꓚWP h1#H6LG|&OF Mrk6OIM\Q Y׈䵝,QJѯ:6 z@NS0Oh%-k3XHm4~PSSFزѢ0ŧw`edڦYţ)T*ۺ~܇<rl;xܼ#h7Z- B[$k[)fMvĴyTlX/缦4 \cfpR}ui0kgT"::.zNu4Ή Uk';qD;8?S. E?wd]7-UwͧG> ](~SDV42Cp[0Qڀqp?[ى ,>luUf>,uwu8&(7Ljg)vqrGy [oxxhg#]igNZHCT@*U2o> ŭ7<~DS iEQA=ہߍsݰ&R dmk"JGkT"zR>r;bÒi(!ib:rl2W)}^ȧR-ys;N'I6A[*We/4Z5@f?L a %rꝎPRZL>5kһ̕LԤ~ͧ1,fAf²Iū*5*ym$c{$8OϙK:^E:(`=68B@ %اfB\["뚗\yzrYIO)K1w4tfFC`鉿/e&"jG6+fmp΅(p1eC/Dm1C_ u3Q5HүPҔh- !)4 B)5}';{8f<:TA-4PӀ.gM b9z[ʝ|eTܖJ=w֤ŕ_,"{Mg+iOƔyS'Jblۡl4%IR|;86 m G:w6TVɾ6opD( B[UKeQ#GIvL'&x?jf& ]._jԉrD\GSXβ\d)9#TU곱G?*UGMP<}Nk ~VV:YF6%C3FOh=ciM8u~ϿfknY۽^s-m:/v$+,6l0/a3!u+}z3oE'-9Ctl?6p>Ȯ%}9tї]>8&c]} HXoз.#"8g[^«oReenބW}r}#{x&'XIx n!Ue#g a؈%Wt}|wg'3w `V&g B;Hnɒ؏>8fh與G~ʣj wH C9u~}?>iWT~M =5pV?gv^p'hx7-)%聐bH^oIVWQ֓tI%X9#e3j+xkgh3{M}1S9pr8x'ٓ iMv*46i;LvC|9e7qGyyk=jѝXp k'G{A:hlEZ1Xvem wEBno)5緑Ʉ5A[A.̗3b34wks@x2YRFljxg1Շ|c, !frsiXcr4;V1G1r&b6Ii?-:*:*tDz/Nh" ʶI<ꂧI "9BQ)W@z&rkb"#6m*Z#z sQ<4CqI1,tGӡ|)lJxU؛*kSZٔtdG/t}a8|Jxt>*gYIb"j&e%@'j3#f,nB<ԬJEGDGY8zW(5X @^:6sO:)PAdo^ʮ CPZa:a:v&sj"eTJN5OBc@#6: bQcXlz "WZ H$6ִt@/j1A<˪>K3G-U*}%챯pJiڰJ$jڪҚ+{b; )}:塶kۡVqQȪ):GOaEzG;kda5O2V.ﲱ Β͊f,y[BKqFhilfʱ\˶{w}+{7$ӺQk:亳*>& Ē˲|ٯPLJ [C˳۔/DUXH{jy;nǛcm¦j VC72<~;;!1kxa)YF ?1KVvkRzRzCg1PJ lf:3꫅E5w3)X {[aW0%LTPx"&JAE6. zQ:IJLwcցOx\Me|7c7,kxK#D1{c%hl ?CDTc||qQA'Eōi9'|YZ9ҬOSr$#NɅx*sHqZl˰Kp!b;IJ\)}ckr20P,4Ot!g̀f2!y;&j? S4S%KMzŧeXOq)ݬA-O:za(ˑp\j=9xpfCHEiq=&f뗫s9{j^ݖ}<֨xt`-UDŽN-]g|st _S 33Ha7&aҍb rNW8  }1鏱mMgŞwئl3~ny (94Bb#!.6  zKTrq@>TO0Vеԫ}ẹ0%H;7].Rj5Sl:<?~,@ |j7b -P+ +B^CN1Gq| %l)dRIjK2K-R(B13dM74s5ՌSMiM4?0C3,3 9ۼONC%GDt/= IQDRTή0Q"sVlU91sS@i<>CmlTNMUNU,2eR0Ա?;Sd}>j/RduYl[uUĕ@ekͥTq5tn#^uG*V*XyU T7 [o%Vht3ev\2PX͌EsTT5 eWN@p=8Y>f;A9_A=TV:7A 7^j2esX y6ZIVRl*&ZJh҆[]$Unbj[zrޗlHoS^@0̿V4⡩\"қzh5|e1HuݦKgqJm7s^hx0s~!/\my1לRr ?\On~/IZx!x{_U&M|c@V0); ~é40hAF~ 8iƃDpYT58aٺd1! H-1%1] hD{F۠xEcݸD>/"qp,Cz7nLA+vOVSa m>ױNv3Z>7=Q@F,y ]'%ZL:H^K 'QnVs]Q'>8nMw( GCR>2",f. rdڛ^ N$HyAS"hl[fUM)cT\iqZg n]lG|*l4'9]3\Y91ttd(3"l@iǃϠ|cxHΐ$Y9Đ/}h5i1}"m\Z=Dn*.RHtiQHwE`L˦ S,.:թRYԜneFs.5|YXҀvoqlϙJZWѽ<:ӱz5a1F* Y Q"L*)hdeU8k=Ivc.:$qmU̪ffDDDD"f"f""̪""f   H*\ȰÇ HE2jx#ō 9dȓ'\Ǔ*GZcE5A2Ş@dIiT'O169R(ɣ)͟SKӨY{IQϋA%K,Vj;v-] UĮ}~Jtػ˶,U_3_k8TwnӸ zjd3{/Ҿm"Ɋ{sa^lUr熻[ɘ_ ;ڽ[~y6ū[vrكD8GUo~aNw_Ɲu5k7MrN!bןU4['ƸvZSE#fW ] vmY"^ȟxZ6ue%BQ蒕&Q)}Z_{C$&JZt-'poHbw]X$ieyؓxy8J:bFvi/4"|V^ ozdmf*\r@Va9gu 8^Vk׎֎Z@k覫ۭ p <@&+ֶ.ګ G[pv J/[o> ۱8+0W0L- ;s<%Wq6ȡ= Jn:F89MRfcL!IIRPvIn͂2l?Ivr<޽Pc1O,t@ NwBqHGΉ (EEt&,06ә45h2<M4$)=iҗfd_MA9ԓ޴i:5A0v5#Bn'IlJM/%9F%/uLrfE]ZY5&&Mjl2%O[Xúu5 e鮶d3b'M"h[^j#,[Uڸ.>[nd\EiF [&@b4KF`e1Jn%ZOhӚ@~3-a:9ӂ Z&x[ zL!AҊVɎ{0E3-([7m%R*Lة@aД8= TF%|rZi}\qG}crC&7ضH"a*oNlhoU\+i.q"1CgZ3\+H=c>Y5['ê.u62d5{!}r|Rrժ|g}4u㖈N㝶ǣYh+@HjV$ms;V v~_2s۶14/9T2X^_BI7枸hu%.2ڻ.ed_-g#d7!= 1s''9v3ALS_7U(D TrsK6-bѫ;m'U:4"bqԁH7,mO{]7rehnK\k{·.zw߫@X5>i:]=$+ ]vžf#HW KDv'[zFB{#}'1;{%0y˅d xr esNu=77_ xWkzd/۽*O~8sK~w+_xv}'8[q*2~#+t{B{SVLrVc7rG{H Gڅ_|7n|77BYqb.@!n,7AA-LWIH[S1q:HkNQyV6FVhqN6nՅ^xrVaGR-tySH+-V`EqX+ALM[F‡oG7n2DȆvm1R2972xm7w&i $/j؈S!3T ~wv`]hCexBAdpS9xI5"sd,L+k'd/{ow w٠0EJGz6|Jh$M:uYhD~zLkJq6bzw gȠZٟ]"Z**ue*o$*XoĞeRywyjy_}ZLlJ:{ :EEnlʞqa_QzR um)%I3uZ閧 *Z:ej] dQj6p\I*ZEqsYg<6AIs Z 9G )(#EeMn2Cedg~-w";eCoZ 8nq* mmd1kM]UB߷z$+sc`%ꏤzLzPk6įUB`}jR,oJ:(EnJp+DDW˔$]kLx7GVqZG;L˺MJqkW+pɔ֏Sj5S)<¬Z/4~EtcE]v_ɭkm{ۼb{KEs\S2MhAnhJ{ZZ ,W͔ յ{][TË/كFbHS8L~ʬ ;)<[LU[KRo$)HG퉾,mz/0x/I`2JKC+YVUH PxG|꼨ǒӉbS yRLQJ]\W{ļˬdY:=ꂍzಋ}Y[̲}lHlHLh/f~K/-[u@+ɻٟW >++\xIȐ׷ox_L9I$HYILYB#Y xifyeKYjyVԩo8bcU&TrU,`E.y)<J!R3SI*<'pRdo^҉Dƹ%H":7rknU6lz鞇[f푕8d"1:Qd%vhV,Gd+/r*j$nx[;u+T/ƚF'U ~kAfo kqlFQ ÆUc+bzl(O\s )#E@;UHY2%7kR4Ao}E 'ttdtR h,> ЂmH[Kʔ>  j?c+=(0;K,z|>9n:vmqo,o'{\C>9f˫|ܴ[~>{.OeG?<7d( 7_*-jr98ѻC>x/šj~+:$`X丧;Az.1OrgYڧ(* m t _ n}5r8p$ TZ%u.I$y F8Hqrbľm1#`ъ̘#+3MhMhFßW@8p)d"H#!=5IJ>LW"Y>f/I=RST)Hapcl ,;BN&LU@r,,[V-d#LLu odY#6:d,d,WNq= (%o` 'Ğij u=T!hA,2dbCPJ , ˉ`4t@W*Џt_ IK! *UJ^tfԡK_ZB>V"43OPc}\ShMRq3aRUEyҝu0V5RaqejU5Y_`nЩphaWľd\}$Pmѵv=^fGA&lnlPם|U`!3 RZ[(up*I:n,@a[^%Q) De**b %ȤnO. ^)km{=\7]) m@e|ZOnkWعM^jm*v/  {Y@,߽86i,'/{'!/`woe6qIzYTIm_Abo^KfkG̓`܀we,#Ky2\/ɰs@|::+NsfsS9̡Iw "@3:Nr2LWڷms u: +MoO<ܞZG,2(_>3Y7^v W$3`+zesg֋d/;~Xm@.Gx&ӡQjmx{nd}r#-}3=p& w?>٥mM6@m-i*ܡ j9|֥}6EnH/hb.sj(hh>Wv˛nFoѢfkfwStkD,g`G&lw}#y4gO.WDJ*|d7<4K)7eԧ~}V{%zPjxy}G8zfg}G}P+S Zs7~X@?zX}G}~m'tA'~'V~ii4Z#Z Gl1SD'uhB,|9Byz'!;gyzZhoK8x)C^cH|w9ig8uՆ%|&\u(w&c~(AOKnx_ay%"uwT(su88;x"s^hxQPwfr#th1wBe~mf5G:[׊cq[eHSHb{epwhb~qCU[ȸ(0敏's]Ǒ_ʘlQh؍df6fqWQGzhtG i"XXd&y烆8p+\`hrב gTr_'bl/-HehYmX{Шw#ZBr=8Mt؈hȑQєl qv'`)jJi`&uFivtbYFeXCT3H\^^ف޶qU)P!hxW~,BmɘI‡l?gXEsS!jz/a8l}U?(w{ Hhm䅙A_ŗґxE\ D`ۖ9YVF;)iOȑw}Ʒķ^t,I3I{I{Zw(|—vÜ)wFٝ)zvJ`V|sWVhZax٠Q,7dS6oAjh̸sK2Z2yy/x̸mgڗ~u(3t46Ɨ<9pZY𤜯y[%cthأj]꥓!!W7h0icXZtOf6H>X}ʧr Wo(A: 8> څp~ *qJv:zzj}WhY^[H*G;\*u {ƉT*Z~Q[+¥wZz4zs󅬉jxztzeg)CX-XȍLGz)5J{*t_*g6)otyJGiA)J:Uꇲ)0-{IIɑ̺zEOʍ˚UۯDfֆᆴژ/hIkwͪA[Ӳ\hc*:UhۜMv=EٳkܖHFۧ̚:+2BɺDYJ:nkUY]U۠#+Ί8 (艞o#HʯKt|ʺ{Û_DxH47šJ{ы^뺄f\+mi cӜt8kK(zV+}x+[I{㋳Qz,۵ۻ:X; ^\Kk[Z(UUUff̈DD""fDDD""DDf̪̪DDD   8H*\ȰÇ#\ Pŋ3jHqǏ CB(ɓI\ɲĊ.c r͛kΞ@y zpQDEM:S&uJFD)2puՔ0jWX{R%ٜae@ַpZ-އiqҝ[_q8ᆁm66Kcȉ"Kpk˘A;K:ʦ ujё8`鄱oz}p}ȓ+G2,STnwvԭWλ0wv{t $_ɟ{MFdKΥ$wE~S"WFuya d_]iޚIW19YjԢx7YYtf{ |Tb{Wu}&]߈9~߁܈ՉڀIk~wu*r"e)G*x-wi. 聜yky ,ؒwmu5P-9ΪܲP#\6P譫ifuP++ҵF0˭mVRXվ"GPKܔm 7%h ʋ2,-\y`k \\-ji6sxNkrNZVW s^q4`wx+Wh;@5m1DtMvӭ" 纷^Vw\3x θ('x9JR^wuCn軏:r k tyAx+Gt#@%@lAn:M{_=aO; Hk添]}E! XO}Ku|FC)'jAJtG?&4_@h% v!ǙN9xz[k/v!;*}E[@5E o9OGQ_ nW:@¯4Ü4tG?ʹxKNV񸎒F$ T6ѐH)7&4vV U(L!Jβ>0f>֜8V8YL3&;PzРSdj2'?>NE/(^m͙kִnӠc&;0ԍ<=EcמU%%8Sͣ o S>I/j Rbyme#J[ _V' E13E+J\^+8 fŝf\{LSz<tÇUEk a+*u:v8mo5Y2o%AVR>q4yʮ=.bcvw6}7O^BЇvs<[,C0J?L"IX[B[њ?F!ھ2yLJK;Xc/_$!׳7(~3 aL:GwҝV^*ݪCZ S2}-j7A]$[yS11ԮŸYU;96VL_74xI5H/kT-ff4 %nT{\18;[GI<޺}|#٭5 ;D# r<(9LUan٘Ҷ:H|oǶ{7 xS_. |1*yǎ7c|c#o7wn^:4{FQocGZand lbx~Ho7R7ye{)}z[s&>G|l'k 8_6xe7c)h}d-7]CAHL({Lpw~藃hD'f>HT&kCv} _DŽ4(oRm~Җald}\D(@m508|'S؆:xuef"vtpH~hhcWvjUr]q885fX~WT&jX6h'X٨9xFl؇#1ɷ&LvnƘn',"\(L_HǏOnj8s UOV)r>|dˤp%.oג8e8$;eZ!i bTA>ى:'yCg* Wz7Ch;5 k)} yxX@,Jى%@ ^W F#RW}s`F)qH2&>K)Vyfs8ゔG\{ KnhIu鋄9"9d)]*9v6ey8Y)7y5rd9>+n j)4yIr)mi} —'C+9Vk#"i<ɛ9ϩy)lyZJel㝼IțP gyjIT|zhcXLS9ids?i J|]S3T!\QnF*g选i07Q%zfqFa~&J _GZv蓏HF5x7p6q@UCiIGt|f_-w3^F@iw^*!N'e:7YiktwmXwڋv p}8)&ZQڦck'q50zxWH©@p39yQkʠδs7 @&tXk}֟jnz1ѐ <6 kީulZ*4B!GѠn@ڭPjڬϚJ9 Vc+®⪫>#R^8 VJ4jNrWN$Z9is㚫 k}X%NSn!狥"b7k*( g#5h Z}3[ "1MK1!#\4'fZIy]xằL315sS5f6Ra zJJ#.*:@ 0 [&J {˸]"C)+08':Nx{T+ta,bYVJɓ{ʰ 9,۴ v1{z "Xy0˽ `([:͋c`ۭ{W}k"sj v a ˽;3+ *Z)(U 0;"Y 2 cwcCU¾e+Y<<"a%컽[(ZywzJKHh͝Wh|= ؁̘ߔ+cM}Jș"jh݋$L һ6T:TFN,j9=x)b~ZNMv(rPtf>t؎ }{`?١xZɁ<}}b-|,Buzj wz]ԀmŚ0B1߁{m P  ݈fDD"̪"ffD"D3D""f"DDD  L@,Hpa‚#D0B$ CIɓ(SX Pĉ/VL %Û38* /5.Y3)̗5sj(ѫXU&CH*Y,`5۷!DBӦiŽ,KV z=S}{ ۶3D_FW/n5c3eƹ*DZ:ZD]^`\vD:ev_607^yiEYNcxHG%Vnzwȟ!de" jV $B#[[Nձ;XE 銷tW?Begԉw\o'hPb^}@/$c+w+%x drRر|&NU" AQgi(> STh\fsWg, * [S˳OW4&''R@*J27#ьDjƼ=uv$k=dEkcf(ìe!g \S:K?f,kX/U&3rA"Éjў ⮶;jJYDԉ[fPO"`cj]kZv1*2n}V"~3OxJ%Ns=jb[LD(ܢ,68;Uъ'zFtl&+Xnj3* x}V{8E x͖IZsom-r[ā#sp'恣=mvG玏yx}?1eh^DԼMSψx*䊣2q=z׽\[Oi$6?t CkW%$je9+<}NUMR ~dmˏ'>C7%*6e*⥹|߭0ΥqU, =b4P~-e?ai}iEXqö)|#RJvP;cgh5;$S'iWes[e^'< #C3;Fs_Oӗ,l‡zI 0e"]KGnpTVpEHtWWVX3s l|gp/HoExKKU;ŗf#HRwKzpv}@'$$dmWw 8N19fy'Nņ@'zoxMbw{xjWw5,/ 2T'>Qu>e/XFqHi^:%]{pfjsHlH"Hwf0 "TG'jNujB3{T9K$!mȊDf (SOUCG(T^rˆV%e{֊fD8#&Htshe4hQ HZWb`sna U$g<7ӘOؐUF?I4K>tstSswȍH-qd8rg%zFa$5P}&1dr76؆8`y7y(Ql"yl<`tYCTkX5>t'E'fDmUb8NWɒfs}qhSfp8TVE(['9vQkThIjsfCtmMm_Z$y{g(f.q2l4hhg3"dvIQW|ǩ^%h\")7mI&^f#sK؃^Dٚ|Ft՜\8\s[gUǝeq'"Q mq:\!x+&Asl$kX9V=t%AEhUAw2,ƞɠFvj wJXƲ?w$j'+^ɠN,7 2*sYStx%<g9J@JAC^l@tNFM物Vi0`vjpt%+v&9X6Ns{c~R\.P,]3ubR6| ʉteZR  <‹9U YǢ;<<# ь< Vת-]ѿ<ҫU%-͓ , 7,?[{>Aϑhч,ɡS\D$?-\sh])*μ=F \T-țf FjNI-i<ӊ̦Q 9k#ȯԻ<`ROmս pݧU]|e%+X}9Ll+,쌻9g{]JعΙެ+Mڞlٌܫ;=/=]͍ˡܧMs++6 +Ûr ٳٵ}Ͻޝ͐6m-߃Ab=ϼ,ˬ 1N:= Lݿ ɨл|%۾^4 Ƽ|p܆⤭ALεуE~8:;3 ٷM3>~Ʈ N<' 춟Ӄ?^ⶍ5:[ڃw"LвLmjCm}-=6 iwת±\S@>OۜۃCyŋMʖM "<r}[-Ж ?.؞}f~4;nNp͜NhՇnۄ\Mj ם\,r.o?`͊<MA+]<5E=m\Wb.~(m !Y= ﹃6bW.ꔝ>œ+~(/«/1~lnԴ.(b14Fƍ`%^M'43NBRPb;Z꘽lw=<+M+(v6.o|Gs>̿2m-լxI>jF]C@7ʚ;:ZO>Mђ'd>ЊRBbe LLȭ<&;ϋ~%:&=N.Ě/9m~@ 4H&`(@D ƒ<"̸+ cF EH䂆t&ɆbZXU\&` [8)jLKŤ#D5!?͉hE X!Il,ڪ\mÞH#fe FV]RNW2a;v0ܹy/<٫E6owV(ؓ\G5j\3Hת+» (s 2V F}iW^JbHF >Gm 4T[Db%WFTTDZdLQ]" Vhx(xH;HQ&5zQhna 7ڵKܚkc^᳝~ͨe8>6[HnwWOvoSk ]"NmZb OLyU)gS c23E_\B3][?k## /xTbj2b~cɁ3;ygګ;kzD:u]t'n Tws 1H<~v\j7KMwדNG<%fRb'"wֱ/5ΛHQa]BBa#xyīObz8ERA\Aɸ\X06 * k,]tK1IW 9$T 29 t5@)ECQʹO~sddBx$<']ӡ[@)Ibگk1H~̪"""Df̈"fDUD̪DDD""   H*\ȰÇ#JHŋ2jȱǏ CK"@I]d98s9`ɔ+aT)4%Q:o\tʟe\tjP86ʳ@B>-US_b[ö6YP;$Vۿz@۲A;*^ v ?Hnu~)y2Sye;ձ^%5Usa֭1\۶ݻg5RMlǜn Hx{f2y~ ʞn\,?kăgZ&T"PpVQ*p $|8'ZbQ`6ԅ) 3KecLFDХ:V۔Tl1æ.Q?6o  Y%i8h3[uNf2Aӥnr`5p7hɦau:ÉƊ0$E]RIg2!d%',AT2nJ$'KZSv'tLĵU)ݪ@,܊HϳL G[⚓̖x!*O M(Xh`VCDt9Vb{ԫnQvB@yK7YDB ˓,n"t.PUkiF 2a 9tqq)+klXF,f< (odr<.' hW9D%nʅd,fEZǻ-¸lFVMd:vHS0Ёfd bKxeʎ[i- f0_ק5-JkJy(@W3–4 f M rYžۗ5hn/X˾.mk9=da/`qưjyIl7Ya6 d7ܴnc>6~/ T߉[Ɲ-83lX.ȱ GύnW<.[E~g)^ysk/,vt"=H6+0f_+e[]әz T8-}/(F ;Y@76 s_6 p!`|~l:t{DF@Zt<8_xzx^MCqp}=euݩzk%VEGZCݘO-~^'@8[=/ֿ~j|mkWO8.ږM1~ywvk{5{.whvqwgXyW|x`7Yz8u}tV\Ge]g`Gl,H$hI7gYg!yh\yY4jI4HIH٩]쩁YM1Ʌ[7j٠撈8J P`9k zp ꠳X\9`yvIr﹢Fnp90E! r> ,p: gS uIj7kN g 0aj gC'g͈mu 0;Q*S&u {@ئKjפaJDeZgjzl zrzEgw*ڨ[FQiqdtʅD4'vv9mh:NqetFg6n*:xeګ'&y&ԩ?} }b(螲ꙸ:Hը.0Zܪj]Yt*Yj}i\؁՚lZk󚢸ʫʆJ$Ye8WưTZhڮ*")p:z$ gd~ Zʩ;o0 wjEAgIڰFxWTqjͲNP,fnAKHj]G"[EwRtٛ EI|,x@] 4+iS6%It>2&r;TYd*"ô[C!ZsugyT6Ackq [0K{E4ZB 1K @l*:D%C[yx, "KyPЫ@4X;ke26k_RA7;{DKL0 RXCD!C[@SD*)c Ee,56BwU Q\Yĺ&Li+˽!ݷ4|JQɍ+];1{󈮨1@VHJh ĉKVL{ ;~ꑊ&:frl dcRU\yf;*z,g#V?~OeH?˭ZNlbBxn}̓i㤳zVd{{d,\ezt̟e΂k\%pJ @͟jLz+:QT⬨8[Ϗv/qϾlkeIɻ[6 {nWeė !-+%ͅ'nJe,-: R6#4Myfs&wNP  ݻDffff"DD""ffff̈""D   H*\ȰÇ#JHŋ (@ @.HAI(\ɲK. ْǛ8,ЉҀ˕>:IѣH$#N  Q>jϟYU ZgʯW۷ r(ȏQ(ػְ0O">'b0&\x{D&^x0Rq*Q_3-S`'s\դ},S݀ .5FsW{ɩ!VAӄm%mtBaiiE(L ԀMfO8;H$ՁNz5avEXvE)UZ雏ZFuI1U(fb6VݚƛYWRIv)IhV`Z4ӟ9b Nږ%"jq)fިG2X&vӊuҧNFiQƉhzz"WUKƶֲ᧡UwRXfyQhXj&ݫN.M[Q^WYr{"žJ(ՄV`Jg M{hhc'd( dbM[c pYXÌqSUaO-I{ ϺZs-f7#ZI\Z`bƮLvlpaLt or*ZǞU}gdR),6uGDb܋ ,aFop ބ$r;$luuWwUؘ(l‘jo{eŏΘ7blU]]_t~ف(qdzjih!TvD>Ӗ=cJR*f2cvߜSWD۝^aE닂A~w4YU,JJ́1RRBJ%EM%y.&p}:x'=*) ٤) qm2)t8032 @F*:arN|(Rl}{YI1|s ׂfƒj&Z@3G^y1K ة1|Hf'q\VEbx0Q1PNd~|RI8*a@Hp& 9Iqғ*Y=!Z Umry4NvR%V䖸7H_^lH0JcOẇrLD]{gRb+dUZo4#hCdΎw³ 4ȼ7].$?Ѣ#+~{AHBB5o^gOUr(n47 ΄I%;Їzds^XِE&#F(Y$&t:ENMWSF=g?g:;O%dbmBnѶ0%Y`D|++P"itö4 њ(KV13Ik+$9ʐ\@Yz6:Y2G"͛^Wv*̱V-W; otfסٜR},lEȼsx qGkL{Y0w{iM=3 ɜn9\;EH0[Qʗ!t0Bzf(n0~!iVT͌ul6JD7Ef (^ZCˡSbJch:`;1k`#O$9+5LXr oJvѶE}`-$GdVt"?+OJ\ c)颛5kzgLs#Sx`}L9x\&AVm=M~X ?izο5L9dןV搦Bu\џF=|gJȰRx+iIT9rn)ؒ]v:Z:vJ5k>kfŭ]>UH6 "Д& vwɂU+QRs3f93b9֎ShklK{PuxIFҤ=&ݮ cp_bE8[Ê\Nx5iE+MZL1SX[^(ћ׭s?zT 0/@+ʍ.RƂO?'Y׽'U6O|ֆ^ Ev5еQ .Ao5u%nˎ,U{?'{!b"jTS(iðwEFEY{PЌz <1/ " ;JI%RY;^K+tP(JGn A?q'~~yfqrD`Wwvw41C;2#ya7C6v ,U{lETKjOY9%8{IDcB-v?2.Wr~V|uDt}.1B3r+.2?5E!Ⴌ4|\}kw}a,#HP7;/f\1S8 ?aWf3m9s$aP}obr`Cb\'A}dǦ{i4^&$qK w{A8V(s^vr(wa+%TCCp1R9vr# JIz8jF& }fDl`o4er>$aa7Q6+:cFlaN/X_c,!3bgz6& f}HXA$)WfK?e5"Q*&i,d4F$M2/Ըe>Ugeh.YHE #%gfn%$kGxePY d[nF:SE#).fh;WyfXM*?#+Ac/bg˸.)'PItr;McZƊg).7bq$wKI%hY"k~36&79GyeF ?9Cyf Ba=sZJaoCQdh=zoIɎ aH#%>陋A*6Gyɛ wf90_b8_yIyh}bucB{! 9Q>F8 pn牗R9{L@dPhoD6 THXdfy<IS(̩"yɊpWz$?Q*јVգMҵi,Xn0*1*.yb:Xi$vFkcL^#8YO:xɊXGvza6'OɣpxFJQڔP Ihs6uZ }J?'Dp0}Kœjz pgԨF)"ڈVf;<(BhȤMQ4 pH<&3aZBS4H-2&ejN4j:RC*{Kwi֞sye[1ZrMB#b|AZySꃶ$Irf1QɓjSYj;9w X!3'jkkJJJz*q:CgҹRWX`gk*V١gl%9;P)ij=+G1z'Aj*fɓʫ)親q S@ZKC'*Ҙ*$ j~!3ӗꩥd9hj#a*nh`7#iALz&FA{jlZÊi4)Z nT&÷%!ut$%:XE+י`68!A)[.x̜"7$j칅ESl#r*hKᓋA>=3Lx1aj,q9̍ga,g(y{TC'F5!LG4K_T1|ePϷ)1*,vˆ*sdcseĴ(JIBHHi{:T4 Th%ОetK{i<< ~)&v#uloj[ҪPlX]X2Ks65w4XTS$(?,_fC="/ח;ŝ\.shuCj%qS>W#;.\:!|qȋyb!2JsIHAZ;ļ=21w(\ &drB= d׮B=xiȑ-|z{X\u%Y4 ^T#*ZLڳ)VVp񙭭=ekjh=F`"9Q$kh"ʕƤX@u?1.v-FO*5{zC%(xם ns-{xs:6tCݑMvr8llŔ4$dxM]& NJ ~YB6k껢"$2'ϐ&jègLJ17 {X}b%t0qxKc 6O><9"(#8#r>f{o\HTc.*? ĪijdQw&s~r2TM:]AYZNj\1{PK1y xj8e,yke A7q.2Xe|1e.]ʱ>) Al|/ܢڌ}eT>y;I̭`a~)઒Nv3sz|s^MwPKap4ujӫW&xeN?"ݱTp:W7<.8mLq~QIAG(ޘwb$%Tr~Ow}(4 l48VN(a&4!7vlEB$2 Vt.Xk``JK&"44dd⋚Gmmjqz7KD|`K{.u@ W*YY;O)iO(w%SL[Q!HTأh$ _d_ʷ/@UQzJ?H=v$p@!ƒ Dh V,Pa d,H@GL"hRJ\fƏ0XN=w$qaĉj^ iC馴*A)T耰#S_ȵVpчkUQ7ܽщ_y'޴پͽrw F-+RG}NV-uǴqZg>`ܙf/"OԳJN &lO)0L;-AdÕzХp μ,l3K*.jJDc:#Nb֜k4Q:##ȫ(^: P$;IcI.+ p)GI(t͖Z&!ӊ#n'ORMTͬβȠ E#1ЊCCOќ\Er:=T%SC5&/\56UmOIzˆ+3Eu'es^T,$!#3PgMv%RA( MV ˻־T"pe& ZHD % QV7w[HysWq[J(he,%|3L1%p-<RX*[o*E\:] M 1L6'( ͲkR7I~A_DE.=rRc>sAh ξva5AOTM4=* %~8ʔeSL ]#mK{t ѰI W%K<*$JqLerZ2R;So#^\pLxzd0x?jbnEO޽Lo:1Р/|z" ǒSU/5S C0Ы eќ/,L0mN}IvZCA!Pإʜw2v*b@@@`` @ Р@@` `@ ```@` @`  0H (\ȰaC!:Hŋ3jȱǏ CIを4 reA t1#ObĉgH> - "ϐ \&fJYSȣ ͨu#֡Uu vٰ;E.eʖALNJjUWw=v,{:b_^͈p~iǁM({vD9bՙ;mMWv8ۅ5SUvYEE Je^E6~\Eѧ^}@.}XfйTlrH[m!8g1oE=8D!XԜ!LYrDv~G"]_]9fC 8ӌDjGQb6SdV5Yz*^xr %mȩEyb梅IpfuΈ$GX^X_IߪT\DLƪDɪ⬓h { ZVʊNJD] O]-j|1Xh8j.荘7i 눵:@k{[ӻw"XOɚn>Tf\mmyJѲ$ZHRom(gzl벺DC=LgilY_^m="HevgT#JVq'`*^+Go7mIU seW@<.R#7dz4PddC}y2'3x5eTTj~専 +y2ez}(ѕHi1a觀k0XYc!wEQWdF ,v2kh;N g"k&F^:SǵC:(JȜvs#U3'{'erI~yW41BwP !V&Z)c8X4r^TOO4vQmS(,*qgayWr+{yWBר.0_c>2IJ;NQljs ڵGNUܕXhT\EKs⻏oA%97)3sY>j*Jk'ԺX1hUa 4B?cOGՖ&7cMZ:*l]ewU͌5UJzӧ`/G~f#j;sze%pl=FI3Lp'1y}ؽ!XX.wTZ0|)+g%ut5 ^]n KorgkyfZƶqJWl4UuWE+:XV!62&TA &NXz>WR0 y%we-NK;[.}kӞDh"|j627eI!O`A*c9 .ejfB( hܺ3i_MZuh6t݊u]r%E*t3UJ0qkE%Im "ίn5KrQ'Bq^،$҃].RpskC/tVRY}|鲲one}n۳RL6}oƶt(la&˂$@7isErӢz6Mr[лWTz;ӇL'mP@)Y?,|Gm7ohd}5qȱO=ғO]wRMJ$`3)hV?>eiJzG:PP$2Q!G)K e_agp#|fpvsM3s| s{4_ ]M~6S>jTHyUe\&F Glf25V*e"s^ƒv63,Bճdk@TH6hpqe]v9qmhO#\Gl'QaDwrXvxxx3dLK}HPfAxvf ek((7qHAN)Ty(eCF0~vG3"hxKCH 1hjulxyЊyr?E)Y@v\4mu[iAX3YtkaOP3n`ggr(V*>|27IoG犻x%)/cNK#V3OUWXU?X60#J4eS5xM'n{9 0 4Ks(AȃvX]=<z%yv7?^5vkXQ '=.{g+|oqVep `ϨX+$AUVޥu#Q)h(Ufb0/ǒ^"bx'2H8I*S5R;Vx~\yR0-Ink7e|{GqrX0X#P|2hي鈎a 7uiWZHwa]!I4lX'V%Yي#X)bi}(3צ%cCv})I&W cG@U/H2 &"T JJɃ*bx標١ȡIĢW@\jI;Fww[dJwI<'eiC2ٍ!ꍙxA/j"!<S:'g%:2RI3YG=W%W3&ãb7\4/nڠ"Z/!ڰ]ʥڡj~1d):6\(0;&ȒDXօ+Ĭ^^iS8S>Cʇbqz:;#]j\: $ z"j!7`ɇ$7)J${j-Sò:UZHOD"nio)?;Z;ƪɩړ2/u-*:l8b̆ul۷ʙaKS@~\x" +j艰 K%+O(S"ڹ2Jô֞)pq9ɓl,YwX%JL{|B`۬$Gīb,UC+ԓ%Į qݴqsݪ5n n@yސ]mYỻI Cg0\2$N=`9"$^#A'[\'ylĥ k% jDk^庼- NE<# ʯβQ1-.x%-a #t ]29%!:lňݸ5)H:M-%ڝ #ZGN(Lyk˟ lH&pn0QT:<ܝsyòB̯B M%,v-z͑>݊k&#W\NJu}ZH},A{1's2CyUi*\UԶ4/'d^Aɔ,[g{i̫IH3T'ďZ\uK0H)*Up&mI\N)+Q @B<ڞ ݙqL0ά ع\blOr8ro~M)BA-yeKv8>3vOtA 9=bab$YǢ?a 20  Ӛ!¤-k*~" X 4 ,h z\バ< D+W> RL5ExP@'N1 4huЙRI> @TN% Vl@bX,W N|D ƥx#Ǹ1>t`*`$NXTpu򀏕+iSJT(Q<rƚ[7b\ ו Z;yC<yœ,3׸aܑBn5=jKZ?M;w ډ2o{vh 9zC+ *!.^.tl<o0=֫Q̳d)I2M'dGriKS␡<|K/p #t-L"<4$r#0;2*HuM#*dxiJ4ɮ ALQ?RS7\n-WRU$zL06qI;\kI]gYԠPܶR[YS*+zus5j$Ұ<*=Ͼ|%J.9ReNT`!*6O$i#jq*fvCUeh" 6S\ ;4 h7RX2=O*5] x΄l.\;GfptύB4_rÐ!I<[x'iD!BJ*C΋G"*]sՂHr(5沪% OH#3kd>9`VPNs)JPJ1k)Ny!i U*B(GQnm_>}E"cs|$9eZqMkYaSf0htKXb'i7Dž_;J3=&g^,9͑hr9g)L4$+Y- ͦWXzuI-)1Y3qMۮ>V. ݍxKbu _l.b2NK5Q-HiAQs o4 'k{&r!u=Lu{xA~K7 'IHۙII=y R-Pun]AvOjiԬNTTwV["\䋐kvɗa-:miTͭ;j;6Vf<4:i]a.LxP+%z5e s[^,_FjBE9η&tWLv;GD+5u˙޸y%tṍ .,.K|Ɋ >¸v;0#0k xjˈ˩ "ƃ1q!1+)8> -(Cr.FYd X\P);.BP")>籯X1C>bc40P ̍i-Q /`);-CT%e8c;?_Q;9չLT;Q7+ď#V֐R Edaȑ6ĖpZ2)qJD=Isҳ?ZcF`P=a+6y$@ g#,3R3! r$ 0#8/:+jEӪ8bɏA@b ?+S0*CC[Ex*s Ț0 q)S=ހS=RInAI61 : |IԊɁ %t(*@ l/s,t#.IL?H5cMT6Wɕ 9#Ki9FR#In$0sZ) y .ƁISGX 򊆪s vP `zLlCsNl2( >E%b rK/80͈K6`$uKK|" ݬ7v|LqL|.Ii,4̶tN, /Ρ949 S)DQ7O;'ɄM$>rM1t>b AB,B,l)  $9̚L!'eDxP6)x!bD AQ֤,O*l( } @ߔI8𤹢&jYRXD҃2xB0: +jK@tȼO]>Y5^DL,iKȷ?}vL*ҙ;He6DFideY!< nRq &ҹC{-F 2 $?']Q; 5$YұB]VOt=@P8xC!JP8ahÔj r" Rut; O Z%GT ;#8Ar"ہʯqsEʔ @jB@b9=m˱EIK =VM7*xH`GUqT59& - mR  zEm1ŨF!% XUz}!/GSYc" V*0C `4fZ }>zv^8ɍ2s'>ۏ" ٤-f.? X2d.?bTɊZ L !ha87vs .| #%ȯ2 bJƨ,fiVGk8O_]`u0<w aoU+d.@VmG&0X:TZEԆPG<xM uTwy2GN%9*))JBo66A9?_a3>Vog+ėc(v—?tasTl3x@ XȰCh0 Bh#K` % $K40X`p|ϣ .AQ5x"ՊAPk_((kl m *x[ ۖ@޶30p0ę3_2lpS˗etC6sޜba@0H \AȄ=WFxDBu ]{LJN"]t8q[>נ`KYvKun޽kM͛ÑWny3+o9Q|l#$l 䤓B1pFU8ePrJ1QEuO9MOWzE\% Ve `vnd`IE6CL GC هBAw@nIڄK4O.ٟI a -Co6Owp#ӞVU`:W(xhP]WcY]w?d( b1 iXI afPC?tB$ecUjb!@[NHK})YB&pp) I2ugLulbyE-sh9:qWW^UVGP.ڼ%dTaVI*f BPaߗ+-ZN_BjaoSI}"J Ac JTWPۺq1Hu@$ da \AG0C+k&WD @Bw۪@OؓUlQ%%cu-6[?`sP9խRJ8fK/ĘCMS8AR[h6_C"ʪCf=l &,rp++UD=MiS./*Ln3vihA_qR4"VGDɔx20p[qT) 8 m7l6bLB (IHD+(Ug~w].3 k]DteOG1Qwޭ,s(b0;d[p#mufR4P$1ꛗ(=0{m_d`yM1#׺l!8f'0@}BdExHW Ij/r g1«$THbSa.U9&,:MTL/2毐EqӃjΩVX":ΜY A).;?hܲAkhP9$9tKZJOA-X,Y^S}'5iG%$rr(:+b ͭE$M,ZK`SRsJHﱍZ#43MEKlRF o2|uyf^VMya*Kc$`L+By›^QICNNkޯטQB&!pMx["p,.oc!H.UK&7 nRm++#skeǻRemTb8~l/zdՙ k<>pd89jz*$QrS0bQ0i}TI9W>m\TLz-{"_'ƴttj2xh~*i8\nnk;ok %?kLw/~nMkZ%۽xrW)]dKpZJ%0x[T28eoH-isJ^,ufw|t|-n QߘVSnZaK \nTÓIw.[ /Foot) A* I}N -|"P`Ӂb^`:~G.S.TkZQkV{ /8SYڕyr-ד3} tozEk}Q :m%se dØoOPe=LSZ?h&|FW YŤ]ߑ_A爡}d@2.IT< !M( !WC"2D9ȼ:6ijrUa[h`PF3H„LQbLLHa0bez#SF!RHe4NXYW^]Q|SQJE%?NOODikх!@MJ Q~LfK f`$av#G GHcB^aX64 ݺELX!%WxOd Lxݥd8{JJ&4S )&AH_V*g5 LQrc jieͣa k GtgЀK YWYxmjbFΧ0&)&&ԔEhW&, djeHbMk $JEvgQ6^NPHvi^4ZbŨȴhTh-NRFid*! J $*pYb70ϥvfnmblBnV4jW߫Ikqn쎍j)(2$݆+knGzg?6HYFX 2h񠲴yp6rBkBz!X ;Pj`P}|EXS=-F0!#1-$//E .W8/JwJΖ'Kq"sl ->sd^t Bkl-e$oQ$8/j?[$1#EJ0:ۡssF 쩡$ճ͢1zxf6f/1ԯA#B/LpRn#1(Doq*O6ӭPT-hha[No_G[Pn=KG63DKO.`A>{gOj9+odi%fBf^-5UD3TD?֣)WFhnIfRY4oɬ['sM2D#!EsKtO&$jrr&$ZS5J0N?4^Kvd{^uNs^Բ V2Agf Y8ncmn!*f_TeGr+O6W H,f? qShs3;2Glc-Ϫ>'fwdG6JN$x;˺p@fff̪fDfD"fDDf"ff""D   H*\ȰÇ#JHŋ3VlG;z|qǏL\9ҁʏ$Qy2fMl|I3gOEv&â#2$̒@]`OHjM+ufZ Ϊ%RmRKƍi5ʺ\b$Ia9XLɾ%VmKKR%@Hw⼹wNa˺Օ+,wiȒ ymؘMתM*U`9aêOw܍kk 7v1_uE/ܣswu$zaGM;vgՖb Hxq$Y5Y]eJw^{W& POyG~9R9SXgGK ZiIe{Ud,yT%إ6頵Z@*h *.@M`$v\FΤU,f8ɻyK$ Jo ri,f$A /8(G hfeevVbB9_oCy6p@e|Ub(@{,g4b6 Q̛ȣ +kPgm=3a*UK * ē.9*M`վh.AQ, c] Wꅇ3 0+ & H kHtO!ohu}'ByIJ9wAsdң ltBnFr !sȥM znU*?vRZtvG~,n|}A 栺9oBDRH0& 9¯{qIQ+ǼYr<(?EOWSY "0 &rj+ %d82Qfn<yGTe3gIx7$TՔL#ZXE9@ 2+Qy8 J+:m?}͕`QD :EϢ.t5$wvu7mQ(䯯ULcI98%KwIA-UA%@QP P@%Y&+!$I" F ju6rjDv$R1缹C0BNWH0> ^R;Y}MJ㥈Vs{w@gR$2Am791Z97ܢ_GƉֵ #QwCv$ s1/kG=WCy23%Z 2zݡ ^ ڡvtC[u`lhn aۉ2ţE']Tåy;ź;N U{ER]lOR۞p~)|﹛5WeΜH\psOC*\p݆LmmEdT$\L?QF,aᒟa׵/bJ6yG3;h6oXi'Z4v|:* i R!]m,ӺRItj`ؔ4R)mq~G:.qU릇 %TykZưtYkPL{myD&ɰmO N<`5GUgAtӕۜ ev)~ޫxڶ̺?d[,@|d9}g\0VF ܙ!О=ryK|t$_sUte`jI󪬇ˢ QTI02QAj(Tgf'\fZMT;LIf5n--0x(M^s.EoDN4v]SgE/.d(sF}z}tZAK{RJ$ß-VC74#>b c3OKj´:yWfv[&F- dn՟Zl\FϙTe(r7Nc)\a0R=.Ah^3j\|%ywb $_]L2`a@lpfc4XSDBƇiGW̗vK'&NS1Akf̥wzP^F'(cՁDQ`$Jf'+sW.] 7F0(0IdA1VfnhK1..D>{Gi,TV]U"c(44,SC7WvՅ^M6NYuMng0~0LQA9#&sb3[!3 qU3b7W3FWTws1`"Yw}eSp‰E2745$D._u*%TRg6&X#g%WxZ8g@hs4^0;P?s}P}XD&9ssgݥ7*8Fe:"F(I(Hut\'u%&p'yG\yVdHPaK)՘6XPM6D,jF'FDW8Iegv%1xȓRŘAR;[)\qw*өc6VZR?wf Iv:9a yY9at'⁗DRayvśDh1e(pn/uChב((割s'x_2ǖ6wk4R&Nw{te;/"!Syib4vo*=NHE1@:i@jg?viC(}p)eƒb+ut8%[v9V3Da#9Ӣ8#WB-2I|tuِHG|?B?LQ[E,KXCH@'pGy7PG;}SȂ^YvemţzgmU=:y[ ik1dhߚQV%iVZ=i8k4t0HrOF93ҹ(d&rS./*rz3(J\‹jcvB5 h"/At9qBƌ!2c;Dj#*-n{Hf@iv v;IdU$#p-E4~[5;J&&0,4U@IYsyemڶ=ux[ 1.OU, l_c"0-zUD٫ `X1j6!ZVFateY" ]CSNQD-RSEa#:sb@HuG^[LHcihfbFV=^]ۻ5f֨jң7k;E;:4RAYx;F^bCJxCegek+~*3c#'Z`'ԭ諨BYn?ôʟfD5u%6LDgԁ>Q$6KVc&$[Q󆀇5rc@e7%`Z Ǡ>ՊxQCm̫ʼgQ>i]bOu]xq* Ԣ*J-!Q3V xys"h\kķla[/f˔NLlySR54,f5! > 9%PF8\r"^PPƌтoh2GJnη=aFgQ6IU>rYEXN^+J<*jLqH8V[6'R pǖFzH-igL9JëycVB|8:s'-9fcY?8"φ)CYҢv!P# wpihbo3"g1s}|x H/vr3J!!NGPA-WY Iq u)λLlֶb2== R+FLQS]&ui%4_1Qq6-rtl [͒JhKmk~"r$=n}fDU(\2#ƃҳTffݑBWx5bְV`jeK-{i,cZ'W-n`@]f"4ɠvt"܃<,pv{6>o+$_>_S38J\jku5x.2 iݚkm\dwXQfafjcE>]@.6]VRӓ`U^3&*,ZW "9P2+`FaORWcuI.n-j 1 N6|Gɋ~8㤜"yE]VBƒ= 5:fQ{8޼JB Bꫮn. Bpx Qy.3xEuUδ~5vnlU `׎*ܾ 5Jٳ;!gXa|:3W&h:WR,h>w(nS%3y, ? _+AK&*2Q7y`ɵ老î0m')m%N_lؾ4_)0:_P >ɷ.[ nWGOȚCPP/2THQu25_4Vc\b/~OC[62(C!EmCxl=G "E@p2Vf~oy:|՟z' 0>'Q[.?j te ȯ+OR_HuCX @  <0 A 8P@>|`0dx8i@Ly&H &DAxtP*I|q&R )PwND¯Kr,PF)v=k`dIszt%̗=`ޯ>(モMIpT-;JuU-NH,ʹHN4o)J+Q!xϤbm8٢K,SO%|ˁH+pŚ{H`,,G%Ӝ:(!#3,\O*(ԎeFZdQXڠ $sIGR5?@nSMA4 ]*Zql,̠$? "F5BIO. ໶M !wt*P:fC*R׌4k t^t c'|[i @HRJRʨ )>jśzE8O3aӜP.we0yWL-Q՚~le~&Cou4:@2ӏKjnF$kAﺺ:K- "Ja5aV@DZə;g 1EW T;q")_is:4(߾~b=Du0]hoɦv#3AYv`6̳}[VYq5y;sA6D@#:H҉v: L[4t.*6Z1zcz5 {hBS/R;'<cS96T<3C􊐀 Zܘ2x"O$)_ nԩLRq;uJ~ØkL 6tbl@z+Ȼ'M2``1q.zYrR9+vbÐ9_\ԉIc/˽!W Jd=k_˥k;Hsoo6ya\t-הeU7YdEvwVCpQVVFe҉10K.d}ctHa8 t%ǠeM PEjyePDiNш#H%ƀ/05X؁BYkYF>#f>x$s)buuw F'W#t0Gf9~o҈>tGXU;XY5קL[IdS袮(I_NR1cp) |ԳK C:ZhIzamq[Ʌ%_~W)_lňM>MʦmrQ;IAڕ[nWvxŻY^^o1%~V-dAҹ hyQY2$S9@\mHfeJIPK'K+g2~R5ƌTs݈W6BM"4(i|^{P%J޶[o ŧuI\4~ YJ9jk#jJ?YСݍ\V2. nDYRdr.8|;u0R=cyʣJV`!(z.QUD+- j, e^{)'՛86 &qժYp&08Is vL.t ОД'We.]D2h7aPr{5E2óAZx"EŇza aoVͬ Eo!A= 7,fBykqCFnr#*Oa{Cxfub,b+[ AW복ϋ'hGBU|TA50I<݉*tLD~ua6V ]dCJb1,Q]ץH7d_m*wdHm f[*]`I;|U.'C,!fx "#;Yyُk;,q+VjmrA :"u!TJN$"C:k|w$oXXkp #0Nәb ؘ㝲 ֐(aT@ce`y!i"3u,]RD4E4j%uLRԧeР6z5*ˁ\H+BU)mINvtUb#Hdʼ]3&o^H o'sk15).m, +ةJ!H; O6J4@ƥ̴.߅-hO%Nl8mP}Ď(qʮ{ ,As,ʲ{,ݹ,2K9ܘKzݽɻ<sk.I eϋFO7JkcXIlbq!.5TH#FpP·ixR KEHcB'ǠbΆzg.̣GE$1 m𤄔; |>]1Js "U/v.ԍu:_4NZx=lW|CCl%Vsin#"]ID8z+ETn EFC!* h@ BH -6rtZm|Ӭ^bM9g藞,s˗qHD͋D<{)i,xs+kgOϫ\ٲ֌e;T•!6Ce66ԱM}ɖpGq*ّ&%t!Ut^,ݵ }]/0 [&%y,HI$ Y8Lcq*3 dmn.NJSWH׮ѺK)fJ Bw3掻p!|=e-" җft2>-N ]}^mtcuVb;HO[p67<]UoX+t`sDXfQHrER+I]!y<*΃٥wbȀEvi-Dɲ z*'dQI-N4 }h`)G;C0UwHKu&(N+A/m(p&\X ~S~,QIR"g@aCJLeͶAb /BNw'tV>#jauONwRK}ΥY"Sy`rmyK%,b23d)ii&h[#i2D2ñ{Dz@U|EuiH!^ffgqCXngK%Q`^")_ yb^aqpW @el"MҔ/iMfo8jRU:cN%HNUO"g68fqRhUo ra?$eeWtB{eswa?HtQA_gA}|"G%RPxxqX+ah 8oQpvWwA^ČyFCbL*2\=ӆwY_'O B|3ҔYy#)(\݇q0hm"W~xX{bȏI857N56sG$"烻 \:?H(QJ؎ pWZE5;Wk7''lb(G'i@"U!%{j(r.~3Y'xR&X[]6=Ebl>'0Ѩ&"ppiq)|Y=|C_`[NĔGdRg%y")iyv$1kkvbe =)9wEcGqw:|1OAV>24}P?'QY%I`pi;NxvCsWfΨW_r{2aǧsIuݳ _هDi^5g@7W?9hRs;و-8`wm9ttMuhNzsv|i(dA9iqQ/`E* /Wӟcd+?x%>jAVXGKZ)IK/[Ťa:"Zq$(-%˜0:,dɩv@"qG^%j9v^Ǥ٩q>(k,6/Cpj6W*ר)tۉGGįJٸQK46"':qEqj|cK'Bd5//W]*Rzx8x4mA6JtJkLXy|Z`_Ydy>d&1"o:/dب#4I@/} z_kX {I[I254Wd~rGaĮ0b"'OGY_>gۚ>Cj>yJ?c_WG{VʡheiETˡ)˸+1YX:5&t=dv\7 CZ#W(@sA77 3;);U#zݫ84g fKܸ(4 $\yT*AB`UbA;f>&ʡL/uEf,L8V(a,V`s,psn:i={T1ۭAOL!%[DiB̄Zj/h;vZBZq Fdd.᱃s0!&YQ2j*TTSR!\˓ 7;\Ͽx'`pLBTa0uI[*B]5'FEVa~Q\Lg5KRmkgRϋAyS PLBT>f2ҿs.#.xrkgx0̍ 4t1cWbDZՑbQ#Ibo`VZ851og"%qyM\p< QJgX||el[%Q>#A]23a6@( 8Lh/떬պb"9'I%흭\Imlۄ$j{/V@@MiljĬ}m{]&B/5wKSZHV8K8lֿR^֓뽾lzGof@ عJN[ϏW6|ԕUg+5jW5ZIE x[I~C&/5൨vձD'^%e|Fd>j|qqjd/uK+Z?N<'2u mhL-5Fo~;kYK.& |Qʜ ]%\kJ KZu!ݪ#ΣE VN]ɒ432-KNV5a:_:SuD-xJ]gл9|{^A'"&w{RN5iGVRS)2R ^>At}9Zq[A^ .BV`0W~׊ n,O =U ڃԯ,g~Sj*SyZdVI>y:j#;= g&,E]+|>)i"P5hSkѡfiS~4}2r!8vk=*?])IKfzt>*fw̋!kj'{K}Y[.>y~bwn2)y8~k_Z ι͍lQ@@ؠ >8H(P#B p M-]XRL5k*iAΝ;0s .Xp`H,j4hMOT5$Xױ e+دi=ΥK& ש[$1#D$8F#&>R =4Zɔ1Y.hzj7jџ=<tUQy~`/ֺdwVٴp"}{6\mRη+W .?HQkJn/ÛԖ<LȰ,`>ɔLZ/#)0Rozωg۩BΫ79NB]B\Z8tZڝF1"MYj1ROuu?ﺒD{- G tu{r ۛD77lR)W(fa1m*a&/I3[vZNW@LnbTƐhz"F mS[W#4KbgAt/H+a6D p4 PvyðRhuC؍'nsCdz$>?LgL*$K`dG QgDQ-\R¡y}ű#D߰rlBaJ g&( Ϗ#q1ё }2$HGJ gST4{ ( ~R,5s@7E6IUV=RfLdfx"-\Eq9Nues5 u m *$7cN1 k1X\ڜ ;b:Tkx$BFoHE^(L\ԠҤع);1wΏ<#p^s5\ΏurR d8$\kLCU|EGPM)aYm H?~Ye&`hGz&_wV?v'CťZs[J5.'vg!OTT,:u%rMBDV Өbu,X@71^Pg#|[M VDzH:UUBUr`N/F[Kcuצro5+\JQn4D%S`d)x#)avrK/Etf~J 0x(.GwwX3d$/7+;d8m Kj#w$& B=+u= JӜ%/Jlo׬Ȍ4ȓʙTU["sjAOHRl1_P.}l]K,"ޔx@2R5@VHJ\'S~VsQ>-c)ZNtdJsrH];6q'w;.I-yvA6̷W{.(ZbqhSЭ.|;cJmЪ^^ݭIʰ8nvI#x`(* [ jؙ 6ʱ5; ^jZn1 óp齩$0p@>jH]#3{iQ#T/;A @y ґ=. [' =aH85G8+*9( J™?4I , D) (+88!x jsm b9%"nG({M*Ò[<y).!2AE%p! `h+9Z6GN;-*4<#J1*I95cyP9FLBD!͡˱`rKo)D*{:-ޙpG< LH$-ALL$$F|k9A*{˾1'K2"*6d9#-b (]4&I!tag 񓙔B:Lk(h:8>e ,f7+AOK} ] (>z\A BԴ@ ]9'+({mc(ҿ5K-*` ɼyC}9W Kˁ?"5 tDO4f'd#GqI1h%-LZ /AaOhιMd zٱ?}2YSiR#2۶mIU[1#Kx?NBQ(ds /ꞺS8ZU [ԡ BJ4U ??M|ʖ <;:u$`C.l>>T7qD՜ԜQDqb m%P(;ҍ a}THy*5*+ }1u( 73:;F$VyR2P%' N(CH ى (tLu'>XbYJ$ bijNtlE `C JɫJI 71LRsLPKY)~L6–ėMٝ'lĞ< $1)L1CQT+&1N) w{G,}W ĸ=۴)7KPhZNi=4S9,1&7'Y̘'ϯzԏHB?U l] 8Y>b ţ]#;SA!7/߀aY@,j1G=e_aAFj1$PHaʭe 1 <4u=T#옭x?H2m/eRE8NE7c``a,y֪<3"AҜ&\+VP!?N=VKg,cCџת)XZTdMC}b:6K =ϓ4 h`PXBe/:d != ,;,S`[ZIMaS\J̦L> ZX<3EǡY'XS]CReLR vbPT%h,&*շ/NADNB+k;\,EJͣ1<$¸#qwF̿%e1:0Ci, 'evB>ѰN? 5{ XWTV1 7$(Iõ/!jQ0T[pU -&NW 41Р;yzN/0E4Xiåa8tE3m ) EzLZ䵰Fi?`i@6$NBy# ~뺸dUB nk ubS$ByR4#6^6/sD 1 T%ČH7Y;bwobca=4Emu/%vi jJJLW/w '$?u"o3^+z{7a}wPtTjbQ8%iBVV<7Œi%,ww yB&ꈶIshF(vw'|_y y7e\&zGQ[+ NXczScQ_ 8gTa:|wX W(ٖWK BToq3Rk{ۭ$&< EZ,0iS|S7 ́z̓'Cѳ@a)Eck&Q+&KtAihntJ [,>k/c `Cb?{z~4|P $ #F,PÌP`@ C ƒ ,Y2eq:w칓NB$(R v"0ThO<6jjZLV^$u -X-\k $Eo!J9Xa]$5'sd'Ng>((ѡGNj邪Y~ ٭cy0Fi}\u--(!%R$|Y5^UPVP"+@no6h*Rr*W47ui@<`uiFf{Xp*4&eiSO3ТK:K29 4%.)RUw钔Z2p_BZ &{1l/]ڋwEnRGRS m嘹HPPU4tC5xцN=SR :~gly~SU!,k趘#rf =UkbW%I^H4 Nzp0ŧp[QB@N#A{Mԓc$o:VU ~񳊥V-r/R09[@ H#^UG3jS4˔$&^AZȬc XgD$Ji|D?YcE)m<܊V>-T@CslI.P>6W1 j\ ́,DI&s0I+ dFAX$|#Ӵ8rKc_ g89(f; >+.C%/ a59d=qoN %-ſ1P<%:He> hd^|P,DF1dezH'.PU eX]SJY&J%nYʹt,D7xYKvFE@#s&^ DJ,#H mtB/a[t2 {[hIG)T2e$03m?$hg/n^!^XD^`㷗d':N\=ZkIV-/,fX]nZ QȀH>'C} |*̵B\ITH9 bcRvy K|=F׽'~KIb.bCNԣ:i_ya*L,OjrܾJJv^b* :;ڤ . ft"d J_HJ)OI|kHQb¾-c٘XMX7Qz)ef$`\֪m]i7Ed ,U]!!ɹd*Ҙ(K:O7 a W 2Kͦlscc2Ɨx_XEkdd*@~ i-qFfLɹJt|lC_E dzZJ @n&mi7gSűoC蛻ed&J5 <'=@ E}h%\@;JlF.򻬃L]}H׾$N,w +՞1 [wu/f_^"dYIXl'7i93rdIkLRڢ(qE F}VBayBK#Ϯo6rsi6W)Ava$qtdqn0q Z0ęIUG'.1IQY g:nXA+3~_Dޚo˩L}]Gĩudh=^HLS_A[u`na Ȑ^$1J[[`[2[ _FHE@dL-=F wm+a|P,S*I!Q[-YjV)CtJw=嚺\@ `j2щ(9L u`Oۍ@g$~ zOT|SyXb ͵ baE|΍n!)G,_@pĕꤝMLZ܇浞s }@,8#9:aِ3;V56 EKm =dH\R_b_uYY_+\D㴈cԘWm \{ZZD eQKKr0KPS`DYxٌ́6BQҏ'#8VBW .WX`͙3ϰFθ%ڣ1Mc-Tr` ĦPU0 bN%8+̭ >f5Vfyyوc*JC>`} c<$jJ`[]"#z p(ՙ`e\Aˡ~9LeZ)c8Rz&iRa&u]0+2cJFӪW֕dbXc _j`6a.s(2'@_VOM8%aNg#EL՚5D= 6_]M} ~ܘXWlrO Hfye8%\Y8bv^IvhWy }5E}(|_$YGГP2~fV"*@9vLՕPH8Vij$B$Ijњfb|Q>B߅hJw(`YyW\DKqG**O# ,iV>hyYZ"{m)[ ޝ@֙ ]AoVhE$&onJIbRΩá[jN Pl櫩>j(G^ppq8,ʗCGר fJS&(ū` GkfUHLv_y*4i@H'X~E!¶㩴 p$^ _t~Zgۜ|DN[&uqd [f,KEkxvUY`,2+֨@+߹MΈ.PmՆj`K(cpQpnh b:ZMUbafj+u2:&ܽP=[۵^TndpSM\gؚl"6[BM! qwf`M%lG钴Yu"HUܺ"!GEeyslɊ QJ/+(]`ʑS=_B'\0 nƼs~"c~x&kΘjJf9d$Nh0(Οsp"`f:TW bVd0޲.M*kl5#onS(/p9!Ax5ZhC`fg+h%P@Vgjg~ بS%LY bIlb, jlZH~ilqiq *I[ֱ VS6ஆӏ+ {xr*b*@:!g.-^6Y}F)[pِ!٤TX&i\:WxKZ~u-faR)3?MM&Q&)b3?WHҠT1F m-qm2"8{9-bցSc4bK \jr23 9L4I86&c&3Bl6/{/ ΌU4A`)`I10`6gv݄'2q7)q t~o8%.%TMhDf"DDDffDDff̈"""   H*\ȰÇ#JHE2jȱǏ CIɓ(E 0@ 0D ``n|0qHI4僢H*]ʴiƕ-}S@͜;YgA dNE tSGϪ]˶JR5+6zMȀϱu2-È+XŒ2V~NΠC'JcfPzr]3k&{۞n?ͻJ/> f߰1[եIxس^ڧcX;(6H_-=8Зno$Qx kS-{V砃٧߄qiauWUUv`e车WYD(!0*nO%\$ y=Gbdvv_P!n>0WǞi#|*f4;^ v]lF6uMe)OeNu)cigF搚kRo]zv^euf B{M䢤*-AWu'vph訥X" LvN!4+V(]G*jbOj-HQ% v"lt4\XMY׶Qxc$P/:DЬX" v캫t`U|kMt٬%^:@f/<{'!3] ^93 eenXS"3)KtltI -`^'$TRYQ'Com_o-]}I|gxE)Ԋ6/͵o+f$J? w 0ܵ%6-?{@h.-Q)^ܽxrxWذ7y՞9MjcY.t_֖i,n 0P:C?|*z,Zԑ@]2޳,L%}Gß'n>3yWg_9 i/e::4h>9^cAg,Yf vk)5r00+. dLOkJ 7rA=qakvҽ)BQRĪ7G!r’M0V *@kAd@45A[EVG5*LZ5#'NpmOTxGѤ$YZ1Ԓo($ Վh$7VP2߈СfE% 2x;sF?EULjFA7ZZ.\{R1qD@M)*c*\q+f3GxVdFhUʪs$ l,Zu';l9D`mY I j]U.0~ϒ{LbKU/A\I"ub(VRUwZ_;\Үת|0H6ݛJAXAo2cp>i%p$_,wؐ*X$TJaV7M*&Hs2_ ׷nutDUilYn@)x c|$ P{/ 2"P_D`mNrOUE}dǩ9SW(gIjuTY& j# Hc@cy$Z{<6ڇ%6 J+ǥ,]%m+SLLܿJ3iѢ:<y?@C,i}P.w|I{F6M-L-GtR~:M]'(;tZ$ʡyV0u,n5n}zwG~o{9fmָ 9pmIv`[qf(M^ L35\\>=vDeW/p_>gC.Af!) nB6>_%NJb65^t{oT9ӗ洷:呰$% Ӡu:#.;ّl9] o>zL7why#!li9JD8wY'kSKi ,>̟4Z<ݱjo+~{}> W=H#%uI KLvSNa?50u7}%e&uGGE#xzL0`ာC#]2BQ*~'~pJ$&8<2|S[UyIFn|ƶt f\F0eط|!hFGXru"CI"|Q`Ih7v=E3bQ%+'}KoKΦglʆz4ze^?j/^cm$}AҀ_MRԃ+e"5Q~^~Q(^\U+21)=WF6OGe}w\fGhrh}8eFuF}-R ~J,QHɣ6,Aс{T(vW5A n#Q%gcyPq~tΆqU3wjwΥHzz4:Vz=263;,Rxh:4d2qp1}-w>? MwpxooˈW XiA"=5O(06S(D]mfH.gHc |g{džqwPQd."mԀPqNd7s؁Xy2(Vo-dYz?.肤(zt8ؒv8J kGC1/m$OM&M5YXg{c[p GHY!FS0Ir<Ǐ}6wzYq*F@M].Q'ܡVSgeOvԙIbB4~OQy\txciiEWxɔ"<$C/ шԑ)):\Xqj6Y%'yG-;Yt湉F\G?6Q% B+b%bO:2ye,QR].T jG3("dpeq!)};l?IrP~kFT5`"#™Ks/4S]rz/5 8351ɡ膧7hysXQ$-$]Ę`*$cʩ|,S5Ʂ{ yg +kVE~uj$.`wGTB* l92)"*W1Ne3z1dzѦ7 &ckLQJ=K3Cqt(7{sIZq4"ӪJ>҈f +Nkş:*O5DJ#T8#EBDV⧁`vyAqTjqiV"NP!F#*IǑ7IW:⺪V[)wmb+u Ȟ>?lɞ-ͦz*u5q`B~a\u3zyD: ]"RGQ%vbwq}!ATdqxZ@9>QBdG:~z@rEu ,QD딽Y)I3QI7Y:gud([RYiF'z eɚ,JjZFRbӮYt4>AS4*zz%#C,UALuy*K ,{ vwv'; m4iwrsX*1)7CYxC!ۿkEۥ SiQu!"TApr`$l2۶3CR(A8qC5,L1xgjYp:1!?>@"["d-dj ĖEl{"78t! `adiS\Tl97Y=MW^vYp)DzQ:$1*j#mn r|6!R/5EHRT@> 7cH&{L[ <Ȼ[łQٌKzc sPUzs`δ.[O9#p^#xL>%}+/ѱ|G /_ ̙̕LRs͚lҗVJQAWN"Ҡ/';<)* ,݁$u,8m/2q*"?-C8Di}RE1+PAY@L ؊MCWẅ́79 n1nШ[HkLّ>F,_26fr5"c5)!f;f6 WoAt?UyP5^܂q5'0޵fkPܞd߽ 4f| &P1:}YߓK][ ^Z.L¹Ǎ˭+Gb8># ǡ#rK4!Cbb&R[Q/'3(.;Dkd㕡H^}Tt+LX7맬KܙK;D  p}4BAnU.~ęL բ.ӘrJs |HFPi:izC쫓F[B< qAb0ʙ< ݏBmAֺ :ݻYySHN5K7.Bau"LNT bfO]U%^*?Nj*NJuKIk鄒"e(ΦdFb:M/dNϲZf4dfO]-쏢`d\$w$2|.S/J)uUs</?/Y܍ofpH> 0"XSXю()W4Bs-㕹5pA9t@ d` RJ*.PEf @Ιpb4H RHQjJ Z=zպ57'QZ}c܎lR‡ /hŌht-Җ_\r 0ȉS@ɧ ~bTs[G[,#ҥ`|n[dkUd}Ĩ:Zn] dC.Xpb/r]|x0xB;*%9H'N0fWp " tBPXs5ZB)7"*ݐ+-z.9D..p:EޚN;jl Rziz̤zL"Z?|$`t{25ՠ$!|4"* i@3u됀0j'RNdѺ 1ë.@*C'2Cld!." LB94$ܴSO 3 Lh.JA.{ͩfsJDKS- M.4|Q Sn.(ڲZkRG_44.L:3=I*@u$=O>Fu ikRH"O-4k, "{wۨW`CasKĴ:0Oұ-"0QF9_v9eݕBc0+Mi!wYzI׉UHUUv"$Uy.zJҘNsDEbEM"ZYyU6@#HW1幹e(&ZL|"H{).v{S|Rք#ґ` TR:n5fO Z'0!fbN9az[>%wI ]4hX2#4(ʌa`0!|/6A+Y0%0>O(O\Pv)UE@["\Fv"dZS\ZRMFXG<づw5Nd: oyKrJ,=q}\HrS\E14$hyD6gf$KgS, 5u"-k HHYJ>7 Z>N .^$1Jy*8T.mF. AW[#iT!7Iȡ٫fvB'y%wbM- u@Bq9QNmSd/}>Bl/ bi &!MT*>={%@yHVI(Hq\6IeVڔ&SzBg X^ W5;·nβāi='BhܦLICI`Xzì/~oqNEXҒj^Xge]eҬ']`#@ViV0Ȭu2 ZUR4MpoGԏDMsܘZ%P~ɜЇQt 7 rۗ+Յ\لP 6n֙S3M@,ݠWCjZ&QL [+=b%d+1E.7A:[ٵnuGFx>RqB:Հ/ʌ ,4SʉglOMJO4KOiq'ip dE]EN3'XpFkY" md 4IpU6azyjӋ޶f{ Un@77^ [r\dk%gJ GzQ^9f*쨀^! g lTVFn]Rs%ƆWlЄvB Uw@ݔb$1¦ T\Pͽq[ݔ>uLU`f Z'$'|s\/nvԗt LY%^F7m0mwϙƹ.E5%`imxu5#l=eBP(edD.qu ? ʧ>c{N_GDAP9#3A39fKm} =EgpuPgK#atΊ |t\݀/'!`Ӏ#! xa1S"{;ISxnni @HzXA:Bx&Bn"Pi BP(!LB#d%\*z4B!",B 1 P  L= 7 2A|ç8 i?D "C& TB'D"ILT8шȁ>̀!*DA+9G= 2Yk*T>4.+DiDHHGF&KL“ !T%O4+d&j| Z}WC\DD!Cɛ+]$/5L|_a@;|@F>|"gHd $GF,#FGTI4_zI>r)tG0ǛDC4J_4 $JU/bXLT D ˄d☿ ̉D˰dA@k3brKHx:̤|=I @ΐ(LF䄛ᛏLDDDaԶpu #H0  /pOPOYMҐ˰ & 5%P4AВA J:2X)3y"=$@r吷 \]$/:‹`-79͹ $6rRQ)=QҕXqҜ8{I"3E4U5eS@Ӿ7=$@<a'H e5 Ґ"Ljp/@> ~JKLTl;800;}(6#z {5]bUة Е@Wy.BBy7W!)y. h֘*V;gPk8Dm+i3@Bczip >eHT Y݊xJQ_U#NJ8~9!!jB 3X*hrdN։QEOXd:;WAr(s* :FV~ HvHF]ta]ր%MX}e͐eQZ؉XU$)MTRWՌuY??ԕ u5אb]Uьdh%Ň=mXL [Ԣڍ%?B-$ W}Usep S0[JB[3:]̽hfiQe MƵE-2[s 8ya t5]6Ѥ-k=Te: ]&W]1_um5 ݍE^Uٵ ܮalS;3M^Z_UރyڰS7sTʭ5޵.>*HP[ NS}_P5܏_e]#VץU2\U`X^ڵh'` kO-ED5a 5o S޼վW"a+XoXUmݖX& ؍ݨ#2Y]pU]j<^&װ> F_=a5QFY2)W}\_4V߅cecENcMc82&[.%r4p6UU&ٿ\i:.d,YcOMVef"6e !EU'RU6q%\=`ՓXXI_ T`>_&Udg(Fy,7_~):Snc&_c>VU5m `9ޏm 2h⎥ݗU&}ƍhPdi.ea^n>߮)HW5fqjTn9h'Vp h4 OY\zfmi؛X .㤆a֝f?rq]3!Uvv]U fÕ u^u`6 1n:ku $Dn\!3iU}}hTޖ[i=ad'_~hݜ_-Pgi6ffkpp& z6^6Nf6_* ׌:1]2g&[9 a/d eN-잫U$uYmAdhSpN_VWS%F>'_mfugv݌sGޕlZ #r̆b͙mtdW^_*GBWpVTu.m'Og"$p=ZzlWՕ]~ݨ}B]1U(dd47~}oMFsDvFW/ ֵ%lvM_nkEuT2UUfql?Wg1}uqeo^rsU ԋZ@^rxU{fIahjvSgxz6:`^亾rf]ގ7'F>e m1Rf^rܨf?.hGM-՜Q@'p]NOmRJ%z%_nrojW0e&u^VO{rOqzYo>e~l.aӛ[f?m4FM~ Q,P~/tlB_ͺ2z`?E/7luhvg-s%_Oag'S^l5x˘ N t A"4x0!%‚ fl#F A(2*WlA@Ȁǜ ThcG@ IR!G>'$̃&Jp*O7ԪѫUS-VUŒ'6HmHMGM&Z/yψ8!-LBQU5sqDru[l[ThpYn/\KR9s&97ӡE;ֈν>x0"iĜޙg\3W_UVv|Ç^m͘nu~fQs4STM\rv98\1[\eTF4M5\yEy\mEYTQXEy$gx)6-N4wN5$e4TF&2Tv@&Siǝ@< dImmW^BT*Y2)"i=wY~a$yЎ,7)_eTBh$r9 _uٜH\jdi@3dHa*P}]u֞vg`q52Q&n!8^6lZ8X) ,>zbkͨAy(~+*-S~_V7Jz^[Zqr4mTتvO.VTɩFU(" *{qi6X{cگwI-эwѫvܦ@ܪNYL!QCv*vjDq,gڷ5ljj ^{Ƶ6.,V97&'(^whl ֓FFч`^Q ʦmFg-@uǺ Ook!w&]3 ׇ럪)a0whW1Uҵ [b|unoNOdi螫Vƪ;O|.jR <Q/0awBT 4[ꗵdJLdC$J \oF;:jA$4>sf2,1n54[Xj>"Y_|dH|9RS-{Ҳh41 wրNG0aժ94RD<_qƕsQ<;&+bt7W"}leanc}0LpB< '$ȩM-^TFuȌѐH %hHMc$r'EMfl}F9!a4 45Ay,pOS"_YJD c'!c]E\~+4dƨfΈ' tC.}J͘e'2QV!r3>e#Rd22~T]|P󌔊lmAq"jTƂ+ \G (Sc^t D͇ VT;u֌d8(1nyfx JZQpӬ|s[}&lOc2g{=U 3Xn rC\~;ުTUDfYm[aTfkUHo#dfe7N^V#^!2jx7U51nXf>1,NcBM4YX)[]GYp ~kJ.Ea;-H@̪fDDfD"DfDf"̪̈"DD   H*\ȰÇ#&@ŋ3f$@@ Ǐ4Y'\0 \)p͊y&*{ C+0P3)ɝ9:hfЩ7DsҔWbN%ERkL^݂e{Ydϲr-]rOr7Uh*-ߔYԫs# sސ{j&9W̨"k7>:zd˩1 p;{umZl?V|xVg,\-A =" W;E ~9w. zjW}e[wyTPYFW ^]yykR PE}WJNN fӇ3&w$$RA*"`R'PcHc78% 7_G02֤O.BbIٹD}0x&ifv&X!A\v( IP|WcG&I(IFBz'8&-f+ص!ajꕨR Ty8hbr6#Ψզha҉'έZF{i(gۂ ]XE@v s!I{|.R╫r/&"PrIy %A" -rs\|s8r@3O,݂%P)KKe (iI1d3t+,}lYt}'9%E׮Z|6\4+uFsW7MJ4a}߁x7$$=OvBEe}$Axǝ}wGL޴8+ޫOwcްwZ|lTI Ot|?-  ӓ}N(lݝO{l&q[W8|Tz€΁gcЃ <\{( oc XpWb*% 㽡b '6`F5 ]>*- 43NŎB-ID&y {=e1zN4Shׁ*yH$i#** )8(.VQfJ6 .x:D)]W uF3248E`ȌD`3œc@, $./%ȋ!`bѤ 4Y3mu T2L#L~h5s\J6QtQM+ ]TӁ#*?,řÌ|K֘"Or p4*83?qi2\ #ߊ(D9sJGn(g]vT *M3:I$HGhJժڈ(bRgvkVTl'Rg9@aKቓsʴV՜8IFyb4kP 8X.^7K55 $*[&Vbj9Yv{e[Ujw+g%םmҖڸW۫c"IFݪ[KFao+ƪ:܆e3} )QZVLһ`lĀ3mOnTGFpz6:|-}~#ZG\Bwz W-V걿]X/ .H^y&poa J1C'8}'[`׼kAOua;T^ģ5Apak#8 ϒLoc#/g<wJJ!' Q2 sE"Py)#ّCڇ 9٭4\M0bZfkz2p<5K{ RnuKblȩFl]L3kiĺ$ܕ2:W)vsdy٭ܳe>󂱤Őpa;L7G2̫2Zny֔Qo̩{{38u"_pG\Y63*AǤrYk3\oۺone,>+*#H*S y;Ȩf37zdmT/1nVpvi-WXzѧp.,4P;וs\wrMA]:vH% =pP&;CX7Ū]LN8e+=ہҌw|O6yx|/2Q c ͪ(oxFH#w"_==BΑ] =@7op_͒ܳ_,B>)/~5UP6y>}_ @~'~c4|W=Ʒ-xt?&RX -qr7Wcty\VyF\%r&9t~mpD$wM[Svo_ׁi"3ay"-+J3-%-4#ADEbF7%Ps%:qRyW sESy$~nv Xԇ2Cꇂ^H`cf:>LUZGC=?;;gywOA~G$Fwero2g;҈vf^(-0XCy}8\q(9\;7Xmhh8Xc0"U(F'pqjQwFdqeemˇaDJXEsF^X&}ehrEnaÈfiWiYJhv6y+a׉bI8{+n//Q:i xꉞ9`$Ѡ:ZF g󟀅Hyc9|Hy꧇ zOD+OV7$g"^ג9$7b7?jrr{rGjfs4Ӥ?$2rK:yg5˗ا}&Bjde'q!@>UXh9s2By: a!y,CvR=IIRRʊJi3v%p) * ` \I;ȺX'v4g9ܸcJm#]isf>&aj, nrzd_ԒvHǮe#SR,fCr(br=%ʘ:V ;9bPx;AD2zA^FvfRʒA?D4jm 3Ww/XZ2hrl-ux33DʄCANKgn:QxVdҕpXJ(La1uC|~gbfjGyTIquZS)L$)˷ꄯvl1'P^DJ G{ ᄹ{:TKAX \yj뚺kq7N `d(eX/9p֍U:`KKR4eP: GASocUc1y3u$#֪Hc˫A#ikٱ7ˋϻkUZ9+l3K*gwxKKH%H&XԷˇdbzgxtPX0d֫>KƋi"Oy6|^4"w#3*ȾYa[I> }uSUl4ēzzeAgTd|XCv]5}+Wp<̎s̫㱎[Jǯn8C0-qO2IZSAdTD&q1v0~[rx\\':/xzKuMҁ9#wkƝ3fXmJ2KJmG]mw@ƜnիJ.]>>SX6ǼTN纘N6]H7wk4+'OhQb}L)pPRhV>cLlJgLa$R}d dB!HNӝq#M؞" $)b:~|x؋ה =2n)hZeGxޛ򂭁\9V"$.Q&/27ܩȬA޷, s0*b[2-@d8g$`@2]?^A2\$'#g!!o\~=&+'K&\K*b,O13sQxVoWo3b83dTqNT`q!K%$C&7^,w׭O˿%y,Dj@G7ԏ'BvlMg1 M]@@t \@ElщVh aā/N8e'Cz K3}8VZ;^ tԎD`X, 3 RzR9bl2O>? ; aVedѬ.26iJw-`KQȞJ Q<|0S#J֏d!ݤtvM&L7z.tv=P/0M {Қqmo_e7OðӇ3_~?12 XLT#ez݀36ULMda6+MI&4}Bey.kP]m٩ >%9buUswhEhγ&)j蓮j!55ٞ`5{h9س^eKE\gMEGДA~ [ntaZfvM' "6|3:[^&`q#XU=vQ= er*]ȓx[ѧ!.˘Ӥ: *^D5CyIRHU6 V% jJ;z5u]qT5Z#->/z%V곪R*.^]=f M2($v̗s,"U9RuMh&'ޖ6[YS Z3]_MsZBנyV-uڭrY~ץ|mQE6;%;u[We-]X& T޹׏8 [u .KOˍ)~ut]"k:6|aֵ ";>׌T6+Bzx2F{s1$80`򉣚Y8Kߒ*րUNse'nOc ^Yxo Jy'qe5y.sX slUO<[:ʹq3U~ Ҷ"K#"X,Wض8Ғ^JYaCʩv-g f' S|hՉ)[ 6OD M9*젮16u}2s5y=e=w>+,//V-w;bi8v`=;M=ⰵ8cԨ6 #~I rD]0E[kYdDj;g7ߝ>q9zjOZ=θF+r?G>}wrutcڪ{Դ!9t=d˼W@Ȟb6V;u:Vs}l5v9GZÜfܞu,绐k'?lSD2GWg=z-df+ؕGʫAW:Dߛцf7}>Ƴa5hʗi[=Z~dƉ<}}6|^wKfPsqWM|ORwSch1o>7Yu~'~eqUQhmyfhV{40wW `RfP ĆzJj?i%F[QV~}'u,RUdDUZ2*n6uyYEhTvgl7xNROeD^6W@#yrlyLA[Sogiq[r3vƇs:heRtxIPxAUOlT}sRWFfeRgIVV7(vVd|Exv.bqi&Ljl'猙b81DGytfuVcWeoZ'ǨH[荜h_x{evpH]i8kI'ojfevDXCU 9QIe:v{۷fLW%ypD<,%YZ#Xig2h$sk72Yi`58ez匝6v1 $iwofS֍{6Q@F5Yב_7[BegYX=Babp$sxxt^)E2pn9uhɗ㤔-buc WsS)`VdGi{8ksQF$Aa:83yFqUuElb`[t;r9_y:)yUYV-(:҃m%q'IQhHl\u 4;tڌ,]vvEsu"6 _ٸt)etcɝTsSC97ylfgpꦁjx=ntm w| JdgxhzzFQjtl|* i}R*J 35AJLnSiF8JM4M#Jc5UF~ڦZW*ITcwj$zr`XϊS \#[ª": eXM 魫Xħh8F>W)V2w* [0nzjilV nkiKUګ /rca|:#z[{ ƦjD[3%ΙM 'xff""DfD"fD̪ffffffDDD"""   `@\pAA,P  X CII!B"F TTfM*1&S:DXhѠ:a]ʔ'**Q@) 1BD1'%2XJ2³ 6Z쨷ǓRoB-q}8&̘mLH{`@(ؓkXMC+P1J\HaCORWm]rl)_9"[RvyN,ͱ5>]ZϦ/,4l;cR*WO:=Ee!c6ټDdPzWq 2܃ 't Pt;1$bVicP|UxyQZ}-2EڌfbN%ZVD^|TVM8\)Id)!OGnh!avdSL)YBHce'RTPͤ[iLQlj)B! ]r*ГGa_y`&)Lu'i ptEYݸiHRu}jlxSXzRŵB[H$1IaxlN:N :Fj+]N ]Y(UQxd%Vjgrzkg3չ54DT[eMe"I)a)2ivBmG6nKO VߺjbB捌EއiVs\*.Q*m8%D; M4+U4oZ5.Veٌ|C7QdLZn8i8\= &4D t*p-Lj5O8c Q}-yDj*v4eaj3ɷƝy(D#ЁC8U􄓯9fy"/SI:qzN=4O+{\H'߬+Fk\_ΰNVKnє%HGyYc];)ҩ> |>_q+HXGLf IlHY6""00"^~1pD:Hk4nݶ=hn Zs, !Ԥ`Pґh|%2A xG(8=91JZ񍌉^DZIH/%bFbRO62Q,[>Ӑj+~Eq+J<%F@R9F'5cɺn~(s`!c6*Qf HK)Igy H·%V|!Ԍ, 8u2eNs4J8A&Rj  Q(RiRӆȴ9 ZT7[VD{ PyKkR8Hx1Z5U^e։Mv;'ff:QB@)YRיL/iҀ?miRbz_~HÌgȥQnǁȥf(Iθ|,Ma*KXVgЩB}y[46 @/D[[65@i8٪iBdW@ޖ|Yhr_+%b)Y٬N* 9+I`o% e@Hz+77ƈ1yK}'}YeCe#١ũ2Puôy0Q45T.3ԋl k@Y:،pQXQ𠜋ष (PN=1MTnI(–.[#9$Iݳٳ0IQqʤ5M|1rZ7TEb 0P0Ŋ4Zj@an P^/n{6lAj|7pN% jHSGd'g@P4n1X)xwրK$.UX66r~8hPWmYsOe(ѿ98‡Ne7gsR*w=4Zm mmc*s=E q_ |9mcN-X1jb5*8*R{fD?vÕm8~*-X0m%p%/ߪٳrnu3Ad{-̏Xgj_nr oD#vK~.@y_TTidf"rz1F1ҙһed c̰ྣrB+ZW|l(7#:mq?_f) zn;uZm>v*YeGzuWIc~=5&#X_xZuM>xF|5hxxsz"F.qZ8aDveF52S ~weIr6fL?67h`gjU^B{e7hxW\L9/1a7{hX¨uȐǸXMxnS$&h4Q!+LnL{#SPSdׁ\{ PX$xcG/@ZbCH&ÆWG] zx pg YXFaFHb""iNX,pOYnsyFf#xI6y9 dFos,$+^2„5ArVyWƙFZ7mP6w+D%&3]592*N'T;~|ee3=7z>VcU&h&\J{bnY9`fT0 i 9hӕ H2R08*ؑjɚNH'YBz*FhGQaF(H;9k9]dI)%3bhf(97w߹̶lP_PQء?ybmY&'y>PO,YfuSח=vtc`?lS%HC`K9÷~6,:h-֨ |)l8\*(FW,PMV͖[0 }rac: bi q!;5_hY_*FxlDSѨ/!}֭{c 1ʯ! $%˛[c}|Ŭܜ[\ЅB!YuS|Ƴʳml)π(|Ϸǡ'Iza2+m꫙|\q;ȊG}il5ngm¦Z/p]eh'K I\;ʗk5~8b,+5UH7,ȃԇ}ÊmMh:n'͐6T d}'"jv$JjLxUmL-UrDVuV=% $Hg]%ؚՈ==ɽ`7vcqTHbxzi%o.=;FC}Z=kShơ'\Ͽ}a MgMO=܅,tSv^YW~eĔtfl*b.%)_f{ܺs}zEmtl@L1'2[UN~N >IQ )ݵ鯘]ltSql⣾_s~rf]O霃}[  \Fԅlb~'yn^BѮ~_&HsNi=kƳjWi)蚹@޹Xg6y:ש\3S%A̦Ĭг{tRzӥㅼ}lod"=QgoLI2 6cḡzC*ʱS'q>} 1 jYװB彩#[Wj-̼IEHJ09g'5/PǮ쀬]wy] D[Sλk!b?vj'R9[^:ZSNZxWs_8ɭƎ~:L|Lz͘l ֟]zCZM5:` :@…<@4h 8HRdH xDPC+sL0AB58y@R ST<z eVZXf:`k294!B,is޽ H#V`8Bhp’ZPC,Rq'f2b{7uϠ.HsZjFJUNXG5lYhϦU0:C/J6X/Ox >xE 3N==8RA֊0Xq%az= .S-&Z`#*P.Zj.ᄃ,8:*E`!^b( α+̰-HRÑ/BJ,j c)ҪH^B άM@ݘ06'0DL-  - O2߃K*H B4z܋`I*.#HZ=rˍ6"%bSM ;a3 0,q9>ln+KH2KTҾtӑ"{SH]# \U(k(VF24hÁuhJ4sJcbJeC; FmEE?jF<G&Z`$+u^*l"E\ /H$سB{@tDDk'TTjq7ysٚxdiq骥*pKB!x2G.I\9y$+7L*Σ02>餓(bP]q9KJ^裪tಌ u|uV EnJXb )zwqb^EPoZ.:nQ/ ܳ)tqL.N7 .[#&  }KG`:`T%NQЮ1`aʂ; L Lgyo}{ &({ٍSd] OF ɥH!ZPTC0:pF"ALhry`iϮ?>$Bٝt6XP@" )dTH(zmJ:(BaasTg -&E*RUĥ=QZz2/2B*gAd.i D,;Z(!g6M*@neI2!@kLHiͩ#4)HW\3a(3J'4!H* Ai۰舶ŬBbmzh8"&0I^,vjK(3%A%ʬ y$ Jq,$PFœ0iMm:D,MkJ,JT6Jl *^ݐ`>PI4' ,,6kBE3Q4+"➔NsO&_D!><ijjӪ-6il"N#BHQ?\*)e!TF.'GmR:hVقD\PϪuI\0"UnX躥V|2JfRɥ:3HiPo!pLA巛uYm&>(tKw)P^ DȍVۄlqP̭/5tV7q &zTf늽,J72]Lb " AP? n2Ӟ齱Q rXML]%sYeUW;9iM ,hl!RF2AHo ;\ 1lGr /{viR9%rsDl RJ3:nogC#:W}Ge %2hZfY:Y+0 \gomi@a䬶e0Dt-ɚUyf}`\ͭOY,,xWǑ5{jԟ (|rxznucCţ\Si`dM-V )Ա-[/CY;a۲3P J7x1f_&C(P-nQ%Cٞy' "Y4Z3$_1s{FTԵҁio<Gg /^Pa@H{?p .8+#YKO:C SvNt°$6AP}x+Vt[U,σֿ(osD9o=X&b8RNuRhl۸#SMώd wYRr"%rEj3WJaI7FPy2P*4rjw兣gֺ+o;5J.HԐOn>Yy)Lm MY#|=/J4[?X Qګ `"0i>12{+{p-٬Wk CXjs:_"%q Y{=Ar!q9AKӶa;PBzPP]J(6j7@ģ->컷78jk6:AB9qšϚJ 0Y 1˲;@;e;h>㻙ÇإP*s2]♮Jq(bEҼ8C=z5HڎH/8;A!ۜHG| ɚ6JC.ߛјEq#iB狊*C3 ڂE:\|]\8ÂÚ" taH0ʩHDX/;9:(8u@+DxE|I»i-Zڨ*9(PH.+!ñ6X oGLtn\K>T P3D@=в)X 5<ʸ>[|X+;9ԨcHZ%Q $Ԋ̊əM<89}t =N%Y\\5r6"J,JNC@ȝP., ) vlؔ"!&|እXD" [ ;,D=r:\ 6 PbE%céQA ËL~a MI PMQ AE8I2(N>}BkP1L˜M̶ G93d+,ûC <+ )` 2ɻCȣASr͢H>Qr)J>Kr֕ ylT|:%jy G{*J* LIRƦ /Q3.n]UI"FA [=;%P1uf 4XG=+s7i*ښRŰLM ;)P%92厼U6"xitD<ՖٜzFoKh֪bRkVp5 jkNNX\/鹿F:p iHI=d݋̐/m”ň;JU}\ Tq'MB=i-=5:;RɆ˜I FUۚpڰ )|d(G 8!38`"IXXǫZN[]I7PUr۴ /EHL1ETL[ I-ڕኘ"ΰ=h;rML@2`Jqҋɝ@ْ+<܅h ` J*ݻ>f mM I"}a\B 1<62kj"@"L<ᒒD~X= J2zZ*b5H@!ӻp1K8ϪZ˕>[Y̡8y0TR cl<ٚjVG;Y"X!f;4߬٬>WƈL@5*]OR'j5|h鳭fb(d];(13S]%%c\VQ!I<`zhkg @8i"k^Ji+qc0ؤ}fZ1Ȉ1YHv v*ЩZ,M{m5\.6y"Nq@Nѥa[p5Ӑӽ* e'UsN?{9]?]KY~F`I%؂!$>ތ5l .S>p簌/NJ$eʎ(^;K2s}kZ ;%y%h6!^r#C2Ow/yh {ڰث1Iu/ڬA|x y܇]x]ʎl?`~ @p!B JL $:LǏ G,9RU*x@1,@2 0g? XAGP@Z(ʕ.RN%8p@UӞŊ@ӻtX @UKun3nW;TA\ĨqG$?>4i$ʄc2؉ePr6@lA}=+ӧO"8`ꃻ`ܫe6@v T厗̴x}80zG 8=G^6]r+R :4iYv@W3R6ՄS<军P?Лo15 'nGUrc}r(&)UUu@5׍$]yÍ'`Tqo_NThX[~ l~m V`RK9[l1-RPf!oFv&SDu\"s[)0 (Т/yׅ@VXqR%UH^yzIh` ^~d 0C__mme}"dRJ.K5aNO|TQƶS!(W.U(`ݝhU TUuK]ZeI[Hbn'bFB)D)g.e29$ܤIMT0=+OlfaR!GvA,amub%00YU["୎]7x ؐ.@y+0n[KM/mk{J]_摖$ڥB C.)1k49K lhQg$pyu\FJWZy%]0K*Qu~'$M2EXbRUw఻) PKn;b@]{a/4do0,(qP7Tc ѭ2ٙ9{y:մ+ 3̕hU7{ፕua@v˝?v@gjjXlR:fKڢ;݉)@X UIR$2e*HmǦn0:Ɍ|#n,T:QVNF(q{a"wu&zԸ?1HӖR#%0`kHC6;$jT ՚v-(VX3 N|(4ҐtƑ=Zz^L[b|uR@1UFh@ҳ41 <[4%elZ)DBP0cp5}D&pYʊdbQctȭXsߤ 6I3153DΒ8!0y֠:{ֳuWItr(qr#rҖf3vZfLli#"lh,6s 2F3}l`bsA" ݨ#*QU"~Qͪ41$- Yzy 4xZr:3.렢"琢'^P{>w_M%UHP"4OJmAL!-GyEI)\@TZTYd^GMMץE_f}׶ b_TԒK@|5JWEWCfd=M,^#`v` Dh`jQm QSHX0FX]_LXHy0ZRU8E) za׏1Δ0 t]qDdg]ĉ,!Bԅ!XcԍpG\ŅО=ć앷dOrx rEXU"r4* ;L fصVYbb20,G <"Gx^_,Eb@8SWZiu# "e$$ =F:F@c>^ bH$ PX̑QXLXtܞpԛp3_(՛=$_ #ac6Rpc7G 2ҼCq"KdCh !!,zښ!DLP8ņQEl|cP1I\B*݌&D~G|daPZ% c9+Վ%Kz&DI`I\Go#xD4Eሜ^eLaF؏S~HEOHZ)>Ufnb!<o} `x.
IVW^GrLG3Дa 5ڪE$FQdrETXι *>vʔx; _!&5zȸ@Z}X0}$v^%Z^\&(黸Mb4N&襜X~E\ùhbfL&5hn]&Dnqx9L @_Xl = iܩEFN]llJ.|KOQX&JV\z d` {eLti!.s\UhiD4%hs&6rAbf-PX"=DjcH$]f*jtL/(Q_&1Q^،:L)reF&ϭ*d`buGu&*Ȕ~>."\+eStSSwh.KL4 G*]+ƻ]pZ ǿnȔr hlBf~J&PxlU ɨL vKFk(~` _p҆-bYd/nkZlP| ҧ1֨q)fR] :.a"T .dSݺ fFޮFz.ZﺦYeΘ 庪b\RgQ1a|,ְow$V_.oLNnXF0o22Hs60~.fHdr^* obuwAlѢ-kf nLn .e2[yϪnԌֱE=sZ ak PEtYcEcqdg>vfd1ӉhȢdDZ,v[L1 1g.Ŷ _ɇnmαLK@2YNiݒ:"5%2qFչeZVF1$l_5f^YO ;.c2^npXܗII2]a%W ȥEVrmn0EFYNr,Kr@hVW;N#32sᑣjjACY[kGnhϷ[0aNI˾趔+cT`rۺK JF\EL[OM Z92Os/)tZ5 G]M5FKG[41`j/EfHz5w!W2?ش2JfE.UU`}6TmK\e$$Hc2VIM6AP2g1f+1AtgxKu%iO#^/1tkXm|2۩qmtnWuF.6T cqO˄s/7l6BwO31uwꪩd_EykTZXpIdUcbwT&!qW,K, #K\9ߒ\6PdoV kX)Qxm8HK n1:^K'2u O^//wҸ17ˍuvvk]9]l٠EXƾvo[Δ텬P!92A^մt 9yw?8392E_=ES. ue/E[pu"DcLty9Ngw)8yn/6MVt^'k:_˅@X ʮakoWut ;GpǍ8oJ{nn.5ZXX}F_Euz?9o{i3c|{VVtN['KfX1ֳ6h&sSMU 5t><3?u7 ޛu;at6R6O;73D]H' ApU^(SwNxe7nCԄ|ߥ#2*_Nkt0pVJvкc9Kջ;ַ}W@om{Nϼ ˟h :w2'v{nqU|QuRګ+>L%sS'@L!̦|S%\pb2i䧲Eoc.x2B52{ KGw|: w@D)S'@`@&T!8Ȑ1h AE p|8H%MLpI|Ie?2``A pL`?DzF5ʱ(G-`UR0]`g$8+`'ݳh50@}k7"ф "&0 " 0… e(AŌJXdȕ3Y\RK'3I瀜@ 4(0T) rdT ,Uֲ V*Ϯe[r}{~@–&(3⨓[n:&g?hj3TO5I|6pí,(K J8RNЫH Kěc;-2 )ӎJx@> [ ?.C),@C5Oc ̖bjp$v±xr 0&? ZK+K*VϦBLFh䈭*q)jj\PҰ#;r$$h>x 3ϮHҺmLVsV^k5Yt .CNʓ`ɣH&ʓ)QtS&Qbu+נF[)ʨR9k: vϰd9@D-ܸu֝@uɖ/pcƋf7iG=2̄7 A Tƻ#f¿AExs]dU-@ \` @l gXC✮{@ cʗ& $}+lP<fGZ K<#{!NKz h`[K %8AE?-q^ }bϏ T4!4-AbGBLDcA@Nl $oԗ0@i j99AJn+Y\1 G7DsdBK6A$G%CALBQB<11-v_ЗB4o.,^қ 0+XB yAUP*x vr( éDo $*G0s8$˚>mi.zNL=]UxDJ!I:ŗyPU WvR&&0}(;96vӡ2CծF "6Ukv 0ǗboUvsu^X@2:Ԍ)W *=]6EFYfÐvM"^RjKN%,PR|U5(\~lf:xe3I \!Qvѓll~$vkWVniN''lQV!`*z'noEH[g^zyFn.|wD *;FsRk{:" 3]0 ެJ; {P);Q:?N%aFpu ! T;W:\d4/_\c.yqSx.;]p+XW:t=K+5}p\cz=ΐeMPb4Lr3- 5w&lJRY\3 UۊAYRK4oI3 NfD/5LR!L 9FY~ZjFՄfMYȝ|-[@*e4Cn컎ΌpzW;a^Ξml'6dn5qc25~U:nBs@6o t:20f NP1I1Nsgw=NdiU7',0gق{S {θg~=5KF[!]5S~Eer#O0ZyRm A~vMA@wRNw{QyG>8yd7'.V>V7g] @1Axq.|铏xc(=.,Trh_UYgDh+v~Cr}Y!ǸfiYwPw9CSVswzvv8tFQ53RF'xl,V{\{'z wx|zz!]} UTRazxZFW X{&z `7mGkceV`VWj4jwjH~)9OXUgo^s8x]xh0q1#Ձlr6%\mz7TjxS(UuG{dഁxs1seyE\]X&b2+8PZZUxq6gzzm/(U[a8txrn8y{ggAr刲Vfogz|xƃ{OE#%0HZrukԌGAmҖ|6xxh]WHtӁM3QqR⊰$w4xGk' gJC0R"VWhHaƐ;4wso8lBxuRȏ5(}!6"Ѩzl07:H:ٍX=DQJC)-&)7SXH~'!RHSi[v'_Cv1!rG(whƒlxuSH֏֘oC .g ^pȆrٕly6t @6mgyxyi* y[t[eg ą2W6nL{ǏhXqAL$RYC_bh 6Eh: {9۸i5ljy23yQk4jnry鉘/ǞޕW1Q9~49W7Ha7ҧmkC&0B_<1HvgNUyDɠȞP%:7>eXrʊ(y*3>\s9꧈rJQm:3|+E]eã:#}uSfjvJ*lb~u,*~:錕1/\Qڥ˧wן?16~yQodgxrI.7q2Y90,"txٟ *nvx)ywi!%5 :S~׊٢BkWMQY)iG @53ʥ ?|(im5|x^iIQ %wI9)tv*HSJKkk NV:(Dx"]?3' {^j-;za"53CANOʪ*;b^nwRǍٚFtZZh~O/Gu$G'U;zf79i-kvSd%CL^S NuN ,[S4dXCUl +Wf.E˺{[8`xJ6X]8xK{ HKXĎ I\y|+q:䢂;|Tdu,\poI,[H f#:W l? "#º[sk^ |[OfgTו1 !X1K2l^y>HG\̘O/PȚ<^熻F`ʫ+:]ǜɀLtźh|5ĥ{ktD-%UTpP<[|%jS+^j "l_|Ռx PuѠTj.> ]T$o^+~ou6A&}mUg+O ڐ? p,- )|q-9*I=dQؗ,SoR"lW7{(9]H=۸!FO M,ymz ~~lن~iTUs^\H`T>IGݏc}'͹0nOHdY:V%}rVČ*[pG d韎Q{Fvt X}^Y=dPљ iH+a5+ԭe..ѐu@Xݠ~0ԞL d.c|,^ ?-Nä@Mu]INNi\tr.ua:ӟn?455[57q& 5L,뷾L4غk= 6Z/~p._(kYu5_aF>q/Jvg1`ڦji6>/`OŒ @__m.A[|sjHIY0k.fuGOf9nŸF銅$[A֯ ~LNocY|9o_<@@8P>`D-^ѡ !F LrI!#4A>RN7qF8D 4Y"P3 >H) UƫB u8R+ҕU&t@,*Vu{r0BJA=XY\}umM7څLF\FiXmXWN;u3WR>f_;^*St0EI{"aYH&e~R-y"T݈C6xx g7ne7jh(G-~#Swsf-+ؚj8p(lc*8z)|0,;M3=\bP>uS)ȩJ ȫ9:1~T A [j1ŵz-^? %Lʰ(T8L1#<1384Ӑ%N JF7#7%än &B(CzHf l $cM&:N6$ൡ4FQ:Q3H:!+OX't8*:uW|$C IWLEY"@/Zs-o@!RmT,craL+ӴvTnMԞ}I\Wt7`|ڵWo&|EYAVhOv^͍"گچhbb "Mcwu9EqC;#J_oU#]T$fkjvg).zhM.~Ԋ㑫j;eYKnP{n1G$X>۲.xq#NM9dp_N7Zȕ-˥D v5kӵG*6uG̯L?EUI^[7+$G[TK~W%8A VЂ`5A ` ````@ @    HA*\ȰÇ#JHŋ jǏ Cɱ$R\ɲ˗0cʜIM MLxϟ@ MSgIC*]fQ6J*P9Jʵ+קY nTdg {2Pge7B-ײ8L Wƍ;װ 2d:z!e5@^w==+ Ⱦ0g{o]g-N 9/|02ԇJ*mxvx5w7Z*m|W b؝T4[jP 7o)\}7hK]R5B(҈ zG<)& C9@@+&BL4C 8hP:ш `q4:@ IQ(Y"%yC#@eki}f%zv'!BJɦ%)rVZZQ (X矢jFbz9xF*DPjkNw'YKi~97B4"R ]r.& Pj,M=& )+*,[L/</1tZ : Ph!;nEƢv̐<9#&n@=U,V=+f8z,oCuCfCpU `-MB: /0 ȵ)؀.~(C +>Ev=1| 9gZڂ㍓p'C4gnyEH.r~恃8ϥk** >6C.IXO~Y333𡞕]:ubtR<屟M<w6ڨߛs+RS%C蹝¶mT+ 6G]@5_W6p!taV롟*AIMuO94`_' q4@JHg!\0 o$K wŏ[ȯޕB|p*I1U m!_ 'y3>5,.n9NO?ZL`d^#$A*,@>VeLzϗL^o[8z,IzVS \-@@(ټmő@nfx9b3!"@2vIjN4T(3(QSlt]6ʐsG $;/%DW%g\8wn%\ BZL1!]җ}jߎXUNL Wv?MQ?JR6my& LY̭BuE+' Hmjo ]j>7E. \]|rg|{SY]vjӛW4@oHNSȼmzT/}W7\ue" (F]5|9k-Njv"S u)18_l> +Ң5oYϪXdDY%wCtT`%0s8~, 73m jwnmq3+L:vgS~{\Uw>gNq1K|AW"i#l`pvwwiV^| %8T2sSj]d}Xaۦec: lm5d>W[UhF5ȑp7#h\l0sTRn\v(x4.v̗wW;7hjyLO>s9QU}EU5Uw|JtVufWW|B% :7JseORڱWx\uHW_aY)J# |7WvlR1{g7p;hFp^4zs[p yXb#5j|5sljvbY[0%G8hz~|b'Urzy_XG" lvn7upz5S9|?gCZUn|QҘ[}l Q5$__pdy\AbWn]yh=8m{$d.`aRVnY ѧz w7^uog[_vkhXub&]/Uq`El Q8`%YG?#J#dZ5ّ[xzUIqyrl(]v9ר>qT&l?-)ۥzpȆpcj>.~`S#|Is\2We7݈S \5~Twj3b%DBّo(YzYE"hr+, 0C9\\ZpB—oٚ"ɓ}[qhqCIHi7Qnm$p7eqv*)VuՀe׌ixAvF9i8`>yz{c(&_ir8rY;wwVWrrQV&`g SjuY9sT;zt\ǡ(YֵF=U&*55-%Ɍr%Xc"v2FE A8Cʈɢz[ cS^ϙU> ȓTv _]꥛ Z'hxʂ4hqz#zvObS[ETyNsfy |uw+~pTxXoqFkEMxT47h`Z/ ک5JzH8z`vGR{c&Yœ\8Adϊ1Jxz(l7YWfŠY˸3iѤ8$6Z$WmV:ch&zyhɚ1\9YjB=! I~Qbqgtwg&iws } R[)sXuujr%j0q6:`e8:;\] ^SWTe:E\[ Gw&ɚWv zm(J_> :@9r6}=%6*Tzd;[Q܊lhx U QXkP~Ew`^}HTrok} K ݘvW;|eEkb?%k'{d,I[ʩukX|OhոTk긌Heڰ ~{7ɉ֕ww кt髼E6Kvs+(ȇKZQSzr9Wd츳{!°K+lU)[I,K 9 t̼  Q*zNW{{CZ4\YjjYQww}ֺG< G&4;oaz&jbTNyy%xAL%,ۑ@v1Drʠ]>- MMޙ\<,MpGB>a8=FS.ۯs? ܍؃Xh5=Jc+y.0$|γ[zW'.fWHwyi3M E8!qOXZ9K(I1&#Ehx#N!d>jŁCT14*,R.z.ȇ6e14qn9hɤ)=^u~8+I])6HBor8JV$dU!HnW?ٶM42m@TJO-?8nO:x<!&&ȫ^ibkَrj׉_lNrN5^_d(~Nε!i.utY7*-x>'eT~DoEYwoc-P3'2ǐɿ2)y5 |39#7pis"$1@ 2P>pH |L0  (XR+Wq5kiD dD*DpfP2xϟIXqF\94rG)%V8ՙ&L!q3Bl-:ԼR Y#ǎ,K%$-4@ξ9.ǻE:8߾ JN<@%*rl6LMKǵ :dNS 6ҥZS9N6Pa-iV@ːͺN;6ċ-ٞ˭1"4~c,"'κ. P- @3rA|*}+ CPRl- @G12q@ޒԖ gҪͷ:0[M"`D!&,12/,)pG11dAjM#%ݬSDNSFjJ58:!?4?[2&ԴK N;ݫJAsmAy =^ dbwS (|yciQ'ab\Ӧ0s$5ژǦ&f+b\ýth#Ԧ^٫fΪo'M_3؆ R< U5TSJ<’̅&Y,EpAם;-]M,b890|론'CEXØ<ټ&h )C(mH!jT1fB Bi`z?Gt$r^怌o~E/͙$ 1ejy.9a &hNSܰO`Ɓ)JQ5CtLF6+Fi32!m Yd8i͍%_%':]5c9Ө)Kwz*x5DTO}^hKSH :cTl3*S\>Bъc8\<$PwESvD UT BrdӔN5 /ōSIyO(slv,7Lt dˠiOLZ +钹&k]RF0E2B\ۦWUvqR`6 70'Sew9UZ9j4? &|a$8^5N^g"gش%CYwvDi5Zv(z\!qɘ d*8hԁl)ո I7;MGFrd&c% fD̪DfD"DfffffDfDf̪̈ff""   H*\ȰÇ#JHŋ3flǏ CIdG( 4@cʗ0Uz4Se ɳϟ@ IФѣHLqS hL9ЫX-WO֜*s%M: XʶP_zn]bǾlj&j &Yލ7˾2#CV[ߜ=h&٧aĠ]2m%N۝w~fS/W^u7oĊ˦,.|/d\ցύl7*u=ns<UWWgQGTZq~0UAD(X Sl6}yFP=MB<S:Ud@q(fOWY!Q-`$jWJVe `|8$_s9nU%Бd&rfNHsD㗅 YҘGid*ylD@jMՎ饖?ɓf}igٕoK&`G,eT)hwj `Z&lih&嘨0$K,ztN(PWjg@bFUJI&d&q%k{6@}$fH)@6e[@@6p+*0QeXq9q1pn ZZX {}S(5Hgk)ȣ* tvʚ#oZd­ɛ80?J@3z#a_ 0bPv5@ΩP/u X\dakkyfSkcwR<vKsͷ]gG]Ze'}[vҞ.އ}ƞ^N$1K< Tu LϷ;H!)q.7]{'_gN8]1y֜wkPB7LN|[aJV,~.A5U439ƮgJ)mH!3 '5: zm:ȿdL)Y&:1bh2p+4\^#8y/:׳\.qs,4m  bJvb xŬL/~{Pb9Hqà7Hym.ë)l h$F,Dp4`[~ta%%y"Eta$O-T^!e&h$ @z$bAm3U;vgUiv%LR黃<_cs5E_䍡;WaF{|HK\!cַ%fPMT8Nrn,- 뼳gc׷)孌'O}vv$V' peO`\\r9i T]@z 4St,C<2S Ia@EݮJj6{WV|Q*OއKVfX6a=XlѨ0,Zg m-,SB@Vٵu|^r=l5O5+QuI[llUdVEDcj*kYff)%V`+G.*G @h;zY׷W^e3Rt:nOg@*;zn4W 3mW}ț,,G`ʬt2-ud4HX_wa e ր51@)fr,so(" |>||n\X`n6 Cy`!듘—ǝ $a2ğ;2<]*ʛۼ (*Qn=xceB8i"Ml")ΛJiAټWѳR$2IWdv718̧ f6֑F7ϐV3n?stG-h.e^5m ~biLϙ'%rA3tMpeKFwX[uf{3yL>b%w3{7noW#4wn>&=<{/s/npH@44yq^*4O%bOe=fv=!}a$2aqV]!x}~aHԶTTS~vu!E|Yl!¶#GRW)g(]?Gr>.zeQ[/xuycmYδ @! &isG "q[>)Ռ4Shsx$xd!rM)$E PVňp pAC̲*v[q21S4;A-#kqWQ 2fhBZw2i̢eq=($FHɄd+.ɔ٘=XXeR+ɓ ٓ=Y@bVEv?I{%9߶@1I؁啓zٕ9~$"YReXjqo8}\Y})Ue)6{b`2+iuSC$u爇U5y.e khِimtOU>щ3%y !XuWxsu{(NyÜĕxH yY"8(1hDY2l&baMe#EK ,ڕY%}l:aJd:d<1O"raHh6^/VɗpPbE &f@!I>%O7\v+gWMuiVOIڞ=k$W?kʓxRmul5%g*GE눟[++ 8"śyx@'V=D6zY#S]w(U- 6F>~8|/.HhgZD]&#)z d&zy[!rfXbS\Z*}DB|Et#Wi""z(;ؐjtE]Ċ5Ez;L *YrsوȈA6iGfYدKw)2E)"˨皪/ *UWsKJ֔+!8/^z'z{Yr8YpIddzogիV۔?OBZ`{Y%+WcΕG61%Uq[w%g򂦣!۷D*mW^e+zU<#qڸvb˱cJgŷd|[f)Ө#FBB s<b:۫ء@qZ:kS#kQ4hXR+m vpmWI}ev`21#sZ3kږ)LdZVxˎ庆+z*LXS{L/PWH,|@{aWبh O<۽zظRk;lV*)X]{ ?Z"U]zþ6ªgjw$L-Yxt{xX. <T+B^f,aU+kYԋx~Fh'odTw1Yvp<̒z^p=ЦkbOc.>_2-T%6toܶOxFps5/2m{l)R_Aܺ}12R<5@,PA$LA&JX4h%MЊ64-2-}:__ 'n*h+,'͔!* 86 M2.*(c7Ŕ:JL1;ڛ>p)&8%@QƨBqEڪ<0pt <.!-1HD):+@.j1N$,dܨ2B.4Cl%C<//2ЌbR *6]ODM[ 2eR+QȽd;+D5Kݎʰu,q-s\ԕ" YLYD lELB&m]Ÿ5̕TR6YWUhYK0 {M\kM} 7䌊\bDGUG"v?ޑa3`;l:KԶ25 >u冓e9fWݯw&WZO]%8iD"@cy]LQI87EOK3 4`[%8峒DI+j8WC]8u 8~Αn:gsX8/HpIQ.Q= w|Uuzٷ[na gC_[^X8V K=iXk]x9IrR@l*Q y(ICO'4oG`>At,u)~ꊟL%pݫyTw1 Ĵfsqu D~BDhD XU,ZqZqc!N0X>4l$GO~ ,I(ɓЯt#jE"SF|!5DvI#E {vI(Kji#_ DAZ(D(BievE%x^7AiKS"^DO h0VnA"IJMe3 .> Ɛl "pp:)xP[Vq(ς]s"]0& Aw=XAI"%ᬠ !MzrhE!5̗tNI<~qf omo/͠=W}~i뻟NRΥq!<[8@&Fn|I^ (G& 2A4m꠴Pr c?#!RdLh Z @cŵLZr2!N#\[<>~H3ݲFJCTFхؚTpg <߱.*yɳ'U-k9UPޖ>+½N֥2g!w$Mlk0R>gZb|E:ZN _KRVSD}\HX2YҾqUbwަi2fށzo2V_ۜJ ԣLDWV\W.0y2c3{ʆ86>2)wQ.?q,a8, ձt5}_. 3z վy+3Ky!m6BuSg^&Q j&3Lά=b-9[s0G}EW*@Zl! g,O6R4u84sԩh@>tRof=s0eb^ǕвCᰑ\SƆ["VK]Ј*Rp:ZyiE=ltEFTloY?'PGGzҕt% U"fDfDfffD̈fDDDDf"""   m8 %*Wn*Rb4joʹk:8pAۺAuNDL.Upd[,͚X/cʡu3N|dާG+JS_MSqëЪMzM̗%.vNI֬8 "zveWRZOm ˭{8ݏQJ\SeUkh}uk~ 6f§RTc6}hq%X5Ն0.!IvI5O"gn v IkՈR)"%d%i5_nIlu6$Y#Xu6)vqUEeYUx}QgN(RofܔhmV_Y1J_XrˍX١_A"阝AQnv馝m皙:*J*&pW|Zʸ+JI7R@e:l>iYykYYQYmD`nkvTjeQn+,AڽorڗTܧvw F.P)|fm`CR!_ec?}D&A@7["k7yS@GEMR" Z%pBۖA@NW]i%\Te!bnҖx\ò 0%Uhȴ)9Qw%y"983YCJ"2E'*4ݐ7eSe8 tgae6=njQ4HEA[PhSa/i`ZY1@c\F6~)R$+'©q'YF'0 t)WJgYBy,V$GҖ04 EU(%21o`p X4u3_,7"a~JZ)e>\؎H^*p.SL(f'๚Īc \HI1O] 1~X6kJ*fn#3[3l3H#E5}h_,bI6R:xƦwz!XQ)3IXu+@aRЭmQ.oe.\jsz|ʸ"FǂJe*\Tg-Sl63V CY>#(+\-'Yؠ,vIXhf8+F} mk &ǨQ2[x$%g[YZ^EKH G,CmҢEuq[FK6r\S*\vK Uh yUW}j{Wۥrw+o+;H𕄪2B{; c8_\W5@*qHt}eiq&5feU\+ܜ*įɋJ 1W^, ̍#{!钉[$E(Dˍ$i$͈MEsHPk)Zep9L(h3dk٭Vy{b ѓ$/IZK͛MMyM3ؽ-LNЋelU>F=vQѾgiv/TU$ rjъFcr/Vj媸$[W}n퉹ءq6(ŤԩB Ԅyw-B, 4߀}lޥ[]ip^8KG($V}i )|F YJLhAqХՠ4] }<\[ ̮Fxe}3eTV+Vw;>*}T"45WfCQZ}barw?mZ]Ds2]~zk{HHzƄRfxGTDŽ44sH4pi[O$oGya}H3zǁZBRrJt'%5qCA~5sOu!LjQ< dFUvi,f)>HXByLj)RFso%w44#6[#oȂvn}}Fzx6QqK*ب`V9ThGasSWcc0:Ә]RU8Q(VxC֏qi;D[ vw$Xg6c'x(E僎(8x3~xxsvׁ0/a,w 0dYM5k'z$XY"Ip8U~6Veٗ~ 0cL)hptr7v7OUM@Og'|dwlyeYVE9&]i:"S1HXQ A陋Ֆ$g9lCu Y ;ԅ79 cy^jE`'D9Ɖn\w9IZsN}yV^R ٝim =~ 9} Ib9oVRA8'QOT)敡,X6 IԱ vrdzd#g+)YtywB\ Z|?V,/zoVoZu^F5bz7y%Ij>y.D( 5ڟgz w؈X 9v:2LJd c٘ICڜQʦy=:NSg H89}6:U*lgc'Hb#8z7ZX(Vj֔8v붫i5¡{HjINҧPʧ̩f$ᣝ O_ AZIGs>%bٯ707NED{bi d7y!y\T{*t-űZ(ݘ&`X5"|-2_J 0;cnOҗb.Y_"=Xۭd dB*KJ CH_5G4jVnԒ$m`{{.s;-뿗NDu!, ة/zQۿ"eR8FKMV3\<+ؽXI0ı3i$I3rQu SG80D4gf |QkuZn]u7sMa-*"%[:*۷.RKlt^-+R#-I=>L OT;`<*Wd?>>C.4;G}4rD E ~S^Xoe33P4rZc(: Q4k~C7 `s^teHso'dX R7=!,%n=N?>nIN9Y*c >Pol~f-^w=ZgTE޾D݊QI~T_HdY^Xό{֐U_BaN,~殜luZC|TX]M ;RS>U@ ˗bI^X>f/{joΕ`nGja۫N=満Jxeb/l<ėL&iO.;O=l1t/k- Qko쪏Eϧ؍R,edɝFOȀ?imGɿQO 2ƛ7?3ˈ@\A43K(&0#,\( ZqC,7JT HNC05"qv,m{G龁D=⦳PlQ%*zNPI2π-)$@ +M5)T0/J1JȎ.D*]qŦjJf,O-oDr6G\,9T:&ϦXT^'SgrWԊUYҭZ*,' !^}Mm**jWh0~#fmH  eABͅ"fwĢl@F[pD@Sh@JR =E҈ƲFt#EȌ(mctN& MVOjUQ~23Y*,!`jVɫnDk! VR_J%";]lmI׃uFkP%нj-}`,v[wzIGK&,P+WT,e3Gm'BQt [ndZ"ൕk_-ֳ U¡֖x)I)˵vҫag=ۙ0+Wycv3v )wկ/.')o{ZW^/}}`Җ=ͭn6#GI)*{lȟI}Q<ͧxI^[2U"t6V]#K־*/ bXwOVk&O>{IȖM?;W (?C՝CIiC 0v==n| W?r@2Edfu!6ۛ*KΆ^J7Ĭ\zBs5[t\a⊔m (Q; s2g(&;>ɦڛcvZ򵹖^upɫhƺX lJAZ!siEL+HRQ>F5j~bPB ] Ӂ[[ldηOX~x;SqO.o'f/T\o~,IY\ JZR~(6Id?=W-m\nj*kiΝ'L^9# ^dmNkIn񺞼0wuOΪo~Jj1zPSۺyw3pz}j'"[ᭇ#Cut6(,ˣ%ټqL^-' K1FB^>"}/[IouĞW9y?JϔP6ro_kfBp֣xl,Pr}Ul:O/]!$f\M!&EfC_w? V&l#iҁ*FDedK(A r?)3*IU.&b~փ<聼1x{aaK:т"*rv8QL1=[؁!"H~PR;R:-Va_>ȃ`bHBfgZ6VK7sAG/4HT2H}؁ȃ'}!;R-Ȉ;vh p"50NT>dBA}؉C8hUajPV6"4؋T.d苚*%q7`L8sxhatS"5j1t!=H^ fƂ]˵3GW]腼DHe(WHX EȊv9;<,e僃c6;x?"h~xeKI% i)XE{ :aȇUZH:>nH}(`R%S88E[(RrTr!S yB[x+;~#>bUXpT7{e&EwI* sbY5IY8icƒg)PxeW.9rM?rWE+aEQ!_iBmvv=Wĩa"]fYqcIAM>UbEgZy'3"q9gEi*Q#"7#$6Uu")@:bVGEPS2SG%PZԂHjŐ=%%ѦB:tF:%H:Oّ7:sexf,WF%u][d &з`mnPQc ZgZxq]#e  q}]4W)AR#;z4ZIgufP-:d\dYUYNr 1w&ŚPʚoIjQoHµ]IZs%egx`B׫TYzլz%WGVUn*t%3؛[U|j_ڤ)[u~D Sְr\2`[:zU*i$%QtYomd{TYUH;?hHFhqEzaUŤAC%)zcU驭Sy:9 i}BgjWKASd*SJk. Ey^eGjF_ZBZbEj>T6Иfij,\Yfʬ𨷗{\/{'ZxRU뺒fոճ5`loYW$ËZ$xj*!B%] ood;*RQژjSH xľѩ벦 ojcVaW8ty PHA5bA6 nU,d8v=rUCw% cbe+T+M.TI>@n!{n,$>@UM*8xRXXT}3dkϱ{fink~>04nI ޱZ]NgnmZx>mħ)G8.CoeT=&$X"XU:薞ZtIY ½ ]]Ya4ݛ ^U]a^ WM .yqff9тl>O.h T9:(T uk{e׾.Iq}#l~ơXR^J&?a뭰> fj!^3SÃ2%u),&X7.eo,Th-&| v~喲%rZާ3)\ŷMǽO3+wAAo|ܫ 򬬺hjXLU |XSr}݀%ԝ?[cm ÍP8뗸ScOUU,v_RU/1gd ϫi~^ޢ* ъ.Ͻ{mhȞoY)U-X5@@D‚ .L`É DHqC | q!D f4 <Li܈1Ȑ-!V<'͞6 iM eDT aG2 Q)jH3ʆ/zSdܫkĈ6I}<+̻'>JUW{ lQ%R90ɔ}.}۹q£0$xÞfUG-#K~}\pōG\r͝?1 ̪fDDDff̈DD""DDDDf""D  H*|Ç#JH‹3&ȱGT0Ɂ R\ɲ˗.&̛8U0N%IH2ѣ lSvDsID8kMONZ$Y۵8J}OX fۤ}Iwݻx0_[Č`mFlXX˗K6$*CdživUkf͹kزi]wխ[s%Sjɗ o+vӅ2ݵΙO+=H`(s̿ rhm5~&PwRQ~o `H!l&^r` (YSqUb`S:"ZZ3W#vj!te昏@Wf\Lf!xAeo`)kHPA MpGstq APC}5Qѳu{DNMv:. M\,MvRv7\z@wBZ&gx[%^q{LxXb#s~BJZJUZM|#yA+m좪THߞLPZ?Z})Em}/3M?-uQk[#L2g޷Q[?|/,0_bVi,Q']z}W8+?ڊEXp  `3+ Adӟ`HB h` ,qww>0zF !eE0|[̈,%rр:I0B bVҀ^HֵZ GGn%#bo|@rJ<.2a%3ɂ@Nu)a?IQ,KQ 8@XӀq|!(7@r!Kut6t^Mue4iW \6ZkX 2FzdB". I,(g=qrnm= Nl*&3s*N&B̍jҙ(LP|Pl2l#GYr NcҔ#ALm0%LZR~ǟn#XILuU]JU{ړ "$jRku.'Rϖ**Y m]%"MV*X>rQ*z MIEw( 0Qwۍ8'+iG|vzV}nWj[eú8H *7ՏdpSv@bn~'g6&]~FfhS_0&FXm{j^N|)_&mWiR['tї~eVa^fA74}$~v 'c fh"^2C}k zYƄTzYF\O^Dqb }GF}gqˢRgV'&uDynhgQ')ekE^>g` nPQ^Cb}frgo'ClJ5EXrX2-K8ɓ'X|k-61ߒR,d4d~dO6݂+[x90UʘPbcK8'DqGfI4ɗABD9yXHI] (ĉƉI$ٗySŗ9yNɝx๔2xٞ9  D3w̪ffffDfDD"""  H*\ȰÇ#JHŋ3f$& (ࣂ"OP`e HpR@ ~*@  (TH lp#G+p`@7KhP2M n60kVQ7P]ZTvtʔ)ȟ-[&(Aˡ0cl9@ɚk LӐF_>k2W|ҤKgX`%4FKVڤ4ڄ7-e]#G9ܬGD$Ե ρAz\C, ܮlzue`9EYɥ䖀ogqaL.TIuN$J2kHR4Pcv-gIyմfQ\('SZduM77\+ֵ :j*uYSP-ؔ=RH|f UvJ&8WuTUr tXWYՖVjcj!gk*d\c1tq&jlGI9Ii^V}UfRl$m$Snw]YzqmViY2FdAMk&6Q̦FeKڛ*Эk'u=%4B9U6hKvr4ЯKςS@t~tTg܌~t]\E"~ l 5KcLyݞ-PNJfDzn}Ũ2GW_ɝ p~bV~Ӓ~ARRNFmU}fqC?'[ [Ù҄i;KزCP?Q 9:/\QTQ.$ꠥlX9ӬrwyfW#3]2n^eWQ].d^ۅ8E]LWZT3 a c>kDXbj˥ sfQG N%d*A=8֧S U2Ntĝy-F2- `+h$F]N#戠r*Q%rYJmBɈtK|!#IxтaOO\~{1f4'TL.S%S^ݥ/{v*rҜx15⨈=_JLlΪn ݡ L'%fCJK%%.یj杦KO=1rr=y;A loVg;}g\T&w&/WAG)'Hu8Q$W=#6uAp\81V4?~($f]qqGbwc7FKw(&N1C6X4ir0">{0bxcBCEefFDk<҃vzqbD'U!Fg$!H+q&z"7&O",%ׄ6h]c5k.’;@w7sT5sD]1~wIWQhxQL(xȄSL]iaǗ7I?~vՁ81=5x8Y!+a,[FC7qIHC&H'Y2) V9q؛pihFjd[. - I3l~Ǒ"wyYg6|y@2#hTGo'byi8/EjAiKkX^!(бEjgB@ndLСl@XBv~HfSSeyJq1iiHdE4"zsy,N.esqJD 0/wbSmɑ#:Tʑt tl1(=lL}cRrSxک|:~JI> S,+(C*Mtg(ZzD&uj ZS:wUJkWmɫᩈzVS Nmz05,zR엧{ u*T"z6'8(TqJu7i=YJ銛Arᩗ$&B@aClnj9tᡝĘɑz )nyVƸFz#SƩBI:pH Zq)zKʱ:$K t/4:4DWsLĹEEId=KĊZ9L[7,**g}b<HWiDwy Jʎjizn)tȘhǃSk7|k2wcI?xRnٶJ4 ɴ-~vJq=qug;ŧkںf;[;kȢ{[|a/7bQX>b3Y9HϛkL {4JHӘQѮ!k5⍢Z=˳ʫE; I˯n˰C#C Cʤ %˝I:k l&uTkȿo4m4y1  l+zDyXR[Jrqw̢-ɍPl=$Tw!Df.=[f,,KXK֭ E]g78r1Dc+, 9U{1iKtKͼqG-Xx o>B(ht5.aCLcˆq RGLɇ䇼̭+^!kH^B|4Td&2pd5R<ȓX>ۂIݤK^6a"Q74K4iqFs=iyb7tBr֧(S>r ãH^BT[c6Sqy1`ȥHNkbW}sf"mwm`i'&Cg.DƳ΢!.l"-+l`57kf#.?66Gb@mC`γE4rdA Kď 緞F14`0s]UTg+Ew F.mWj>4ȋDRB.!fMqc芞Qi?)e"<$gnzu41 U7+'@؋B) a lt7-h=|nl+q^, ,}W6O`?Qْ$5r!. e&}0@:u5>;o_+픲*vxi3k7$eBg#ϒ'k T^០E&-zKVgNx5kre 3Ca@cf /s@0 B   (PƁ<~Rȑ7^$@9^t0 F HS0$Ȁ v i7 lt VpMr;X$$cF`cT;PОskjL@܈=o`':dbú-YW->xq.XGM|*hϡ :{  pÊ k7X %kR[3Rb2 k@t{%pa*+ng݇ I&If='BskN/Ћb^39 ρ3* `# 5PT|lD_:1Zrɹmt6(!dk0KH;2/)N&R-.yL08L8SML|1R+M.J -aO+ MDuoFcRV2&sS;? Tz/,X]T5Js֍IɾPN@RX7!mU#|7Z^ʔ3ֲ5uT`uD=tS rZ˺XI)$JMOQ76A@ Ft]H\HԬzq񠜀mҰ-?E=PcU.>iR*Z[fEVme^izNNY9XhC(^diVGMɐ<mDc:M'5-_Ի&̏ co+[Z[ӶY%h88vr- <"_xR[Ό/dƑ[_K>L1ﺃ̷ ?ɮN:#r<]`o59kTr<4Zbg/,3Vq/NXם(hB ,69MO jc]lbq0G#^ST3AJU A !YxCOM JO"TH22r۪X0"W⤦B'DWkOy%{K(60aJ3֡'n\Q1G9H 7islN C*|d3(fadB!U`IXF^6qä+AIJQ0 r3HL*` #e53@JDQeƻʃ& rYo9QXN3*F@ '?|'8.kl%?OC [L:Ɉ_PmE=%UIVQr8ZhuRNq2oj%˜MEzJ6e%O99d*Of頝N}d*ͥFbs*e@UXru[c,g+9Uf=(m5=v64MEQ:0ty)Kr2o`| Sl>]t[dȩTVvK2~N(H9U#J4x,:rlbHNm['!ÞUIU&LF``Kjb!P*t [t .J.wvky!)v6gzyGiqsH'UҾx]rV`o\fJ^e cRڊD`eذF8i[s| xD}{w/F8We @Yl}I 6O#3oZ!f V{˯aB:-QipmR %F"g~*]w0ԋ|rДk˞ ävy| .܍69y\+Pthݡ_ꎘPHhMɈDr)BEg3qj[/Svh4.KS3sKͦ{b9n玿ԯ~hz! A146XhӑK?B噊{&hXhno[@;82sk;2"# ;@/HIQ vK10%A+4g9?¾ʙ"MH 0h9y{\ڋY@14±>>ؙCF# D2 QC ;;k+9i0*9FJ4 S 0"!0/<ԢH)*RDR DҐBD{1 즕HBT "d Z9/*4"㢍PV$bE]D>4BR/8 imt+/Br3>K!wmF.9E񹰚$~THH@DT9y DfD[ȌL:`,mQ8I n&0 -wF27ͿSKׅz&]|Rj tRJqiHT!uᅂ.@R8CD {^ (Ucq@ (~ޤl7 O%ZV y~^#e7jS`5cQu{jؗ' K76I*Rs8] R %HVd}.&~Syg^t V}v9*NZ5G>5ᡒD~5YfGJ{0ai5)QrwTΊ P@hG*.FnK}ذ}EZe{TRF&NI` nIZKTL _˰3K):XSqŠ[9vnHJz3!PB*_)03 }i@Z}1UqWֵv%0Ԑ"1P1}ӞfSWT ,'- VЭ@3PImji2{zaw*tS7M,6U.\O.u68/R.W߲X pRwmG5)~ė{1fkkK }T3$}C V#tA^RΕ,MNQӟ)%e!2( ,6^/.dL2l{_ B!XZ%ČeGyGkb=ЅPz`"d,'KF"O[3bRҤFE:pf@s[&êv#0 CrQX LQ*M'NR"T9!ÝR{2z^3.XHg:ՕudE X/yCM\7vz,%*U!=CcR,&Bfˏ*ANr($Ф@fJU:(M/zH85\A6=rk5O}IG1?ra^y Iic+BOFZh/pP;ri7X0D/I R&!%,;M܆-ENm:)pRiű4IHHZfs@w%+2[8*Dj$;kSGR{ SK>Fd'YW%i^O4ʤg=2 I+r)v+,F`ӫdپ,!vHȖcl:FNшs W5sW-Nrij%#*RS yvHLMik]#)kVx:-c2\bmQ=LKk80>5kIGu%d4;IZQ^F3'VK1/z2*Ƞ}zFI;jn˜UZG, R$e-ޚ Yz_ S\)  86 xeip-gƲąhTDeHV oJ[W &|y/Za0 'ǘe3r}ACp9[-˥*9q33\'c#XO 8' `1i _oꬺs&t^)!"`Mx!FT2%m&\൒(Uj(k|-].q^w 6|Мy+w j0wHM $jBQ&08H%EI@x2LspEcC vNG7}$UaX WѮQ][QV S֊#L^WZk-A4ܕ.뜪#oRaҗq$qOﳿ"$EKRM䏲FLmX(9powy"{/! cQC;vP~:n".#% HIx^UɽMbz1a7A?CnJ&C;,ڇDCh׶)$~mG3QR9%53wW`J1cvLw/v7B8b1:Q_bzQ5#Hs\?R1%S҂KQ)1 tNG!]f$H2<* cg0T^:;E>g3QNYlqlg* 3*Oet5Ceh)o١soFYbfA4ZZ>FtvakO"&r7Hc|U.|U Pbx}9_#q;_E35zWUG(9NcJC":DᇙxHpƖtXH'c.$45'xkfC3.">5OGg3x;Qh%aa4B=։b#zFD^\$ }nV76я)dDsvk8i"* #a0qvW(|=ғ>I1NH`"zAFa9/adlct1 #- 9bH/Gi9"'lg2BAI/{h#2Ta|IxB4OQVyiW A?C ?M 'oi1QeIՑ8IL/%^0$7s-F ʈ i^8m D̈ffD̈fffDDD"""  H*\ȰÇ HH"A ` zqcɓ(S\`ŗ/œ9dJ8lOiΔ)Tś9<ϧ? )pգH.5WZ*vjN1&թ6׷Y *f®hn=_ҭ;nӦ ]rQaz0oZ&6fxe#OLy/È3씭ku4#bdA[բ^mM Ӯk 邽K[j/;wlU)=pzq/`PY_Õ:ܰ˟G8tbmRP@-QH6pYUU)t I~QXoeZ~5"$&3NΈqSrT)։7WZI2e(E>#k $' xWBd[>aݜe6vE]8b^^kuuy2f%r &fѢoWk )Z%䎋N^*]Z\߄i}Z) 9:#oKwȦ<6 'y"Rg,ggrKG"JZf7{LtFo??RP;Ifm9Г.yG%БGy#^/6@ {ta3Uz~0'o[u(z GgKn ?{wrN'}苋[)5(vӍ#^Ц)S,Mh"aʠd$]C9 z<R@$yY ےg:Qpg'!2s;JМ?VX:Pkj7R̰طp=|'>̫UHG2;fw1߃RH)8 }3*d!#248bGEJr ^o+3EO~rwlV C8GFtWwˎ 3rKB~5F*i7R\&3wȑ ^mnD˂p٦!Jg2s>LlX֦:R[qlQ2O&e!F:S %D@{YBѤ-yd'Q iS_٧At`NNjt-)׾t>e(DIJRNmtcL* &E+99U:ShRlJ]W!)_ZV~H]c(uܴV_%}CX>$XBYrL:ŕ@Bb25hY #mfqb D&Ϥu#-(pkԜSMJo}hH(@y;]$V [62(fե[υac_+.CRݵ"W?1o-02]YXOX]u» glxj[>>R\X:! fx1{)`=81{x|9pC)EaC%ɍ#WwL}FoNgz$mVr?<]w{|㑕/P.h2lBAzl#2F`zW*Φl4MX%Y=[Wڵu[3|f_f^W2!žϖJ=ɟR9iuw|+WB{"[;6v7i;+-'w;V|¾TŨcZt[WX燱 ?=ڏlҀERIoo}Z=u~-?3V}isO^z&k])_je~zfSUw~ cPg~]O}y{~^m{RMs_ nW}Bgr0x !u|Iw~m{u1|-~uQlXrxѵ~ArW~ևgpXuA 5,r);8h?u38q:^5qHgKXMiڼP%NHҔ1iOAUG\@/f;gۨnLAWVߊ}`/ڥhW.j2/[ 컀ٴS>6Xg^,޽2^e5ii??&y`۸lA\:l℃z m64Lu従$+=fKMѮ8skԪ+ǿ;jKpfM'`U7v J%BD(vgZMEWV-(`@NPO'Dw~`m#Ӊ)J(=8dqlzDc؉iwvAٞgKHL5Xbk#,BgqFOL9k ESUW uUY-z:%,y%Ew$ڙ $ǧxD )vrg;@ĭiZkՈXd[zz}jJ뷡ma1ERSŮ~,aV'|E*m)’궱jY뮌_{ l\0#!Vh+Y i xfY%03A y2Bʲ.k@o bJ\l- *|h* LyqvI1YoLպ\w\]g5=fY 7ZiM+t5{shʄ3h" 0 ?J_'z.(t8˹͞S_S(. ɿ:N\qsL;Fyl'-$/; _xhm>C*Y?5 ;驳/MPס] %1,Bģ_'\Ajcˈ  `vϳ ;dbiLAے*1 < '?'YFǹx((027DH:?4ն((h-D"척ڎe S g'+6iSbۂػbq[-V2 [Ղ1}ndpG=e&qۙGuhDF Ycn]ƛ*^ǚRGʍ`2PZ' ~dKn>`X!B& i[}.ɗߡnn$-"z٬"Ӹ$'Se6U2o~srsa x)y ؕPbD7{3!9}m%Cю>a-*CGZrk! py/UNtHҁђLBӢKzMy{:Ќ΅{ĪQa5fL^O8 Pg@jjz[꫶և&P`-kLJ؎dJOɔ9tHfx`׭j5HSfXh>S M]aYyIY܍"hJojk[rI4uV`D̮hŽB? WBuRx:;Z֯le@;4.C/x,7Z-z/fw=q0{:tI,UٛUxbսG|c2\QjjKk0+iU<܁ցxGkY}>V]1]|T֍@XlF:tRY%{WNXMF:T*JWnX*Wam\}=E 414O6_9ΆsۖdkMz؋gSuԥ_'vOx^*sT}cDZ+ӈE6 #:щUC͙}55k6lεQ˩zӇ4k~QbiUOtU};$k&6j4G9=n,'Z oUƕmJo{ۗnh˶\ܭmSqbF3:VZU4b&8MHYvl1,gNmK<% mp~[Z$wQnP=<$d:Qy[ {N@6FᾝC8/|XSLp;k+L?dK^9%voJeϼ=q 2!?U85WMe\U&W\iggЉavAWAo^Y$)"9yzAYYy !g9*QC j)*[!j`ez.JAvQ6jw@g1ә(@3z7z%Uѡo<: 6P*V`W&:F٥-:q,Zr qF4T/)Nh2Z aLZIHo `j0Zq4t=9qpFJ z)sv٤ :ª#86ZYz*xTh4h꫕5[jXZɪʬzSͱѪI:T@wjzXibPѨ%x~8je{ڬ8:EE窯ي{:q걪&˪ъWʰ %J)[۬ ʹG4۳jZq]"k*K4{-8:T+dTHcf[*/KTȵjzti;T?rK[iJ`;Tq|ڷʵHY37˨˭9}x㪥YKe˳\KYk`]p*۹۹+./7 ;z[۴z /۵Hy;+{+5 6{ ;{[#kpyZJ.  k[KkK I?ۮ*$EJ{\Y Z,+;˴4)l _Bğ[k[,,ğ6dLJ+>̼Ue \6;FNe+E7[G`Yu\0ي]\5V;ZeLJ|kȓ<ɡYl-Ɉ<ɉZǁ ;<ř @ ɒLGlˬۺȇ̼a;r|,lȆ,ƾYJ,em̑,۳ˮ|+籸\+Ĭ̳X,לּ lUOw2ڋf܌Dn ^ O|.HAN~~~ D""Dff"DD"fD̙U̪Dff   H*\ȰÇ#JH။3jĈGCI2ǎ%S$xK0cD&Gmr͙sL9ǡHG4hҧPicԚUjtա[~-9uٳ![E֍kEwݫu"yͨy >5pҗs4L5׾}oړ}].JmتUfЇIb j{?f sFص{vlͳAm)^<Ѯ7mWwسξ{7uE:u;*ҩe?3npqa\w{a姟FҖ y oFQXx rՁ&"03@4'kV,HbS`d.ⅣCXF@%#`SI@\ 4"NUYYF$0ueT&h&wN͗LZFved.z]YbR eFgS{#M.`gNڣIZH]:iJ& cNrg:&Ъvy(ph0);*iIJ:lFʪvk15v+F-NdO&;,kodK1Vkx;/^ {wjz(+lr .4q^lքdn>2*يqn2.;Lzgu@,sk0ۂۅz2 VqnɆ6Wǔ ?=&i&=):<-4# jP M@kjtsӜ* ̪҇^̨ ' D@i8U#V5RFFꙿK@adY&TFPbeɽ } g&҈d#)Bm=Hb;9ϩ"l- YWHb\Zz[b֍Bvl&F$T$dakƬuSmG̡lЁMY2Dn;׹\ RYF$͂W$iv Y2p ĻPe%Y-_+T0m:Nơ%C*l슴em[1r0>4dPF R5P"' .j o R]eK/b`z]n vMlߝ+M"YޒۣvdՂϦ)˫{>/"̳[3-g3ԃ_LZB+? T}Ԛ U T$cf&ڻ\ hR¬XP-i[ \A#! c񢏼뽍ֽش}x\ weV1βt[}~:,q}pG;­[Pb~6ߡ;ږ)-Շ} t89:LtVҨwпO[<$:Osa ͲCnna]N=Sg:VOE Okw[w3ݻ 4x~,{'F`WY'3{ϗjv}y}gy-w}|?Xhzrfpgqf,G:炠W|"qXm%8~8qe 5Xry97nWxCTXrCdSgnA9SXGxA'3iWGTH8B4hY#zWx4xlX}8yx8pDyh~pȅzh(,7WxhXPhb8$2xz8Wt !X1*h؋h/Ȉohuro؇-{ȌȊ6HBG(AhOXШ.WHXt䈄x2ӎȍȍ.#莭ht9Y`00``@@@`@@@ @ @   8Ё*\ȰÇ#JHŋ+HFCII v$˗0cLʂgɳ'͔7Iы5zႦPw& 4Vzj j;JVKEsUKۻᲔuݵx;ԋsW+1BBŪ6:n y䣔*h6gĢK70ݠfVY&Z7f/]7Y݆~=;ASrԕV}:uTw]>6tҽg2jϟO>*{Y~uu%xؙםO`-gmݧUoGKah9])6!Ia-!$2` nUEIaW" h.gS50jX (B:Fc/fbE>YhI.dg Д`TgQ HfbHjP_h_7dp)0#)ZtIHwBY[sp:_e'F a6@MCf%.h@:AI:m&!qZѦXE4+kbOXjDZi-Dy@:v-*Zۥ6.gWx.Z ^^ B5/)O1,jf]Hbt-,F-],GoVqq%*kz62|PIk4UYgfytg3KI߼4GTzP¯`ڣ)j##a;Q[tmA-^mtQbGwb| h1Jx(r;5QO*eoy ޱc"R8ħk:>.Q|屇̜;*m]洿ʓka9 >{̻B6pueN!zA3gzɫF$`/I˾W].i.y#m`zN b /tI. ,e㓤 0H# _fv+ aX ưz0!DD&m4 d(IOPw32'11Cl}rb|H'."r3-!Uq+v`FE|B&LFa]BPȶd1ThGDIҘƜ#E"yJ1+w Db. c\iHPJ s&Kr9.ї_(٦9% ̝u o" %kJH(I)`plS>C2$st&<hoIcLl!SH8{QI c?#)Lb.2iM>+%P^0J~qY%; zH6&H]KմB&V)i 28{k3C˄ت!,Q90P!r*)2:jHF*q, -RC./ K8XpQ)_aXԲ(TɌ0$@6ԚHS*E 8{\5d$(ru%ME'ZL浛5_| ;h`ɦ+dX#;Kv" t`d.4i* ^Odp,JsbNMaisʸ1{$wo@`G)4 gd]tmh@ﶽl}%_W85d';'؋g^۽onƪdK4pZ<Ω5hkG']?uOl"#وsNp!'lj~ĹcTuc՟;vɵLKdt|p; cXQxdcIY֏[AiOc?Lr/vgA.6ah|lTR?^j ,DaXx7Y%"L8/1'? 8as A;5JmW6At@_>&{~UK s95z/؀=T1[A'ks賁%׃KW.vEB'G8AmqZ>Wɓ+ ^^`$e2ِ=B9baF$ FGw{$xɑ!o&Äxpa|՘I)kPf:>3;1jQRXWՁqifvFdZI 9~fy3o)松ycWU&w"%ZHWHu~NNA/Jꉦn9yކ] 9r$G9t w?njbTږDImt`rvt>!iD'ڤz|@2gvz>$y pWUȝ5W*)Fh(zxH).zKXcj|09jHvJn4 +C'r}Ӫ9=WFb}Ec;\xmyw8wyYf `DntZ6;A9%9e)xWsA9  T/ gFo:U>R"S'/*BHo4yh4A*Zt֝P>= wI?1% >HB] #;7}uYihR_ C2S˛fTIk/م\{YO19zti݇{fd}RkfPsZ)!-at|[8^zySgC ‘uGY-K&>V;_ ҍE~$з!L=Jړhvm2r԰vȏnīܬga6|R&ğ;#fK'_\Z;kGtSXNl*nntg7]T:xuq<~?WخϾW_{vk2/k-) /<y1J=-shE u6c>Q>zfYOzUKWk̫5,plsdʎHy'} O9ňjm zQJyx|B#~UpϽ%noA1bNgQeuY:^^L;նM]Vꗯ> < .ppA,>PF-~Y@8J]5ĉA'W"ȗ3xÁJv|5' h1 NZ$ PS (`Fk-'K3$Soљ\?~;Èo*FUӃRVhf* :tGʄEJHqcFmΝwޖ<=: TdgecTU>W9cͦIlɠV,vcԚS2>۶z΋vl: nXn双I()έN.zlS` 0Lj!kx #fĄ"o/n&3N&⓬0ʮs`V i2)l<2EbEf,SF&C-H "ʫ [* 2 <Ȥ x"\S,&K6Х`D..4p(< "4m4Oj 1(, ;Zu6B 6UEsNL3NO5}*Tk<[*3:>3ȩB4Uz*!D[*`.ٖg{m?j-HY\VLϪs7;,S~˂L[(&,`[z ^:≫ޅ*8VЯXK 1bTne7QvWւ͌j'r}\`qKy`aE j8M8ˆkiehn+2u5mB MBC;puY\ix`^Eмm|p͂"m;()(N'Z4?7wՋ%N!` 0AMd-qx&̤O /P:eE▦1joHM0p Nt !aC`Ɵ,:qX|4ji-qC"¼'i6 !aL2ԅl3r\8 W>]$x肺j׸flaud4h^i!n,F,!R>U(nJ$DSTΑ30!&kL̥g=9@1['u&Ư:bβUDo ,隓olS7qbO(ރlײit[CQ4R*?7X t7:*^:ex&p-ܭݺd4k`X<܀s*<% !͑\th#ڡi)㊯]KX,,P^N;LG/ΉH%8τ&F5jDr [usUwM; ;wtZ `&O5'ERA]%cCJz:ꊟn~$,4d5.cLɈ=zVkO#B:jB [b5pC3M濸.NmS: Z'qFuqO-R:YMsaIƌPK+>=ONfPL8WR &݇e-),{-|,(U| b8ʰLߑ)5<+ ȯ00{);ydм#pB!&* ][,廿pB kS( J!j3( l6!ͨ=w.[-w6wsh2J31JC>ӫB+xCD\!C1Ũc+EиLQϙCMcGd;=7? {"=I%i [\)5F DUaxGG=KT,@ǻx-HYYz D 7Ԙq/H,/l>3R$=#S,Tju!Fk̻I*-ɴP dAy*L{ºóZmR㑰j>t @r*`JY,ĽDK aKC>$+F zЕrl5=vׄؔ٤M ̈fff""3̪D"     8P  P !†&X!ņH ( "0  $!$ (P*XPa $P"ŅH 2 p!#.HbŀH \pAB80 H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(fffDD     @*\ȰÇ#JHŋ3jȱDŽ (S\ɲ˗0'$8Pɘ8sɳO"MJѣ= DʴӧPիXWʵׯK,RfӪ]!۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS̪f"""     H A *\8 !Ç BTD%ZQbCz,qȒ$ Qʕ,4)dEoHLe|ibD9ЌҌ T ju!ҬNk*ֈg[v vԶ+EJ@ԨJ dZ5ԂQ.-U+Xgv`تbݢehѲVmk_eJt(dƑnL 4e:M ,qeA-;\'JϙƄ fѨNiRfʺkfsŽ߼ޮwqƒ7zq6~pam~t,1I_|Z3ϗ?ry͋joF**ܴ6rѥE1 .]9(arg]v]v!&xw^|*VV_~(VXwۀ2sdd^x!bz7b\W|?+ITkچ[cK҉wi']֧p}$:؆VvG#蘐%%i&k6)&g{u GBw*2)+jv*֨Z^٣Yb줝i,Jkl,7'n (j(uBl_f!HV靺Q:Gl&);]j:VJ+ꎦv{mYm%tQvnJ2i""o#V_Y6fffDD    H*,hA6|qD+VtHF=,X"I&XrdJ+3<زI sR&Ν@ -x=tRF Dm4TU-)׭^UkXcUi۳CwFEVlݸx^r/9h0>w?aF9bʓ!3 2OC},iHε٫ʆvٸk wnkk}}[h‹}yBŀ-B pb^]˞Uf\X2w\}yキ/wjM6Ku묹%rs8p H} 2 }nHH!Fŗ|WL䙘z'X{*|U~; !qiEHF&9JdhJG0quz1m)"b\yd^5T>'[shJېy6ɤ4)ERVӕVġYfd~)i)G*Zp*k~窾:w>^u.ꨯ=i% B^gqߛr꠵*$z Pv_5,^y,Fвh,|:AI{#[JXnH6 Nf뇿rnk(;jfizmo-0.7.10/libdrilbo/src/test/zork-poster-grayscale.jpg000644 000765 000024 00000604353 12606024321 024350 0ustar00chrenderstaff000000 000000 JFIFHH XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmC    $.' ",#(7),01444'9=82<.342 \  !1"AQaq2#BR$3brt67CVu%4Us&5Sc8'Fdf?GiwREiV-*I:]ݶJ̯H>"G)u:?w|~3ZDgI\x%HiՕ*  UvoJk9Oer@)e(Q'Bjkz\!o}l8)*JN3鑢J7LzV0Qmn传xhdr@'s/u.((B3SwƇ-r]/QXs#0]zḆ'')ʹ ( kPo3bLW- Jy 'VuzdZy!٨|DFt4<G=E94x'!0\-[81K:b,5Plw (`|TVni [;cGVC촉M"$- nŒ?!ߝ'Я w|g>^C4LW܁QvK1u?-z> *E觡>.;=g|21/:6*st-mҫjD q Apq]QtfQdv3O6V 3ӓwFшMZKCmMaGR-RS4nqe);[m#Qn*7 a_xhվJRsINӐ{cPtҏz )[p8AO[fn?Www^{ujn骯۟j?U_On?Www^{ujJ_Nĭ$!b3}=GuyK2ҽ lFX(2ԏTI|3U_xmU!GHڨu%>U =;w\z- 'OJJ-\RH|E=?#w>MV\?gq"ש&bFJӲBO>UN?#ֽҫLBu? RЗ$ R >]QVMqLaNTxϦatړ{-Z9p |%Uwr$Ij'J).\rL<JKgP8% An1jq)*IY?yqXrώF>KnMFmRC㎬))JH `gӝPӺ5GOIܺ*'ᦖ))'ۜ}ЛFEN9t:ꌍeq88&f22]R#yFopuNt]*C֩[mlo'DߧBiZ{*,Q'9$@1k5AU#Z2[uPU2RAm$'jUpA#2sL~c )|#?|ƶt~ʹ z)?'ʑ#i!mq;q},=\4'hyxJGʈZ7N~_rly[VrwBtgi>:eJR|fx!;=?=cKY)ȁ (5!j)s\vR*elc!j1J $ee*6IrIJ~Q"BBo^`Dp1K~CQ5m#y'SxT”=?jD=K 6@Vq %)*(3ѵRذEm̏Ckr%ٶyqj\V(<|,0ڏ*WלgK5!v'i$Y<P0=N0yR-${|hјX9AJ a^sΆҝhb\*CϴUco>uP(dR`2;ֵ6[HǛ'H8u!IObD?!Ķ2H}̮¶+p)ST-nR.=Tvc`jڸIqIJY֙* ;KXT01F}˒rԶ@`Bl!,F (όꪃFzUqn2&[e)Kpwr}aX"nJ%b_3ΡesmS\[OCD0or}#ƃzcZvLrOJҒ9$w}9lj)-|o?ӳSIϴ;Va,*쀙%IV9A=\qtCާyP*9t4ԕ)myJ3GRzDU`l(va%S*]BRf ϩ@wrSseZB)t!%|ƹB#܊Oqߞ ڧGC(%JHo#ޘDe_sGJV8e[Vbj*/UNdHkyBpryc{w뎮"ѩmw 9<diyЦPT:yiQOc9<|ښGiNm#*ZiO)ͥjz1iNTT!vP$ԕԞWSZ}f8ld4A拊S`yj e9!]wuPr6ٸoo)> iaR}DDvf9P̬mFBs4bѯ_!¾J8[*#<qoT-jEMC iPΎ}q6mEjledx4BIO~prGֺyBjS vcȌ8iN S9^ۧR"RZ_ Gn:H%IHri4++ rx3Cx+)V|@ /RެA\765sW;zAan][l dyW@`Hޟ5V)D;몺/akU_lRh8#cg(o:޻/l8Ή.2A.~+':->}Hq $`G5ul/ŴAeA#8mMxU[U瘭U8!Iď/[/QuFT&"L]>dܑ Z:o5@#Ր>2;:r18ƐJYЭCRڄR铒O8ЊTLoWi=n5%,Hܔ_YH*HzvSS^N;^jjَ%4E!ٍ$ +j y]lf@T I9F0S߾bu u)X)a#-8!!JGX-='@'Lo_TnzjޠOn" vz!-ʀRcB3FA?#]tU 4;^ӧ2ЩikܠxǾSdAPݥ"EU)*!Sҥ)Wjt- %.lR%ӿr二)Iڥ܃U:?KG|ah$ A㞠Z+4+*;ﵳI$zFGwp- QN瑝Z׮IuŎ[j->Kq!1)''*QQa*&]RԺTU%m:yZ1ikӑ6yWZ'.Fm='r2 NI':}]ib@l)i̥Vy?A>[uz=LBkSQBI`cnuB#*) u2_5]ܬ rfY.jwR0tr Fq(^=xbl\P 'qqG6xmWzڲ?y +_6XfC4 ) Ǹnۤ eT:~&z;hDR壻^09h.bїUNy$QzepP{9Mzm cDv¤O4%1OSn'HTN ]2ɵ2ݥȒ8,G:4XRXrߡԹwie$(JF{1-xZ]NQ>nHKim>I VN N%wM=բMTiMxڏĠ@GޏZ$Mݑ"fR\y8ժ:qp颧 UK%.Hڃ-=Ͼ]R6 9=}uWH:]Ns, sq-KAʔ(Ē{;sj\UXEV})mHKNڣ9$v֥1)bƏ%d{̝Nv|iKպir)hfEMR>FXN3M)/ʕq"W\ZTuc;RP ;@q`6>+4hO~z O-H2qQ5FšS`l!1)rRU)IF0x|{ݵ+n:'8e.!*Pܜ}qYNQ=^mZeJdeHT6H(>g:> Gt]&Lo9NB9 CSJKF>!SCE.a*}1뭛1U-uAQ2q>Z5a5J)@<kmV™Z)WsiR08.SV)KmA XVϱ㷱";H0O)#~ FBmr\UcJPR{|r*< z\fg 3n `|:{GU]IKy )h `;zm?)yoCv HBKA~씑러׬x3 )KuB)i-_Uid-,41T3>f[#TH}ÙBiIyk/ &k5h~#A(pJx-8v^4?>6(ʨKzTK,XnŷK2,3u[$ 瀣n,k_8 L fǸj:%buU [*>W ǜ|$V*a2jFf`!瓗 T GA~zOS/:m^ZSYb;{@*'?BU& $ uKq@H?irxA I ڐ;(O]nPq2*JZV0zh+4q )&SX_̧Ѵ*M6ŋ2d~C[*dX,Մ '@WoYkVP⮥+V?.^?rcj +ujIZ |0}qۡ*b-"II!HbPTH>Nۚb.I.RYsQ# #upռԅvŬP%k-7yRO#5p.+FfT9Qޝ6O2p #_UZK- U@í$$q ;lzhnuQ1'{pTkF\ቬIAW}ɮ֫?Z<)̺>8O]בqLm?tBZ[%d.I6JDhU*,CH)e*>e`3uU^ϳn ]&3e@$Vi;A3^G)6riҠ"v%M)-}6*ݾ)v]6qj$Bn8Vd`r{pO?UW^R2 ]5 I9*UjbRaKPN=C6oWSJu %JSzN=[ԺIoiMii JQ! ! hPUQvJô_cہͲC UkQ^jjjjkv7[~;gTo]tu4ZA[oC+j$9 V[綕PzsGU-.GjLrVϕ(rxH!=ԒSn Rg*O;{w֭aexmf,&; K{8sǾ/ ~^&$@c)aikʟqN*{~Έ7Bx[XUs;ƅ7-nĖ)UIPy,8Sq:aԚzmQ)2rYSԽp+k/UnYmLݓPpR\BY{8HRrTݳ{Ek rjߤ;B]o) <߈0[I*$NrVn :uTNjV-/pQ 2@'o<'8s=RāHT]׈݋44"Iagt4Vͪ#Z- řW4}#snSZ )f#|[qx!Gs=n8]Rd5R W7M_ʟjp%4ʕIP) WQuJeNp08'D޳n  m1F4Gt#━(^Q9V(Kj͉*Nἃˇa'ZwV׍E=mIg`8HcmZ+n,z䠢)&upy2N~CX/뻧ﮛS\ҧ|Sf](P~ړX=嶖xCM!=u[ jfS$GHN 0qg'5:q4hnm (a͟= IIDJߜ85/8)hNHI=@ 5ӝ >%U %*#O>sԥ>W3ExEH=H$:ѯ/Jޛ6߽^#Eڔ fW\opcSi1З~x,k-%Qe>A*KdIT{$qѥrtm- Z|wmJԐw ,ioQ}Qma.%nw/pg>QZI$uzwm& K%X$?v28t`՚RW*0(8@׿&+"=CIqЦB)$`~tqn&csφ=Z[]\q^p鱢!DS0[TNHG1o3զUhZ' oF{{鸴5ڬZtxS4!C{8>[7 V:5"BrG%H9T ǢRP &P:/vT؀q1ެ&m6n1BJ+Ĭbd0oAE @>U(hSHShQ3<% d'F}GMҧF-18 )!|Z)m1rU"mBDgl,m;x 5MjU =cyk*vC#(VSpOaU]i*̗)(1$#Ώ~м+\4_+!)s7Pi\-2m3 B ǰitLf\2v Ld O=]; !#@@HӊZ+DDD%Mܠ#;S)MԖj, H{'EwYWiI2ڸ}H9x퓏>UꋵE![|\;rX_WCHqT NJР2?IYn1;(">ͥ@gGo]&\ғLBsjP@Z}>c ~n̈( 376;HΖ]HkҰL)B$ /'pXNP?.zOa9~ / *ÝgEjEuP+&/ rI<Unc 5Qij#GM$l;*zi U u((f]$v ݵ)FnyKR^6s΁:(Ǭ(2I,6;5Շb9PqRT;H:2M}C)申ˤi9jܚ5N>iZYtCi)ҧ^ZSίBA$|Ь.B.(mdl}EU}V] Z:S XV|pSK~*-2lFg I8Vqi'p=UbUM-,mqn5PY*tK]p)` T ci. . sR8ڽCJ%b~&=9Eu;Bi$T0<_.ܗ%J+mȰ$GRF20IL|QRtj8RzG ]ejTWSh:!@'Awc] U#p 5 $dXS=ؚ4B@Ur8i1nZRZjˉI!Uw:[ui3^BWVJ6Tdn>R 8?L`/]&pje̘AL=5;#H" {e2*~C[,''*QnNtܽ0l} ?G~;Hn2Ӂ8ح* H14S%/g=~zΦΟ؎bT9iSSIXگr4[~ɥ^vq4)2% JJsp9ǥovuIծ.r+BVv/6sG立Fu!XPj]u"d%[BܟMXSN|HUE-#vҝ\y[]&f;z]0zV6(Ty65m Er'? ƣ<Ă w)M\bio-:b76 K8yUV;iqҨ RAe֗@,JWz>HȕE2A~a~!\kiZ{྇⾀AI:_Q,/t.H/;m 'nJ\Z-6 F9ڱnn)qĈH,O 캒A$?OCމtۓhJ}NIV9J=[hMt2w!E' qF[z~rtŇQ*q}qc VqoZr߉joϥl/TNRTo=YiQh SN')P=9Q'].hQXZnT› LbBQ\ یϴJC- |[ZRڃpy87H[}8P*r0GhS\ChV[{|N+ޝ#G-$`r k''1`XN+ߒIH[܂>n[ zO SLjŘ𢠭 %;Ӷzn7ĢԠTkx:$͔jFA#I9N=1]7m>%FPKܩu ^ I@O?M'&MbC1P}Im*I+8Q Kn>op%!Injd0[e `m^}'׶EwS:y]wN=8n*`kJ1*kwysޢIAV=йԇ$Hh,Ko+$vAm\˷ek)"n[qІR>/3VZ>:݈IZPoqGnp衸RiןOe MFQ NH)HmHV֥_,HsiXZW9ёuRK,51n=:56鶅.eQ%ůyJ#PHVE/WPCm6Cԥt1>i[]M+|S!4ڛ'R==2ݿL/AL#-( 8flܽ.-t4=KbqBUq8<5wүJu:c~Q_awt0/eT W2x iav}i]HEA p)2p6=;vxDNƔˌҊmRH\mZjPB\)V=k==@i,/?=m)LRw+Z(Ҙ\Sm6 6 QJTFdY0Nh6>; IJZO]8^w|ӥЬ:e2R_!.4B]<|/kёQrG%.:rqcr|=; +Os\1LZFͻӌjKXoː0Z5rNҠTФ8϶ȟ2[L"SζC* v ZRg*}Al-)H H@EwEԡԪZDbMiH R@;II IPGLmfgVojTQ[vb^Sm^ caȨBlli^FZZp9+Q*QmS";cWO9h}xdԕ#mjġOhʩCIAu.F'(@@}=d`() ) p<^2F}AGiv*\-R]A^z#օV]|(>R9ҳ)<}=5pKg 2[mce$%)9>_)v&T)08PM#>XPlFZ|( aП3hЮT͟!>,2s4R:^J|Zvh(jO)?^0VH>7S .II!+1pu4ۊ wx\2Sb#.O1GNuJU4Y3ӝ$^O}Ywޜ]RWR~]̵CM8^2 O 3u2#GOƐԕ R3$N0OӝhtJ@U&Qu sJ8dzQ̚N4,GCm{d:WH nƓ-eڄg`!e]PƓBqHZJVBՄ%9XD+3k%X2t[u2seSHRZ;A۞3s|Yrviϛ͌8QEKr%sS3:.<p$)Bwz${Z;XbU.ˑ6Cl6cDdŀ@G]tUR&?bܔƫF aJw()<'SI Aa4 J-JA RmY6rJ~@ Q 9:{ +KzC,!N2H줌gHMX(v&G6aa9݇r=n]R*PcLGD*u崮Sc=aի|QG:|g{\3zldL|52TڔJF>zn.v7S2TonH9ƴQ-'Q)XZ:7wά_s5T ɩBl4J?vr6GrGͫGID*e VUO#>z8E=jmj$ |i6ꘋUhѥHdQtK̕262$toyTk]LUjZWS *8zuЖ뷢Vi^b *Ǩ:Lc]yJtptRFLc?tz:4KIu{C#C6P)]el˥5XI:ޘ=aAێR4t'iQ%?Zm*Ե+Ŕ0~]r*)P >Zl7#n99ѿFuf$)N`#_]nϙkv&LAi%GA/nH] ?z[YRVӠ%Ɩ!c<G]\h*}[/F%F*#\|~f3. s(% WzkUTj:})[єOdm)HʈӍcPQzjdch=zt̛_VEoPTҤ ,> bUxaڗnԔ sgbm"Jr\%'GgJ <ܟƴ)e\4 lMZn {A۞tIkFmϻ$8XOPm1–$VO ͣVyjLnJ9r888^*EMu $s{%=85o[DfܕkF]V[;IaQJv3K1*=>'rZ,DTu\<©^D|a'mƛt6m /:2┝ϲ}q$zn\.SzC.8TI@ӣФZ0jS"e'Ƌ&+|( BΩ/ k bl%)]^R9)infӽo;)0|0|r|^}MU:cvz[ap&\Tp8ڬbqLޟS1簐dYI>?ğ{ԥT')UVZQ C[KA䏡:;ߓk\貔WJw*PA>Rk= n$> TBTRK%8#$F=3Φ$TW"  \)u\sq Wc:)UJI̫T -KT hr[Pr#RZ<8A%H8ƶeUnt#K  QuGf-][eQԭ a#N֣;6{%#UڧǕ*{-ˆr7%4\+8;yu"TѹɎ;($|UYwQtg*é^C9 sBpT\Vrd4/%({\`R "m-㸴&wxdc 9xڧ)M̸s-wSxݱ99P ꤎ$ل2SO 5x;Rگ.Һe]{_d-Jq;4KrPmZ۪Y)+RO$3,R(/ Bv'C6 )RPiGC9=3ؖl9u2ӫLYa`v ʗ)HRBTœ *?- ҝPڢ1ؑ:y=`@GEU>eAŽBBRxL̆oymڲ4C=LP)%7,m7 E^u}= 9jM&\umXBlUAzv4KH\TGOY' }uȴ\59NU=2sHRdܟ@tԛ~n`¦ÊݗWsAYQ$Ǿ4+FRۘGRi#a 꺅OO\[jJn 6@rsttaV*ɻډ"R/L} އ %+8eG}]K7VIwVjR{W h+SG"Z[tF;?ciJ0JC{I$x5o[כGU!ѫ 5eX*Owm$}P&$zX C NOaI]ebPQ:C]r7-^(s:Gjr2R~&;{ gsQh3,{]4>+,>γYv^IAqÅ%xI ;T1CՕIY3jciw]aT6VR}p14ϱsKxJgV%rj)DyTy >K>(C~H1POMB #\׻6Řm|srf22CgiQ)VNyהڋBV&}~DY)mV{sR}6kw"p\Q|$o>MwCС|$UĥɨJyĬ$+'1 ]K_6?ݽ^~Ve4 TV 'GAՉ"ؕN!HJaQ'SZ]\mVhBdAw0Jp8Q`ſR6Mvu%ڃ~:UBCayz|eX7%S.hTkea+^0 W#x?Q)=jCZl^\S-O^IR ݜ8˫V٣OTUrbTږ mTݴr9%OiҴ1SتTPa~Ԏ}s>EV[X&O΀ct=7؝pVV_m+P 'ӐrO[re(7[lK@zѠŷoLeHSszꖹoUE)"?ſ`a_J/urM$@Df$`˫݃uwU'q)4xTC56q+Id4x]$Vsސ{g_g🦒=j:hr1)rB 9-_vxOں J2*px3sECMTDEKq$KHNTV8ﭸVBA R9e[OAO='Vj6'9ƻ SJT*/_\R))MNrHP8ѻw -܃u*uj>%V "+(uBE3jC[E>ULcd8?4D͉u'~@R>m,BIϦQc*[s Z,?  YwQ8T֝bk!uڍBCάC팬FIuQ#;qF(7(q~0AQdӇ2vbVA]4L/u! o=-r)s/Z䅬{q?5]6+DzSJ6PTvp=zqzBcjsv?.U:5=HwK9YHI Vi6ykSϼB굂q#CکZ7W9.6ŠOT!Ipm$r;ya) d$ƚbc1 Hi )CIHX4iҊF[TQ7T.HH'8*T3n(T&[`pNA#=unMKEDvuE9([bIQH8P,zDQDuPN^ژ-!{cqG׹ εnLZjeBS$G =V lbZUFLk^Fy%I|d֜ٲ**[2p0;|=jA OIyX)@z ܝ**˚Y%9F0W=jɓStmqLDVR )8ڬqH:p[6^EfY;ǫ=p炷6P coV"K\$ n.ۘ)l<ΌGUh ?"0-J+FOum*s'PbL"1-& l}B^wRPIaVH '(ϮOW6dR;P> 1F~6GٺGZ͙9gIcҭ590#HM\^% G$sߕ=t ݓ9uW6ⶥ7XO/Xw\Tu! RUO'ʵtR#mV>3%`)Y!;g*i{Ҫ%0 BF GQ}z(% N7"SLUFE%1b-RH!J~ztUP-ÖH[T) gL;UBnoĻVTInfTl<ݞA>\Smjo&c 6 ^y9<="XjJ}E U/<k~UHɐ4'*ԙߟlOD (pk#t HXAu!TKsRW+P{v Xz҇>g$;Jʝl$z9ƹLNE eJkjIrrkJyђTi'>P)V$P䶸x+!_>%-s=]՘ǀST9JRbG}1-݅hR)W[WU-BP-W0#G+q"͌>"8P]o|9mZ 6ŤD!6\v:ȋ 8)i {8 ;J8G <srn+IvN)FR{z_4{S%ο 1=9:&twڍIw9!JK#=ƎY.E!ӊQ8RW @=օr=*ٛ3(i6 φ <|F$H*?Zruu 0 R>h'5aq%FCn8F)[j?}){=J1kOari{O-\UQ0++d翐ߜl7N )qKmNW!|r>Ü{=,˰lT*.y֤p$7$jDl^䫌vE Nؒ)PCoPBÐ✗ZjN4B,8¶OI Tm dRS*.$ |Ƣ9\"MKV c ##=G5P\zJ,~w 8PSiԚ+ڊHYJ#Ztunxzf<̶$'rpT@#ϳZp-R2UM䅟R}=&J;ޛF?q)@P{C>- ty֝m]YukN@»pA-OUpv1ubNv4).%B;U]+ʁG9[c< <$TabC;T?I"ۯ^jk!<I* ΁=ELJMl!<ʷ! \P ߶F>9á#`ā9%J }k>ѪTi'7B҇N9V{=tPz|Bz E#jKo9VТOƾaUjd c۔ |D)q״cWi4qߺ2RQ)S!MF s c|Vss+G6E ~N{[V}WU!껰S"|ևk8UvĔ*)JF*O@VQnKzm-YSJ[Dd:Iꅓ ǹUQ(x:WU: ~9%<;rJxm)}qIHBRQetƤEZKpxgȠAc<1ӌE3L~4Tb;ܤ}9ţjǺhS+Rzlڜ]N.6Jø$B6+zZ-Irړ0,!/%ըPNђ}qݴHIj PXb|QA 3߁Oql˅)Їdx*r2qs5Ev!W6F@=qqƩu55-'THFy sczqT)걢8%jNg${gDيjb% ]y-;HV{vਏ:qP.{$iieեTH<(cKs$Ӧ6#fK 4 TA}h3榔!+U}׾ !U#'$sR29>:ziYˢ$oRنx1\|f(*Jk!vdqʴY-!RPpK 8I۞>G:cٖip[&ҩɘڔI)m%"9MY\UlT~Д;JYNUW#y綔[%9JbQݼ(qlWtVhrN+|QvRrr>G J}R!IJTԲ I-Me/ xmc{}8:aXQBfvts z-[Vcp _mQ_!^ Sg 8uMtyNtcd 7QXD Y}0pT .-g O#8Xuc:V!BXRF9i;Y"i1ZS<$sWg5 ,zN,88ʙQ9O Q?MJ{zo%$4&[,V;ǷBt}DpDmOObU[p $,`|֦LN~HlTyOׂ}uGŮѢU!,4dCE&m=$Lm*\7Zsr5(G\ -)0#OO2SU9푁NݔNw⨥J8]b {"kqrU"R㎧ H9|aY?o@*zZ-M*O}_AX\TY4.B!eAY n$zۂٗp5.uu,:lț1jJUS;FѶb_Ӹp"F`$+udH䔣$Fk>OX[:Ґe`t*Kx[ݹ8ڂH% ?.4fiRIڛwORCQzj:etհ¥ 9B<8QVVvP wt5 b],߹jb1^=pMr$p=kjJm}5L[іؗAQO4rR {nG=SZQg)1SSv? 0G>nl+4Hpp iӞ;ofr2ma,m@}9x†)j%%(ZIZ<8. ͥ`2teߕQI'֜2s$jjj;Pz-YY ?$rSƴiUHP݌]B^F5xr5[U۫HfeD>v? m{k {Wp%a'k) x|zcXߗ%qPJm%JQ>tңG̭\Tb!hy#c?֯]RE[Itcҹ_)lیie*BJGpt߶j=Q](F[O-A+Р |Bl}V$"$RsjI8)8c7k;(աµiސ@ 1x۠۱Ub *`Z2OSlPʝQ9 'ߓ95GH*z:^&r6` A;Ғ9Qnߛa5d\2vUg9ze:;u71m /NrT;zw=oǺlʝ)<4:O'Qg\QM~joS~& `#=Uě2(5e5-VYm-oa':nTuNy:Jw)m+-ȁ[T%C)ѷ Q]c=Xhn< \ >_|vsQ磭㲔0F~]u"_R(R)%cC+AJpӑqobU&2q whϷiUj5 PH\D7!{R@ 9 *$gi&Wo+LD⁴swP[W)qP䨸 ' tȡu,ʅ2TIJϘv[nZE pؐRHW[0ltW7DԡZ>?F)->GJbIpLd _ZS]US hS:`NB~i2|S"ȴFP~&R2cʜ;2pQڜ-uH8R;?YWMVB:6@t8HP );HN>S_N8\S G'K)!o#c!Il-`R}LK3cue?Mee);w8 ʞ;ljnp c{gIBNMM4NNq@I8)8EqNJZGKj[g)P=4:N>ADliJ’IIHsk}hʥu|OG*8_iJ IPƳXm }6Kp|Unjn*3H#r$靖髃[q\BqIn3ڎ F ={=r45CEoRN3Fq49=OǨtWt/7DmZDd'Oê3,iّe•%-aDƁoy-B7nYS񘌩"\%GrVVG`N}Z%-RQ%M~FR܊zh[DQ0x-)i{餟VzHT#O[) 2V9J\i#jآn۵\{}4QtڇMnXOeNł Ym'n>xۗĉbB 3#;B1ܟqOz{81((݅wv]^5s@e+dUpjl29#>)݉%'k,iP8#UtXJ{F^hC+B JAIoH_KoDv!R)Rpvz'Ữs)MݔJ[r(sݏS5U mN2 QR D[Dx!I}ǩ}3aO<)c~|jڳaĿ5#NFqA')“V;:5*KnSce\!?%^V㪕6z`͙46lBI9>L5@BPSERI]}ֻeQƒb#){)I{j_ Gf[+_R:9XyLj4$-ٗpU_ig*mɎ)$ Ƶ&SX (Y+_W͹V)#i_٫Qy[?ۙr.HK gTP2viɨ ׳=/uY!";NI窹ԛ^3N5"[S0r'xk%]A) W%ZBdx~VOpK.+y-n* }y8Θ* !KI8gHN5|jW_ݲ鴆TqRACG8Z`O>E6DTD$/ojAU}ij&E,\+9N{ {]-5 #= sU!~;"I *rGӝt^+7 *Dg*.-!H Wd'\yh.-r)c 60ԩ >&#;{{{zGS^qLK)qe<˿q Uj en+ ayy9by~eSpjN̨~YXRO4UKYScYPJv~9MX at.t )>%]wv<{iKt촩ɨLԘw:5<>G @p +ySRe^ǙOζra$Ϫѐ– ?H6]C)mn娌'gX\V&I{ R{.E1K cC #$q=-ћex%iyh#{mR)EkR2NN'U ~cx`VJ'8Ѩ#&V*Z)RW•Q~ZZ.qu>89<{nj2!65G JǸ=ZnCTr*RFtdjf OI+G'T9q)[[ӌ O߄i[wdc AUZ_N*xuR9J cjųKv,+y:۴כ{*pGϮNYiޠs'ޥ\ JRsFٷ|Ի.Z(.;St xQĩ?pc$ZS$ܬ;I׵(RLC. ?'Zo1ORsIv\F$Fq=Є# Qx!, aCk=U!Rd^K~ P脟S=ҹ6GZIn-ЇStCSD?vo`Sbߣ%u긩^DƜ{,؜I'>_6Tu Kr{^!\e҂ʗ2S9־}+ԚjL敐`O ;XnV_P2#lR.!**m\rsAIƁnU*VLJMmI/Hmyܔb;]'?c)hjjjh~"^VԚDxex[/N¡buGӋeM6|:>:pFU*tZ2M:kAزZSN4,ynRKqИ:0a Ϡ= jɛVB*mRރGb;VRx8 4U9@%G!¡d'xM=c ֓( ,ejp?q_M!am%xRB8PQ鯭xi)P I 5NxïEb2|qmfR^.+mŢ T`%-hka;N@g^FȀ]iTcNs۞͠P Ԫ $)̡e*pe*;jUF TgKqk5pOHYVFD;p;m_Ҭ7.zd &l:T&9=-,OY`R"R&Zi `Fџ`}mph.ʕ"cI\v"'iBF|[:2nޯOR23=&U"\8#^.).8]j$0sz`vM/*wH9%[q(c XHێ{n݊W%gD-w*PBS锒 N=5GsT!431'r6q<MS C+1`Jv')]*:hNb^\HC) |w8'\75p[Ԫ{{Ꭸy$A%X>4?۶ct2?cĴJSCBLlˑ *3WHRpos\uuVNVs|zc 2W,6AI@sΙ]$*-VگVd%1A>܎#MMQ\uz$TŠRH?cEo\J֪v+uHBnGe ꫨ\jcǫT'_Gz߂w @H^[NC5HJP%CGCmtj~IRrۇsz?6*)|%m(|k3v C( n7wuiNQZV/ /q9^7LねMtB̼jqҪ*76lਐOu-LrD=ԥ4ϿQO]Vڠ1GΦS}Dպ8KU}ZH8*qN)R[}nCI>7(U5I-NO3>a HV"m F\mKo2yӮ%FXK9@QBrrz I P*j 9)# <^3xƀoQ.*'nq3N 92+U{ndm|I6T7Jm)ߜim3:a-塧!R/vܓBqmPʮMD*VeKJ@SaH)$yNxεzJ[T W_(JDžXr{t)kve m )(+9cM@qTIBYa8N2HHGI#X+4T*١K;|D[IH8ϸ:1(я O8%pwqzΝuǁYn4U1 m%w2;>}:UmA\Z :;H1ayۉp9JNT%u?mW"? 4FCOm$A:\:`7U08F)P#T}Mn Ŗ%!$[I"H$prqϩECe)ZB\ڞUjG'bLKLbcmJUg8k86␬nI 2>cUzhK9 XYI8>Z"|uϑ)f-~"ZYW|\Kϸ&)2|i9s:[M#%ึ]*JR8 IAzvqt"ZJk#p#؃5UA]ZZu 1|jjih[{)K ěJ=<n]>TR:TWr䅧Cwp2}qǶS:nQjM?R|UF Jc~G :9Ǽ-ߕEL:.B:NpFj" wqF6T *.4Fq9!*Z!;S`qg\ʌe̫MuNV<o.@" UezPؑ2񫎠G#gN:56-5"΢_-T2l4 ݀3|keBjk- tYJ+~y H Hg+L^E|ee+TCw>>NFuҕ2ŢGWroN1w(ŸI4,3k-ȓ!;S$!(AxT; Ԓ|.-†C %kݱ N>zcv(fڤNR'Hm7LQ=%sPd$I*NIuy!U\# )*9N#E.g+SBN g)"mʨj1;mV=:>OhC^kMM,:lͅ2=nMf߲n;(IW4gh0/+v=bHm̥p~$]uEn* Ml|V#rG=t&k1QJUvR%59#?Պӏ@V)ę (!E G6:(p̹V)δ3IQavoq.~w7Hq,|I)܏Lj7[(hS)ק[qG`GM^jh2;vPzUbuIҥ:QJr{rŹw#l!-FG #%A*TA#ڣ[4+ ?JaR z~irBRӤ:(v2=v ϤU.uPB~ xYKϛr/Zc*-,8ġ mnRV;e'ofկL-)B~1ĀqÕPhBRO #5Q&[-RPYl0>z]~qmTf)e㟮y Xcw5RaN)^#a^W1ᶔ`$jFJR$E[}T*IΎ\7-J.%mJy:!y1=Túdg- E_d*; yXuY*KbHߛp (wu/Iߦ?("Dh:'UaA-XczA_?XLjCmKe\ܭwDN8MKl΅[UNHRlYZGJr4/Vs-4e2P' I$ЖM("#]A]l$ss}sMyu5YpKzݨ7ZS)) xwgRQM@2Ih%GΘ}lF)Rݢc<#VIKfݰS*=ƻpRR%CFA bEN*-)+0-y8A?nMsDy YCPJcմg)L[eTSVuA2JX-V] کGN]W2[+dO*GߍHQxk[ avN>C\7E)3h=QfH%ɒp~D{tSJjGNzޚcc_שwfE$<4<z;㿮 \& &"%# pA曞:Ǽi_R: RTNp|Q8'K3)mR̄[*'YAg':/;ËihQIF g[e 0ZIqH><{bM.D㐨v2$|)#''ZHQBұ'#L7x]VUf=Ř!1b {eCq<[Q۽)J}̆\~7iPAO88#S⺺eZ_G<~$V.@@g'^kjuJmMll$-Rjp ) kq.6!i!IRN#V20$c;S U d|vh *%_)rA9E6LC$ܩM#'B$zg^jk#ޔˏ<6J刺O9K&&yT'%KFW|$dxӮОnxף%K/,2vr'jR4@ ` FStV@)ySgIΌtt=`E(Oa5?ᤐ8v>^s+76 + %ʖZ@d{}q;jjh5YI /{pi1! Q#kB[H;T2r۹Q;LROT*yT}N8N;sm…PyKeYS"W"U!>wmOG'yn!)kPB2TK[0-E:nCSIv.()9H#ܝu %N`6se/G[6أLC,4 J@SGԟ}lP+4 Ԣ3*+ I=wGLqؓ%qLY<?zUOj?Q)Jb=r;zgAIPRNA_Z:omޭT얐B%!=>G?}0rU:KXCjjjjio:nYR0,VHA#瀟#Ew<bVwT#jlvah-E)*?6Ǣv*Q qNқxh%O=͊h?ݵoPѣ\i +waJ'?-"*S$*LyOI}8 ׏KiWJS:*:TJ`OJPt^j3PR\$d`kjLӽ;ZZKe?&=#Gv艚W ꄈ 5p;OQz͟WmɨHyeL0vq* Ѕ4kF%JD:csê)lxc=תM&CiRw.RF>蛠Bz y7L%nqJIA)uس[D$Z{iow'>5%Xl;EN54"?<3H*O4 ߽3M. 6VЅS{Oq' BRG|knjVNamݷ{﯍M}!jmiZR=u55">"7Ƀ%`4$zۧ}/èfs1J>"6|k(Hߣ{ \UG_R;nrӷ4I~l4rLGS#΄i2\bc]URR`WJNūwajFXQIcr8*pI#6U,ID <ŵ6* *ǯ=ϕjLVE2zqյԡĬ$nI#^â*/:|uaKm(WmteҺGe˺+EYjJTsOս.>UzT!!g+Y?qNe'&dώA$1>^rdhCCLp<+ Ϲ=NvQ ϪRLV0b% RHqo:ڨǥ-i $*n8h- 䴢Nݩʵ۶qq2%:0O8Fpssj[a0`‰r0m!+Rd g+gʞBVx- @OϿ#t%Zk=?(4JZ$`yTvwq"v̷7_c2@ FԂ}2?=t\w&3O+J]@XJR .S?{B!8+B]R8M MMlK^WvQD5}ۃ}3 lH-p"Nr3xң#jp01Ƕ$ǒv+Jx) T*~^}(Fr~[Rwci6&hc ^Z?:,S !":#1c#R?!MM(:] {u!Lq=9ΗOV]>}V 08Z(Qq)>8̽iW!uQq)mӭ:0+؃fl(nÛNu!IP 랺驩*iЙE97:gIYP9795OMzBv!r3a9W*fㆩ# )Bۃ=F$\~gǧn;e6dq=j5|uyϾ&y*y#Q9Gnsy9N:&~;e8RIg5yiUɕ q$2F'X-ȌOMJ!NMv1L! *Rwp;Sc#=0k@S-{Fw͖rI h';?ghQ' ~.:w0]nKa1o0;V8ݷjF9ƞEBz\ uU)*Ϲ$f✤ O8ryQu`a5~j[PNR#̑sOFիnT%I8Ǡ )z:gqtSeįx} !{}1=EtxR|aԖ3G`qq>aCEBӜK>"[.P9q5}P}kܨR 'f㫸K;r;뚮kfiVUY l'zlQA1䲥%##@3mf[:5Tb4thʒI`yN΁ s&3N)*0t;gpmWjpifiS+K6@'gۖ2(,!9!*rӍ>d*} 4u"ZkR-)x 8䒢ylض U*7YbDf򝃀H=Ny'G =r d_ZTb'r@5lFSnM>YyIN :X6׋t'$5OGATH'Dž\[L0Jֵkz{h*RX"_m,,*p69>g+ qxiM@KX!(OaXhm'>& TRԐN{zw:K-o@ x뮌ȠtޞKzgkN*DkbAv{dfÐ0 ߟm~R/]oLJ#ՀƓ?zoJp2)rԔ@$»yF2Tk.ݢģ)@. ̡#Ht7[:*BMyJ9qJN;䔍=\`ɩ=mM-ODu ;h OjvXHapR}iETJp%b"2N2hNm:∨U3)!MRJc >Sߐu(S4yl(|J[@>RFtʨ= iDŐЅ1Q8q{/w 2&Gb+885]/$Hx :c(R,ju2ѕ06[TI9H81ζVq+ˑq8 YؤK rk ꅐZ?i·džˊbDɎ![Cl E#%AJ:%šȝjJJc[2ϋ($c儜Y[o%@#(U\ yr@eV'Gw>57B~Hvʣ%N(v ȠSWiYVG1р믉5"~xR-sY*Xi?NF0NFO9:nVr* H1Ajhb܌qm)iMgaJ=N(2ʒNAdݏ{"fLIt6e_H\TPNpqx:*"*tSw8FPBҢmP;O|#ZuZmZb:gԞ[r*Mm1ia9Ia'E=IR#|I=>3ZՔh9$Q}J3hI&sɷhժ}4UW"EIꄙOWQVY~]Ae P|C}He N@*dI2:>ҙu )8>\e\*zdyM;;uWo0 v56 NfO;(g55555ɩm_i EJ?wϕ.Q ? uZח:%=LFhh[}O}IEz%mHx(g:/e,؊BbQT'wjGZZknJg$#P~wEZSPHqr.h>:xm[6IR9=ӏ\{ %&?G#89:/denZhSdQ};ꪧkz+MZ!־@8gB~Ѵ[nHLxV[EhsY9On7?c<ҞlƐ]Chj>J&C:\KP*  N>Z,z~J*$߅⃫N*JBpLmngF>gKET%IaM `u1V'CF8ܤ{]ƂiݵlQJ>Vqk{ʍ(y#w{iw~]E~Rf: ^Ln+IV@9oL+yR(Sfe=ƤbQx.Fpd@H?xlm'dGTjғTvu&lh$2R$\nƶbחGA}t^GTpb*;P(C$G[RA+P<{t!ť ZB r2=y)kl_aY$r==4MVlZS'b:4搦%uO, fr7d۟9W\:cęBW+H˘3|\YM%R-xR,g<MM_ZVZId)xm2 u ^ق*SaY$`gGfP !! J@h=lթeyI$yV۞Rx#Ln_QopTd%2{!>>Ѻ.*U*HR'6cZ|xEO5-\$gH:On)38Dy٪Pl(#w=39 ީ"\;Fu.L $8P8&LxQ"S9[%)rv(7K)R')S;$GB}biX? Ƥ)p~)Cy!*@s$=v\"% *BK@vmIoīwBx- 6uǦu,jVVaA߀[ܒ m#9#CJRMJ!enz5fLNTzBd>}Ǩ8ք(ʛ:lkbݑP6NӒ\Kl$2ǡ'CS4gKL -:I#*PW|}|6CݍnV4\]I"= \x *[N@w'=\MBRPS +#l֮2Ӎ8˦d_ov´' 9Ϯu;"t&a2e8˞$$uН$`Y5H1L\q2I |^|!21"%F(Zgp /QEҦگ:}.!dsV9,.t&)~31NBAgc ۩H5U\K*Pe wz~zSҮhMSLթ+H%J9<{qNKz3:[˒+,F2%(kKcŋ N 2w$r$ z|dSQq4\$.HHZ֖,ضf]rU%\ I9N@\pUU;Wh4U$fV1 p=![K (hke"r l۩K.JKk e `sϾ+@9)I):QujQӑUm8>9yyua:3meK\NX?*OT:4Ds2RV9$hu)m!_RՔ,#9JB-z곝m.4Pm+ A8DܵQBr)sa;+Jxnխ2z#=mUgokۑMJ"N8yO4J#*Gd3T2}9~K |§JBSOcXk.GzfC .0#ŧͥ9@}1N赝]Mr# $}۟E'?IT Oüz8ϛv ?!*G[EJ URO]Xu Q!pV0㾘P:GTG *\?u#KM#nOHtaB5oѨͽ%~Rs.~` (EESLiI)͂S=~cIî)nXN#Cw wU{Ri/ˀ?w$!9@  q/AiNOjv\m6ۯ$% LHs1*1!Ts.H&h !%)a:@_ \Kj-~, ҷ "r9 =M&թ}KT|<$e;l%Z{P/Ԯ]LbRHC^W=mj8> PBמbj]9':jv6(f9θ83A sίSɓd H‰'^}h $LPo{kGSҨK)b-PgjxH#RGq]0]JRIDGz^kXzsFUDܕWY\ ιGƵeW}NUr@$8iiŸ0 pA q}ڴҭp߷ Qi&Jwndw瑱vuQ"4ǷP%s*rbK{BvI *1?5?Dz2Um iz0Թ#V{~DgYM)-) 8Q!iےRHΐMhQ)9TT&6"9ҕ\з(\5J]uĕ,"XAh GqX=5 5MxHL%.yv1җqC m)[+W,Y''i>my5 NBiP62Rd%),sGI4ˢϻ^ i݅R~GUcVSg^\ iHNXBH(9R۷^=hT%}9m!5I)e98#7SWI}ժ:唠b.N2M;8! >j$:)KZm%yQ_!F|Y~l:|TӰG}}8:B(8VߢBn_@uJKRe4{qE5\2ګU \6$Ԝ08>_R,.@p$''KVRkv7(ӢOmg8XGI&fEP6\?k54eCUN*f)IQ !_9HtZ>kl.,ϢB -xpyMmBA29MLF%(Sj$(<9 lZ̽].K&UcSN2҂TT3=4d۝]I-Z^apPㄥ)q{IKުpXJl`jn-/Jڸ mP?ʢv1-_v;SoAukB{@>%k6fޗ N0bA*R _LFnMSHT%FCUjiOá6݃F{ M\ ĩP, )ORc~xR)%!Jeĸ{?12,V!![Bx>aV*.8d[4Js I%[!o0J98 7QfZHM*+x"Bo;P@9PM?45RUwyFA|z}MELva鴰5OAsՌ'pOuX>"SQB%)*Vn9Fx ի}ԛs6e%*l!X%zPiT*v^2MS+tv*O`}N}9e‡jl®Vݥ˸'zL[[ZJqcu}{T˿TX+D9RK ?b,z5%]!Ѯ+ \ZC8JJymyí]nݯRt*-J$P8r=o޽ETLbJn+,]-pktFdG8*Lt;3 eb7J'mʕN7({4A%2h]T06dXC'>aꑧ mtƶ!AjӢ`w%lQ{rEʚ;UcڒL~9%`AY/55.L7bH.0PB^H8${BQj5bEDס7xm(Ix8 Yܽ!#ȫ7_N2TZ7s}9KP!* DQ S!HJs6ĜRjg+>:ueĥvx۸z4˹-ȬuZЯF[O_ZJ|4G>DӀ5luڕ%AMbG5@~YqޕҙL#4bņ+99 LchcE%azumhie-ӷ Z!>-t.\qu M%|!~zحњbK Ԙ$w+ V%G]wtϨK:)򏍔pv^BB9$c%`q΁(*Ѧȧ>IJ}I ^(r@ʅ%:DTAuDC/2RqZ/gz$H)!KۋB@`N+CMR4ei^hm*Rε]Ίv*DT A* 8P~stRKKdAS=`~=UC~1@m0qm&Y`m*s#+{GokJm%hP’Gh6k4INOgK[GSUŸǛ H5oǫR]n6!8#܎3&')q]^*ePiܲړE!A[I\`Y|G29ࡲ8?-,5UW{]kwzc8HJN1<4 =TnjGGo N~CY.. $jm+/ +N %;}6=uOpl')=OX՗.+-M*-**9F; u4y1N[g* gƃ!J]J[my%.$AO#pIeuyIj:ʕϦ@AO=)t @j*"5 PiFAcߌkS)8b$rI>d@Ҷ_mFLN) G| Ԉ~R|\iAG qVkj2}M2eA!S w8Whw.YXF¤SǦߐ7Kr/Sa OҠAEVJ]TRZ:$w?->Ą~l#hDd%*~05MOr!&p)2WIN@jvMmWԖ\<y, Vij&|;ac)*[%#S}֭״TI9𬄩f&7('X uBS,*Eɧo}SAbZ6GË#[5ب!Mf2g<=vu?BOMI|IP<<>jT&f3>bß:yꍎ/= *c̞>`GJ6;$ũVN$@5ԪUijvD_gp pFs|iKm[tQKSGqRO2HUrYs(-lT *Do$n P@@ .EҮH}.%V$aS@-_ 41!X΄+f" :7N9KmyG| :K!*v⏈ǐ{qw nTk/oLI m4kNǼ:&|̀BZBw$;ȑ޿:Bqi@A;>-fCDyCfGCnAJ;@iGv40y>GT+Tɕ: N16C<7J%[ևSdB*R}6T:a.Wi]$CNW?x쪵5[ dV);P|\K[bZ[PUV To ) ?-}#k-ߴ'.djF[7FQN =ii9$8T #4݃ANc Fl 3ՒRǀc'46ɰ]މXcʔm >RyO')Ηښy;Ip(<"Y}MtA[> JX66*c!~J@r;sLysT'ǥN&`]T-YSq$bClIQ)Q _0@$rƙWpϮt]f[-TkW &ߜi^2u6|>Mh_1TrAp#8Wu=%*?rEMn Y#p۝PwPHN*`]W< ӈҭˎMl"[FS!F;gU]Mj>Rv͔cn|jHl{"L5rݴ J q 5wӾѓlTSYOQX =[PT89 9cԏN[>-p[x$ ;>.uZ\4LG7*O6y+#|RH^7GjVB ǂABV'=t MJu24R_]QQ[)@IKi;%8uzǛo[W!kRvS)[ ;w,}΁WK$O~$(IJJRBANI! V1mq>ৢ{!ǖ6KJ@J Aa1!7m a61\qm4Wp.)1-P ' HΔ 8xE~/I'뫍M/:_E“1 ~3$k-QH% ʧݹ S GXt>5cN?)җM;RsOW r@NTg_NT߱#]6ɵVE5ސ-;*ۢдvrDJ SÕ3q^1FA&[[(m q']HbHz}v\nCq⢸R$Hm 9м opjR-*+AjHNǼ O˔ٛF{ݶXʉ I#>5u"m۪U"c3QS̏)9I])JM1d)_9y wOm QYnӒVA%l98b$i )zW( m Nu5Y4I*vc-O =I9#RǷhuu曨ӭm BN?)RFyk~2س:s 7#KI%JmE[p֛۟j6 JGMHB@~N2O8ƜߴY6[TJ0",$G~CyZ=J>}z"fʸT"; I88:Cm9q-|RPDւa@`15BUﻲ@K yϗ>*W5uީ:b$- ,2߮'O'5B՗E,)!!Dd1]c L565D+G2}t`=/¦>õJ伏e+l(2{}uu>S/[Nn7c,yO}5F4tTRʚk%ikTNT翧ZŮ%[[e(ZEKNRP#^$ e)bq*F;tEF=՜? _Q)JV6[Oos_ST[{>ЅӋA]?v%y+JQܜg>臦*.VS L0zWW. zlT)pCN<<n7+=0FlR Mv:^r$6 ~[5ԟ[OCX8<'OƏy6T4ʖ"¬%m츯@<}+yӚeLS:Rӹ>!H㲸$28nֺzm[fT݈d(sQB=6P%I+Maanxˤ`d>np i#qM2VԗM*\ p=Ɗ-Nt¶sH%i g:yݤ݅*Sb %A'iNOȌ+nTB%%it%((@MI^ەt6Ma@(j^>*4V`Yu;mAP**RtPrtY$A/((>ݏeZaP(VJBRmx;@@؜I;P̷K*AY_AN~z$+͚ro2[-#m C09i1gr=bM=N#:I,gg8S@RQVHOZn6Ĉ!f 6ʱp7j&̿:(si(zu--]qqPESe1W;{Mr8ZV d<~ZrD]B!,uIi3iTkwU޼-VZN7{e9|6l*vMkR~ +qK :6d)-31Ѐ$}{F ?)ʏ!F;Atc@qƋ\5DTRq;7y 8<#+箴52 hm!)r>cZ#TЩ)n8%C#h#x׌Υ;X+aSⶁ-IOTc$ Tu~}FZbˆ 29ivIWs^N~)R)q ) gc7("Qn:.ACnWS&M5 )LPI *]AZŦS̒UG'S\5 ǽ֧Uٍ!e*)e c~`Z_Uiw J\[}! >#i򷓄!W$:D*ӍP6!Ɯu8Zw$c'kB< uy\[m%@[]Ji mw\F}%LZPA Q=NAHj8B XEP*UMWjԵ}~=&ڊPJYFyZC6ٷڶ:43{w⻩GNNp^)UuD[KKQ-_}G`zw.'ȪT-ITV⒀IֶҭeK&%Q[BscGJȳezCE&R_B򄓞yJr}7sTn+LOH LvK^TyT'jURg o8#};tUڃmeH:%DH2ҖqQ%FKDbp@q7`dpqƪYQUu*uLSḦyBBswc~cG[51P+;?>=Я_#[ihmR}նRQoukC>!4I!Gp?~}iK~#% ToggO ^Ψ.-riCmTNʤg։8JGJ։b˷)w8YST$Jĩ1>JJ]U_4ҏ:X":#yu\T)NF~e){3GJBс$}=cȥDT)[qKo+82qqnuUܭrG9>ߐo5MQᴦGQSiHGr'G1zondB$4'TKX Aq_tjɗH~p-pw=@woٵmҞmXRRџikO.%rL$QI;rrNsƺËs[ooS,̘wy) \똭R\ZX\s+7zƯ/ u'|̅.sA2Fl B 63N_]U.-,%֖~J[PHr%Kէȉm77YSؐg郉636"%uZNJL6J! $9Q5JhKjܬְ\s/}3e[/6q%+B TpA4z]""MkOa-} PN=4r5"E*9pt/>5-1645+m(I:]ƧU%X2ŧnDK5&LI޳vXoIۺ~jI(>Td R˩4kJs*[ >"0{uT(Nj5{*#qRJ@<`e\vsd0Β+ӎޚYʻo*շv+CZT8#G쪿;T|E G EfԥgwԺNVzpݒK-0N<񟞎";BHUU Iqp-DB':Fb.۝5"KG8¶,++V:~\EB\n@x2ONx\4hqq?1Oa('r>\nZ\<ex)y ]BEJgÉmKyȥPӹrk8mtzw+UgӶkMWfRre=Ed6P@*1I;c[!V% J%=;|iՅO4f N,c3pUuuJUFr#[n$TPX!G `hdP?mI|ih6 $ `v>I~,ì Ikx͕e u8 ZZtQX! X Cz=PBer0* [HKIVH$q3 AC,jo:Pʐ TX; %.8qeCNq}t i3Pއו#<c?!O`tu@..t! b;%dGg׶zvRȖL"F̭X<$ğmQ3M[URű>N;5%\ykɁyuU{nz/9=W*B\ǠVuC b; Dz4W'XCv!;'$%]~#~Bhە}KM- @'Q;t.!|d@Cdd^slu m+5&K*0v%r=Fn =G*BXM2\.nRID PUU\UZ/*Z\'h dn5}ӾRn%[D:twK*iؔG 莻 5 h?&;IIJ$ IGu*6lU)L!^VuEJQ$fuKb㩴Ncc~&F~:cXVԩc}Mk m.和8ZuΟ 59if^ZiXeAr7Gќǘzڗ..SՁs#_u' Dudd8PIj6 Tm/ҶA䨁\ jOfx$0N+؟p DǪHTUxTRijQH$qڪOUoZ4i-#L{zdmq }uSz{y4wYBQ$$wt jRAD%qʥHȤ= OH!FJIRRr;n %\ D1,6j-$ G>[n!)RФj% ^v D ~īRVG-C}8ڶ.ЩwJ^!S8%D`s=Xn, MV+9Zk Br ϩ[JڴZ>U_]ֲ8 Y(45BTnJTu?-ㄤp$﮸-jKp4)oWOR_ߦ_lG҇Knvr5_y&}Ftr%JS $gqyM4e)$${aX0蒩=Sv-[R9[㒴A]jI)zC㳞D"g(U=?ХF,9&TiDSTrs>BHR5jǍkZBԧ'lN iHicU|ind4ܝj##3:6_~;[hNqsX]k눐+HC̲8y8|R- >"@q)Vs)<=u E~v l&E1poyXXpv)1-ZTךJ sN;r2y=W 8:% `; ]0*w6]zNjJV&0NJŠ;`qe.nVmwd)#J+@ ʊUymSîKvջ2(G)":\(^1vW iO˘c=>Dn(yGF}'h>є.ދAIX.dajy]Փ}<ڿG7U'IpEMSdF2~zjJH 2flj Hj=(p7x9qc*t3C-} r륺e [qa+~R!Y?'ΥTfm: L)H󾢵+*? @w~y]NCPO*ZSvΕTS0KIm HJ$¨ Ӎ=!K2R qqGj%GV&N*v<כ>T'qI8>~]-ĥ)!!XQ Gϧ?=Fi7Mt& 9@8R=ιɳ i0K'[yh*C`7cNU:EOB*z<VYR aG# aq-) zԨRU*5FP 7mz_NzI˵3;Ō/|KN I@9cҲf2lG*x l+<OЦ,ZFûh$OZ)0pS (9F^⃰pHιCd\rmCP-ť Ce VۛZI}4mgSu*-\jJW"ު((s'ppFT 2R-Z#=$3m #LvrH;[*(}S=U)O)эT' .[ 4pc- ZJO<mWKJ_JljW<m[<<-a¦[;jۜcQ,Ma$$ae+߸ F{P*_($yܿ;'>`?_V.Zt\*N~R KJ]N9QgIoSYojz|6dTxk H9NRHmڽ^@Lds)Ts`p#3&UIBwjGÔ$җ mLJ&r*J- l޸VSSki[*B  mLR)yq]rLTB ҸUV5L8Z0H$q|В k3P>3;R$4du6dxH~:fCeVH;IN{zN !+ dn-88:ܫ>~+NnBd<(*.jVqRppRJq Dz>^TIi&V]6E2Nq;=^P9-۟37Ljji24KDIq)pTBS=,%օ&ɩ,˦HwWcFt- ERٽfLVҳP$kXgȯ1&S_Ԭ |}ZWբ*̋TO;J4;mJ/8яCӣtߍ!U%hVJRS E^',ͩ5qTԦp6\@+ {cU6u2W﫰"s A>7T򤑟|M(.TcRDURpF;c1;綋ICT~"R둼ㄩ(gc 0 g?-O)B|4wL@Srۀڳ~yc_gTkj:HZ~FuGuteRmT$D-M|x9qԌcp{tԽ`G8CC*(W ?ӮK̏vAQqHBv:9'\JbRKܒA+z &a3:ɊVRC]zϠ\ЙW!K#K@ㄑ÷W P_ޔcӊn"" in=16z .*6--qYEr*P&0sVAB:cȤP+QG%;%D3PM+b_Lz7r9brf]+t@KqVea]0w$oIJsfQA;!} +q}-ǧt')tՕ5[ Ǧ= !ުR'Fb2:UˠUzle"L/isH':c[)t˷Q; `H8 8yPV=d!IFג K'd:G ǮG]Bc­ݗd@O N94\"  V+ۂOڕ^O5noTj_ Fi) )) H:vۜ:v(TiRS-RQ;Nީv7P^[/϶L/&C` RA=c#ޥP~Q>O㾲m'' u.2z#"\Lf !$${ 7m IPDHwgJs+$끢;O=@@IFUIj7HԫC2/@)ir;?!vMI Y<`3 ʴpW2zO>v'JzCLW"I'\Kr}F#9m8{]vRIePd kZۀ{Y͢ė2bjiK VBF3˼KvTXjr^*be<y>``vamx_hR~BG9/TwuyrبTwZ2\['#w8\)ni; =5Fy ~0;μhtZs.&*ܸ!N˜yӾ)yHe*̔hm<Ǧ.J*4uI()g@@ z(M=:y^x.ZՕ-s} tOVƁӲXaM!7gIMr5,6I ~)+Xnϸ"W(]p\mZRl R;g\j*wWJ66`99ڠvIo B\lJ8ړ984eߌvMbMNc{(i%kݱpt#wϦԫI˪eHH\O8voڧ_% -b<J]dC6OSrtΡ"K  V6ۃ_kWzF󱱹Cw]~k%H2{ˌ:VB+ J x~ɶ@rD`DFڝ A9:MRiƪ$ը  /~7o^o]l2,:-F~{aoW-~"#pZ$=f[F`PS,D2nj[߷jÑÎ8i:e{~M}j/ҤiGw9{:)3T?ç ])Cz~ 49L[c,x-{tދ]z]+[[2'{<- 9=TIѮEcu*RK Gi'%j8qIv:`\?mPr_)UbI)i`D6$LhV/WRdqL=.~̡ķf&LmsL|%@X> nݿ`HJI|iЗXY5RTVp`#fqRyϸKQ/FW-uz\L \ Hm_P0O߱yѷMon?^q'ccrAWCޮ͡T(`BDrB (p;gV56DɊWP)ipwGrq Z?ڳ bduK:TԐIo_AwJYFMR%JD׃QbJEp3sխ*GQlnΙ1qeh*2Z/I*=$YJyNp|qk㧔:ܨ5pIr,'@"LcJe~,OMh/,*dM1帆˚Khϑ!>ޤeuuYt5%R;nT)?>;O]]=;.Z#P'jpG} 9ҺuR KNǒ"ӰvWRm^)L!J>6:X925Cq7*BɄZd˹9 N1WMZ|ͭQ)z5)68BTHg W:oWd6ի%tPf[nyv$(9t2Et5yGg\jt+I8#uxkjKM*:InN9\v&䒒 RJ<ƽ6OmPRQ]52Vz V+M7p\.j-II>$R@>ٵj1jW=4ƸI`)e<1gU7C_f{*}@M UJbDc#ջ}O7B ]t46&s+-Aeƛ r_Tȥ4ߘ$c#>:ҤWLOjQnK oT|@N2qkKiu;f:M~/괈  %;J@dtEWH)U{u&ܙ >71ΆetBB*7SQ |* nQIv#/QmrAIV@=tf•+% /MyʂT RN}N4,zum MPңgǵr:ũoE *9R2Pe(ܗrh_yf`:K R87;^Uۚ]EB)@9yAxݎcʊ<h"IVn[f[#zi!* ^~Ӿ[.TR))\gJIG~ZKľf_Y1-E>u[*.)ۗh5T >{P<a/ȒmݷIJx#l 7' &W5 *$92y,`(ϡK2zn7:TKt!RRǔq$$}t>oZ [#Ji7ἒ<pxy-XtV]Wdf"Ղw?DPCBYOG HBAp+Ɠ=8z!@Uhi-"S!8O~7 }]C飴E ziDی8M+%I9#cכ55HE: +?uEѥ9L-NvkN<c=RrtcxPjeGɍp6ψގNx%*>E::j N!$#:m-82Bs<K<4D'vDT EKZNTy@yB/Sع)TTy \ g4GMCҭJv֓:GaP%.RAVJ@{/OJ}k4}RA T=;_kFEDX e$0G>d灴񮍶+4{fbޏH-d%͠a:f5ܢ%{gchrM@HwAvX!F /0S8>aӾŹ֖연V?#ۃas釬VUJ> >R,Pۛq&Юh/ƷJ7d=4%jT>UJ#"LԠR {aE]i7e*(o$-eA)HR8܄kת Vm%*X*ܒ;?=*:ì}-םN\BډP PtEkTyvV7 Pχ' uN/KZsp {-xE) &s)o<6? A'C>7UYQm}R 8pF#[Hj6.D8QeJK V (y5ObmnLD}Br 81G}T,ղL*_&㠪+RqC{8a WjBUi 9oUnEM4jH,5 yRs5quP_CDTO5;N@Q=)]&]Ȣʡ\ G8e`cΩSL#c!xq/ӊ,&]ZP<RV)Y#<3]3zǞwnBd'\E_ S9ku"rgV)eA.-YFe,R~oBMNRSp;Q@1:T>TUŠqڔ pk{%Ԥ!ryy*5Z|qh񥸏1BIGgN+a> $T"$Ǻq_)w?V*Rj2e:vg͐5A6N]BJQAj(@8rF!B-Gﮍ}"T)҄KA*,pIʷIhU*݈^l-#X_xʧٱRn69Kr@m#.yG<ᦻEe0#KWm.^e?ZR5!AJ=@5n[ݗ.j|hO7%km!rpNr]r2E5R1*WÒ#5>Gӷ:k C--ƛS9N/ԫmIōKP0iI^Ҵ$]8Nu7ΧA5F#* p a3Ιŵ2K.ʜK!;FN0=Ɠ5"ҖbHkm @sѵ]mv[uZPh0&I\CF8 QVGu]4J8r[ѤQ&B~vީ+e-8NG=>:AyF>#IB׹Gjp>j˩v+"m2:Pf =x=7lu-èb3|P>Ĩm]e9)/6:!BĴIABԥnw#Zf%*ޝ2ySgKb%UZ<Ƶw)6JmTLhKMn\'W=+G[{qNHxI)@ KGjlҚ}m<*m֊9YRû)q^5Rު% CGzNRM'Fc6ԙq[Fȝ?qL55hoK4A>6F5])˯SeMd7aZ;Nެ}E$ajS$J'K@ʚӡ:\QˡHmX;T;GBFUSr{@l=Rq.1ͱr)\D-89QǪs4G/i K|)Э`4-W5^GL* rc!#d5 lUBO\vO5m9 '#=jMv-rMJO9jjL$yJT3J৸'δ:Q+dq-~)+RI}bVr5 *XyK†6(q:k ԡI❇ [a+RrLwTce@>Tui$u(rJƷ-j_=4eƘSm)~]mѪwU :)mE%GrI Sr Ϯ̟<;Kq#;T2}ܔ'PLbv#)$+zHOnF0cȳ)546G-'G8gIٽg%]W! 2ςP*8#϶4=aûxJ:qMa@I;:P7fl4yUxIھ~XIA;"i2pv{kÈ.mfDE(#.`(H88t-{:TZ$n*+ JRrkF_Sjڃ` ~w'^8oS펙(j|i/`="i]w4eBnNp @*JR*mrKw] mpO`}{kEXrӢPqd`,V?PŁXߎvKR&Ѕ p0?W*i8;"፞=i}׊ꋴi ovrJqq;u{YaqSFS0zW}H X 9<PP !Xk^BӨ23*R J{ÁF1ˆO\-&nHPCkONyϔǮ,Zt^P]oe)ڒ2Ro uMİ!uEX ʝujR($=M<9")Vyi۝[\44M=R*Z}/T$dc׌s Q(j1K HO qh<N#{&dJ]FAM#ӃCX)F ~NUB,@SҷcTNN%G9/R!Q{jՠ+m4vWܭgw=1((@d): eČg#KUvV.rFTi6n8J03sYi NϩU@S++I56eɷI󭅩8IRgD:K;:̚DոmK;A3PaRRjcNe#!i@?=ݧ=뒲zTilD-*Sm ZX*]~dtPÅJrOϮ5555}k[)fyj)>y`]vLˊCߕ:|ҟNv=4ՙݍHP팬ԩRVA;[IuK&¼`-⮺j$7"($XQq>էWƁ%2]K-NTz/JUUC@~ JA=+!.cr#x1ԃH"dbqxrR.D$dž "3l(`bV; Fh@J8'VD7ڍ!nTJkAd#P sVN}4 0LJ*;O @uA*b=Nױli-kɶY*2(:өۻRZxΎWX,<'&լ;SNX2 HBݎxVڅvwiy\M2]@ti11u!Hߴ:~݌{x)g?i~Unu(s Si9)K`N+]^]V>YfR}JFT7F"7Z,H;e)t޹Nss~<;@^JHʳz~Z`̕rrTˍ9ŐFm# A]8XEݡPՒ}%q*>>6 O,:"بEAi\aAMOB%ShT}L񤤥ҝ iԤ£=jVu2ݺ1CNT 8 $O]R>?KԣӡMAMA ǮOK{!S#S$!k8󻏟msEu-HRm)V;Ti1+ n:DH !5)XA_Rn*}a3AW9)ɊF]O!@T8_Qm(ҮصP ξ֡)%$1HTSSY弯 xycWX3f۪ D[m@q&DR7ϗU6Lz|u&^;]BP%Ykj5X"ri&gEyԇ9(oDZ}ڶ ~?*ʆ ?cɍN^SlHV8[$lC-[nkQ)3aƫ և-JМ5=*Y=T]fd(Š ;rNӒOaΣgmVJkt~!:G'<]+&So~teH_d{r}5T%MT ikCOQ㌏&e|Tn GS`Xd4ʏ$ΝSFηXB#4 JG=F(6THu&R7)'#)ؔk-)P ;\KTٽHS[ɡ#oV zD8155ewMVrr}Y5oTi!ȥ?!N5%e+ܐ@{8jD`*f uGaɊK%CrryϩucYdRmsbn CRN0A#IJZuTZXǑDZrxϠtFRLS,R\O9W奌˜WӵSkNs$ihfDe֙=;PmIg RJ1WLG5\-e.=KbW-m+)[r;-JErEcmuH*JvqN~zyt2g[{&]h -V-pʳvB1v3 SnJHH#^[iܯʟ)S)Mf_Rlj╘6VR{G۹ 6쇑P)|NHۃ]HfE%P}%^:#-(>}2Qת=TOH>}=],wXVv(py4 [ (_ Hfm4$#@}M;uC,jaa$AڥߓY4%FVrVj3yj9ƫjN)9 p,{ڴUJnoKIKa+JN``cO㰩kU:ȖfEqġA#99i%-*qGhRQgI5RunDLU4KY''i_׵)ܢvp>C學:blinTD8v=ug>&S O8v?=@Qz2X\$s;ntߕ 6\RaQ~mX 2 ?-۟g'db:DX`,+9?S W2i1L$eYH}N<)DdTF#X-)°tc۝>RF fRT-87 ̓LitEN-O}aT \c=Qm4)]>RA(ih8u)EX@AQ;jlۉm(Dx $% ҡ$x'N"'\Z~ d+*_6#p9KF|/. q+eۡR"|L>!R95-KZRIQ* HRH)# Fxz? {9ԶB*ʏ! zOS'.6!#*r;p5͝5bsR)2ޜ|0n3r;G6q*Eu>DWJ؊ʛuV}uhcՉvꛕeJ+4*lv_ӓӚvz]~))rB9?.x6]_9cĠNՠA@{k]^;z&* uԮ@PA zzRyC55%my#htg=:}5qڅ 돴>w%JI}xZJvҬFfS{. aISթV[s- mBTBTY>R}A}u&n̫ ˵'J4W3)IK^8Mܵn.)vVX? '}F(ʕTjJA؍4eM*rd67$c!=#uwbYLR%r%J8JpPAm&!ix:d#锑V }2RT6uD#Nz뫽MS.~m+! ԸܬwG'!֎Hr"ҺoFLr8 {2xEj9Rd,+$z`wJ:v"[ə*]-NTtV`FBFA< ,RoRُWJ[JVH<tTJfM!N\' S[W)  JUlnkٔؐecjд%C؃IaN>6O*H$}2?]fך2tJ|uț)!%Jq;Nꕍs@%ز.5F-P^PO?/:@;W~T-ƆBU e  A~~= Cz-!@< ># m֧*LYueJO!J*@E}rYWKLKZu<@^089"VfKr)hn3+GTW9֘nIJkmU_= p)'BN\YvGOJ^o![HnXIH$vET" 1%!µ00S;瑠&<(h; M<(B沜vMyE]VOϷضmRS!ڂݎ!c8R}1#Gڑ kamU\{#W1y8w FLd $Om=)htm̸Rh儂|6Ԕ)kV315*B {_"ꧯjU&Z(թBpZp'>BxiƐJ8`5ƫpJRy''鮌ȼ[?zjCc=r~Dgu>V*R0IR>Ԓ}uE@$I b#xV}]ͭXIܢ?t~DAQ'Xtؒ\eʏO)p5f?!ԡ沥JBӒO]_3ok/!NP:oV)V&%d4Tğ0;x?NB~\fҪK P9@[_}};YUڮJP3QܸdrIE2캥i)WhR/>Uux @lI2ix5,)#+*|MV#Ĺ_z~9PF8WN~:%=/$$p'CJܘT1s᠗ 'sb]nTyi&<3N6R;~:3GZՙTO%Kԥ 5kt jsQq pr';㷹ٵNL~-cEdNm?Hh cV;yѣMm:#m$ĥ#$%;mOR) #g颫EEnR!HDX1R@.þN힑)_^n3>JlXeYSN$ƫ,>+'Vp sZD׸uQIIC>jV+(99Og@:Mfy G͜~"?.OWd=H9֝w;DMߎJ*xwyTI\z}՚̩T#Xos m-$~8AtBDChWZ8NpruxJHLVb.hm_ e#r8'85u:U3 4{$g]MFM9Ilxrs#ywZ;<~hϩ\+k-O弌d=ƾ(*t%^߂M!+PqrpN{6h[r˂>jsRT'QʕQ:[U! "A q*Xϯ=~V/5Tu%l#jJP RsU-,U(;!HQ h)HJK'i:d;OiIuѤ9ܢ!`{r֦iڕ08"JR;mƐl,y6קB˞$섃 :ofIӅ.J$:FFAbv}Mr|tԏ,x) :>i|B :˦4 Sx =>T'#:LF`QnXqTz6 ~HV*;uӞ acGz]4gl˖AX#5"\Gi)*Ry҆lr؏^yΥ3AwjDx%e%Sc mp3W տk̻p)H>Tꏕ&]\Km(8wt2Bu0)vdBbJmrcjG~B\uҼK+!)؟B"ZWJР G5,c}*ćSJH9$:q93]~2&$2Î(gJTq۞_qrېI-)W#ioNdaX N кv*w]>HbL&S0 cWN-1TDT+R3z>[ ZbܭT 3IImKQB@m!yåaII9OWmIN9roӲdnm'@F8=-nW>:<U9 n;%[A$`yr8"ju x7GS"2N/>JsO#<{^v6mcWw}x$ pH?21w:$Si3uUTڔ) P) 9P{Y:rڳz| }9R$eDFr2~Rٶ+[C/  qI#Us6 J& %6N7Y=E ȋeoLa)#9$~"_SY> kX^T2i~:@ļ!ˢM&-Gm>҉1]~`]62r F2Vj 衑hUNӻ(@KR~V'/)W>_m#y`p8 PKHbG['q+ NJU$kBԊTvY \u"xQt)s~5i,BTf7Z2H$#)fW?¶7}A>֬!dBe)0v5G5ˑ*?4ISkKmt VU{o܌Q*ʉK|xII$ 윔'FtOfmSQ߈#yO|cOt!Tm[2Vb4 nCFrdsN*mFǓBM= LD!(8$y9})/wfNjTaT;%~vlxJrv :83;lGi 2BP; L!]/CڟQvr0?\ zҚXRIkzDK9#g>5_W<ܴJi TXpq9:|*mn)JPy(H'QN1(v=}/S}k"SK1SZ@ҳmx=WjâĨ i<6ބ -2V I'0خ^֍6k<|)%TK' eYcѤ~+m `2u8%VL_ M) jlOU5u[%!i* ǡ[7_[nFiG mK箞KK)$)<u^$V:.i SR\JRItNEijK9[Am`yti\%3ASOvkbB) 29ÞSR%lALwZBJ\- aC?,륬+-eŞOt (q#\uQXwaZP[Q.&m=-%Qb[O# Fm%[S- S= + s8b]65q ~Dkj\(d4Ux̕A"|z'+y!Ksuy?V|^[T֙[iJ3]h}tyJc +%gH}J""UR5tZZKM8+Jvw#41I8Km( SV(c1Nr+p87|O<|(i7dGm a 83nS=9HDAMB%HK+ߍe{WեX;j47ʀ[ĵ۸㑞UM[o^Y M$ $xp 4̰.*nr@,HnO3Y+-# mmu>ª̑"Q9"4UlLHPHer8SN.SXu9BI=ѐ9ۭu ܲ uY%\]i@@d {gWv_Xmffԫ T KJmi@H$Q"cjRq@G\pI>UvĢO%൭rU"I'V&^{=2<9q+78ܤU1d&Lij<u,@ROt朏Wڃ jdc ڂq:3Tڪnd }aa?@>YџOlX?__S>S< ` %zU*%m  ]3kQ~F0IPjZԐXJJ1z9 L4Mb f}RGH{`^^Wht:;GyO2 r<1p4ŨXI/N/)qsxvx$z;W[L->\w JJRs?.;:dWifquMNTCeCyI# \BjbGj~dD.UN7s]{X~SPb=: - 8ǡ;bRn͍H0[ؚ쫑+~zKm:d7KyȉQ A<$qkR=$BSީ$t͌gs9V? }aI.)JML|]v.?):]Nk3:` GpF38eCz?n, ;\FUr?n +^$a*#%AN[p~gqcZ\Q"MrinSa~R`rげ>z [dZBA8ʒl~YXT~zbHo)-rA8Hi/Hd#$'U}D<[ |VI!%I4z|DÕk e'{|Q(l߈\ԐÑNxQLٷVojf!8ӎFGXRSZ©qW [' mJӞrTRcj(Ir:0S_Cΐ:QI#S.*Kď1,ƍǦ,'%Ud. )7?(R<O Am`3 שOjK=ӹD$p=Ob%\7T\m/Mʀ%G ZG]GD~DcƤ(ܒ0HR˶n{U;u rC2!!HNP>T67K,ہz|8,*hZnφ#y)T 9tAk˶~ˮŦ=YMSzE;psQ%@Ƅ kۇ!_PmGsd6­!/JoڝΙJ%X!NJrRJ9Jh-2s:|S ~StTv#(jڥj@>r&+ZZCn> $}I h;Ju[uWFKaOs8Sk?=tuP/L--)*ڠ![RH䧜`qۍm}?) ^U@H| ,Vycx>^H-d6-l4Zq pV tޏ]t=56v#'<{+[z_Ci-bԫ: ]%ezwMt$#gsKNN3\G؏!E4^c;OqwQ٪mzb6_ ()$w:ΗS)-TQC4&A/Nc&-H)/•M;@4H'Kj$F\~CmӹKQTgKz,Ԇmc BpAmQjx2[acV?-vէL*Kft$w)2u-bN<ڙB]H$6pA] J>թl,)4NB_o'#϶>f q7rV2H$h߫ Hiyڷ%X/]q]4bmHc?\íTc#O՛I\3ڐ#wnVu5tTA!׾JĈpZT?+RFsKzbU Dc18F߫5Oޞ29$A`iJ^n)A(h)?yIuaF-fƒw$89Ir?# _Oq+]!7![ H#K9[s;P䦟Z5KQSKG {;"aí%>x<9ʛ>=ΘZcHg1TKk,)*Dvx8q'iWI~L7;b$ =P{~B R@|!a\ϩեs&kF$$c d03F5K۵}J6Ii*N Ja s?Y.ZM{EP b!RڒPG+}^4]X2\jP>(ws=AtD|PnއۉYr zs: R5jE$m[hq$m#d@ZĦO*5Ri̭xrKeiKyBi=te-K'*ޕp'ψ€<;~zzc?5jN~&;hBT7;~Ht9N>jHzm">"H 6'#qtʜt&\Ծ[WB9gOtbQrT8%N`G*=Hӛ7$x7\0c٪e$nOJUŁRd)9qG-BEĪ4?”1>z߹ 96djt-34 oEg8kv0-! B))'r?]9JG~M1Q5t9qnp$( 7rGr D-9y|#g㏞y2M7\eLIq(P23-Ԩ7 qzotI-' vި$J{~3Җ ŕw95V>QKfiȘKK1BTI8MM&H*!vX gz²Ƿ14FcfK ]S* 1C)9*:oR)UMqAc>U)ep@Ts:[[)/2*bvIܠ@Z;h"޾-'TJ%=[5ebZǛgZdJr[8nTgAVc mϩPi{)kuHqkuD%%`||=Ԋ}v>Q]Sn$#؏CZuܳV!I< ICM}L\UT7I":Sl$\LjF9j$%S;6`Rs򫷾#Xufq5Z|n%%I mᰌ gNN?.{ɒ5/p7 䑜ר@o+*ղMI(R;ΖwĈu 6R RIl ! =]F)8( =_+t0dd9JnN%es88JFI4@:u˻!2VTJrAru["ƬrQ-j.YQ`]<Х "gT\֡%Em>B(sPEa-OP|J^fL\3 ρh7TUի›QVisrRq<ʨ^0v?v{iQR~hfSC)4_1P 2@Koe&@-*Ag!;AP)=:mtdut…(4V ;xJv)_'M:Yr)pPR~OC-u%"DN+q(䝊QOc12Ca iכ:D9H )KSC J;Ou|ܿg/$!e.%)%ͪ gF=VZZPᒥt[rSM0y+ݔ g7m::gRfo[R9RI^P'9Q'zh©ZKMrEFGmxIRy) 9?1;;{kZ$%(gpPP;C]F1 ]TZÅԅ)#FquGg?WunCNTQP!RBš+XJ3򲘨ڰ fŜ*R-tgǗ#ӲYV\v-<2p 9'M.zhѝ4Z+p g:T\0>o,#>͈q$c>Up?sFre=RmφQJ #qΎm Y)Ըi C)K?tixGjI}U9VRVU@ne&٨P 5k%E*HH;vMc.Z]z")JQТPSOlV+q.-ENAI0@-7륂# ]c^ Kjw9 Oʅug!qM$iRݕ{nU`jڝ N1SSkWNmq$) u)8>ITme T; oT떏kǧV!ـ r#KW&m.ݲHX ݴU+)g^U*I)K(ʐ[}ӈq h9|:l'T㡠.<o@''8yЗ@Z+6 c*BRg(Y.Nz:ۂmb9@HScIRUdNt4Wk*K[nl6ińx{BVsǶ=JV*8ՙ Pw'qƾU1 {nimOV}:gQ%4 <)Ґ; w(if8P\qi:Ǜuh۲4D/NcVwv}9苢_tH1Hhfs@G!NH˟]1Mz&[%4 VZc%(gr{}F4@^E6CT{2ODߏ/o]M6[ ]27c~AҼKѐ\'~JPaХsVRxϦ"u ۫Fx$8iⶶpqj m6|FQ':NDxqm)@>mA7 qK!c#?SE JئrʬeFe ܞ3Ǯx>3_D$5ͺꖖ$mt<1,tI *cU)BP<;*tx)lNO|p;km@V8۫:7pp{{-joLjK kđNI!́u6!4E((W);]gӨ΋pBwocSm{jvt5*2VJNq'Nt5K/I-Ȭ |='U]~V)V;-ӈn, o$nJGX9?,z4ټz6ؗg:35 )#R=sWIf;=?!+yڼx΄zmn=2fPH Ь>x={U%қ>5j[*UPU:u"=! ( ]';1CmP0HJSS"tzM:#OԝoRe,}R>Z..wZ*ʆGHR~z.⚈) t@NnH*ᄅhFq<@>D vd\fJ<ؘ⊔+I9?m=iY|/(>1o;MFE^n":׵^^7duu|PDiR(moPZuE#'RB[]*^w !.ɪ82vrOh+iBr<VJPj"u~CL̯R>},iM[2T Nj(iRJ3:eN74iS`SiJ|uT3K[,z|R9U(Kqm A nkpi,Z-|lܑ}tɲ:եWD4KߊD5noi9NO8ymc_[: -p}h¥ I;{z뚯-1a Ox#rۊ dc>.>]:IS(QjJFs@һu.ɳmPҟVӌϝS%T&=(Cid$i]҇ۃ䐠>xNNVFhYvsIK*2Z,wRuзzve߉t1eK*B;8β 'aSmu>OYmYe'_l>WCuIruۖ۟Do^юd0BA'C{Zrb!ҤSit2GHκֹm5Z-VP*i^P#\ըz)#\u=)@gLSӕ.[RGbIxNv ʵ ΥǂI)<܏idnq(㲥|tlJ{')<47H.Z^ҩs 6\}= HH 3˞u GMJWqI4Ɗ a' 'TrYڻ-m[̩l!M+G:V\^ٯ-:x|A'.waͶKc.rRrs95So.+hiiVRӔIEz^ ĖI87M՝,˞q#m `}8AZu"V}/ӟySh990w gܿg(!ǭNSgc7Rϗa pb}2GnqJK* )Oq! $`p~,SmZtLlHt2Q),n].tNQ_xa{#n2q##].FIs<&vdv7ᕟ^N >zHBtx4m **)(ac0Ƥ@rߏ$)҅!@Ҽͧ'a$ 嬗uLѬHox,lVgiθUJ5R)Z^VI#WS}Uj@TEv;݋-e889]KCvLZ$[*K߼`4N6wm?2G(q~Emhxh@›yYо+Ë:EÍ&+o">UiݎUd}~Zއ_ʡTU)x&|sNwVzQn֡GM.*LV˻~Zht/5tsXZ"MV_Þ1}xέҳ/OR"?)$8=~aFiuhP중u Dd\q.ΨTRyVJ^Ѵ2;ٷ 1՛pDA-I$v'їL|&3I%Kl's=1kwa#gL99WHE=b4[p0DO҇n5IBSPB#> *&їK[mMi8BJPSxƌUYgۢ~ǒF{cOfRL$9 J<J=nV̸,4d6/j>3bs–@I8O~=iV^JJĒ0ʓIPkzy65 % 2@G9֧Q*Ӛd8?7#ۏAthdT^]-@#r1.ߧ*U3@b[K*r;>yǮ^CNj"ք<ܐ=GNts~IƒҒx+ UGċ*jEj&^ (=RRίWzņ"r?%-.=,%! )',zkߒqLZPlLkq|m+) }N_>GLLD2eG)՝JN{H͈ZUX"Lz"4OUۚm{zI-%[gKiCk$#0d8Z}:#g'>@ڕpJbhPm2ԡ;`u @UVKXKL\v> L?-Ap99E5Ojc-/zo0}Ev䝪8ЃnMG A@@RV4}uVȉBdJ2PT#cL ;NXtPR%H7NʁvשTf Oajٵai#j2=-+0:L:B᣺Tz+R|eX##\~\M"*\ŷJ8Zw jmuLwP84֤]>W6 i*a{Se{#8]XEmTj`L) ';gZk߹PSI+C@? 4tqA9%IҝDvgh;zi qԥNVp?@NW=nAS`VWmji{_Y< HJFӒJ1j}bT-{e 6xKhJ@Z IhI)A<{?! zzl:ኒo!YAI(9v̻**]xӍ! R%D+vܜ8 7EZt~T*|XDZ :**Mv?Lw !o3FzEJRd6'`WJ#5_o~[g֪) PKNK!` S>ڰifNkÛRs%[3GzO>uɕ}ݑDjN#Ȅd1yGSvP8J>d$rج{`  ]heӭń,r 9)2OWv{OS 6AIi c8RϿ#9kqo:\QZJOrt50\&*ǔ8s>7Vi0Ds֦h%A_-m$~LJMZn=B0 (I'=*nRsDh#ox/z`zjtF[x9+I;yI8Jq8:,WHChod23|IAT4_Pl9Pv%5%\W {ѵtDtq? - >Ng[(MBaAJ"_OgRB4\yL4+V۩ JuJ-_64~x'j\87.n#pUB2YZ@ i4R%hPiΕ6+ATLE(ԩy!(q:y:WkW鉐 W*>mUt΀j+F)Jco, e(c拉 +hC]Ӫ #صZVզ 8,ͩՅ`n3R tڮё^=Nrdiw Ӄc؂5(T:&2B*Z%3%jCӲԠ]Uϵn}Jp )~c*p?PGR)u5ˈ3g!DRIhׯ)Η>ԦT$c#(jii=QaNe&PJS07'{_Cdjtx?!|f=]/SD%INU15S**Poi)Cl$,Ӷ.n Bl.a8 ݤx.VC0F)!-H9 ؑrTSRn9T9+*uŤ=S#7B+rA xS2#cDZYy ! qrdtuN2O@ې8KYP#9s8yv[tj>00$(%KmrT.wuO͈Eb"wU J c;CLNP*}]|)_e (/i P 2tH?h7h.CiԵH*W'8DRTʾ/JQ ԁ[G{翰ή5_i`iX#'oMKީ]:B"CJ%*T`72 !>GuSi[tu)c#8tWtN[ta #Ҷ]Jߗ2\(Se x%@=;8֏PvXXyUIm%&@\n+,Pڷh $uz"b} pAB O8҂E}I~C*/Qank.!;S9Vx3Gz SbyE[-iH 寧eJ߯ J1 ܠ73rz"p\=J[J f%^oD]N%JhFag;m^Gi㩩:*fRԸ!E$ Э*"c\ă节ODc;T{R5[~[3.6NSR!ѷƒCKٮUmZ1?C+'8S>Kj\rsߌq8t87U1z3{r22=qH.ZznѐF"3j%'iֽ6J. 3UMqŠJe`!DIfmLMhrT|'LKUQ=̭!ab@97h-js4ʻ)-kAg>dtx)QԕNlyir\4b]IrRZ+h/!ƿjsՕҥ1~E;2Dju\%.(lY!=%b{Et䂦ЁМ^v+\}i10;1Lwһ]} Ε (pMě"T#2#"9N|`x ~ѓ$CV3Q>#\)R8HK"|KyoHye]YʖrI:ævnaH߂9Jq)@x>S.A+qz2e+h/`Oc?&*nTY-BߨJǑ{w >TIطJs.+B}[-阨՛I2)HϷlUF.5KzA(2xHǩǾޟS6Aqd56L!9)8<MzS20q5c.Uu] $%ۋ'N?B->~TzeBӪ6K-;sl81)0[l!9=כֿMMMMMMMMjU)U2FY_13_fB˷;gD@=wMP9eQc6InsS?xRXo,2nlsMV֩L/ "Z3+#w g{__h ԿC.SJKȄ( <Ð5ZqH+Z_)#ْR*ۡL*!%gG'뇵ns2JvIW)_ˎdSMXd,ç;UI)?J8M.DXb P1)f.!N6V{2c."@G 6 Hy'qٵV3BI8ܟ렫 IH5FAĝ)D:']>/ źՋ"mqJ]SHI)A*Psp;~Xkc5YGҡ>m);I]Tm:"Zض)ܜ8qJ:oIQaHJiGkT{G5zrӕq,r'4{Wu.SYQ8J=$`~\WQyh X'ˎpRqS.*OK yڬ)܂\Z./z%K{Fc*l޼G}u1.92 0l) Vv[H cOtG6bRiM5IH=ff*i'b <=+?F@:b[4Q*u3CR2.!G'W*q?jTڔ*L%ɕ" 5^>Kň}4]ۻ{}ÞΧ%fـ 5k$O{j GU-I5Hn5]f$4TKG#*>Z$-;Uu.emHq8O8>:I̹7Ϳgt[IKoBRP}}5 һЧ2 -{? \#rnn.GKl-co?IǮt&S?n!cF kǯ'2캥*tle%ep;@&.;ֹ+1bD[yA<ЅNgIlE.lXUAv;qϊy..ЯWĊdB[jZB%Cw]5)u D*;(X% N:P6#׀@^EnϦ.A!*-MlC{e G$^YR-w\VkAWτن dFQ$(3U=]I'FIq@h;@'ЕfH*Seڥ-]jC8m<I@Jf04H%- ^yq-S ʼXՙxܑ)w!.eIeʎ>g8Ai-*hBRp;RH5|i' VpWvdɆn1!q^1N* NF?8C(d.SqjJsځ}t=,K63KuJ mo*Elݐ 4_g{4WZ%^ڡ4b4Ò9H;x9 ÚSz"]:ל"t/8m)Qp>ty"Sm(iԃ&dDC [SNl@oZ"UQ1ml< Q#IFN@Ռ.7,MJ7S+iu⣹Kt'{ }xi)~#iN< XCvI]ťSҤm`;WKX'}ȵ)W%%ܺ1$ߜ}tmv Ub@x)%p}yiR Od-uG :ϰFnӺ?yJx$?^OzRJ2Tsr;w9O!%,=5?Y$QqP2HY.m>E <K䂟N1ʶ:~@# Riiu' n H4~?6Yvbq.*scW w%@ƚ bU% x%nASSSSSS\owQ*KC BYBxyﮞ]O:P"1>˯D,!HRV c ;ԫykp+mw.J<`Wl6 5Ճw|VwW؉Yԍ#G b:V;H\/ ƢEm!QZTR^(r Ghip_J)1SN9mr3ǶPa8ܓ[+~TF3;eВ kφS{v:LM[<0c7gq8m} ,*\G02pscLjoګSڝgFPY@ ΀z~k&=.,N iOBrję#S) xj |_X,YW) Bpq0O5cFk&!gOo[(LVZZ֥2 ``ۜkj} KLbJB[I>ec>um:ڂR؂;2wv) usY=O?!*~acT܂[`M*l_8pg 詻FSuy5Ll0{gXr96 ayRA Jիr{ UM9)X)))^;(g޺(#)\SHX9)۹>h^OAT-)%9qˎ}NR [L^^$8r^~T'$A|*:%)J~p]w5Q="')C'j8{s37,:6.d4%vS(8zS8lgP⚚iq;vXRuthH i>.uݔmo^Ok'8NUql;tP&*jIeUA'#ֻ֯E)ǝ0`|ԙot*d%,켷U۱ A!nݔ{[1&ZhCjB‹*GoT}tuZTXYrt?2v g6ԷnySIq܍۹hv[5ćjJItBBen#?~_j64x''uNnp[F3Zh܇#F*BUD8½4ͪڐ:R\b~_YVjN -s@'0;65-#YO%!Dq83`V)銥ˠ+t'[Pӈr 9'-8Q#TB I㾗oZݠ\uw+ v j8ڲpOstj/0Ļvht%,g=p?'vZٸRϕ 8OʉrSiɖ@^v#!\VtKب[$8JH L6H(ޗԈBFt5͍6]u %%DV>5fkMu,e"9 Bwp{W:^Y73kCl*AZ V=Χ_` UZ5R 9I'ƬyuUpȩECL!7)rqI'-}l5 0ҡ7K޻jJ) e8pNA4m\ SHZ1E FFè3nc"䫃XڠzCTݯq]TG$|18ZT=d0ˮS K $"Ӿ=5[*# L{vw [SkSHre649 '|m-uZ[KBT^9‚0yhfJJEq KJZs1~w(vJBi(l9?ZIG>lΕlR?h*%Sۑe$Y(WxUҕ]4,yQ)o%E}-.rH9Pi%ԅ@=Ƹi^u*9iv=O~uhDHdRN0rpN5v}- Ky dܕy݆u{p)$19N+oSgD #C״ʴ;Z_0ߑVx A־O)K> _~DXy +c~"q$xΪufhYhRY8y[WJN'Coڝ ,Iiu a*- zZAjqjqߝ:+B@9:ZVR U"tM`p@0'}VR/Jȴ/:s:0qSy7$Wzi@ek[fˉ/xNp@)$#ƛj?rJ*z]XIJV| +.6ҕJ~Ykwqu}tۥuuГ2hegSyL+' g*ݧH X2[*b$ T2ێ9I)J4e!ѽЛ}q$F=Ԉ tP 7Hhm~o*G~S07n60Q; }Hą7gYQݺM9ޠ{YK5Nznd|fi>)yZ0UJMuJ6*A UTrHhg6]؋Ni xx̐␃C5-ٺ,VmDy,NW?-[U-p KQz( / vq-u"顡jφ {qy9$)kx:|8sO)p``4B() Jrw-F۰1RY),0Fgu,J[jXBT#+Z&3S"oe)20FG=wBl 1e!+A P`6LWeI:B!JR99H-{in^W(4[6䷄ͩ/AR8RI9?>&m꒴:A#UI[䷽&#F JҒRF}r5{ݹ9[r)M4Ȍ.ۡN7s3] l$5JĐ=2QJЭQ( %jnDheK8}Eͧ_WaY,Xq!T3I9GtJ &gfY|%_ H +F@a13 ʨ[j;vF4?N]m]jUөDXRBPq۝tEqJc?n)' H=ȤYάpJ2'9)O~=y8uz)i]P6  %E'cZ穏54˨${wY+ҝ+dnڐ#jqsЦ֤-%+I’F>נA k,r'I\oQRIե*-KrQ+ 4GЃ:5JQd>Rsp-\w<#?4DJ\I9{l}>Q5i 'mܐO>^ӧDKO3 ͿswҮ5-6iCM-aDjNU'3+) 99HN^X ˘Y[7G~Gc~4`Z\RضhR d?M[CR~ 6,_ir>2qz!linjXhGordLMSQ?4kT.*L4Uz=Y8J\k<$)'#O, cRb ܩp|v(@ se:\nqǂJ ؏q}BF=Iês9z1YZHHU`NIç r VnI\k\ӏ2 q#T7n;*S*M.iZ6W>'韦)ok9D,&s5T%7%!TԪ=8q >r"%fT,-зIi9mj&I[!-3N J՟554"-|GS$@}`=έhT%.6"Pl 3Φ+kTi*Ƃ=2ARͷH%SjqڔiBAۉΦ_;D{`= +BvW*u>%&1:m4Hラ=c*<(ƑZ}AR^ Mh.ݚd뺰K ʐ-OsF[B%O@u+bH 98HfT#8Ow ӷSz)!יGA-Ͼ[z,"@3&CepH:Zuk]TPK)#=K+&M~T^ H a${z*4%-7 rTG~ w7GzsN(j.ΨSƙ&e=ww!]NS͙p{sΰ׈b^%)nzQ2s[RHQ֙4.1 +\ߍ"sUԞV5vMBMOq*v\y|d7OWR(2<ҔvdN2G՚PoZS[uRPr0bxa~̟O\5R-~QmjnH]OLdiozc{DRq ֕x_w5\2q 2GQJJK0q GZUΛ՘AFEp'är >n׺(DC2SJP?&zTn),(#p~-{IYLJ )BCUH8zc2WVѭT꒔Fy32:~cUMJ+UktQ.ojYU/dch%P(*JxLpn2#ƛڻ'.cjUB,H|!(wyې7 )piNʤˇŵqxhcU(>LTjE V!a@[GaϠ{kzMS_M ~pM))er`9!ԗƪ0NBt:Z. v8ݤZVn eU3N%Űy ;A$ DcKM_Ilԡ3ʆH*$n8-MT+DKQ<`Rr@HRzgi9P*P~Ĩ- T5G:OHZ!p堷 !F0=>xa*Z2I䟞kztS[ 5ҙm`6(ϱ=%5554w`"[Ҧ+DWO†uô`+D>ZADyhc>cjdTbGҦqv2Q36䁸({֋ܧHʩI&{:)J)Chn 澦!V < 3-_2e%ݞ:V?pqRuivvxY>ͿN?'TPt3pɪn,EBF1sz /hvv*oHPhIZ%kHqJO~Fx=%2eȌjCS.? t^ѪKZAyY},8bAHW4sg[}Cu-[Q'{.SiǛ6x1&v3[TTb{aeD|=BDm- >ܟ'ⴖm|Fkz )z#px;-rb{w]oq5ODѣY˪Қͪt8λJKj 'ם-.Qu*?XܑJ1c@ nǸnYe1!R1zJޯWS5%M@2eǾ=I?\zjʤ`49!熅0dmNV-oW*6ULA s'Jl2m  `$je j<4RH걝=NQjLi I:I:6r;mWkSިXt.!@ʐ;# X/گ.RIKjb*w ds44z}i-`iXRrdt+xڶP`*J| _#ιjלb0Z <4}>r{vΜ%7ۡ\\v bS*TcOr?Nꝭo3U*$Fڨ+';0pFyҹQ++6Gn^5*&=>JQ9Xʈ'Tt[nyv#iQw>3m$$Sq^HRքi|#c|c8#XK.HR LȐreDۙd}~u}urg(TZ{nC >Fؒp c^ee!$TAI;FHHӤ;΄@>ˠCǿimCzeL%1ҕ%+I#۶u]PDyFrJ܆gb R3cO/%KSU.>% a@*uv%|rѩ%(h_+nR99<-:e] ςeV'!r$ϞPvٷhϖcU~Wo[WP*6}P䪤 >&#83kЄ BF>Z*YefCDPA56Uy^'bB܏Kz s8ZF Eo%xT;QOi uw: 8&dA6?hsnUzڲRrO#8<mɌKf|\Hd^I8Wm4eYRyȁ-PZ˲%tH*.UZ+?ؓ魛ݦqST5N/,]rYi*3E)*VuiZi`#tٹh+ٻBlfEMLCQB<5$:_qR©U:b܌XS%<v++sI:z(%5Ym)r#qo;( 8# he&UmJMf]?XzQ\쾦XHg)P-ZPb -rݦRO`oa// jO)<u$)&BJ]۸cK;-0O,[T"2g%<ߐuF$ޠӠp>d- kV}'A5 ~Rr\l8*T~d 6,zzмvfd!-6T)HRJ™hTerZSA]*ӳf 8555Ͽid+m;6r.볒2M9!;sAUF[uo8)^ONǯ/7-L^ 8[iD}14W^V능4 )w{nځJI&jV_I6Iv[-JSκMnr'yFw82w%?Bti\57%I" lLLjaJ쥀2 G:ҷZGV);QiMZVF(% +vlY*dJڐ%+2H:-IpSjt9'3Ʒ#+@~}t綪.UeA磼q#T@:6Ԛ]-ͭD 8 *=w5>U5CHLR vNPǔG-( 6eƧ@q(l\2N?T!,>KA=)g@x9ZLtu׍'H< w C:M>|<%ԓ)IoNڣRojR4!)yij@* V5-34)[e $g'.z% * a0jIJT Qe;=G}dZ=@%HR)`) w)e8珗'CZ؃]NkPvLUIR~@h_Q1!v!K`-C䤒 j7hޫb2%RfźZ~$ (vsT8ӒH]L!q A_wjO[\SBa  cB즭Z6u҈A{r8s Ǡ UΠL*|Dǚu ;39ō@f:Vk)V3s?-1ْWnbp@ (<@Jͽ֋HPWڷȈÛVFF<8g1zkv?˩hmKVs$ݴϓ-BnS!RV52HY8}sY.7u>|-Lqr]i*D'|֜ ͥP*JBnxϦqD\QjTlC՞f9;3Μt>iOUu-u !#hO- eK)f 8TNG'0rFXtI"xl؄J$6s2FʒRF#4rxVWڢZʜibpv8{Ed"&43᤺H T7c |ە 4"Yi@U5E[~c$Bݸ ͥ{K (%[ 7 {zyuSFӦ4clTn._q\Z|5GyCreywۃnhw} ##շA`Wo~ԵI/E(z 3ꍿ>EBjU˰TI,6J̏#vB^>]s(j^Lv4 <ҷ& 8Km`Opy$'[)*-nVVO$ ;$):( c?ZJB*PySO[l$Uϗί;BMNYETj3 uiO{۶d}S+¸ TOZ3J{q)lg!JJUDZL(l!# { pK^Zr2,SS20veXXIi8LyNnRi߆nd dT{8΄z{Ne@*K;w| 9=/.HQmtJc9Ѱ($xzVBmQӅ(EZKe6#aIy;T{=5Խ\]|ENDV&RUY+V;)[ƙ{˨]I/kP$yS~RΌwtڻX}nnEx|t^CΕUBâ]JNkeK\qRC H v۟M/j4+ܯ OTNȃXThDf _S(eN)jZ $I׹0O[c'$~mǪ[un(jbQWrwVV_*Pq8JGH9<05g 9VJVDhౌʫ۵G5]~:B/=!VĮ^R.sU~pN1#CJ}GS89ԕp?VU Mc9ږ5 lTVvMd(*z)d2R(h>p~zbܰRGC*n#촰6-;FMW$)9XƗnj\52! )|p?`)'wk">4l=AQejZ thj,srUd) [2tw!CI<$Q@9 }{kV߳h^=|PC R< 5qHRJ8GST]t'( Uc.w*(_{lw8Φ$bț6lt_~\Hqj”r@FI?WQ[RԌF&?Z%Vm$KarRM S(ŀ1$hn%J:Q26nqH[]#iQ[Eie9 t޴?oّ[q*eVVU݈ѧVϧ9IYORޯ?6x)IGQ.l D{{ JÈXzBe!\ "3% rs`M!iJG`sS':x[uҊf2526;&4U<]҄yS䓫-v笥[m"8—̓6J|IԄ'gs9*NH`{7]6bBøaq7㐅c=hM]UrB8!X gqp9-Zʚy8ڸR~#v[iB@Wo\FݣPVj@S`1|o&MiWg>tḠ|Ĥ9JGI}R5T).4qO;HRPyϠ8twvURRwplr}9Y]֜fR7”20qGe/w\G^m!%R*)j3nزeoO|[: Ҡi88NҳXηȍ-Ȓ[.nJGu+Y#}ʧF@Yzes_.+`;>Sh4=ә멼YZ*?1̿m@SeF-N#nOȑc`u5555Oq{`Va7%J SdnJ%zW?s7O@+$9ǧƈsx]bשTQ=E\/(# u Ry: i5< aE^Ē@IRJroQ(庨!eo^;+\f]CRft`b?"SMDJJN'珮|=2mhT6c܍r.;.zt)n>d pA$OR1vo9/׺ 3"j+y' $mq3ΰ[͚m>uSJƺ*UA*$괿Lu`KDxVҲPG(mI,!yiIJ< c'L1ME>TیçY>ޚlמGvU4YO>ΗZEXzQ.[n'=*SLJ v^jDGEU)wxR9QOѵ/|j5> MK C0aDR~OoFߍf=ZۈaH M}Z\`C +WƱ}ͯ qG0A%ROQ=﫿jt̘X0FNI=(h^{* 눧Fs`%,FAV;WWonlϗA2-#p |_oP弋UvO`^}`:1hKѤ!xrG5WNnIM3XI;I ?vRSqa\0}lC~.)^Z5x0j41QM돬eZxZSn<ip3F@P.*꫔Z^$ B)&0V<d}z]uY֤*5%UZ|RXX-!$$FA8ʏQnJ-?HƘd >i?1]-:bͨȋv,\'j2R? :N%Sb(PM4 k,H*:TX[m@NJmŴta~}uwCMBVzӍq6 dGpG)O5KtZ2.PW}VS:,$2  V 4yes,"Lm% uԌNः+mQ/UiTL6:Ir. VH}P+(Y q;84՘5H Ty)Fԣo?M(TǺyߥ 'v΁dpMxm*"!G3$@k%%*q3JqluTS-)^;6shlwmqq$ gU,$^e>#,r ;@1s_"G7bkM2|$G{kp.ԛny;o%Vv{04 <ځũ+rT2d{tҺi *Oό񯎉TP}5KD+aʛ‰JO|&TicltBmjtKiFVp#x4554U}3K1Ut9.S998qQz1D6vGiwhZO2DS ԚB Sqr~CIl(T:jzv:xM#ĆӸ g;ˇnh[t acp?awߗUrD.)G8$jtnMa)R^)"RG r~dhg6~oSRT][K^Psq}66JZKi )NwVq:fFXVE6cRm46ZN OmOg2mjX R'޹5]KH8TofCBtRp{nqwrsdc iGG+FNkt`v;tʋ@l{8}9u#Nޕ.T` 1=mN@r%tADŽddcӜ u괣)ձ]z"Ї"!*"[GǔwEu tNtʧ", iv"#*_Jc>hg@ŴIl&EbZFs8S3|zPOZIP纊}zMl?BٕKI O|Y͵UdGwRAZTtP/UKnz122||ƽⒾI!ITH Ζ]&Sɶq&-i%PPQ˂{{w>ߑ 쩲*t:Ncsê-H>>fƼw}W9'+$?БֳУlGoIe:-aG0yetRBJ''ZBΪJ6ҁrҬ/I Ζmru.k~ʞҝBa%$O:q+¥QMIJ¹'*])UOxSR,yN vQbMM!n-Q6VVŌ3Q鳓a6 *M K9)QdUJܱi6u%2#-j 'mci)JOښ> JVy/msjWX+ٗ53!vJQpg[4QePgJVupBRYF;29ix̹wOSYN2hAR6nW$ gsVBXN0ܘ˭PH>܍sR@U]0NMgbQqsmSstj2Xr#hi87  hg\k4)L!Ga,S*;8U:X=1Jd940Sr$z=1ubI"̕51-B炓jufd;˪PSC1@JQwh페|ENS 5{* ( q@i/KPa$r@$|I'E^]+V*oԤ[rCΔ}AKkWe\Z5"!2d!KnS}ҢOJTe0E,VO 6v&xuN⻬=s Ck*kmH+'1s2mFU盭V4'y r2F{hCS[p* T:to63dM\x OJۥg*}4h-fY*,ON5)Bq,$=}@|h &Bc5q)Vh+47}SEZ;iDX6w6wp8ǫS:]Vˆێ|'? 4B ߽xz4Eq'0U*a” Oy/wc]¤&d#7Rt>郩\~k]m5`r~I$v*~=ʃ3xKآǶDoUx!"+ ^Ѕ 眧Dzs֗GqDqB#qQ] &}NɣGfED4#ZF?|TRZI;-qW,-]=ppGӓD~-KȌ㯖>b+_џٮsuvom:|jjiSX@s ]m :k,jZ%yR\u(JP>\v:utz5TZYKŧCo@Qc{nv!v%Li/h0'ZӓMW_.ÓAp+zFsPz~NKM!R!)Ty≯L5O:)3I$ק6{ZǦ .)ōğp>@hZx*A0 XW\cdCH*Pۍbs'Gםamҁ(H.()e%E'b4M"1NAG} ->+8=fȩKE~  F_jp5axPMvrfj#dKP*'zϧ'>jѻ*ۀґPqy<JFxcS$Sze&%HAar2Gg OmĺP!(K-lyz;h : x͘HY6KXS~9ˍBT\3]f؄'@h$ m6hX4N[ $PV,)Q/}K$3ˈscfۻX@c6sm_T۽d4@ec؎^6ʩŅH1\yRᄶp@Siʉ9ȥu:YU8\$Ǔ@eVӫ U!.+Qq}iK7o#|:B3G ICӪ*zqMĄ)6粰k'J\w&r] w2X=}m[]P\wRQozJN}taJEaSmȋؙPڇJ7`Ny_BjD<Ǟ3/;%dIV푖hҊ_K8M*%m3ߑӻٶݪ$!x$zJjflU-F=2 1 dJ}bŴP#˵'>ن%po-d'nA=ncB픍mjjk{55سISpQ<LmMU"B^=@,+QJc,5~2*t&ymipSi!3څ)ǁT8>؎U`ĽdWWGEԷ[ڔ'N? Ttӫ J 78A\qC#SʜG\Br&PjUx p#4ʂ3s:DG(Ri5T2"82?=eVŤ]vZUjOƣAx>Uo TҼAxϘxҁms6˴VIʎ]Ib1ȵʴȫ869#`8]VS-mUiÁlƛy߱?"=_gI@ 5iBAA*9ΑYquNR ')9% Ȃ5al`Mn4Ri%L:eN1K$Om5YFMԫJ}Db[/(@V@IsO:IDv>=;-HR2Vjl.$d6GC WJШl-m̖SN S;V928ԏBl::AHDm8}W HTɗ(l md=0 iUlОZ}ko#!XSڽgr+rgm_ y{M*SEajmIN nL̮VjU7:FO ;q9e) #A MSfI:@!!AJJ Am.࿭Q*+3ۊpB ' <׺G`ɶԪn$+)V^kyu55T!EvTP prI:P]h \Bu1% ܯjW?\k1zz1!p d~Uxz1RE!$S1Cΰڃ0jm+ jpF@?=3,.Q/%VZ"2VxP|dhjUiSX}Dꤙ. 1r7ADZ?.4'eZ^}04c€OmG̒p8KSSTS/ ja4i,X&<ʊ2Ԣ%%q$8[Y{c)8 Sd\NG5WU*3pVّվ=M)mBBԩ]en}9 E,<ہ<'w#<F:smZs1 O 8A*<;cGR Wmn4x Hɴlμ>[ٹwXTZD2$E$#Ќn5(pZTw<ŧGP%Nt)EHJSW`sk}=hגusG| ( |UuuJkǏcNېx]~T  $UȣUM[ )Ĵ@]n.[KA%_.)q*8Ni{ڍ~} sˀ ?&GVAqp4w.4mT뉖_6\,ыiĕ!qO }V'0sO$q飫ސŃs%=:$;TƁ|jdQ-5X>)ʇ!HT'y[&jM@ ❊¬c8ru:_JS>rIBN r1XiM6QyM'n{jFͳI9 D% 5l;:KtbMŴH;Wb|Un~'?:6]-4VJ.4rZ swƟ"H@q%xJ+xڴ #$iP3MiesCJ,%Ceyw3\V]}Dz2kka$1IGrm 9^ٸ%)J?A$oFu 7H ȢUG=umNjLA]#JyEMG*Z9Үř2DiNP!.dg.#뮷mZ*TVncʟ`{lZ PYjeJT\uhSq5(a\4huI;=a:6跐 Kc%*IR9{4="A2Cʘb6eO%Ĥb1T;j1ף=*J[lGTŁ'+g=sҝ)G!3=- Vy}h1m4F<ѣ.v}NzYn嬥_s~D\MKxJn % Z;';SSS_m6 Sl`v @BUI}FFzdGlKmwRCv}c\6VC3՚/ &BhQ FT@8Ǿ5ǪIJTP8 AJT$=NI9.FҚy )#_Ws}uiaʧCjPˊ V{z`d|9n\ukaT܂i* XW9)xIR<{g]/[UWFʘu)$r}r@C9l̜҈W$z(8!P5amT琅F=F3?9ApF%mu9$mW 'ןg5#v7BtiFUD!KZ8R~A*yM.Ѹt/`Q }5e^/W=r4ƻzESq+9q0ԓX>]Z{ xRb) pAS w N?IBOb""ԍ B-X׹z MDIL,׊2kREF\:E ̺^agj{tw ګ4ӅR)Nqa$?=14묦:Qz{I@)R;ȕ%i I$dx#^-Xt&߷0*B l(ʶ#EAK+x,n(IJFyt *[m%ZE{\L;iBVBF3B5ښP^џpDleX)HJs۱cʓ 5;l0[e!  H`5U 7oTtp"FkqNFOJSE!:9 G%9I 8Wb;i/p[WAn[Ah7WKv9d%2d}TUGnKTJ6IQa'˃: SqجHP R;8,:KVqĸnj$վ4mؤ<g޺* O"L|)Q4[q)>M[KOw>ͩCuɢzS֊sS<8wzN~i:fև[KPRGbRj/Ko|y*c hQ"A}t+4Kԕ>mj23Oᴞ?ޛ5WeKSu--Iʏ$矗NV+5BlԬ!Ih=\Q%)\ؑ!V|#>D`L$!e* ܓ>qJҞO} mZ=qKp_BiN[ް9Ənι/ QTZi⺙mTNVn<]r)oYq#r'kU֭RRT[){*8٪ZWR4n@vCB՗ p9Q_L8А Lf{jo9Kuˎ멵P&b2yRNqYZꒊ>QOў%(!i #鷥EO m+j xzrQV#[ty5.ٓL_)ZJTIAхԺj& KTrSq]c窲.qv҇P[e@syۮ7AJh֖yШҞB`ӷ?-J$ **)$֕sT.EfQ`ml$ xյ;a4KvIyA=VrUYqUͭ+q J@K)ݐGqƌ֝f4/Jbj hRU%{OTWL\(-~ a NU $h,Z7mtZӑᠫc8G}; 0ўC:AVڊT#n2qczҒjߒtDj-MnBیT{{iaZ;RJy껮 $y<'^iJ z4R_:(2%k5K:i|S{2pAOMXf]V\!+[LT+.;ZlBR ׾25:Qg}ʗ1IPp2@<AoVGչ؎>qA< :\T)USoƊL%@*+=ydp5C_OS$U)!p%’NIQNu*ŷLrS^ wQ LR¡KlBi8#)NA/~%UUrF;Ȏ$S}tܽ9pi64 NrSv)tq:E:EsWiǩ+ryϔOƞKtJ+Zj+S#yT;;NM|:l2]ZPT($I'AmSEbZ:bc OOqM{P>5cHjRVP@d$IW|siYg#RT4[%JM P?BZ߳W,KԜB+NJOIũ rR#9NpRGe$t"baB#Ț)>,t zz}2rmVq!hZNBFAY555RFv_nȒز3(:ֹUֈp}QE ~#ƀD.T},RV9y qi}zERFiimr*i$8UztY Gy IߎM]ۗ7Roz`#Fq8Էqp}pub/k0o8f{GӍmT)cϦ#4^<#'1 cUuT56,k)ܪQe)CRã=>EMMMMMMMMy3%5S2BR2xh qod$?!8YU$JMo 7-&[XJVO=pED i H4ȁgmB6r1n&T+̾?=hW]4~Ӽ]^;E1dg;V=Ryg?" ѾMQUsMaEn}RtEOo;Zf{DŽ!=Q#<;zVx]>')h(I{k_-IEn{oV!_? gJi)&<ԅᴵ+{d҈T(3-Az(!h؁q?]9ԺhmN!AyPP~ ]Z5! E6zETz'ܖf-5qSiiv䬓NNlrv; cA$z[wMMu~CBd)#m%D p3Lw$H^KBkc'n=/zJaCWjje@ 7wo}{?WI|R^V^LYZrP|pOufBh ѧEuxaE ;Z:,ďX9J>]LڞPZ)GF@$n=8Aԧ1q-ŨD~ըi䛆Tt gRp~t'Bb_Y92i4T!Jor>Z/~]JZ+ 9Jϔ?ƺX%‰=dfdo6GwTjDyM2RɎNy׷餕K!u%;*6\h|P4!=2Ej "[eD uvͿ׷aQFl'v0VQIվzjŻٴ^"_ .$1~G\ms qwka]'ǯv}r)"H) POlsTxƘ􏳥/bu(}I A֕p]5jm06+DN'WY Գ={񥸥+魚wHlzdt&^_=8=t}j*y,ÈChuw$(e[ARr*2=5W֛߸+tH%R$)$v8ѥVm^XJRIƘp*IR΍))KxoJ}EVy/8܀KH9ps_}W>ؿ\ |ҹ@=@jjiYc#n!6\]ʁ۟F8&F\uxM:N69 g >ZD΃.OW!F|r8:qg{D`Cms`=Ήi R#̪ڲȋ@a+JOSAǝ>st>UXZ[)uAWF6+㾶Wԉ4wc1TT{uQOF zKrdQX%AոG'ϧ }:KƭiAqڎ6+ =GUc$H(fڔN$1L!53SҜyJZq>c֞)RzIG r酩nC+eKIJд{/jeUmU؍ߧ6o|:7V5*cR2wz.:ku."VOUJwCu2g6m(XZɪ_l03LS хn p c%$iETaQEB %XO95\.K0Y]J#=06ˑ9~lIrD{uN0b,{PNq^7bOOæj䒔q#u:ESדJځSRќv?撯EFL6<)yGoE$ҢpU Q,)#q})-m}%: #gYj޶5wvnJ88v髖OEb$g21ܝ8k &E["!\7禦RBJ }tznHJh7奧>lhK 1u2iTk^hdۃӠ55XFLIqf3JuEm~gң;.MF%siԝ'q$=ec2Xi 4Bv#Y5545~]Lꪖ! BF=Z3+BNyN}lIQN$x֬ӛn~!%1xՌZJFAAʉpT갩SH’d~$>YփT)4eөKK#'[VTʘRTm?BorWVwajubP̦RT~m {|=׋NUyT;V۩RϸX%@V(Ui5ĶTNnK9[muTJ6k|6į ށIW`T};gdjiOant>Ԡ6<󏮋mSmo0V0wr}'?EgFZzmbm=-ΈkTjϔǩνڤ_iWA2(μCkI焫v﫟JbDF\! rJI0@NJQ-շQ\BVG IW=ŭD.lPqcLee+I>ګ܅0 j(( vB؝kL=FB*ޓ%wIS^A}*is1pSs qbG{1Ծ>{s-}b(lb $ |M j RWWqcO%ڷc#{nd~ D}(}jYRiRpWL5d:52=6b$t4$SVe"p.LC{?efA Z1FN]jji]s16)Sq>NU֨sH6ި*%`9};jCqUSYrG_\sƋqkWR)uqO}mBr:r'Z-P_D2fs9ڥ[> -S$6j#1'@+ #_[s>zUW ّ2 PFiVMz-"7ҥVRJTy Hn"8CϕUsNǑp*WŌ-)gn Lq{~^d3VŚpJR!)H`MMyT-.ޠ|:#qBJE$9cDAmҚE=JEZq% i?q϶{ʗ.ŧ3UUϫ?>;>cr wsVJrF٥ꡠaESvAn!ڵ>2-!j9=[xRd* SX6q1+iN~zڦDpGF$JڌŴ82ySx qTT&Qdžˬ%($2pO)Z|Y񞷩s[rHJ!a@o[(4W\OG6,DZ{VE&kHj *5xP۪s}uyou Rn$H %ܔ)Q;t9.RzWR)ZS8Ӈvyc=y%sw ?$xcX#u?EgW/fu4Z4N% R}qOKֺoI0ˊLIm2*RF<:AAo~ ZbB #T0I@i#u <* SvIjvFbq")ۑ6oT-(jGI!.zpm^-赸IRK򩩌?x:5h5m)cT ܧ|p9ҹSE)Hq|>ߦTS E? 45NFָ+Q2T2Lt0ٴ:S^kyZF-"&5 ,f8H<MԾѴQh欸끽@{qOQ:Xk:)jC{y#{@ZەHӘKԕ/rjR@sM.&FDg R}22R~`9dQr xJmc*$ j\{UtՉK5@iJEV#+bֆ½ 9'v5|޴->D1F ==zh)ϥu= #zW'v5u׺^jjjjjk{49U2}:ޕ|QvMF-MHMrOw;5T =b D,pA{s>U"n\Qf*j.ʦԥ@#.IEr=hK;`ї(p "eAy1%+ҘA<{Nr2@2}fN$ȷg?)$-yci)N<\>[ݡON! GʤF :r^kkW(ݚ@_>AX,w#ljҩ[ZR-NZNpF@#q Ә"VNZA# pd#$w4ΥUV)9kwSKKrT%iK%%MN|maCcQ~۠ã hAYʕII՞/k^Un,z@pSC  uL}BXPG#;T~ybʺEf2K?G ?}O.o[&}QE:}oi^ϡ/Ā䪥FKc  ڛ*φŻ yJR>zϾ1:m*GLCa=`c~CZ.y@εZCJ??TgVRTRnzfAҪݻ~ qݍ@%r3'':a_}Kdը^v:%&V-‚S#H~_hb&h (:AWk-EQKӦ!єKaNOs:ZER٪ ÑJVI o0@j*ZبUM*U#$e!<<SͦrLnKe9P=잘BbLm֣*;Nj3 yPH%)ڮȣ[,hx7d8ʪ%kCOդ-@i \  )?k\*Ngijr+ mO6[RGkz3Ez:r$!hzR)HZ6}>&gS.ZJ M⼲RV9HHq>6Z-KCJZ]A]=*nΚ*Be-i{>O*X'#iJ_%]=8][;TfƺmDum| N3Hq*J't]E#pTX%I%) pBH9Wmt90u2BjJ jz'Cv3LBRj4H 8ZyHH$y8mx6UfWu6n,#r8$r9CUzXfeΆђ onڣ8I:eQԬƛsNe4vZycpJYy'<,p@Z\BV%C FmqUUSc<5k tߐk 0z>{I#շI*RCӎ*N')*Sݯzba\G~ m>.2JBW 9󠮚e7-S[9%ׅ%aXdsƩ>)W)X;M<q>"5On{nTT~PN7dKp*NLGc?#᫺N@񑧟N:Zny:-VD\wsMFH-'AxnBE!C#Zvͥ3iFcZ%⒔4dĨYuKb%O'qJs՟2;k_p RîN{~ZRf5~?ᜎ7nƟZ^ky{X[~+ڎN\۹&v)S!s9i>렪TZgR-+vE>OmԌaH+\]gi̡VV䆓P%|x<J8GPKR jt9IZ)[`cj#D'ױCe\;X^F/<9[\Ub;#*?$`~C_I. =C8Ȍ魚d[Tje>J<ޕ6“~;{ѽ9{Ѯ&N#jv7 cMq#^jjk{5ҿdc??!ve]*pG]K=6n87@RLw h>Z7gP.*$ŨÄ#G9mm%y- 8R@fdDЃs Pjn]h9*#Gȍi]7]q*5:%AU-L^I('!9zEպe h5:s[vmv=1W~Mv]% rBOj+zsۍW*mym=2m2B{";zlOtJJÔ?+%궲2q۷n:͏sI(N+8 VqhBM]ꛏRVަ[kjUqԌ0P#$1_7Ef;>5& ĪM[Zw]V<0ˁ\=D[y5*MjC)AmGv738Mr1SGxc^ڴ׺@W u"/m*G8'|WOMEJiB]2j;{>U$ܲ.\Z֩|5J6?ù E@#÷#%W8;$~GZE(1UeYAx)Bmc3&4F5m4[c=ֽGAq{}a>ed;vIɷe][;m@;QWނJP+'Ɏ#}Skb-nz"NRm cKV] 4jPZu9A) ]`GSoO2; }u*P&TKl:$%5mUcQkMPbXI) ][h"ޭr*0@\E8?vVm!<:Ҫ}vH>KxZjǓN@S IiKi sD$?]eX)C4ݐW{7K:M#Ykj1u"YS7 P|?4vEf3e%;% `U=] VVZ>+z,$N}ʰjmQI4P"FBRV⴯>~:讒PEz[*C~J _8`hSS:ei]rW.JG-%&K -1Y?g1$"~%5Ζ\pbZvQYKBGN7`0};**-@5:z9PHjwժdZ|zUZZeB< ǨEyHV~ԹcpQ=<9%>+WP/ヨmfVq&Wn<8ᑟԠҢMBdx': hEXQaXVݶ=zk)h3:T#+)T֊E+]+mhul1^~~48ۚf saG8ߎ4]:c'Ez4͔->ьڽ4>uSC*t .q4x8;JH:Џ|ݒZsXDwP Px n)ս[^C'm&Z28aG`k]emRZu%7,$Iϯ8PHsWUW. YIgiIJUZM-MiSr\ئҢqJg ?nk]D~MPUt

0 xyqYƗi~4 vBKm!R 8Н"O!R!;T*F 0r$+4za@kwވ[ Vw4TN~fgS}WJ2m LS#%@;TIȲ"ur%)Ltv g'Cbj{mȆN 3?AjGL}`o)qI~(ب*jR*+l6Px'!%Hz֕]"=~#I@}dz KHqqZA8* Qpuz^ky!i J>\;%ƂNۘI }YiiɔU:S~Q':ҽ κ#[nȁ)G#6ם"E.EcşOhlT pJ?LsƋ)x5Tz6B$D͸_ G1*iISBH_==4/j5Lҟ}Iے5*r.ؐRoJBI9蹵>ZQ6SL+^pTBS<߇=DZN%2ڎ ̕=lzQEo1HDQV P YϨfjVedZBJ5Ȳ"RVGpAtש۟1 |#SLeÐL -=@idٖb]Ն.HvƟ:I#x g m;.+a3_n3I8(Z #]ȸN+-Ƨ0#jAXQZBӍO)G?Ң3YVBk&PRdPc!%} V*Ҫ2٫\j)PĶHjD]de)|8M[z=C+ Ԣ$eͤyV}q]0Pb[:z{P>*0>ZPfݕ肅iK0 _"KEKbDgv$` gF}VQm# =9^I#olgjjjjq(BWINJ|Cy}uYulDrl~mƌO}wԨw:J%j̶19JTBKҮ+#.-`UIP@v?.٦u詡ӪNŠCi IQʈsqI]PKqm)T}ǔbHNZ4r}qxDv!ٖ b|2'A:EpLtqۜjSU5{f^N*sg\v羔7G̋j{F АCbJIzB [7Ȁ h5Ǟt"7묶Bp2}ua2nTh:;rr9~Z!#6{$ˋDx2)W NO=M[]JO5AyͰkuomh\BXl ǕD< v}6ԪU:Lzr5cx Au\f۔j=Z25v!ڽr8#<iآ*Sh&PBJ{(O=ֵBO~Y-B>h+F튃-"J\I $ q؂=tk|8S~[I) $@v*[z4 ɐ)JU'CLju ksTuI_,8V$堣?GƲ%iZ 8#vsvvX}-ouSz+@B<=}VԾҔ.ߓ#̗> DEm>"ۑZZ*rJR7a=ΗRk$kb8glG䒢3 ą.{jW8 VBGr@6LYȺr,HOQ۝XYQja(yM8犜%@Q:MMMMMMMMMMMMMMM+N3tˉvX5%% Qda9S>~pwk"Z`tq;V.*f^~RiLZ)APr)#O7>MkJMi]dD!ev*O]2ٵ>۪8K 59:WR+b]%xg?7=uAdaǼQ9?Ō.Gt Ns~w1P& NA)RǷkjZ4z&.$$$z#Dt^6j\Ia9=΍ee-.^J8LAo~E^+rIa*AOĠltdc;r=3,&}{P}; CuAmڽNwK[ThUUxHSrb}“nTS R nmZ{ٮ<kRYNӓ$zܺvElfSJLv (Cݓ W$M=^cKp*j(J >Rzh}Bߕ6=4=,.gI{aa7dyPijiF U}mEˆ겤?.$Y!JBe2RRGr9{.*uNiM8p'AJ;tCT(ը9 ?R7Kt(r J{>T>&TxmBi JgkS^RkCl¡*zgu,>VPZCR NqNGѼ*v- <ƶ׺vUJ\wp@Kl,s餭y:uOZrUQ p@v'hϩĵrieJBt#S%Jrz+jtzF==ǬۆT/$[IF;wdq>h+KAOыLR0@OkiJXr|m,l¿\qNu[.T+/t܎(!!9108ڳ_J<Ӷ jqҰP,h?7xXotjU-ȩu rA%yN;;>ŗA ex1'P88:!]Oe{ mLU# %R}Fl8[.PI'L꟣nޔPۉ :grK/bd\j?_ms%pǝy* :岂 Bp1=ƻ(($ {5׺C|xMys( lz6矗q.3Rc:u!m$>Xjtz\|ǒҚq$'Әz,s<"BF^ ߏ1ƞV &HTmAM%*N0_lae3QC}TX^-2vN㏮~ZM"\\hE>#C2v=Rq[nټ)=|S@VEe )e}B:}*.&ۓ]QKC*.QqGc[3+v"i5g&a:mE}!.\A gi# :r l-.2iq IRT2>6׺^k{5ҿdc?ěv2ڪUĺѹ-%I ziuڊ|5R S<Ùvă#9ִ\̢W!" v(IO+lUCDɠ:RN>ZT\=+\TX y\*3BzvVPdޖ)) l8 N? oʨ6S,Rc +b22G#?=[o5 tL}mZ;E%J84Vz^"Zw#m%Iܮxafoy"!8vOT ilKVNS@|x=BU}2[n.lΚZ0>c:»aGHX&HG=ԩ,d2"EK~cjT1TRBmV ,=io0U2]^GBDH`v܎APyZNZQ|!b1G:慎u*j ? `sv3鯉}+]W׋ӗ<-Y+ՑLT EIK*ug4\?(۶;kr⹬: ].qҗSJC*F R#HʳufȊn;x))*ǧ?QsSHm=LåV[i|`|Vsޏ9twnKO↍ HRT0RFAq,+L-VlRN<>~GEk]A;߮cƆCFF0TwIzi_t^4֟_9 O8q\ e! %g#9ҙz9TT!Qn@Q#؂3֕WeLbVAX*p3=Ψ4e[h-Z$2s(>YR#cA74 }=KuJ\)Ct99Iycr"=gje9iKkIS)J2KmTn pQ.l)dƐyl'rmiѪ>%Ne}Y- )% $l̴\"qǨHe- H8W4} X]AT&CЙorVV%pc8<|׻N@l0K[PB[JIQQ8|kkeأ.mOkH\ysƦ7CVLw\nIYuV8D|RW#4zHe4А# }ΖUTUK~WI L1)Z{C_@[n(mk^\-L̆ }z)iL^*1D>W vE;vITj#Y % OWԝm10"=CZqʙ'HO]Sj4Lb\eVyCiҁeG^ [> Vӎ!юA:MMKIYi @H6l% y$!$V1'P sM}ШT|h͆@ rc<,8=}UUKλoVٴ y[wS9 #9ξk4J4j 0 v:%$d(zJ2*NCubSl=~"AX g [%sqNMbVZq#TU`}3Tz̪:LDB£>"y#ƞtzQS SJ|T09uIJ9'>&jOnoMj^+0 i-P q$ds‘9̚|:b\XI.8}AhgE1Z)s[;v?v0H?3US4GcU*/ɛ)p '!-*s QVG?V>o- [{6b^JR( Ohݽ56VN*[yQ`!:3+5lt<(@GpGt(c=nӘBУiAHvJKqť )J8 '@szfǔȪIZi˰=::J ́QU1 SF=G^BEʤdHv B;9Hs#9 P;d{!\x^\tTi3g{PG[moSU~HQo }0}^u@SKf;VNGXRF';}N}H&C-<. PPߐkn *DlqƃD-{r!:.֨+@q׶IGN)S܈-X1i-Ȩ-n)a#Rr{pq8 gT 2ijLYBTu6PYdg0Ԇ'@M]@ɩ-܆DtQ)<{g$뭭Z="a,9tbu!42:+to uR#A1&Mp>g=q? ecksgY)HhE:lylB}y2dhޗ-3@:;YaLĩIH>'FPc֨ȧUzB1i\#kVhnIf4ҕSq'q$({ftP2N<2vx@~CVC-+mi Jrbަҿdc?t A:uPb yUy1Ƕ1ibrZsQxT9)N۶ ִWU *ez*s2 lP 'a$ `߶TZ\6dҮS䌡U<8'ӝ,urBvm"LYLgX+iþ4hcR?\f?AmPvlluH9&O '$#__BO,^Z&"A/5Tjy>zʁYY^JMu(`9#mzXLmXRsdזbO5o|Xl綵y% †dTdx@c#{+}\t?-} WJh +)rkSUTJIlRg%E'NOzcp}H_ 1|s鯯Q7?xJ s/{OńZt\ILQ R{qzMbm r"QN]?0RZeOS@ p}_^c|GK&,npͷ: 9s:])dJg~O+#3U@H[[)9Aω #d"bu!l1(GCM*+Ĕ4RIX9a;΋mɮŚy~ԉRҖ0O+v}kUZ -E pGuuQ BOu:ɹV] ; )J^pdd`psI\ֵzOcI$6!Ԍ\B);HL$aX@iaE-4;! 8VHI>KRĊ˔jgtr]5xɆKEDT~>宒ךF9Y2f:T伣~}ϠZ̶nS;1"R|˜ ؞?:%З-!IP 2'n .:E-}Y'ݞ$)$FAךy_ihZBA4UTώ?2ߛ.RҬv;~֋NõHtۖ$"*2v2H׿F; ۗQ8qdFF=Uig6T rBRW Ս:,k i܀GW 3PVYb7j͔3>ߝ^5}46xjei N0=rASn&%DK9 eGD`lW\z1AL~DvU0={g?1t*L}V !PjlKJVBON9olGFYZ^_[ >8 'dڅ_ESxjMTy><*d H‚L*55}1 s#Q'Ie7PgЕ+#o6Z?i=HeȢRڒbS:c'r4,S*.cQn.c)!ed.2R8I݃8ʏmttt8vu@ p$g˩<{j}-*S%>9=srM vxq[)zx9=cER/BH̕C\KTfWU=\Q3~ELow:=֬mDA\  ҕ#8"~ٳے N)#c1`Pʊ>Z;N1lEPi$g]wR:BX8{~F> ڔ'''߷ M*KEյ. B(ZOb;НRu+BeEaKޔ$-$Oh润8q)x>뫇xI~ qp#Undº-.|4㬥7-i XZ~K]*R%KjT 4| m?}tfY K Wɨ$YiNIW9WtmNM^ẩ4IR;e !+үyKϟvSܶi8Ќ`s"zD3€{RJHړ_\-+l}ikh <렻ީ)p2{p%CdqCmyJT>6lrSxU#kR̮t!>Vݒ=sFp 紬JKԃSv:t% p0 H<kkIꝧdL>odxtϷ~t 2kMOBb#%<(;h&\j방e mJr ֣J)@Is=:(lZp|x1$Jo-CTL`VےJ{ܝZjjkJJV#$VԕwF- HRӀ#oteGWhRՆRQA$`w9c9iE[}RiQHf>BIFrN3;N{R^֥S&6\RGJÍ+)#jjkKi%m%*BB澬qT߸-R>h9~r3]k,?,CR{9bm>pJ@I#eV C48ˀ6qVШ]WmQL'!mH˦4FpNyDZչ76k~嶘QJKlZ ۶CntEdYۑ'hQ:7SړE&ChTG_ryn~K%IZAIr5iPW5!¤n -#lB̌(S9:YbϱʻltT+$aYH;sE=kTV7FOdm[T(\J\L/q Q%n6wdy1%b0bc4Ze^bG=Ͼ].ܙFa!.Rfe@^T>ʠSWa2.I>V LmoV{Β0݉y'r9 uFlX)LȑeHJ{'![U72hTHH9=q3?6L6J@ )G8nrhHƪɧpW?) C`(،ߝ1n!}iN?J})u\NH&R9ǓFU;9mR+qjDmz g}3Ti+"$gd^s @>+xHvimU$QʀWU}JT.CN $c~#4in{5I6X 3Y:czjᖪ ȄiO(B';qZS)(qͥ_KHCaM)yO窊Q[BNȁNO<'ӒuRn>Ό00҄3: q'/m|Wj렱Ly~2wm<6jx4LI8p9$\ԋ«e¥P#(a#uAԑpPG ÷]-υԪَӻJ$}tN~]I 9 Oe϶xfBnKe8Sg|j6\qW+%47T3g:v-@Mn}FdSI?஗ڎqCH%2u9[J>Nr\yrIC+Ԓ0ScU;ujC.qJ hZ%lM2*vaG.2I˶+~Qmuj^e >$!-JnRMv70}{Ȩ-*dRZyl}ujl UrM<_BPwH^œ$ܫִh0aCYIKKq M+3(,↩nKci–S@΋mk}E+ 8qo!n;rVR/TT&ݹ*(e~GV3V~D _Gp):-Q))A6n>mfʣZԯ9`+9ϮSr ɋF%ĺ|E\}NXAA jjjji]s1-:sk ^M&.ER )#ǸOc ΙɫtoYĩxgjpd!h'W>Djk{5׺U1jLeԴFzWF}=oEjNks|Ԡ%iRG{Ytʜ:6=B!}mv#ʵR&=3: ֥ރ>늯]tLK y@69 8J!Ꙁe[]6+vs&nYqT'DJJ7H>hʾU+ DւK1BCH'2ḯFT5P#?ªrZHdžI #y.RN\tȭxUIm|`2R#*< ;kM*m>is)s{ۼ׍3ۨ9{>";)_3ߌm6mSo>ӦPs!l G'yt㧕jʍOZLHmOu1p21qVRL)aʤHWaj*VBlcaQ`ońx<)QGtAWlJszréJgh3Q$~&AB/rP"mj@Ct ;6T*!!w6쓐O=|Ey)x>[:}*ZivJc\جNiٱU*2N\e.ecv?M|G1o# *@gM+/yLSB!I/NO!G5mQ*+T*s[)cLmPN%؃믭{mӨJXڤd({k"ݔi:EA*)LԐ9FF6P1LEmDsSDisǾDl] }:ݗ6nd[T@P? 1*\SELhuq>u_!r'[T$[T {tr -)J}|T;t5L N8%)ܐ6~hʱlʬQUnG?φpNN>U=6SѤ/dy놤) I$q9#9H2RXmC8$#MMPWln动ZDgҥ;(~tڗ֩Tԭ{AW'uBL5 J9cz )Sߚ.-E Nc9~FIRUYRa]i ~¤G`e@p|ǎ_0Cs+7jF&җji` )@1$q4{Ru8yŷS෶t$*]BN@9}MjMT*f68$)Ym1iNRcƤT#̏2s)go1TZ<10Qʊunq՞JQ!Q(W*KGpd>|k?SԤt($Xی] =;<@ [lLisۭ,;ժ.K8m8;r0GlΧvKivCDP)`{dwzOH>dBD Z4a_V:[>ۖʂV[Yq9'3#_H$%6ݢ:!ĺPJGE:,3wZ40%QioO^1겷+]߳zS)nlOB1Է)N]3 ܓPdS"|{k kMJly K0zW.~J[ۨUmX'9'ij: w%)a,h;A! x#Ykzmkɦ= j U:|u%WaT ,3RKDdy aC3elMn4V:jS8I pp=5.vX6咟P֗1wvyb}5ƕh@̉[se6܆ԃ֪r02{m|jjٹ̉ ֕dp҆3 »~ Sս:Sj9!ps뀞:*ͪx2hRnvJ .$tOD7\j>BR{aÎݾz,zuLRa [O) j w$w8:b=SzطJXLyqI'9 JJDR5h̳4cO#$pmIl(%!9Rǹ<׺0^u !;|϶k{49QnqoC:5ЇPgbPZP^2B$2K#vN;gJ'Ϙ)>ܿ$-$v㝾ڨΨ=Ub$AN5FΕR|Vʌy ]ACe*I PF=E}BK2&gĺ\T尀wۇnҮOO/ىE *B$'88]mkPmju"?}ԯDI_Zޓ&-5=WP+Br]$ԊUT w"Mh%e (֓;!uTEJQ='ƾioZ$Ʒ3Iu9%ǖd@#$yWcf%ICrmFMr)o G)[*_t{ BfCN;%k@SB8347 tvR\nXiiJN|/۝NhT8<8mG9>Z߹ ZԻ:W}зe))Rs6AJLͱ)Ƙtb ^eE/TPdܨ΍x=L@=\{Z n J8 G;|%rj)a 8RC%ddc'kb3'>ږmMI3{jLwRcQjRU2r78{kug.-.{> !lx ![\ODWθ  hP Y55׊HRJTI zaZuD%jsltӍIbߏ5v-* 98<ぐ~gK-YAЕ+'' m9{wNRl* ;?x-6I<#]V ji%)%I9 rY:ۋӻB 0X<<<<Ty PmݟbTI[fd mr!~?6]*J_9RBU`K[c"d#.K1 }B%`j&ԢTPJ-##J\[kcod\U?mKiO'99ڱn[ߪU rdc$wnu9qW\u:z*CP9FO}X"R֫eBA#JZnpTW>)r$(Q)=gL:^K Q;|WZ,4L[JTWq=tsKb*3uPۈ9 IV\)!jT(B)3} :lbχ KR,HhmK!HRiAIP>ljj붢ݶn)ZeX[kIT>KpBD^:\lpPcp}ZZ*’ˎN76Ֆҿdc?GٻUZtПQ'[A04kSa|D=ma`8?x=?Py]ɎSVTf%pg]5c4'Sᾏ,VV½֟PKZR: {. ˢ<V c\Jn".:᭱+Œh*P?=gꭦe"ZD<˔# Iەc>CM}Ow%C T!`zp%$}ʝ!PдE.((ϔhUKIdGۣ ^)?%DuoX(T iU{U* \yЇ.$c<VCҀi%ӇTVoܤ,Y-c6\*Qh675:Tt1 ~c\) IJpA Mmā6SR$ŌD@u9KiT|2!ِF#,6Up;5UARhX Qǡ#:RW Uj~452?XrĈB5D|F7~USa9ӎp%$g-=2T2 Rǡ<{h}֣t¡6<-q<̨ѧCSḰ<ucbTqN31mK@t܆B!;?Nzb?!NNO{'%Ciq[]< yo>p1zk]GL*l{BF;+΋ȕ*B>)'OA}Z~UHgVHu^w%<7k WaΔ%i˫Ӈ.C QV%:s zkU5 P '׿"ܷzhpE{rI9?RtRmuİhsXmIԶGVs;yQ?B,fQBĚԍ\ݸGsHz g]iqBq p(8Wv;T7r.GTT I Ι=%d+nnHp.Zܕa9xAϱ뤚yKWe!Ym)U486:NS2[[I=<Yv4EƁ25KpӒ9 W#9F6ݴmUq5ա*C+`IJϟcFu41}Poqd6I\i9,{]rJWfJ ݉Rpdr4X~,*+ˌZgP̂B|4·:g\O*'./bcGT{pxs__תwѩx=kߧ\nvڇ$9zq4G2þoSP"Kz/I_nGO:<[~ El6`{}XjjjjkV$!;)KR]/9,n ($ojJB QSjQ#:ڰ-9\9mAmz۟oPhNE6 Wc8]u&z/Oߣm”mU p.[?v=> % GqD2G^1eYU)`9[֯I)nL3 <.IJO*$:B>@fj7iRTNOo= a#''tEHT+5kWT)Ák@J";+D2L-*=D¡ў™ J{'8QH:m*P~E=->̔^A<-Jș ĵ)a`>^F*+b.PYLhܠܳ%9#$hW #kjBywg<씄$% k!:Җ;OtV‡;c'ren%ŏ%HT| ioN!Qm 'e yyX&DTUe -)iHF38kCn*\jUO!-)(Chq4 nU*ˬE6Cn~D ${Uf)4[A<|tyHGo *sG<*4j=HbD"am`8R@ cNq)irm(-RH;0xZTKZ\fNBo{+pg?<BJnBڷZ'>8Jn!X,.n%!VZf9aV>u5r4Vn&dG9JP9O\kb~ڕ &jJNt0Bm.8*^: L ;s$}uwRsaԖA-G]vr}O%-o='q =s:K :b@&HRs 9=/oW(zs@P>V;(v#V$<}t~Ԫ:ܒ%i1(@ to&EVLd$i Jw7:V=::[q-=T 8lVڙ{ɣ-֡!$mgi89ma=-LSZPgR9ƶl kpZU:C5!nIA#<= GAŒ1c:=&6I9 r\T7s߹cׯeoЩ T7!qOT=G]\jѫ(uCE OAmTǺz}=JV!r>\#>gGT?Pj (~*`cC$Jh!jZx6Z $~"myZԇ*W= yB=P~Y}G' 6i H$$sr{hNg"-2)V'=c#?-,*՚zrUf2JIqn8-nVĻeP6L'ÌqM$ؐs8-9˞KCeHdHֆ* "nN7*źfC2e? vw;k_`Y 3KuåeÈ ]?L^t 1ƕTCQҀ`qܓϸ~^; %<[8 85%Yyڶ8JqꦵwN.Wp2]Iu`*3_м~P&aSkd5j|,yzWkpzKvKoSq% ,)s+>ڕ3p2AJF{oQ^UULTVr >d;s;jjӜL"QB`ֳ{9:(ӧF:bT}nM%AVRTZׄ$AȻ4'&|'V?򨧰q#;&`NBro??1㶋뭰y6T#ܓ%=H&$Ɛc6ځDJOО;!p<]L*5>2 Vq9mp_}I(dڢK*0qH?"بԬ)w<`g_"_>ʒ yO9膋X,e5J&&44U6bZ* ># 鯳r栚v3 ((nnyBR-dnn tno!iikP)Tg$DNYc\],)$`\PU nmEN+ |hޠbԃ&Z% %I,ǯlh,[Rn55Va}OUbKsr0:b<$)$颫vߴK*wS[.2Asr͍1,3OqspJ$/פ)OOZRᚣ˔Q$mF5SPS~Yc2Rr6 3KTTRhθ#['8xhS[-AoEvҶg::v/ze l;]Y$jt6!i GeG) ljk$)%*{h7Oگ]z%|[q’gMz h~_òAA uQrc̖UbT˄H+ W$+=7[W]mk3¢J[U[ S㿧|gF:;u,]de{p}i8PʳNxʫSۍZSLfq[@vJx?=nR>jkmU]P9[sJA}I՜nؑC?nZ~:OJd$[Pp9I'εgeۋ O ;^߅pU)eZPO08 gR\gPU@lT%:@qɭ)`)ݓC4Smuk)V(d~CET΂3%_LWVGtKvZ&&Tbz(6R䁅|=5_V*UhZ(aL6\(@;"HnۥADWNLt,5,xQ$vaY55555555554ct- x9,(q$у*+e gSfTZKq6kPVQ2xѶ:;r*j#4"'^w+k"fFbm-m=0_L^#0k!y({##@5Gg:\4MZא$TyXwnν)ו9%"\'c؏Qr$xCSI^ xq3?|Onsΰæħ-ȭxj}1!K pO^ȨË2$G6܉jRc˅)q3;g̡On:9[VHp: Uz:݇S). uʖrg;DBrHYVw|;qQ!BP:"Z-;,?5,?u,JlʃN[*>ߓN3ƭ%u+w{% !TY`R6_ǹ2׺/KJ" ˒ܐ$~kE(;wʊŔ mJ{W 9#jSA"$RTVԐNR!A9:o}u[PNMMMMMMbAo%v=BW#uDEvC gI<،tyz 0g-ܵ3.i1⊋9P:(T ӒTHJA+{ 8ƕ2nS9C xܐI'$z"̤۷Uf_e.C ~(VN#l*2Ka̼S@N]ӻM=6rnjHRCͼ[^"BO|w8gXJgm0?2G=F,#)i[51P1;O'dUCˠ۶0e#vWl߆?α&T1DemrI9Q?MhТPyLŋLLx~a][AY! Rt~uN $n%DH''}4oH"ҨF.3UU$%ZZn+[Aû؎3ΜQafm@ 32P$Gai3k hWc&c$GRM9I\c=ASq*Ǩlʿ 8)rr:ƟCЩPJ8JyǨzqPdޗ$چ?!8Aʏ~x<"Xr#یnZ%4%7 0F 'E!JSg?.o6Ң6U R9eGNDv ډĸ*{Z\߷ g 6ʊq ZtkBG^JYŒmi@>P}X4Gp\ZTgm!c(C#n>J#Xg+,^ _c)*(J 8#ҺkbV4 M:.F}I~C=boR<"{)ܵ 8s:.gRjCrFK% !9>ԻzʎVFV=}|"Tdj*P-%;w۝ \_hבQSV-Bnpg*mi~#(sܐ{gC7D`[ GU(M^OXhgwnh-@aEpRCcLˍ&3͐%ArRyUjoCZd6j"$JAWtGw B氙JTA? p>Xօ;UB eG9)#?}t-#TM6ܫU)Jٚ%\*ǪOcWdQHM+.`:s׭IBRUqLxpF >իmT fW­-vw?\Du‹ mOWmO|85qK\z /?'km(d߷4)bjC (yCTAtڇ2uojm:2 ZRsN2㖷Ia25NlΤ99->Q"˦mUp X) *? r9Ʒ8}\0CO^&zrz!Q~)SBR bԋI2@QSbV鐯*JbJfhh\PX[ )烁+hvjcVV@3S0aʧSRi@mqpMAް1X/z;w?]kM-ks R(ΫuKqW=4 *!/`9'5_|4\ *ˬ:sGi-ɪ]أ\J]Z4m@Gh'#Ȥ@88,7ٻUZtq-Ȋ1F5c -N3!)q9 W <%*MjnvTA C^u ǰ c@uClw/Vg3.]Vrۓ'+z2Ӹ϶$tCfe8ښҩUi~/|SyRNFJHϡI^4~6wtSy ZO1;i".LFa! lG+% h+-sO(Ϩx8 VG~e"w]ernjw6Pǰ:8Fm C*aq:h ߨphj}=) 9H}4E3"Q"*/6S |?9:jR)'HR~ijl!9BH@'Kw tܤاPT'c]%Ѫr:MMztm]AqJTqH_vuۣ0TU}5* K?3YϾqθV`+ࣺҋQT (ex%gWsj[ϪC!XSRv^2p_gԉJbtJڇA>, {jDjsUOPtK͂ Gn5|˃o!N1Ê^;JSn#E(J48JB]=i' 9@sۄSkL31%YNҔ\@3fUQ%n-!IVC9=%lu= S@G iO%9s>bmu:I&9ϧ=atziՖ@Ϲ~ZbGF(y'ki  eҲ̴!۝`TY|JujW`;l45]3_IHH&"\dA>RH 'A9֝qq-"N- ط$,mϔd8])տO+[IR1@'BEJPZm%2lPvD#nyMOD6Z4g:bԡJ[uX,4X-ʫwQȧE\ْˍRHo=KRèU޺wϪJt eY*'I)`g-y pM& *ɣ[rr-Gq]4R /ZWp*WH#\K~֡3"Z=ENZS#nrBy~ԺcWnZZ#Ÿz$@T۶R-d.OT]}bMڰRr Zeb~U#=iȬ4aHi%$= BTkͫqヷ8}1 |DpRP2Iɴn..1$2~%dvΆ(6U /ֈR0>ukݭ:c_`߿us!Vպ4A ?'knݩ6JeG!{vdPǮԻ:ݤEѠ'I* `HM![ܔI-RDtBՂJ}'a[mYk/]n$`熒Y퓍"pWTVeRJIPlDqS CRg`8 -s~)-V۪Lo  Llx[}0cC߫_vRPI9۸d-MMU\jV'0^~\&kz=`۔}בEjLm3KrqI+nT:aYfz!YAi!KQޒ0s]X:bȤT*̖*p@zn?54-Ԛ+q|"BvCk7ИFi06 @4qZMR@>tDɩ^A닪U T!0iq,(1[zM_RhԲh* OmAU5bb[9Q1{(R@] M]KeM1np(@/+^N5eȵb8\bݦ!D`oCgE2h4*0OozsQ5cmD,GQ;BGvnԷ/%-J8pcўwJ,wt˞E%h5VkÎ+ʞݾzu5u|t(SH2({he9;dt͸T̩ĞܖKϪ՟;ҋzZҩ|Vá '\Y:lMalIae[XJpucTǞM v 'w>Sm:B >P1?bUCs”IeW$xQ%-ԗIK 9׾54UBfUYKB O/nj ^Ԯ5ظo)(/pVG9?.K%c[6*c鮴}4*mKBU.I?wSdT~x]L> ~)ڝ9'[PiJeVBU$*%S`1%Qތ[ ,qPG:URmP C|G >L#v;a6Pۃ d<;d4WD>:Dʛ;R K_Q[ɴTN%,]KK%>㲠#mCʛ3 :{,qbLJKQw lI{3h+QdF3Ǘ.yUoBRZĆmڋ&9Laxǜy9-:SZԪ%V\T|*x8ݸ{2xօԾOUG?.ZiKdM+)U?r@t=V&5JD9 ^ZJPHHlI[`oSh P HƘTs:#Y/7!n(H q^b%2I#?'.yF]Gs'56e*5.l໐~N]F)5F©uBT*H!ܞ<^d{sZ$hJ|?[$%d6x{+|׺VoAl9"9 'whz?N(2s]APKas%$F9Y这~ I4SH Z9J6I'Ӝknh-J5V)ဓP{tZcI%I+? Rm15=iz%WbX5<*.[9# sG}O) RVFQR={uCBRVe7mVFypXR{[:ZjBR=ƹ^ӠD4 r-mػw !$m=s] xMFЅૺBo`l5ujKG23lc:,Z[=?6si-r(I(E"6)^l )QAY [V^ʚ,2 ~;OM}qD{iq]'ᦾ0RJI8m>ڰÎS)4k(VZGb VT4b7:&>AJRGqĻQ16'-YIg&m@JiRCH|g'.^wݤRY J-IҹϳRR. i$^N}- hlʖ6#iϏ#69)-ǔ/x r8Af'OﵱTGT IHn=֒R'uMW"6RTՐeHkuiI%ĕc? uWRںqFCmkL)4[h8霤~cL:U'2Hb<unBFIgK 2En`@QRP(퓑jעԵn!.pՁ4{EMJC2D7”J#r0U6­MbWt)KJ68N4<"{ njjh',7:؇J[eUH*B^N>Z50}{ԬHfII Vv{WSS\t۔i@-RlHQJ H*#1iKt}9GY)Hg w=~Zꥌ z+E.dND^{7r3F˴ fύ4NH%@QQxή5=Nz=ִ)p]>KQ478 JG̝*۴.5*qÉ>'!Wz.~tu.KX x۰Io ڴp&C)* $'?.O/ۗLծBң!>޽?^=g6jv(H/,[{J'w=AҗSSSSSSS_m8]CB}LJ@ڔR.q_i-|R1NG9_ 6g?Î14;r6mBlj9*j\ %g J%j FzuL@2=,Z-V)FW6 LEEuiMM㐮s\2|ǢLa$2q%*I`[!RD$g2O鯝tٻUZtQz :z\vR!$., 9Nk5c!W (%A%N3zg9:: 2pzysXrd?dUcˋ)D{t#wգ]Y@3His [!Ԝ``$)$yzMjT(61P@S,% ԃ> b%̸ǟ] f]6LFY@K#f3|'\mÿm1\3j/OLJR~&,%iPV3#uGԊ⽦Ui}1aV8Nme4m](xR.qНɹ.~;U$w帥yYSh 9_xqh/1??<~Z7{I2S{R$$MbG@,t*-j~Gzwhϩe#O|E+$;uCKۢәmIE!Jrp~zim$#Km G.lxU횭Fgx/.d$t։ѻu豫6M>LC"I¤#U/mKwuUlyY qai+ 'r].Ӑ\)YKRUʛQ}tqST%]~euH JF RqgXt"622[ڰN=4֡ttZTJS|8($g9ƚm4-KmmJP0=ަ]CYWUWʕʌ+BT 5VjUbO3k8 O H0>zir.zZ.IKmPF1A0HUaUJ#DmՎ_Vݜ }frFWmBi )l?]l_镾- rp ~@h\{:QR1j-֡eĜcbՁؑAtΨt&.RBà6$sP8$v>nKsUhrHܟszk%KfRd ^%I ^5J4%PRЌ}:;+zlv5>9DR\;;H$1ߜδY@[*Iyĵ{ SܢGb4냩ԤWcUq}(R^i J0sێ~GM āaRω`Ҳ|U#}JB~;T ^ds{qvD&0!7gq}:JI!I# FoLetdҦK;#ۻt%ЪR+}+R2 )ro%=#>jHqr|J*JQ֓mn2+5eg2kqQdč<9[ZV[sƐ0A'vsp88lπ9) eۉI?ۮ~ޮX֕b˹QQI[PVǧF0ȱ ?IWi>d5!.>-# C\ߝKî 0Sq|6ʲ 8jչmSr"0czך@]( @٠]Njm)(QeJHHRHT6C .hI c!>QV&ڊԪaCIp p0'{bF찡̈g,)'!Kiԕ'?>4yjg\.rY-4ĨJ|m:djjijk;u*R~ 3>z@emEHm%Czj趢]UȖ+XQTGj8''*4AX ir W(ZFOsӞ̝*VnJyq!jA6A4!PT^qG<]YKb.-1q/##ѻzVJ=DTS6N@9'X##[eMښ$AR֬n^%<g!6ֺ*vUFҵŧDK) wHY%|2җWu "!˪K!5L'

Gyl < j=Я$< "T[#߼KTd8 m Q iNdIG&51I ZE5tOTl>oF Tw6Cѵ\!&+Mx(o4?%1$?2yQ]9=C nׇ#䨧>T7x>)d+ZM-HZWLdܞ [|#-gVJfOx8<)$%?x3H$g٪"*z/svh+1eY`$<ȴ~G? ,҃C:-Ɋ}Lk4]}kn'ٳuL5k| ya`s56s3f M{%v5?Z[ NpeHeh?|j|#o/lyo#SlE"j9uXr(L3\L6NTi3%3/:gq>? 'G;DXű7$G{߶7 ] $ҨH J9bL)$'ճ99f.djW~WZE[5Y[.C]'r{ _j 9CcCMeLs+PU:@Ie4o\+S͛ \j<A@Zt6h@5="6B'4gF FoPnz'mj&ԘIoV6zƷ*PAݞS8ŲMI86!c+~L+3J 00Bi~sL.ˎG[<^i_X "gjth9YV_Gѫ%+vOj)=很A 5?$ȳs,Oi@J? Oh$I;T84K(ZB)>xH ˎ8}؞yq5Y3yš`S{yԶpq0szv|_咡}]~NS+rf+Iz\k9t3pɨ>=Pk]dדL%0<;lfdqEj/d&y5x=4)@SB%4E/ci(2̮W<7u&]32AEgMt\^" IDATƟ C.< 3ȘAhz#"PYwgHr>Wǭw  -d\@P`@E OLܺ/5"c:.C*QC:Fd>iFz4s> 0n}m. V,ao/  Uj, A9s/2 \H%>$f4$s6ϓTBi+6c40.%(M&97ܗ,y %g;١$MfQ9{/][nt~N_#{K NP`y6]~rݤRZgP$#Br9_5-(`@@ǥr"uҫ%Vm[ko+Pŝ=utz0܃_ %%G6'ČsJF{*ʞߦ{C$rw[Mh)9??(5}}d5t.Dl"ɧΞ p<} hb y#ʆĒвrt_iPu +YIfKGu I\ y޼_@ gG;X3@Qloj1{uۀ/(D.D<|Op L[I$[ASO7)EG[Lěe1D]AdsvvlW%Z9xz(oD5X&K;xZي0?s!VJ/I$gxed;멡;I~.6KQXHAA!їy#'u.@yH,ʢNY6s^оw?n표kh| ta鮆egwP.M$los;`q4D12ZqqFZCgs;?zىj}m4ʔoi<αS"ąo$g<\wI $YQ~$(}Hǻ76ʏ$kDZ Y$q -{ ,J=8֞kZae߆eʂ,+ڭ DP|5 xD& :%^ AGsZ:'6&r B\C? p HD{>0 ;ʍ6ʁ mtͺ ~ϕtw%Lٜ 47mANٝn< @c:+ %oUv=~>6H;:;X~xxx \I>ZC`hOCK6 t/7I\;5vEz}+x ˆP NX-Pɢ5?S)1Q++oߗi5,\fQf4`b-^(kТ7_=͓}4F۪ K/y"Yx.ow0w=`r4e8PfbO@~!2td5mT ][XUpO @dC#5@t &ɡm^+So6LbEْ$#chӪUHrz۷mܱm; 16 WjS d&RFdOu @h-Tr8owm^W"}GJLAjސN۷!%J$ɴ|z;j%fm=EXlliz9AkJ_ʷ~ r8|!~o?R]e7{5U~LHQ]|O1Z3yvǽ[7*> d;  o&x*>]3%vidmMt' :߬W((ҥ>V\ׇ"$*ThKb.?XQ9;Ը!yl|:@j>CvPjU9Ba0͖mUt>*VPX{pRҒ342$SR$BWaۅowVw'[~\%,(]z:Wɧ)Tn@WV{ޗd?s7Kx69Ksw_( jVZ/tƊi]O+5*_H|&$ͦT)DۻMoew&>YZ`WL3S8 (ȮMNQu 5y?k\)?vM^G1VQ wUF^%[6ty+/&ɸf2-B.%39%䮸Gըku)wws2dDҞ[Ƚ9i&n3Z9+5}O)Erh>cuLp;5=%W;U fbMlKaT#8CroZ[b?/>;ΨF> ÿIފ=CFytڅbݫ8ѺۉY'^{ m?JJΐT2egJ6ː|wq](LК5"*x/P(PЅ> hzHgfjnTW$;Q)?#OW|`~{ i÷tۂLi@X#Q42]4iƭ!@aN{X@Dc̺7uZM&q$픯y*%%MR<j f:;}6xVu>΅_[I25Y}O/\:"I+;䞷RKf6uoGg772%0ɔ0yLoer2iRj %I؞Ad'4vy.H2*t?idɒ%gn6nsgϞˊ+ombfJ]./e8p횁[r:nhK68(  8纯gzQRz- v6>r+ ÒeO¥w=$ %J4XQֿ(DZrEf9(9TPAI%;*i"i.^di4(Ȥf6 p2҂xK|71bGkt(TǒСIƍ1uT7{#/SE_8E>  r^%NYLU;dՒiQ'wX`<>Ov:p6B xGz?ɑS'N~w|?~ȑ#N1QG;Nԙcyy; T9wGe_C&05gw; ) y2Ry*hz9h)R%-$"hyn[ A*.uo|F-`ܚT M->ٴ@ʕ+W)V rQ 0jq@=jh6rڠZ"%iҩF2DwR xa`pd?@54PvI!I^6;96ld$hjG=gC[#MiFb%Wc?7eLOUGVW^zJ2%υ{ gNw*D\YՈ<$eJYq삯Md(H^LxBb4^uFqFG]s!0_e(~%s@N=:..G qqqqqdܫ7iYWdlˌ…wqfb"W=N/ $+D2j4AL_cD ŷW=r煸C98 @!/tT>h2ZY4"I?o8dr|=dT9=֒RI>[>C8J[{ܟ×>Jd@90Ά˔J=Dq)w@H SOz66u\\Ҫߐq gE^.'KGdږآu?/FjK Th!y Winy}%@cjyǞ 5o=>᭛EAa@ @xDNyG#.b.wp3֮X|˗zK6ɫ+\e *8_Q,,gJ}\ ,lĎ[ff;ɞ@uEoR?} { (=h["-!$(ڷGH&*-|XY`X AqKĐSgv)jݥ>![Z hX"[eXZA;?ScW-9)SW=6 xOz4 QNh'd(Rq>RH䥗Xfj㥌+X_<ߵl՚du>Wje܍p',8N:LYzN5 i3lb;(Z+'VEd{g+)u?]>n&&6<kXL4Us RRe5HL0dHD_8Qt*qN:T-W%SN24*H+%tj"͢1bdc!{U"{V% qby_FOO>/2PHv @Dso=%\ʗƱ*m6~M4f"f0^}ƮȜ.yLmyFz_2RI&Ki@!jsX ( ˁfOU#tK߁NζH +IMK32~OOͩG$ )3UyPkfYlI}*Kl ] ?NܿʯmžWwa&gZP.[Jjj9jA$x)Ѿ=ME56;.ׯ=4ZW31Ë쎻%sJgK9eMoXN OU-I%9M"M"%BVbegg>SarccRNIWx.|`s8]oi_/Y^꒞5H>0bI&TԕN@3#W,XFĠ49cˁ? #@#ī`0pTPI1 ^9=KL_V$/d#^J_WChA|yl۶=lWr]㗘RXUv"Y{ `>`;U4Kd3hwd$&6SymhUbh&M g2|:>n_|I<*>Ya6UZ4Pb)6pE}5m_|mRTMz_I>'2M.Y{*!  ؕk>k{!R_nEУʟ,\h5m=;281\Dk@2? . bB0:߂.h5pz}#= &Wo|iLIR 2{*Dt7D6Ӭc9El&֖Lvmf4'c.W?TIVE5ˇy"/"& $}T bXFޗz+ڕUkO^:)c(̴p2$ a{@}E묽 w'8l%${1ˆY%b9n s8Fvb82m.<Em»,1w+6l(w;unԠ> 8]L>>$}m vw szkOʠ9G#8>#Ȝ0@;l޳q

eU05PŞIVL$;-wՔDθC{:o$ 7Y&֝ ֆg|lX6=S|J[.F +H^i`Y, [P?oj와i`O!RH n}kdgR8 r.9ϕ$ W5?^4_VwM$+t-:vg^R2%JfSI>t;^ÞWehzގ]7]v\XѺ&UGlO^lE+}!M&QÏE5d6_q)e0q$2 %^€{$!kN[FTIל:NXT0-Wbo[I=w_~m^]*(h0) K^JI߾Velƒm~{^w4^wHl=ǭ_5ՀBDZZHHPS2'Q"ι[Kj)P{_3JǓ2FJ*K^raT-o0 -Z rY4η_.]p.Sqv"yԹ@dZ@jJ7|A33HJdL!IB$>)4ſk?Dnf-`B4-© IDATw1@e^'fNP $H^@{NdĤyr$d#% GK6AE+:\um g,~dIҶ#(cqx2/A\]IU~.^, V!z 1M{ǏX1tuQ7$3JiDHog]T b%,|;窤h.h`~I80~˯'!H1C ~6 Tt y9D|3N =Z[}4RX`ӲPTTҘc"=! ;[*Ҩ`5`@!YC]zxᘹgo@[ ő9'L Lg].S֒ܕl-k{V\,fUUO*Gp!v0ʹqct&1)1nxj$/0=[$s=d<ʤM$8yz_m o?kݰS%n e@uGQ}wj;HQޛJW@A:  (D#JINB -$[wfwv A73wS]RF?ƫ~&CY $9j}:{x.!RT>)G:Hm>Z J)xV&KV&esGH"_$-|~>(L<[&<ͽ!r^G3.{#m&N\i@~wɺpZ]>`gopT} @J s}"[{?We+ye˖-8b1̨\ &K(+R4[ oz~}^}drVtd6o4Ǧmlor~<.']B@'eD  dCQ%ko7D.Jpc="/N4x ^I=,e=,Y `/B[@D A~o\ ~m%Jkt? =:K njvE%HK 7 HwُirI/(@!w_J#Ӝԓ\^k -A2.N)4r /Zx +t:,6YJ^O# T1/XXFvoNJJNs]FLK67"g1d3}2M什-(<8CkL;ЪbϢ~5 ȠKMI~"d#҆j8JcD}R ĩϦM7^O/r?h'O'HzC? 2R@*3]YvAAX#M?HA:tKWת_C5x-^k#vP  N>8i0409 gJNs!`\ CFF0;XJ٬(b2I .]ٻl 9$~3hBv-k Jܕ)7EM֒LROvL8J+W\nymXYgwJw<PcB;hHM~3U?iBdQTE>N"o~}J>!bU"}r9=ye4(5{Xy\&3/x LU@GBk^~ b xؘ!@VÌ0M8;&{"zNguEݿuN&8/c<o"٢k(0OV^!d\ @EB%-YW*t4K2{!HF-녲QTIȹOnHi(pՅ%9r`Μ%#͛nKhE&s;:"+ ܧTI^`p_?6s<$ouA*ZH`=!$-IT[1}|PPzT|#7քq{"<~3'|X[s< rۭ]6l>H0:G`q]=W\3 Pg@РnjSIW!r!-@';A)M G,ڐcYA镤z|{[rGȫW S* ǥ#\D\2By.0FgSdc('$?) 4s(ܣua~e7v>0}50)XO6htܗ1]=Z?VL6#6<Zkt,ВdG E"mMu:[kobtQoAAs ]zu^qX0i>͒LP& hQž_k:vナc=.UTԺ&W&hV{ȹnW.-hVG$, C(wI2}/~n xQ>xJ;f0Jl lcͰj6KdZ;P'<̀rÇ:';Omw2*FxҰs:3&ɤBH),V?@2F_/mӠF)m}QeK*I>xd+qwq(4q6"@ {#xZrqa7L0Y q|X|.{c:7|NWQ6wL{68Lp4#f` rOMw>%+ ȫy0֟ @_AkG/d8_ӟ+m)wpqL?uF3!)0< 3 PбX#}=jBdv1.W\}Ș*p9GzNIVe(''$B}d Pׁ.gLWٟ2/u6V1_"[U=3Һr"|F  O0A$Ӡ&) m!(ΤΤۓUpj>|P|&kUgwp8l俺p{H|\0Ɇg" εЖT_zeW cPn2l|g$wiV&yA|dQk%+ f()ΐ vq5ЛwCaQ0+Ї7'B{nDz; J|T;7t?v%PPHj  u0kLvl<'n޸}r"*GOS.769}?OMB'J0e_LoB$X ,\.q$#;+59''6# S mb3j;/}L?N_m ds>!x'N$XDȋ٘hN.-4xe"H,}|-yi3 .s@=3U`k ;QB*)c0*|*es- x`J4?ỎFNr_[A^XV$)Pp+^d/tRlȃVd6ZUra`-e$H|>x`Vu0vA|&b% r!`m3mPy% S]w| 0ξ}" *IKeɞA`LJ~[$%}'A3‚Q^A(йF" dy7򣺅 L;*Ds"?Lh:9nr@ DRQ2ЯQ/l/L+ݙWK#xzz^l7YC„4maRP;v.2EwHSU,&UjMM(i9ݻ.uz7Uw _Ao KZѻMBE5YP=@ó_A`pG}|v zCɸ5 :58:t]blu,v~5v˗.*5f֫mo-nW@Ra m#m<z۟;#;d{ݚuR۲jq]kݤZQ4_Ys seS [<p$zhԁTQWֵ\!H 6.#hO괛^by(p J cQf Wk:d5U(kVTńq!OT|$/Yp5y9F"pۼt`xWci + +nL4z(:}!Ɠuwl_s$]vQOO@bo|2褃~쌷eϖ}A8N>@2+d,N$vGPVi3g7#`<@ -8AuAd\ԫup?~ZPT*YN qZ!nq ;@*> Nx)\\x~,!VЩD r\ `EFv1K=eKL;gh ;$„d?$P99X@G@D:_cmI xƵ*Ө8>U0#ZyJvq1dr:\,,-JA B'Სԕ[wy#t@8|`Qt:IA=A`'9aR;)Hp8 ڎu0*X׀vr]~ LfRUH^]\pLFZeծT=U.EVM <0큨S(,/Dpg|;j?3}IU~HJs+%ɔF  |*G3qy y%*h^/,WI{HrotbA%K慩TaZ}7UA<{=$->ۡ Y@o[=ҩK;'e*t8ǃr\IAߌ_k@\ _"`|>J7Ȫ~}4 #Qpw$j2?e]kl~= @ee߳]-Ew4~Pt:i3&,ȕ?n.O ɟoз](Toa+v'ۍ2~gt $;B>̇n)T&6nԌx'"Q~O~CQ Pɓ m IDATʺq5֧ԞK?PK)BHjz@$)Ti#WHYtr "7PD d#Po6CFaTc;GTFx5Dı>P$[Ly["H [}AGS>6eK؄gA1n,saěNQ[p9>k#(8=!m_:j'}w=3c%¨`"z"J*sG6 &Z.ds$wF?P8G}xSk EaXE1_:_ýd*%7D*@BR&겙@ˬw=Q:G |rv'])A5o.Rrvu{{p BƐNs-!$悤e d-D.c1Fk Ⱦx$rCT&x4NdQ[D8 R&i`{ц6LB,NR+j1%+!;d*ĸ :_!9Q]Z#{>(>Ag= ':0q~{G$k@kka#=įٷqgUūI; M2jr' 9Y,'[_8j!eU˖$Q^Zp1?;k @ $P&M9(/9|a1hZg*!i o0vp5 @āˏ< :gBqS8J0P~c1=er`'sȟL>.))5fKk@$-/lX Tz>/g|-`/fT`24^Dtu7NGPZ R#3miZ$ҎR|i1/p=o{A=YlQw, ձvx`Mnf p2 R@ v>ҡl3W]h\ r.װcY~ @1@v|={ݗ߭gn,8G38#)#Œic=3-T{7E`cʲP̧%̓ 3@Y0_h3RH-tQH=b#Wu  A&pNT# cI=P%1BQ)IڹՊr*ݖrguo`3A'')s :挡LhwJHD_1Sq/ ̅ =zRvPmmEҊ0 + f7 UK7 ZkZX4yE9_`b{ ,[-\\Y%=}U.| hV.LEͷ¬(+NX\ 9P:?:lT^@} J/׆5!+`(R1${ۚBJ0Q `R?=`+#ڸu7.SM W&`2m2f@gg6ҁ-C-k#`7ؘ%CZ|-3[tǥ8 [An955T5"Lhba {Ary_%(e' @[ݦNOhK t@KD-r`YY^:g9(U yQė/-<x-m- ~(Ux`^۫+LAhLtPUd[ ?3lB ,X0wYаݖFϮz\D&0S*yf|ėGNG;wDH'/FYZ)^iͲӶI U@pV i#ĥze-2{qGG'M˵}< Mb}eSWF:?哩tIh 홰xr/U8`|})m>mFC^<=NSv@]JaTɞMPWWB@@aq6{C&P ͋~?dzb:=PYT iB%ˡ3€@]oW|ʕ$o`5R(R/ne/_tҥsG6OhSSӓ4:\|zM /\h oW'Smi$/ T[=Q'f0NA~kq^9Ai/w@t6~ViyI *'^Ϗh'NvBS3]>&įPP r36vDy9'~rRxIQ2!{ @AT40iפ;gu6-;0/@f)f;I:S}1W 8߅ -j_k$G)aٳ:!v!n @+خxi6N@9揆yd~\a\O#kg*tu+H-5bW;Lq Zm^Q~y.;b٦=I7z;LZ75ZWTF RWCJ_6قcBE7m37Z jo!8yH8 D?Nt>Zs;@?:B ]Hc4Sf4uJA!yC2KkTnxHBPk^5n䨎t#Q0e$[=8&zB;5o@G-\=]"Zٳq֧HAn}A çrODNV]$yf }4q2!ZI#ehyP:enP%Wr[Y +~@4ϺGZQ10$ OԊW ;A:l9_@C-T n/o]g? О輜 QIGwݙ@˖2iƱ@IELA}f˥7ych~ QNHd 5ng]=Y6`8ł,$:)|iPrԨQmaB/MI},q'\Ckփ|U)&iR5$MuZg>HoLjo}ߵEI T{ܟáTm{ B §S7>1)\OcGsQ!cyB!_A[FMQ,I##}E&ORe+KltC{-U|jMOݜ0mNz! Aw0.Dz G51D€7.N/sgp2j5Z_-CDZ_|1]ߡ>GeIqwi8r嘼ݲob2藓Àf)(9θrpvf,֍[zzƘrF^cG /4`m G: Cg–'G\ }Q _|4 a<6-;5lVz% v AH[x.K搩^>|n7 @݀L+`:uvj[qȽ2N]jTX0J 6G2R7` FԲFFb Q>5G_\ x0Sѷ̰ Qt!@0x.Gt ^'>?qvKmqbcCAr^n2<ݮ ,Ag(bH'qs2-!B[JJg Q/XhY?x0Pj2߂Oy9ܾߌBIq봞0[/ D;<?xPcYAGߢq04R2TBBf]=@SC큟-uRn ?E6_@7» D%^{W[Curok bqt!-ݗSB(sѯDo j ؑf@W̘EGqu@` 89Mq~Db M,v7WE!ݧ GԊ:3K(x+]^MF* Yc=)T̮/8PTs!~ŤmByCu w Z`|BJqۀjB wq=Huf"ix1߬x? g3^ $<2N`V͛/Ja3ch fI x{JjBz-ry@G.ն__$Wϐ L!mXhr?s<_%Ƒ=|%NQo1zXBBfƍ@RW~scR|u~X@)V#7ҁt K;,7jnPxLRk$lNk p}8xgJ3A5UJ8J䀿~O~G{J\F󀎯j=oN=Fo p: \po5 ÏHk(@4hxAEKu j7c5 KGdNg?"=GY ,ת~3,_z0WA, 5?sn#ZZg/O(p=E5sn(OH+\LOYvr`Bv߃{/Z jgd2 ?=_0@ھRڝ/qt "u]>9gj~h_YӗpO{R  bq\ _t\^H'2?*QPvթ25mmKIΤ熴(ۮt":) 1޵ͰZ,/G<Ȉ'pM_~ytf:)xs(I:FWD2ՅP?aylm;H"ѷ-d-[N,|(,F~.0jQ%K% r]bo)cq8q_XMn~݀2mwqTF@!ȸ(\@ݞ2tW׹_IrXnA#`Rdޓb21V//x:Eej4ܕǷ2@\8c}Fε+ABw%Yi+ٺހk<דB}F&gK Y7}wf!]W V(Lbf'ӿWŜU$B38N@Ɖ& d OtsC"Y \le6<'wfIL%VCw~>+(XΔe/\lw4+՗! 'zANL=n=nMz#Y@ 9\|D~臂y\W#oOwEȪ!:X.޵p*T?a5~z=Ƌ_N.zI?${yQpi(zuUHfi$8 thÓ$ AֺѨk[8-& 4y]xry%v/%E0EF\Um󓉏&@!CI pW-U14{-x*kCYW ґ7*/1k惚qӵt͂gvH]Ćˌm$sv[pCb,I^/|Αt\a2y (TwwN@y-}С 깊G% sy sH$'̆N὚r`~6/T " @0-, ԾeڝrV} Yif#?j%RyO\vJo;ݬ]mUhZ]_nh.yE=U:;-@;1HaI8{hW#sgavKTWw◪*>ٰ'EC-͋G734~t"T$Wٶy)QI-[nɮfStZ: ARhrÑ@hW13:QR/# *tLIʼnpP{x!DEgAo7Byj t& p(* HYf:(zU4#YwWgtzѯn@@Ұ{Śoln@ H ՠ@5' 0;J̛RYv8aWqP7[AM7!d1*a}H Ȟw^{A/&͸cJ~_okh/- |h_h\5yG&ܳcUIrКO5Lh roJ1c>yTx@W@{@^ޘڍI\e5kֹ^PyӿguE0 0tIMr#ror t}0~z'i!ocI<|Ɍ "F0S3]Km̼Zq3;2PRx觭iơD%JUDQl;69CM= IDATdm(`u=w2O6ԩ_CfQH^{ ɻvg `FpIeH=)7<,'LKFYg;*E nildd ^F>$#*/T=Mz BqKl*q8ֈ/ (LLY'a&o_^O* լFfs*t+0cuߓeOeN&bd8L#/:nCẅ4%u1CwK;H>?h `H B(C$axSKTe X DqRXu0kf<;Ҕ #wz  ]%p O>|:+7O-Na(8&.$UqPvI*,GA ݼg08{}lpVL\t1 BW ڦA7KrWLj E1IJi>ҳCrHAD?1 jtJl |+ȳAASnyGZAA]< n0oa{5=_u~r ޴+7`bx%dYw@J}H+?x %^3a#9]Ċof4C8"Iu-| OV14OͭKǨ+o)7|˴ٕ^_6ihrȌƟKe.K=C˻ 0'L/@1h cM'sfWy.J@H!b *lw 249 :T"G@&ZT2!D".ڽ'4I$7pK0'w㧬']Ma;bM~t6E$ p `=cǎh+@tZۣy &z)f~|ab**b|/WތVG2"H۹Foln#KƏ\Qȱe+dd :hDn/Oë q1=61aϡ5 lv|,pn/ t8[=tC5Ln,(AͪO:s:DūXC |{li'b9?c2Țġi+0P1/0iq/ڟP`$w'U3X~'EI|+,tW( S7Rh$ h`oA<$:$y5ՀMYx L0O:ǭ@,_[I? ' Q7t,FN:;xs1ϳ?F̸'iUF W-Jǯ<#iY$ "*@~t$fvb\ jodžopd@K7k`:O/A8X{a$L͊ <T20;tN#pU4{1 _z2F7'p@`Vx|13'rvB:xcNo) \yxNRp%ъWIڻ(fMI)~ (F#JI(~ xUW4"͆xAH&%!M23cfd{??Ι9gyyy[V▿ $ woxܷD)3k#ޤuy*܎_ Fgnw7߬rn{/YtBuhy,Wv8#auO ];WoT,\,K>^UTbE?0UYVeʔ?INxM ɿw G J +=ؔ; &'4:IL³w+Msiy!ISI GA4{%`#:܏- MBrf++U*.'^0N-ђB*ԈsN);$,hKlnHfG`Lg`);ۥ^p1MT1~> _B *2&]պd̀r(ֳRL;gYԠE5,ISΤ2.ٱ@qE:u6vV ;ԺݝQ6b %a5ӨO)f Z~0`RP,0DS Uxw4WǷJ9/pJό\F? BCu'{m,`5=}d0ٸ^@ ~PGTH$eˢGF`5[5IAg{.3S@ǵOF 2!TYJr :#rBb1$u\-:AN䫘~YtMЃO(|IQjDxE >NI*@^R PeV+:Ef3KRRǻ_PX|$p*mj @&|0y;`?ZFWO.>sQCtTza+x]}=*@z+S4fpճ2:o}wt1zr5HY P9 unG_gU EWGAnj;v]ot~=pMWwՁ:~= ރevszi0iN3:Ⱥ^Lz~y(($e'>U}G lI75ɪ0|~Uyun8؋ XKOYg^%(+(KynR3H)C9KEpg8MC o&dH`Ź d<|v3nA2جoHK[͛215#۴wڪhKp!tĀʬBTRspEX Kzb%b}dG +N?d.whVRa@GcWK)µ(u)/F=0:ƶ;KypNuj?l#   rСr'sjV##ߛ"+I2h,Skυ1J،es( zt,PTLc_rl9*cV k1wBj(ScEm. lAgFjnXvv.fkM!Tya;&OD(y4.' C'f/F:P\QO60Jdf(ӯs j%ǫ^F@kAU/ڧinwG[lq>Tߍ'oƛXbi?؍W|)-\ )W[1}}%j҉Z?g:&p=aN+5 "J"ɽz% (sazNӱL[2T+rr.[ַ留by㋰^nSY/ $D9J4<䅻Dc0@g-52iSNr6'BN:` "8@U_?XW?"4$N8\U7++/^**[3ǟح46,SiuAFxb2dϮD猯{VIzW4[X*@gLXzԢ"IcmZqdٔ״xrX8|Qz'oadSI&1ZvEpzW Y@byyϮC<-hksqA')iHTc_vzܰ)_tnKFG'Ə)-OmT3vCoŎHvU7`DB \u|5ehFw`otQ%^)iyI@xzJc$SP( N eەh&r !xzYZdQ$Z@!$BUh,<@y¬ \Y9(ȲRM'?yTxoQkUgp`KbEo~I!B. n4 >jekW7d4v <,QEWノ1< 9s\/hw7JuDiպ5`HB^eHTp5]Z'G }Ri?6D,JoK3x,_Up5_]'6QCƷ)_`ԌKSn*7(x_ #define i18n_libdrilbo_COULD_NOT_OPEN_X11 0 extern z_ucs libdrilbo_module_name[]; #endif /* libdrilbo_locales_h_INCLUDED */ fizmo-0.7.10/libdrilbo/src/locales/fr_FR/libdrilbo_i18n.txt000644 000765 000024 00000000024 12606024321 024363 0ustar00chrenderstaff000000 000000 Could not open X11. fizmo-0.7.10/libdrilbo/src/locales/en_US/libdrilbo_i18n.txt000644 000765 000024 00000000024 12606024321 024376 0ustar00chrenderstaff000000 000000 Could not open X11. fizmo-0.7.10/libdrilbo/src/locales/de_DE/libdrilbo_i18n.txt000644 000765 000024 00000000041 12606024321 024324 0ustar00chrenderstaff000000 000000 X11 kann nicht geöffnet werden. fizmo-0.7.10/libdrilbo/src/drilbo/drilbo-jpeg.c000644 000765 000024 00000015046 12606024321 022230 0ustar00chrenderstaff000000 000000 /* drilbo-jpeg.c * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef drilbo_jpeg_c_INCLUDED #define drilbo_jpeg_c_INCLUDED #include #include #include #include #include #include "drilbo.h" #include "drilbo-jpeg.h" z_image* read_zimage_from_jpeg(z_file *in) { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; int row_buf_size; JSAMPARRAY row_buf; JSAMPROW jsamplerow; z_image *result; uint8_t *img_data, *img_data_ptr; unsigned int i; int j; int sample_index; int number_of_channels; size_t len; int result_image_type; cinfo.err = jpeg_std_error(&jerr); //jerr.error_exit = my_error_exit; jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, fsi->get_stdio_stream(in)); jpeg_read_header(&cinfo, TRUE); if (cinfo.out_color_space == JCS_RGB) { number_of_channels = 3; result_image_type = DRILBO_IMAGE_TYPE_RGB; } else if (cinfo.out_color_space == JCS_GRAYSCALE) { number_of_channels = 1; result_image_type = DRILBO_IMAGE_TYPE_GRAYSCALE; } else if (cinfo.out_color_space == JCS_YCbCr) { /* R = Y + 1.40200 * Cr G = Y - 0.34414 * Cb - 0.71414 * Cr B = Y + 1.77200 * Cb Obsolete: yCbCr to RGB R = Cr * ( 2-2*C_red) + Y; B =Cb * (2-2*C_blue) + Y; G = (Y - C_blue * B - C_red * R) / C_green; */ jpeg_destroy_decompress(&cinfo); return NULL; } else if (cinfo.out_color_space == JCS_CMYK) { jpeg_destroy_decompress(&cinfo); return NULL; } else if (cinfo.out_color_space == JCS_YCCK) { jpeg_destroy_decompress(&cinfo); return NULL; } else { jpeg_destroy_decompress(&cinfo); return NULL; } jpeg_start_decompress(&cinfo); row_buf_size = cinfo.output_width * cinfo.output_components; row_buf= (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_buf_size, 1); len = number_of_channels * cinfo.output_width * cinfo.output_height; img_data = (uint8_t*)malloc(len); img_data_ptr = img_data; while (cinfo.output_scanline < cinfo.output_height) { jpeg_read_scanlines(&cinfo, row_buf, 1); jsamplerow = row_buf[0]; for (i=0, sample_index=0; ibits_per_sample = BITS_IN_JSAMPLE; result->width = cinfo.output_width; result->height = cinfo.output_height; result->image_type = result_image_type; result->data = img_data; return result; } /* procedure RGBTOCMYK(R : byte; G : byte; B : byte; var C : byte; var M : byte; var Y : byte; var K : byte); begin C := 255 - R; M := 255 - G; Y := 255 - B; if C < M then K := C else K := M; if Y < K then K := Y; if k > 0 then begin c := c - k; m := m - k; y := y - k; end; end; */ void write_zimage_to_jpeg(z_image *image, z_file *out, int color_space) { struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; int row_buf_size; JSAMPARRAY row_buf; JSAMPROW jsamplerow; int sample_index; uint32_t i; int j; uint8_t *img_data_ptr; J_COLOR_SPACE jpeg_color_space; if (image == NULL) return; if (color_space == COLORSPACE_JCS_CMYK) return; if (color_space == COLORSPACE_JCS_YCCK) return; if (color_space == COLORSPACE_JCS_UNKNOWN) return; img_data_ptr = image->data; if ( (color_space == COLORSPACE_JCS_RGB) || (color_space == COLORSPACE_JCS_GRAYSCALE) || (color_space == COLORSPACE_JCS_YCbCr) ) { if (color_space == COLORSPACE_JCS_RGB) jpeg_color_space = JCS_RGB; else if (color_space == COLORSPACE_JCS_GRAYSCALE) jpeg_color_space = JCS_GRAYSCALE; else if (color_space == COLORSPACE_JCS_YCbCr) jpeg_color_space = JCS_YCbCr; else return; cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); jpeg_stdio_dest(&cinfo, fsi->get_stdio_stream(out)); cinfo.image_width = image->width; cinfo.image_height = image->height; if (image->image_type == DRILBO_IMAGE_TYPE_RGB) { cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; jpeg_set_defaults(&cinfo); jpeg_set_colorspace(&cinfo, jpeg_color_space); jpeg_start_compress(&cinfo, TRUE); row_buf_size = image->width * cinfo.input_components; row_buf= (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_buf_size, 1); jsamplerow = row_buf[0]; while (cinfo.next_scanline < cinfo.image_height) { //printf("%d\n", cinfo.next_scanline); for (i=0, sample_index=0; iwidth; i++) { for (j=0; j #include //#include #include "drilbo.h" #define COLORSPACE_JCS_CMYK 0 #define COLORSPACE_JCS_YCCK 1 #define COLORSPACE_JCS_UNKNOWN 2 #define COLORSPACE_JCS_RGB 3 #define COLORSPACE_JCS_GRAYSCALE 4 #define COLORSPACE_JCS_YCbCr 5 z_image* read_zimage_from_jpeg(z_file *in); void write_zimage_to_jpeg(z_image *image, z_file *out, int color_space); #endif /* drilbo_jpeg_h_INCLUDED */ fizmo-0.7.10/libdrilbo/src/drilbo/drilbo-mg1.c000644 000765 000024 00000026432 12606024321 021770 0ustar00chrenderstaff000000 000000 /* drilbo-mg1.c * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * This module is an adapted version of Mark Howell's pix2gif utility from * the ztools package version 7.3.1, available from: * http://www.ifarchive.org/if-archive/infocom/tools/ztools/ztools731.tar.gz * */ #ifndef drilbo_mg1_c_INCLUDED #define drilbo_mg1_c_INCLUDED #include #include #include #include #include "drilbo-mg1.h" #define CODE_SIZE 8 #define CODE_TABLE_SIZE 4096 #define MAX_BIT 512 /* Must be less than or equal to CODE_TABLE_SIZE */ #define PREFIX 0 #define PIXEL 1 struct mg1_header { uint8_t part; uint8_t flags; //uint16_t unknown1; uint16_t nof_images; //uint16_t unknown2; uint8_t dir_size; //uint8_t unknown3; uint16_t checksum; //uint16_t unknown4; uint16_t version; }; struct mg1_image_entry { uint16_t number; uint16_t width; uint16_t height; uint16_t flags; uint32_t data_addr; uint32_t cm_addr; }; struct mg1_color { uint8_t red; uint8_t green; uint8_t blue; }; struct mg1_colormap { uint8_t nof_colors; struct mg1_color colors[16]; }; // The colormap data for the default EGA color palette was taken from // http://en.wikipedia.org/wiki/Enhanced_Graphics_Adapter. static uint8_t ega_colormap[16][3] = { { 0, 0, 0 }, { 0, 0,170 }, { 0,170, 0 }, { 0,170,170 }, { 170, 0, 0 }, { 170, 0,170 }, { 170, 85, 0 }, // -> This is { 170,170, 0 } in pix2gif (?). { 170,170,170 }, { 85, 85, 85 }, { 85, 85,255 }, { 85,255, 85 }, { 85,255,255 }, { 255, 85, 85 }, { 255, 85,255 }, { 255,255, 85 }, { 255,255,255 } }; static short mask[16] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff }; typedef struct compress_s { short next_code; short slen; short sptr; short tlen; short tptr; } compress_t; static short code_table[CODE_TABLE_SIZE][2]; static unsigned char buffer[CODE_TABLE_SIZE]; static z_file *mg1_file = NULL; static struct mg1_header header; static struct mg1_image_entry *mg1_image_entries = NULL; static int read_byte(z_file *in, uint8_t *byte) { int data; if ((data = fsi->readchar(in)) == -1) { fsi->closefile(in); return -1; } *byte = (uint8_t)data; return 0; } static int read_word(z_file *in, uint16_t *word) { int lower, upper; if ((lower = fsi->readchar(in)) == -1) { fsi->closefile(in); return -1; } if ((upper = fsi->readchar(in)) == -1) { fsi->closefile(in); return -1; } *word = (lower & 0xff) | ((upper & 0xff) << 8); return 0; } static int read_24bit(z_file *in, uint32_t *data) { int lower, middle, upper; if ((upper = fsi->readchar(in)) == -1) { fsi->closefile(in); return -1; } if ((middle = fsi->readchar(in)) == -1) { fsi->closefile(in); return -1; } if ((lower = fsi->readchar(in)) == -1) { fsi->closefile(in); return -1; } *data = (lower & 0xff) | ((middle & 0xff) << 8) | ((upper & 0xff) << 16); return 0; } int end_mg1_graphics() { if (mg1_file != NULL) fsi->closefile(mg1_file); if (mg1_image_entries != NULL) free(mg1_image_entries); return 0; } int init_mg1_graphics(char *mg1_filename) { int image_index; struct mg1_image_entry *image; if ((mg1_file = fsi->openfile(mg1_filename, FILETYPE_DATA, FILEACCESS_READ)) == NULL) return -1; if ((read_byte(mg1_file, &header.part)) == -1) return -1; if ((read_byte(mg1_file, &header.flags)) == -1) return -1; if (fsi->setfilepos(mg1_file, 2, SEEK_CUR) == -1) { fsi->closefile(mg1_file); return -1; } if ((read_word(mg1_file, &header.nof_images)) == -1) return -1; if (fsi->setfilepos(mg1_file, 2, SEEK_CUR) == -1) { fsi->closefile(mg1_file); return -1; } if ((read_byte(mg1_file, &header.dir_size)) == -1) return -1; if (fsi->setfilepos(mg1_file, 1, SEEK_CUR) == -1) { fsi->closefile(mg1_file); return -1; } if ((read_word(mg1_file, &header.checksum)) == -1) return -1; if (fsi->setfilepos(mg1_file, 2, SEEK_CUR) == -1) { fsi->closefile(mg1_file); return -1; } if ((read_word(mg1_file, &header.version)) == -1) return -1; if ((mg1_image_entries = malloc(sizeof(struct mg1_image_entry) * header.nof_images)) == NULL) { fsi->closefile(mg1_file); return -1; } for (image_index=0; image_indexnumber)) == -1) { free(mg1_image_entries); return -1; } if ((read_word(mg1_file, &image->width)) == -1) { free(mg1_image_entries); return -1; } if ((read_word(mg1_file, &image->height)) == -1) { free(mg1_image_entries); return -1; } if ((read_word(mg1_file, &image->flags)) == -1) { free(mg1_image_entries); return -1; } if ((read_24bit(mg1_file, &image->data_addr)) == -1) { free(mg1_image_entries); return -1; } if (header.dir_size == 14) { if ((read_24bit(mg1_file, &image->cm_addr)) == -1) { free(mg1_image_entries); return -1; } } else image->cm_addr = 0; } return 0; } uint16_t get_number_of_mg1_images() { return mg1_file == NULL ? 0 : header.nof_images; } uint16_t *get_all_picture_numbers() { uint16_t *result; int image_index; if (mg1_file == NULL) return NULL; if ((result = (uint16_t*)malloc(sizeof(uint16_t) * header.nof_images)) == NULL) return NULL; for (image_index = 0; image_index < header.nof_images; image_index++) { result[image_index] = mg1_image_entries[image_index].number; } return result; } static int get_image_index_from_number(int picture_number) { int image_index; if (mg1_file == NULL) return -1; for (image_index = 0; image_index < header.nof_images; image_index++) { if (mg1_image_entries[image_index].number == picture_number) return image_index; } return -1; } static short read_code(z_file *fp, compress_t *comp, unsigned char *code_buffer) { short code, bsize, tlen, tptr; code = 0; tlen = comp->tlen; tptr = 0; while (tlen) { if (comp->slen == 0) { if ((comp->slen = fsi->readchars(code_buffer, MAX_BIT, fp)) == 0) { perror("readchars"); exit (EXIT_FAILURE); } comp->slen *= 8; comp->sptr = 0; } bsize = ((comp->sptr + 8) & ~7) - comp->sptr; bsize = (tlen > bsize) ? bsize : tlen; code |= (((unsigned int) code_buffer[comp->sptr >> 3] >> (comp->sptr & 7)) & mask[bsize]) << tptr; tlen -= bsize; tptr += bsize; comp->slen -= bsize; comp->sptr += bsize; } if ((comp->next_code == mask[comp->tlen]) && (comp->tlen < 12)) comp->tlen++; return (code); } z_image *get_picture(int picture_number) { int image_index; struct mg1_colormap colormap; struct mg1_image_entry *image; int i; uint8_t *image_data, *img_data_ptr; short code, old = 0, first, clear_code; compress_t comp; unsigned char code_buffer[CODE_TABLE_SIZE]; int pixel; z_image *result; image_index = get_image_index_from_number(picture_number); if (image_index < 0) return NULL; image = &mg1_image_entries[image_index]; for (i = 0; i < 16; i++) { colormap.colors[i].red = ega_colormap[i][0]; colormap.colors[i].green = ega_colormap[i][1]; colormap.colors[i].blue = ega_colormap[i][2]; } if (image->cm_addr != 0) { if (fsi->setfilepos(mg1_file, image->cm_addr, SEEK_SET) != 0) return NULL; if (read_byte(mg1_file, &colormap.nof_colors) == -1) return NULL; // Fix for some buggy _Arthur_ pictures. if (colormap.nof_colors > 14) colormap.nof_colors = 14; colormap.nof_colors += 2; for (i=2; iflags & 1) { colormap.colors[image->flags >> 12].red = 0; colormap.colors[image->flags >> 12].green = 0; colormap.colors[image->flags >> 12].blue = 0; //printf("Transparent color exists."); } if (fsi->setfilepos(mg1_file, image->data_addr, SEEK_SET) != 0) return NULL; if ((image_data = (uint8_t*)malloc(image->width * image->height * 3)) == NULL) return NULL; img_data_ptr = image_data; clear_code = 1 << CODE_SIZE; comp.next_code = clear_code + 2; comp.slen = 0; comp.sptr = 0; comp.tlen = CODE_SIZE + 1; comp.tptr = 0; for (i = 0; i < CODE_TABLE_SIZE; i++) { code_table[i][PREFIX] = CODE_TABLE_SIZE; code_table[i][PIXEL] = i; } for (;;) { if ((code = read_code(mg1_file, &comp, code_buffer)) == (clear_code + 1)) break; if (code == clear_code) { comp.tlen = CODE_SIZE + 1; comp.next_code = clear_code + 2; code = read_code(mg1_file, &comp, code_buffer); } else { first = (code == comp.next_code) ? old : code; while (code_table[first][PREFIX] != CODE_TABLE_SIZE) first = code_table[first][PREFIX]; code_table[comp.next_code][PREFIX] = old; code_table[comp.next_code++][PIXEL] = code_table[first][PIXEL]; } old = code; i = 0; do buffer[i++] = (unsigned char) code_table[code][PIXEL]; while ((code = code_table[code][PREFIX]) != CODE_TABLE_SIZE); do { pixel = buffer[--i]; *(img_data_ptr++) = colormap.colors[pixel].red; *(img_data_ptr++) = colormap.colors[pixel].green; *(img_data_ptr++) = colormap.colors[pixel].blue; } while (i > 0); } if ((result = (z_image*)malloc(sizeof(z_image))) == NULL) { free(image_data); return NULL; } result->bits_per_sample = 8; result->width = image->width; result->height = image->height; result->image_type = DRILBO_IMAGE_TYPE_RGB; result->data = image_data; return result; } #endif /* drilbo_mg1_c_INCLUDED */ fizmo-0.7.10/libdrilbo/src/drilbo/drilbo-mg1.h000644 000765 000024 00000003552 12606024321 021773 0ustar00chrenderstaff000000 000000 /* drilbo-mg1.h * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef drilbo_mg1_h_INCLUDED #define drilbo_mg1_h_INCLUDED #include #include #include #include "drilbo.h" int init_mg1_graphics(char *mg1_filename); uint16_t get_number_of_mg1_images(); uint16_t *get_all_picture_numbers(); z_image *get_picture(int picture_number); int end_mg1_graphics(); #endif /* drilbo_mg1_h_INCLUDED */ fizmo-0.7.10/libdrilbo/src/drilbo/drilbo-png.c000644 000765 000024 00000013160 12606024321 022062 0ustar00chrenderstaff000000 000000 /* drilbo-png.c * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef drilbo_png_c_INCLUDED #define drilbo_png_c_INCLUDED #include #include #include #include #include "drilbo.h" #include "drilbo-png.h" z_image* read_zimage_from_png(z_file *in) { uint8_t header[8]; int y; int width, height; png_byte color_type; png_byte bit_depth; //png_structp png_ptr; //png_infop info_ptr; //int number_of_passes, interlace_type; png_bytep * row_pointers; uint8_t *zimage_data, *zimage_ptr; z_image *result; int bytes_per_pixel; png_size_t row_bytes; png_color_16 black_background = { 0, 0, 0, 0, 0 }; png_color_16p image_background; fsi->readchars(header, 8, in); if (png_sig_cmp(header, 0, 8)) return NULL; png_structp png_ptr = png_create_read_struct( PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr) return NULL; png_infop info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); return NULL; } png_infop end_info = png_create_info_struct(png_ptr); if (!end_info) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); return NULL; } if (setjmp(png_jmpbuf(png_ptr))) { printf("Error reading PNG.\n"); exit(-1); } png_init_io(png_ptr, fsi->get_stdio_stream(in)); png_set_sig_bytes(png_ptr, 8); png_read_info(png_ptr, info_ptr); #if PNG_LIBPNG_VER_MAJOR > 1 || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR >= 4) width = png_get_image_width(png_ptr, info_ptr); height = png_get_image_height(png_ptr, info_ptr); color_type = png_get_color_type(png_ptr, info_ptr); bit_depth = png_get_bit_depth(png_ptr, info_ptr); #else width = info_ptr->width; height = info_ptr->height; color_type = info_ptr->color_type; bit_depth = info_ptr->bit_depth; #endif //printf("%d * %d, %dbpp\n", width, height, bit_depth); if (png_get_bKGD(png_ptr, info_ptr, &image_background)) png_set_background(png_ptr, image_background, PNG_BACKGROUND_GAMMA_FILE, 1, 1.0); else png_set_background(png_ptr, &black_background, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); if (color_type == PNG_COLOR_TYPE_GRAY) bytes_per_pixel = 1; else bytes_per_pixel = 3; if (color_type == PNG_COLOR_TYPE_PALETTE) { png_set_palette_to_rgb(png_ptr); } if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) { #if PNG_LIBPNG_VER_MAJOR > 1 || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR >= 4) png_set_expand_gray_1_2_4_to_8(png_ptr); #else png_set_gray_1_2_4_to_8(png_ptr); #endif } //if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) // png_set_tRNS_to_alpha(png_ptr); if (bit_depth == 16) png_set_strip_16(png_ptr); //row_bytes = png_get_rowbytes(png_ptr, info_ptr); //printf("suggested-rowbytes: %d\n", row_bytes); // For some strange reason, the "png_get_rowbytes" will return the width // of image "infocom-brain-ad.png" instead of width * 3, so we have to // calculate "row_bytes" on our own: row_bytes = width * bytes_per_pixel; //printf("rbtes: %d\n", (long)row_bytes); zimage_data = malloc((long)row_bytes * height); png_read_update_info(png_ptr, info_ptr); /* read file */ row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height); zimage_ptr = zimage_data; for (y=0; ybits_per_sample = 8; result->width = width; result->height = height; result->data = zimage_data; if (color_type == PNG_COLOR_TYPE_GRAY) result->image_type = DRILBO_IMAGE_TYPE_GRAYSCALE; else result->image_type = DRILBO_IMAGE_TYPE_RGB; return result; } /* void write_zimage_to_png(z_image *image, z_file *out) { } */ #endif /* drilbo_png_c_INCLUDED */ fizmo-0.7.10/libdrilbo/src/drilbo/drilbo-png.h000644 000765 000024 00000003361 12606024321 022071 0ustar00chrenderstaff000000 000000 /* drilbo-png.h * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef drilbo_png_h_INCLUDED #define drilbo_png_h_INCLUDED #include #include "drilbo.h" z_image* read_zimage_from_png(z_file *in); //void write_zimage_to_png(z_image *image, z_file *out); #endif /* drilbo_png_h_INCLUDED */ fizmo-0.7.10/libdrilbo/src/drilbo/drilbo-ppm.c000644 000765 000024 00000005025 12606024321 022073 0ustar00chrenderstaff000000 000000 /* drilbo-ppm.c * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef drilbo_ppm_c_INCLUDED #define drilbo_ppm_c_INCLUDED #ifdef UNUSED #elif defined(__GNUC__) # define UNUSED(x) UNUSED_ ## x __attribute__((unused)) #elif defined(__LCLINT__) # define UNUSED(x) /*@unused@*/ x #else # define UNUSED(x) x #endif #include #include #include "drilbo-ppm.h" void write_zimage_to_ppm(z_image *image, z_file *out) { uint32_t y,x; uint8_t *ptr = image->data; /* fsi->fileprintf(out, "P3\n"); fsi->fileprintf(out, "%d %d\n", image->width, image->height); fsi->fileprintf(out, "%d\n", (2 << (image->bits_per_sample-1)) - 1); for (y=0; yheight; y++) { for (x=0; xwidth*3; x++) { fsi->fileprintf(out, "%d\n", *ptr++); } } */ fsi->fileprintf(out, "P6 %d %d %d\n", image->width, image->height, (2 << (image->bits_per_sample-1)) - 1); for (y=0; yheight; y++) { for (x=0; xwidth*3; x++) { fsi->fileprintf(out, "%c", *ptr++); } } } #endif /* drilbo_ppm_c_INCLUDED */ fizmo-0.7.10/libdrilbo/src/drilbo/drilbo-ppm.h000644 000765 000024 00000003640 12606024321 022101 0ustar00chrenderstaff000000 000000 /* drilbo-ppm.h * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef drilbo_ppm_h_INCLUDED #define drilbo_ppm_h_INCLUDED #ifdef UNUSED #elif defined(__GNUC__) # define UNUSED(x) UNUSED_ ## x __attribute__((unused)) #elif defined(__LCLINT__) # define UNUSED(x) /*@unused@*/ x #else # define UNUSED(x) x #endif #include #include #include "drilbo.h" void write_zimage_to_ppm(z_image *image, z_file *out); #endif /* drilbo_ppm_h_INCLUDED */ fizmo-0.7.10/libdrilbo/src/drilbo/drilbo-test.c000644 000765 000024 00000023244 12606024321 022261 0ustar00chrenderstaff000000 000000 /* drilbo-test.c * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include #include #include #include #include #include "drilbo.h" #include "drilbo-ppm.h" #include "drilbo-jpeg.h" #ifdef TEST_PNG #include "drilbo-png.h" #endif // TEST_PNG #ifdef TEST_X11 #include "drilbo-x11.h" #endif // TEST_X11 #include "drilbo-mg1.h" #define DRILBO_TEST_VERSION "0.1.0-dev" #define STREAM_BUFSIZE 128 static const char *png_ppm_out_file_name = "infocom-brain-ad.ppm"; static const char *mg1_ppm_out_file_name = "shogun.ppm"; static const char *jpeg_in_file_name = "../test/infocom-brain-ad.jpg"; static const char *jpeg_out_file_rgb_name = "ad-RGB.jpg"; static const char *jpeg_out_file_ycbcr_name = "ad-YCbCr.jpg"; static const char *jpeg_out_file_grayscale_name = "ad-Grayscale.jpg"; static const char *jpeg_grayscale_in_file_name = "../test/zork-poster-grayscale.jpg"; static const char *png_in_file_name = "../test/infocom-brain-ad.png"; static const char *mg1_file_name = "../test/Shogun.mg1"; #ifdef TEST_X11 static x11_image_window_id image_window_id; static int signalling_pipe[2]; fd_set in_fds; int max_filedes_number_plus_1; int select_retval; unsigned int read_buf[1]; int ret_val; #endif // TEST_X11 void callback_func(x11_image_window_id window_id, int event) { int ret_val; unsigned char write_buffer = 0; if (image_window_id == window_id) { if (event == DRILBO_IMAGE_WINDOW_CLOSED) { do { ret_val = write(signalling_pipe[1], &write_buffer, 1); if ( (ret_val == -1) && (errno != EAGAIN) ) return; } while ( (ret_val == -1) && (errno == EAGAIN) ); } } } int i18n_test_stream_output(z_ucs *output) { int len; char buf[STREAM_BUFSIZE]; while (*output != 0) { len = zucs_string_to_utf8_string(buf, &output, STREAM_BUFSIZE); fwrite(buf, 1, len-1, stdout); } printf("X\nX\n"); return 0; } int setup_callback() { int flags; if (pipe(signalling_pipe) != 0) return -1; if ((flags = fcntl(signalling_pipe[0], F_GETFL, 0)) == -1) return -1; if ((fcntl(signalling_pipe[0], F_SETFL, flags|O_NONBLOCK)) == -1) return -1; if ((flags = fcntl(STDIN_FILENO, F_GETFL, 0)) == -1) return -1; if ((fcntl(STDIN_FILENO, F_SETFL, flags|O_NONBLOCK)) == -1) return -1; return 0; } int wait_for_callback() { for (;;) { FD_ZERO(&in_fds); FD_SET(STDIN_FILENO, &in_fds); FD_SET(signalling_pipe[0], &in_fds); max_filedes_number_plus_1 = (STDIN_FILENO < signalling_pipe[0] ? signalling_pipe[0] : STDIN_FILENO) + 1; select_retval = select(max_filedes_number_plus_1, &in_fds, NULL, NULL, NULL); if (select_retval > 0) { if (FD_ISSET(STDIN_FILENO, &in_fds)) { do { ret_val = read(STDIN_FILENO, &read_buf, 1); } while (ret_val > 0); break; } else if (FD_ISSET(signalling_pipe[0], &in_fds)) { do { ret_val = read(signalling_pipe[0], &read_buf, 1); if ( (ret_val == -1) && (errno != EAGAIN) ) { printf("ret_val:%d\n", ret_val); return -1; } } while ( (ret_val == -1) && (errno == EAGAIN) ); break; } } } return 0; } int main(int UNUSED(argc), char *UNUSED(argv[])) { z_file *in, *out; z_image *zork_poster; int nof_mg1_images; uint16_t *mg1_image_numbers; int image_index; z_image *mg1_image; #ifdef TEST_JPEG z_image *brain_ad_jpeg, *scaled_brain_ad_jpeg; #endif // TEST_JPEG #ifdef TEST_JPEG z_image *brain_ad_png; #endif // TEST_JPEG #ifdef TEST_X11 char *env_window_id; XID window_id; #endif // TEST_X11 //z_ucs *search_path; #ifdef ENABLE_TRACING turn_on_trace(); #endif // ENABLE_TRACING /* if ((search_path = dup_latin1_string_to_zucs_string("../locales")) == NULL) { fprintf(stderr, "Could not duplicate search path.\n"); return -1; } */ register_i18n_stream_output_function(&i18n_test_stream_output); //if (set_i18n_search_path(search_path) != 0) if (set_i18n_search_path("../locales") != 0) { fprintf(stderr, "Could not set search path.\n"); return -2; } printf("\ndrilbo-test v%s\n\n", DRILBO_TEST_VERSION); printf("Starting mg1-test.\n"); printf("Loading \"%s\".\n", mg1_file_name); if (init_mg1_graphics(mg1_file_name) != 0) return -1; nof_mg1_images = get_number_of_mg1_images(); printf("%d images in \"%s\".\n", nof_mg1_images, mg1_file_name); printf("Image numbers: "); if ((mg1_image_numbers = get_all_picture_numbers()) == NULL) return -1; for (image_index = 0; image_index < nof_mg1_images; image_index++) { if (image_index != 0) printf(", "); printf("%d", mg1_image_numbers[image_index]); } printf("\n"); free(mg1_image_numbers); mg1_image = get_picture(1); if (mg1_image == NULL) return -1; out = fsi->openfile(mg1_ppm_out_file_name, FILETYPE_DATA, FILEACCESS_WRITE); write_zimage_to_ppm(mg1_image, out); fsi->closefile(out); end_mg1_graphics(); #ifdef TEST_JPEG printf("\nStarting jpg-test.\n"); printf("Loading JPEG file \"%s\" ...\n", jpeg_in_file_name); in = fsi->openfile(jpeg_in_file_name, FILETYPE_DATA, FILEACCESS_READ); brain_ad_jpeg = read_zimage_from_jpeg(in); fsi->closefile(in); scaled_brain_ad_jpeg = scale_zimage_to_width(brain_ad_jpeg, 800); printf("Writing RGB JPEG file \"%s\" ...\n", jpeg_out_file_rgb_name); out = fsi->openfile(jpeg_out_file_rgb_name, FILETYPE_DATA, FILEACCESS_WRITE); //write_zimage_to_jpeg(brain_ad, out, JCS_RGB); write_zimage_to_jpeg(scaled_brain_ad_jpeg, out, JCS_RGB); fsi->closefile(out); printf("Writing YCbCr JPEG file \"%s\" ...\n", jpeg_out_file_ycbcr_name); out = fsi->openfile(jpeg_out_file_ycbcr_name, FILETYPE_DATA, FILEACCESS_WRITE); write_zimage_to_jpeg(brain_ad_jpeg, out, JCS_YCbCr); fsi->closefile(out); printf("Writing Grayscale JPEG file \"%s\" ...\n", jpeg_out_file_grayscale_name); out = fsi->openfile(jpeg_out_file_grayscale_name, FILETYPE_DATA, FILEACCESS_WRITE); write_zimage_to_jpeg(brain_ad_jpeg, out, JCS_GRAYSCALE); fsi->closefile(out); printf("Loading Grayscale JPEG file \"%s\" ...\n", jpeg_grayscale_in_file_name); in = fsi->openfile(jpeg_grayscale_in_file_name, FILETYPE_DATA, FILEACCESS_READ); zork_poster = read_zimage_from_jpeg(in); fsi->closefile(in); #endif // TEST_JPEG #ifdef TEST_PNG printf("Starting png-test.\n"); printf("Loading PNG file \"%s\" ...\n", png_in_file_name); in = fsi->openfile(png_in_file_name, FILETYPE_DATA, FILEACCESS_READ); brain_ad_png = read_zimage_from_png(in); fsi->closefile(in); out = fsi->openfile(png_ppm_out_file_name, FILETYPE_DATA, FILEACCESS_WRITE); write_zimage_to_ppm(brain_ad_png, out); fsi->closefile(out); /* printf("Loading PNG file \"%s\" ...\n", png_in_file_name); in = fsi->openfile(png_in_file_name, FILETYPE_DATA, FILEACCESS_READ); brain_ad_png = read_zimage_from_png(in); fsi->closefile(in); */ #endif // TEST_PNG #ifdef TEST_X11 printf("\nStarting X11-test.\n"); printf("Displaying X11 image window ...\n"); printf("Close window or press Enter to continue.\n"); setup_callback(); image_window_id = display_zimage_on_X11(NULL, mg1_image, &callback_func); wait_for_callback(); close_image_window(image_window_id); printf("Trying to display X11 image inlined in current (terminal) "); printf("window ...\n"); env_window_id = getenv("WINDOWID"); if (env_window_id != NULL) { //printf("window id: %s\n", env_window_id); window_id = atol(env_window_id); //printf("%ld\n", window_id); setup_callback(); image_window_id = display_zimage_on_X11(&window_id, mg1_image, &callback_func); wait_for_callback(); end_x11_display(); } else { printf("getenv(\"WINDOWID\") return null, probably not running X.\n"); } //XID window_id; //image_window_id = display_zimage_on_X11(zork_poster, &callback_func); //image_window_id = display_zimage_on_X11(brain_ad_jpg, &callback_func); //wait_for_enter(); #endif //free_zimage(brain_ad); printf("\nTest finished.\n\n"); return 0; } fizmo-0.7.10/libdrilbo/src/drilbo/drilbo-x11.c000644 000765 000024 00000057066 12606024321 021724 0ustar00chrenderstaff000000 000000 /* drilbo-x11.c * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * --- General information --- * * This file contains all X11-related functionality. In the current state * that means that there's one function which displays a supplied zimage * on-screen. * * At the moment, only TrueColor visuals are supported (it should probably * also support Pseudocolor, which, especially for the original infocom * images would be quite convenient). * * * --- Implementation details --- * * Main challange: Xlib doesn't provide any means of getting callbacks * for events. Thus, one has to either poll the event queue -- thus eating * up 100% CPU -- or to poll in regular intervals -- hard to implement and * makes event response sluggish for high delay or either machine slow when * low delay eats up again all CPU time. * This implies the use of threads, one thread being the normal main execution * and a second thread -- here: "xevent_thead" -- examines the event queue. * This is the reason why drilbo requires thread usage. I've chosen pthreads * since fizmo was designed with POSIX compiatiblity in mind. * * Next problem: X ist not thread safe. Thus we'll do a select() on the * display's file descriptor, lock a mutex and only then touch the event * queue. After all events have been processed the mutex is freed on the main * routine is allowed to execute xlib code. It's important to always lock * the X mutex "xevent_mutex" every time xlib code is executed. */ #ifndef drilbo_x11_c_INCLUDED #define drilbo_x11_c_INCLUDED #include #include #include #include //#include #include #include #include #include #include #include "tools/i18n.h" #include "drilbo-x11.h" #include "../locales/libdrilbo_locales.h" #define MIN_SCALED_WIDTH 10 #define MIN_SCALED_HEIGHT 10 static Display *x11_display = NULL; static int x11_screennumber; static int x11_defaultdepth; static int x11_bytesperpixel; static Screen *x11_screen; static Visual *x11_visual; static GC x11_gc; static XVisualInfo x11_visualinfo; static int x11_numberofredbits; static int x11_numberofgreenbits; static int x11_numberofbluebits; static int x11_redbitsshiftamount; static int x11_greenbitsshiftamount; static int x11_bluebitsshiftamount; static x11_image_window **x11_image_windows = NULL; static volatile int space_for_x11_image_windows = 0; static pthread_t xnextevent_thread; static pthread_mutex_t xevent_mutex; static volatile bool xevent_thread_active = false; static int thread_signalling_pipe[2]; //static int x11_macos = true; typedef struct { unsigned long flags; unsigned long functions; unsigned long decorations; long inputMode; unsigned long status; } Hints; static x11_image_window_id add_x11_image_window(Window window, int width, int height, z_image *zimage, void (*callback)(x11_image_window_id window_id, int event)) { int i; int new_window_index; x11_image_window *new_x11_image_window; new_window_index = -1; for (i=0; iwindow = window; new_x11_image_window->image_window_id = new_window_index; new_x11_image_window->width = width; new_x11_image_window->height = height; new_x11_image_window->pixmap_stored = false; new_x11_image_window->zimage = zimage; new_x11_image_window->callback = callback; new_x11_image_window->image_aspect_ratio = (float)zimage->width / (float)zimage->height; new_x11_image_window->exposeEventFound = false; new_x11_image_window->resizeRequest.found = false; new_x11_image_window->is_mapped = false; x11_image_windows[new_window_index] = new_x11_image_window; return new_window_index; } static x11_image_window *find_x11_image_window(Window window_to_find) { int i; x11_image_window *window; for (i=0; iwindow == window_to_find) ) return window; } return NULL; } static bool is_system_big_endian() { long one = 1; return !(*((char *)(&one))); } static XImage *create_XImage_from_zimage(z_image *image) { char *data, *data_ptr; uint8_t *src_data = image->data; uint32_t rgb_color; uint32_t y, x; int i; uint8_t red, green, blue; if ( (image->image_type != DRILBO_IMAGE_TYPE_RGB) && (image->image_type != DRILBO_IMAGE_TYPE_GRAYSCALE) ) return NULL; data = malloc(x11_bytesperpixel * image->width * image->height); data_ptr = data; //printf("create-ximage-from-zimage\n"); for (y=0; yheight; y++) for (x=0; xwidth; x++) { red = *(src_data++); if (image->image_type == DRILBO_IMAGE_TYPE_RGB) { green = *(src_data++); blue = *(src_data++); } else { green = red; blue = red; } rgb_color = (red >> ((image->bits_per_sample - x11_numberofredbits)) << x11_redbitsshiftamount) | (green >> ((image->bits_per_sample - x11_numberofgreenbits)) << x11_greenbitsshiftamount) | (blue >> ((image->bits_per_sample - x11_numberofbluebits)) << x11_bluebitsshiftamount); if (is_system_big_endian() == true) { for (i=0; i> ((x11_bytesperpixel - i - 1) * 8); } else { for (i=0; i> (i * 8); } } return XCreateImage( x11_display, x11_visual, x11_defaultdepth, ZPixmap, 0, data, image->width, image->height, x11_bytesperpixel * 8, //32 0); //cinfo.output_width * x11_bytesperpixel); } static void redraw_image(x11_image_window *window) { int x_space, y_space, x_offset, y_offset; int left_x_space, right_x_space, top_y_space, bottom_y_space; x_space = window->width - window->pixmap_width; y_space = window->height - window->pixmap_height; x_offset = x_space / 2; y_offset = y_space / 2; left_x_space = x_offset; right_x_space = x_space - x_offset; top_y_space = y_offset; bottom_y_space = y_space - y_offset; if (left_x_space > 0) { XFillRectangle( x11_display, window->window, x11_gc, 0, 0, left_x_space, window->height); } if (right_x_space > 0) { XFillRectangle( x11_display, window->window, x11_gc, left_x_space + window->pixmap_width, 0, right_x_space, window->height); } if (top_y_space > 0) { XFillRectangle( x11_display, window->window, x11_gc, 0, 0, window->width, top_y_space); } if (bottom_y_space > 0) { XFillRectangle( x11_display, window->window, x11_gc, 0, top_y_space + window->pixmap_height, window->pixmap_width, bottom_y_space); } XCopyArea( x11_display, window->pixmap, window->window, x11_gc, 0, 0, window->pixmap_width, window->pixmap_height, x_offset, y_offset); } static void update_window_pixmap(z_image *zimage, x11_image_window *window) { XImage *ximage; ximage = create_XImage_from_zimage(zimage); if (window->pixmap_stored == true) { XFreePixmap(x11_display, window->pixmap); window->pixmap_stored = false; } window->pixmap = XCreatePixmap( x11_display, window->window, ximage->width, ximage->height, x11_defaultdepth); window->pixmap_stored = true; window->pixmap_width = zimage->width; window->pixmap_height = zimage->height; XPutImage( x11_display, window->pixmap, x11_gc, ximage, 0, 0, 0, 0, ximage->width, ximage->height); XDestroyImage(ximage); } int close_image_window(x11_image_window_id window_id) { x11_image_window *window; if (window_id > space_for_x11_image_windows-1) return -1; window = x11_image_windows[window_id]; if (window == NULL) return -1; if (window->pixmap_stored == true) { XFreePixmap(x11_display, window->pixmap); } free_zimage(window->zimage); if (window->callback != NULL) window->callback(window_id, DRILBO_IMAGE_WINDOW_CLOSED); XDestroyWindow(x11_display, window->window); XFlush(x11_display); x11_image_windows[window_id] = NULL; free(window); return 0; } void *xevent_thead(void *UNUSED(threadid)) { XEvent event; x11_image_window *window; int x11_fd; fd_set in_fds; int new_width; //, new_height; z_image *scaled_zimage; int i; bool flushNeeded; int max_filedes_number_plus_1; int select_retval; xevent_thread_active = true; for (i=0; iexposeEventFound = false; x11_image_windows[i]->resizeRequest.found = false; } } // Run the evaluation procedure forever for (;;) { // Create a File Description Set containing x11_fd FD_ZERO(&in_fds); x11_fd = ConnectionNumber(x11_display); FD_SET(x11_fd, &in_fds); FD_SET(thread_signalling_pipe[0], &in_fds); max_filedes_number_plus_1 = (x11_fd < thread_signalling_pipe[0] ? thread_signalling_pipe[0] : x11_fd) + 1; select_retval = select(max_filedes_number_plus_1, &in_fds, NULL, NULL, NULL); if (select_retval > 0) { if (FD_ISSET(x11_fd, &in_fds)) { // Since X is not thread-safe, we're locking our X mutex to ensure // we're the only one interacting with the X server. pthread_mutex_lock(&xevent_mutex); flushNeeded = false; while (XPending(x11_display)) { // We'll now evaluate all events in the pipeline. "MapNotify" requests // can be handeled immediately, but all "ConfigureNotify" -- meaning // resize -- and "Expose" requests are stored for later execution. // This will make sure that only the last resize is actually executed. while (XPending(x11_display)) { XNextEvent(x11_display, &event); if ((window = find_x11_image_window(event.xany.window)) != NULL) { if (event.type == MapNotify) { window->is_mapped = true; update_window_pixmap(window->zimage, window); redraw_image(window); window->exposeEventFound = false; flushNeeded = true; } else if (event.type == Expose) { window->exposeEventFound = true; } else if (event.type == ConfigureNotify) { if ( (event.xconfigure.width != window->width) || (event.xconfigure.height != window->height) ) { window->resizeRequest.found = true; window->resizeRequest.width = event.xconfigure.width; window->resizeRequest.height = event.xconfigure.height; } } else if (event.type == ReparentNotify) { } else if (event.type == ClientMessage) { if ((unsigned long)event.xclient.data.l[0] == window->wm_delete_message) { close_image_window(window->image_window_id); } else { //printf("Clientmessage: %ld.\n", event.xclient.data.l[0]); } } else { //printf("Other event: %d\n", event.type); } } } // After evaluating and colleting all requests we will now // evaluate them. for (i=0; iis_mapped == false) continue; if (window->resizeRequest.found == true) { /* printf("resize: %d * %d\n", window->resizeRequest.width, window->resizeRequest.height); */ new_width = ((float)window->resizeRequest.width / window->image_aspect_ratio > window->resizeRequest.height) ? (float)window->resizeRequest.height * window->image_aspect_ratio : window->resizeRequest.width; //printf("newwidth:%d\n", new_width); scaled_zimage = scale_zimage_to_width(window->zimage, new_width); update_window_pixmap(scaled_zimage, window); free_zimage(scaled_zimage); window->width = window->resizeRequest.width; window->height = window->resizeRequest.height; redraw_image(window); window->resizeRequest.found = false; window->exposeEventFound = false; // additional redraw not needed. } else if (window->exposeEventFound == true) { //printf("-> expose\n"); redraw_image(window); flushNeeded = true; window->exposeEventFound = false; } } if (flushNeeded == true) { XFlush(x11_display); //XSync(x11_display, False); flushNeeded = false; } } // pthread_mutex_unlock(&xevent_mutex); } else if (FD_ISSET(thread_signalling_pipe[0], &in_fds)) { //printf("Stopping xevent-thread.\n"); xevent_thread_active = false; return NULL; } } } } static int x_error_handler(Display *UNUSED(display), XErrorEvent *event) { char message[1024]; XGetErrorText(x11_display, event->error_code, message, 1024); /* printf("X-Error: type %d, serial %ld, code %d, request %d, minor %d:%s\n", event->type, event->serial, event->error_code, event->request_code, event->minor_code, message); */ return 0; } static void get_x11_bitmask_size_and_shift(uint32_t mask, int *number_of_bits, int *bit_shift_amount) { *bit_shift_amount = 0; while ((mask & 1) == 0) { mask >>= 1; (*bit_shift_amount)++; } *number_of_bits = 0; while ((mask & 1) == 1) { mask >>= 1; (*number_of_bits)++; } } int init_x11_display() { int flags; if (x11_display != NULL) return 0; if ((x11_display = XOpenDisplay(NULL)) == NULL) return -1; /* i18n_translate_and_exit( libdrilbo_module_name, i18n_libdrilbo_COULD_NOT_OPEN_X11, -1); */ XSetErrorHandler(&x_error_handler); pthread_mutex_init(&xevent_mutex, NULL); // Create a new signalling pipe. This pipe is used by a select call to // detect a thread-stop request from the "end_x11_display" function. if (pipe(thread_signalling_pipe) != 0) return -1; if ((flags = fcntl(thread_signalling_pipe[0], F_GETFL, 0)) == -1) return -1; if ((fcntl(thread_signalling_pipe[0], F_SETFL, flags|O_NONBLOCK)) == -1) return -1; pthread_create(&xnextevent_thread, NULL, xevent_thead, NULL); x11_screen = DefaultScreenOfDisplay(x11_display); x11_screennumber = DefaultScreen(x11_display); x11_defaultdepth = DefaultDepth(x11_display, x11_screennumber); x11_bytesperpixel = 1; while (x11_bytesperpixel * 8 < x11_defaultdepth) x11_bytesperpixel *= 2; if (!XMatchVisualInfo( x11_display, x11_screennumber, x11_defaultdepth, TrueColor, &x11_visualinfo)) { //printf ("Cannot get TrueColor Visual!\n"); exit (EXIT_FAILURE); } x11_visual = x11_visualinfo.visual; get_x11_bitmask_size_and_shift( x11_visualinfo.red_mask, &x11_numberofredbits, &x11_redbitsshiftamount); get_x11_bitmask_size_and_shift( x11_visualinfo.green_mask, &x11_numberofgreenbits, &x11_greenbitsshiftamount); get_x11_bitmask_size_and_shift( x11_visualinfo.blue_mask, &x11_numberofbluebits, &x11_bluebitsshiftamount); x11_gc = XCreateGC( x11_display, XRootWindow(x11_display, x11_screennumber), //x11_parent, 0, 0); XSetForeground( x11_display, x11_gc, WhitePixel(x11_display, x11_screennumber)); return 0; } int end_x11_display() { int ret_val; unsigned char write_buffer = 0; int i; x11_image_window *window; pthread_mutex_lock(&xevent_mutex); do { ret_val = write(thread_signalling_pipe[1], &write_buffer, 1); if ( (ret_val == -1) && (errno != EAGAIN) ) return -1; } while ( (ret_val == -1) && (errno == EAGAIN) ); while (xevent_thread_active != false) ; close(thread_signalling_pipe[1]); close(thread_signalling_pipe[0]); for (i=0; iimage_window_id); } free(x11_image_windows); XFreeGC(x11_display, x11_gc); XCloseDisplay(x11_display); x11_display = NULL; pthread_mutex_unlock(&xevent_mutex); return 0; } x11_image_window_id display_zimage_on_X11(Window *parent_window, z_image *zimage, void (*callback_func)()) { Window window; Hints hints; Atom atom; Window parent; XSizeHints *xsizehints; bool doInline; z_image *image_dup, *scaled_zimage; x11_image_window_id result; x11_image_window *result_window; int x, y, tmp_x, tmp_y; unsigned parent_width, parent_height, tmp_border, tmp_depth; Window tmp_window; int scaled_width, scaled_height; double scale_factor; XSetWindowAttributes attributes; unsigned long value_mask; if (x11_display == NULL) { if (init_x11_display() < 0) return -1; } pthread_mutex_lock(&xevent_mutex); image_dup = zimage_dup(zimage); attributes.event_mask = ExposureMask | StructureNotifyMask; //attributes.bit_gravity = ForgetGravity; /* Setting a background will make X clear the window on resize, resulting in a lot of flicker. Thus, we'll do background erasing outselves later on. attributes.background_pixel = WhitePixel(x11_display, x11_screennumber); value_mask = CWBackPixel | CWEventMask; attributes.border_pixel = BlackPixel(x11_display, x11_screennumber); value_mask |= CWBorderPixel; */ value_mask = CWEventMask; parent = parent_window == NULL ? XRootWindow(x11_display, x11_screennumber) : *parent_window; //printf("root: %ld\n", XRootWindow(x11_display, x11_screennumber)); //printf("Parent window id: %ld\n", parent); XGetGeometry(x11_display, parent, &tmp_window, &tmp_x, &tmp_y, &parent_width, &parent_height, &tmp_border, &tmp_depth); //printf("%d x %d\n", parent_width, parent_height); if (image_dup->width > parent_width - 10) { scaled_width = parent_width - 10; scale_factor = (double)scaled_width / (double)image_dup->height; if (scaled_width < MIN_SCALED_WIDTH) { free_zimage(image_dup); return -1; } scaled_height = image_dup->height * scale_factor; } else { scaled_height = image_dup->height; scaled_width = image_dup->width; } if ((unsigned)scaled_height > parent_height - 10) { scaled_height = parent_height - 10; scale_factor = (double)scaled_height / (double)image_dup->height; scaled_width = (double)image_dup->width * scale_factor; if (scaled_height < MIN_SCALED_HEIGHT) { free_zimage(image_dup); return -1; } } if ((unsigned)scaled_width == image_dup->width) { scaled_zimage = image_dup; } else { scaled_zimage = scale_zimage_to_width(image_dup,scaled_width); free_zimage(image_dup); if (scaled_zimage == NULL) return -1; } if (parent_width > scaled_zimage->width) x = (parent_width - scaled_zimage->width) / 2; else x = 20; if (parent_height > scaled_zimage->height) y = (parent_height - scaled_zimage->height) / 2; else y = 20; doInline = false; window = XCreateWindow( x11_display, parent, x, y, scaled_zimage->width, scaled_zimage->height, // + (x11_macos == true ? 16 : 0), 0, x11_defaultdepth, InputOutput, x11_visual, value_mask, &attributes); result = add_x11_image_window( window, scaled_zimage->width, scaled_zimage->height, scaled_zimage, callback_func); result_window = x11_image_windows[result]; if (doInline == true) { hints.flags = 2; hints.functions = 0; hints.decorations = 0; hints.inputMode = 0; hints.status = 0; atom = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True); // WM_TRANSIENT_FOR ? //XSetWMProperties (?) XChangeProperty( x11_display, window, atom, atom, 32, PropModeReplace, (unsigned char *)&hints, 5); } xsizehints = XAllocSizeHints(); xsizehints->min_aspect.x = scaled_zimage->width; xsizehints->min_aspect.y = scaled_zimage->height; xsizehints->max_aspect.x = scaled_zimage->width; xsizehints->max_aspect.y = scaled_zimage->height; xsizehints->flags = PAspect; atom = XInternAtom(x11_display, "WM_SIZE_HINTS", True); XSetWMSizeHints(x11_display, window, xsizehints, atom); result_window->wm_delete_message = XInternAtom(x11_display, "WM_DELETE_WINDOW", False); XSetWMProtocols(x11_display, window, &result_window->wm_delete_message, 1); XMapWindow(x11_display, window); XFlush(x11_display); pthread_mutex_unlock(&xevent_mutex); return result; } #endif /* drilbo_x11_c_INCLUDED */ fizmo-0.7.10/libdrilbo/src/drilbo/drilbo-x11.h000644 000765 000024 00000006172 12606024321 021721 0ustar00chrenderstaff000000 000000 /* drilbo-x11.h * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef drilbo_x11_h_INCLUDED #define drilbo_x11_h_INCLUDED #include #include "drilbo.h" #define DRILBO_IMAGE_WINDOW_CLOSED 1 typedef int x11_image_window_id; typedef struct { // A "x11_image_window" in this context represents a single X11 window whose // only purpose is to display a single image. // The user is allowed to resize the window for two reasons: Especially // when displaying old infocom pictures, the average graphic size of // 320x200 -- and often much smaller -- is just a tiny spot on today's // much larger displays. Second, there seems to exist no reliable way // to enforce a fixed-size window with all window managers (please correct // me if this is not true). // The "x11_image_window" struct contains all data related to displaying the // image in it's current state, the zimage itself, size data and even // a reference to the X11 server-side pixmap in which the currently scaled // zimage resides for faster redrawing. Window window; x11_image_window_id image_window_id; int width; int height; z_image *zimage; float image_aspect_ratio; Pixmap pixmap; int pixmap_width; int pixmap_height; void (*callback)(int x11_image_window_id, int event); bool pixmap_stored; bool is_mapped; bool exposeEventFound; struct { bool found; int width; int height; } resizeRequest; Atom wm_delete_message; } x11_image_window; int init_x11_display(); int end_x11_display(); x11_image_window_id display_zimage_on_X11(Window *parent_window, z_image *image, void (*callback_func)()); int close_image_window(x11_image_window_id window_id); #endif /* drilbo_x11_h_INCLUDED */ fizmo-0.7.10/libdrilbo/src/drilbo/drilbo.c000644 000765 000024 00000020062 12606024321 021277 0ustar00chrenderstaff000000 000000 /* drilbo.c * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef drilbo_c_INCLUDED #define drilbo_c_INCLUDED #include #include #include #include #include #include #include #include #include "drilbo.h" #ifdef ENABLE_JPG #include "drilbo-jpeg.h" #endif // ENABLE_JPG #ifdef ENABLE_PNG #include "drilbo-png.h" #endif // ENABLE_PNG /* static z_image *resizeBilinear_RGB(z_image *image, int dest_width, int dest_height) { int ul, ur, ll, lr, x, y; float x_ratio = ((float)(image->width - 1)) / dest_width; float y_ratio = ((float)(image->height - 1)) / dest_height; float x_right_weight, y_bottom_weight; int offset, top_left; uint8_t *dest; int i, j, k; int row_byte_size = image->width * 3; z_image *result; if (image->bits_per_sample != 8) return NULL; if (image->image_type != DRILBO_IMAGE_TYPE_RGB) return NULL; dest = malloc(dest_width * dest_height * 3); result = (z_image*)malloc(sizeof(z_image)); result->bits_per_sample = 8; result->width = dest_width; result->height = dest_height; result->image_type = DRILBO_IMAGE_TYPE_RGB; result->data = dest; offset = 0; // Iterate over all output pixels for (i=0; idata[top_left]; ur = image->data[top_left + 3]; ll = image->data[top_left + row_byte_size]; lr = image->data[top_left + row_byte_size + 3]; // Calculate proximity of dest pixel to source pixels x_right_weight = (x_ratio * j) - x; y_bottom_weight = (y_ratio * i) - y; // Evaluate dest pixel value dest[offset++] = ul * (1-x_right_weight ) * (1-y_bottom_weight) + ur * ( x_right_weight ) * (1-y_bottom_weight) + ll * ( y_bottom_weight) * (1-x_right_weight ) + lr * ( x_right_weight ) * ( y_bottom_weight); } return result; } */ static z_image *resizeBilinear(z_image *image, int dest_width, int dest_height) { int ul, ur, ll, lr, x, y; float x_ratio = ((float)(image->width - 1)) / dest_width; float y_ratio = ((float)(image->height - 1)) / dest_height; float x_right_weight, y_bottom_weight; int offset, top_left; uint8_t *dest; int i, j, k; int row_byte_size = image->width * 3; z_image *result; int bytes_per_pixel; if (image->bits_per_sample != 8) return NULL; if (image->image_type == DRILBO_IMAGE_TYPE_RGB) bytes_per_pixel = 3; else if (image->image_type == DRILBO_IMAGE_TYPE_GRAYSCALE) bytes_per_pixel = 1; else return NULL; row_byte_size = image->width * bytes_per_pixel; dest = malloc(dest_width * dest_height * bytes_per_pixel); result = (z_image*)malloc(sizeof(z_image)); result->bits_per_sample = 8; result->width = dest_width; result->height = dest_height; result->image_type = image->image_type; result->data = dest; offset = 0; // Iterate over all output pixels for (i=0; idata[top_left]; ur = image->data[top_left + bytes_per_pixel]; ll = image->data[top_left + row_byte_size]; lr = image->data[top_left + row_byte_size + bytes_per_pixel]; // Calculate proximity of dest pixel to source pixels x_right_weight = (x_ratio * j) - x; y_bottom_weight = (y_ratio * i) - y; // Evaluate dest pixel value dest[offset++] = ul * (1-x_right_weight ) * (1-y_bottom_weight) + ur * ( x_right_weight ) * (1-y_bottom_weight) + ll * ( y_bottom_weight) * (1-x_right_weight ) + lr * ( x_right_weight ) * ( y_bottom_weight); } return result; } z_image *scale_zimage(z_image *image, int dest_width, int dest_height) { if ( (image == NULL) || (dest_width == 0) || (dest_height == 0) ) return NULL; else return resizeBilinear(image, dest_width, dest_height); } z_image *scale_zimage_to_width(z_image *image, int dest_width) { float scale_factor = (float)image->width / (float)dest_width; int dest_height = image->height / scale_factor; return scale_zimage(image, dest_width, dest_height); } z_image *zimage_dup(z_image *image) { size_t len; z_image *result; if ((result = (z_image*)malloc(sizeof(z_image))) == NULL) return NULL; len = image->width * image->height * (image->image_type == DRILBO_IMAGE_TYPE_RGB ? 3 : 1); //printf("%ld\n", (long)len); result->bits_per_sample = image->bits_per_sample; result->width = image->width; result->height = image->height; result->image_type = image->image_type; if ((result->data = (uint8_t*)malloc(len)) == NULL) { free(result); return NULL; } memcpy(result->data, image->data, len); return result; } z_image *get_blorb_image(int resource_number) { long pict_blorb_index; char buf[5]; //uint32_t size; if ((pict_blorb_index = active_blorb_interface->get_blorb_offset( active_z_story->blorb_map, Z_BLORB_TYPE_PICT, resource_number)) == -1) return NULL; fsi->setfilepos( active_z_story->blorb_file, pict_blorb_index - 8, SEEK_SET); if (fsi->readchars(buf, 4, active_z_story->blorb_file) != 4) return NULL; buf[4] = 0; //size = read_four_byte_number(active_z_story->blorb_file); read_four_byte_number(active_z_story->blorb_file); if (strcmp(buf, "JPEG") == 0) { #ifdef ENABLE_JPG TRACE_LOG("Reading JPEG image."); return read_zimage_from_jpeg(active_z_story->blorb_file); #else return NULL; #endif // ENABLE_JPG } else if (strcmp(buf, "PNG " ) == 0) { #ifdef ENABLE_PNG TRACE_LOG("Reading PNG image."); return read_zimage_from_png(active_z_story->blorb_file); #else return NULL; #endif // ENABLE_PNG } else { TRACE_LOG("No idea how to handle \"%s\".\n", buf); return NULL; } } void free_zimage(z_image *image) { free(image->data); free(image); } char *get_drilbo_version() { return DRILBO_VERSION; } #endif /* drilbo_c_INCLUDED */ fizmo-0.7.10/libdrilbo/src/drilbo/drilbo.h000644 000765 000024 00000004435 12606024321 021312 0ustar00chrenderstaff000000 000000 /* drilbo.h * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef drilbo_h_INCLUDED #define drilbo_h_INCLUDED #define DRILBO_VERSION "0.2.7" #ifdef UNUSED #elif defined(__GNUC__) # define UNUSED(x) UNUSED_ ## x __attribute__((unused)) #elif defined(__LCLINT__) # define UNUSED(x) /*@unused@*/ x #else # define UNUSED(x) x #endif #include #define DRILBO_IMAGE_TYPE_RGB 1 #define DRILBO_IMAGE_TYPE_GRAYSCALE 2 typedef struct { uint32_t width; uint32_t height; int image_type; uint8_t *data; int bits_per_sample; } z_image; z_image *scale_zimage(z_image *image, int dest_width, int dest_height); z_image *scale_zimage_to_width(z_image *image, int dest_width); z_image *zimage_dup(z_image *image); z_image *get_blorb_image(int res_no); void free_zimage(z_image *image); char *get_drilbo_version(); #endif /* drilbo_h_INCLUDED */ fizmo-0.7.10/libdrilbo/src/drilbo/Makefile.am000644 000765 000024 00000004157 12606024321 021723 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2012 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AUTOMAKE_OPTIONS = subdir-objects AM_CFLAGS = $(libfizmo_CFLAGS) $(x11_CFLAGS) $(png_CFLAGS) $(jpeg_CFLAGS) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) $(x11_LIBS) $(png_LIBS) $(jpeg_LIBS) localedir = $(datarootdir)/fizmo/locales noinst_LIBRARIES = libdrilbo.a libdrilbo_a_SOURCES = ../locales/libdrilbo_locales.c drilbo.c \ drilbo-mg1.c drilbo-ppm.o if ENABLE_TRACING AM_CFLAGS += -DENABLE_TRACING= endif if ENABLE_JPEG AM_CFLAGS += -DENABLE_JPG= libdrilbo_a_SOURCES += drilbo-jpeg.c endif if ENABLE_PNG AM_CFLAGS += -DENABLE_PNG= libdrilbo_a_SOURCES += drilbo-png.c endif if ENABLE_X11 AM_CFLAGS += -DENABLE_X11= libdrilbo_a_SOURCES += drilbo-x11.c endif fizmo-0.7.10/libdrilbo/src/drilbo/Makefile.in000644 000765 000024 00000053712 12606024550 021741 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2012 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : @ENABLE_TRACING_TRUE@am__append_1 = -DENABLE_TRACING= @ENABLE_JPEG_TRUE@am__append_2 = -DENABLE_JPG= @ENABLE_JPEG_TRUE@am__append_3 = drilbo-jpeg.c @ENABLE_PNG_TRUE@am__append_4 = -DENABLE_PNG= @ENABLE_PNG_TRUE@am__append_5 = drilbo-png.c @ENABLE_X11_TRUE@am__append_6 = -DENABLE_X11= @ENABLE_X11_TRUE@am__append_7 = drilbo-x11.c subdir = libdrilbo/src/drilbo ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libdrilbo_a_AR = $(AR) $(ARFLAGS) libdrilbo_a_LIBADD = am__libdrilbo_a_SOURCES_DIST = ../locales/libdrilbo_locales.c drilbo.c \ drilbo-mg1.c drilbo-ppm.o drilbo-jpeg.c drilbo-png.c \ drilbo-x11.c am__dirstamp = $(am__leading_dot)dirstamp @ENABLE_JPEG_TRUE@am__objects_1 = drilbo-jpeg.$(OBJEXT) @ENABLE_PNG_TRUE@am__objects_2 = drilbo-png.$(OBJEXT) @ENABLE_X11_TRUE@am__objects_3 = drilbo-x11.$(OBJEXT) am_libdrilbo_a_OBJECTS = ../locales/libdrilbo_locales.$(OBJEXT) \ drilbo.$(OBJEXT) drilbo-mg1.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) $(am__objects_3) libdrilbo_a_OBJECTS = $(am_libdrilbo_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libdrilbo_a_SOURCES) DIST_SOURCES = $(am__libdrilbo_a_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = $(datarootdir)/fizmo/locales localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AUTOMAKE_OPTIONS = subdir-objects AM_CFLAGS = $(libfizmo_CFLAGS) $(x11_CFLAGS) $(png_CFLAGS) \ $(jpeg_CFLAGS) $(am__append_1) $(am__append_2) $(am__append_4) \ $(am__append_6) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) $(x11_LIBS) $(png_LIBS) $(jpeg_LIBS) noinst_LIBRARIES = libdrilbo.a libdrilbo_a_SOURCES = ../locales/libdrilbo_locales.c drilbo.c \ drilbo-mg1.c drilbo-ppm.o $(am__append_3) $(am__append_5) \ $(am__append_7) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 libdrilbo/src/drilbo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libdrilbo/src/drilbo/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) ../locales/$(am__dirstamp): @$(MKDIR_P) ../locales @: > ../locales/$(am__dirstamp) ../locales/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ../locales/$(DEPDIR) @: > ../locales/$(DEPDIR)/$(am__dirstamp) ../locales/libdrilbo_locales.$(OBJEXT): ../locales/$(am__dirstamp) \ ../locales/$(DEPDIR)/$(am__dirstamp) libdrilbo.a: $(libdrilbo_a_OBJECTS) $(libdrilbo_a_DEPENDENCIES) $(EXTRA_libdrilbo_a_DEPENDENCIES) $(AM_V_at)-rm -f libdrilbo.a $(AM_V_AR)$(libdrilbo_a_AR) libdrilbo.a $(libdrilbo_a_OBJECTS) $(libdrilbo_a_LIBADD) $(AM_V_at)$(RANLIB) libdrilbo.a mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f ../locales/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@../locales/$(DEPDIR)/libdrilbo_locales.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drilbo-jpeg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drilbo-mg1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drilbo-png.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drilbo-x11.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drilbo.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)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@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)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@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 $(LIBRARIES) 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) -rm -f ../locales/$(DEPDIR)/$(am__dirstamp) -rm -f ../locales/$(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-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ../locales/$(DEPDIR) ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-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 -rf ../locales/$(DEPDIR) ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic 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-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile # 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: fizmo-0.7.10/libdrilbo/doc/changelog.xml000644 000765 000024 00000007103 12606024321 021035 0ustar00chrenderstaff000000 000000 Minor changes to autoconf for better comtability to fizmo-dist-0.7.10. Adapted to automake v1.14 “subdir-objects” option. Fixed “AC_CONFIG_AUX_DIR” invocation. Added “clean-dev” build target for better cleanup of installed development files, which helps debian packaging. Renamed “install-locales” to “install-data” build target. Adapted to new reachar function names in the file system interface. Minor fix for libdrilbo build target. Adapted to new autoconf/automake build process. Fixed missing $(DESTDIR) variable – should already have been present since version 0.2.1. Fixed missing “override” statments for CFLAGS in Makefiles. Fixed $(DESTDIR) evaluation in config.[default|macports].mk. Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. Removed “drilbo-x11.c” requirement for “Xatom.h”. The “drilbo” library – “Drilbo Represents an Imaging Libary not only for Blorb Objects” – is supposed to handle fizmo's graphical related tasks. It makes fizmo's version 0.6 requirement for GTK obsolete, it directly uses libjpg and libpng to load images and provides its own Xlib implementation for X11 output (curentrly only supporting TrueColor). Implemented support for reading jpeg, png and MG1 graphics, the latter one using code from Mark Howell's pix2gif tool from the ztools package. Implemented output of jpeg (RGB, Grayscale and JCS_YCbCr) and ppm files in the P6 variant (usually only useful for debugging, P3 variant available, see code). Implemented output to X11 displays though xlib, truecolor only. Added support for bilinear scaling. Implemented a “z_image” type which holds all the data and metadata for images. A z_image may contain either an RGB or a grayscale file with a depth of 8 bit per pixel. fizmo-0.7.10/libdrilbo/doc/copyright.xml000644 000765 000024 00000003041 12606024321 021113 0ustar00chrenderstaff000000 000000

Copyright (c) 2009-2015 Christoph Ender
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

fizmo-0.7.10/libdrilbo/doc/create-mds.sh000755 000765 000024 00000001427 12606024321 020752 0ustar00chrenderstaff000000 000000 #!/bin/bash function xslt { if [ "$5" == "true" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.md" else OUTPUTFILE="${1}/${2}.md" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-md.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/md.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/libdrilbo/doc/create-txts.sh000755 000765 000024 00000001437 12606024321 021172 0ustar00chrenderstaff000000 000000 #!/bin/bash function xslt { if [ "$5" == "true" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.txt" else OUTPUTFILE="${1}/${2}.txt" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-ascii.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/ascii.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/libdrilbo/doc/readme.xml000644 000765 000024 00000006037 12606024321 020350 0ustar00chrenderstaff000000 000000

Drilbo (Drilbo Represents an Imaging Libary not only for Blorb Objects) is the imaging support library for the fizmo interpreter. It supports the following file input formats:

  • JPEG
  • PNG
  • Z-Machine V6 graphics, MG1 format

Not supported:

  • Z-Machine V6 graphics, Amiga and Macintosh format

The following file output formats are supported:

  • JPEG in RGB, Grayscale and JCS_YCbCr.
  • PPM, P6 variant (usually for testing purposes, P3 variant available, but outcommented in the code).

The following screen output methods are supported:

  • X11 display though XLib, Truecolor only.

These imaging operations are implemented:

  • Bilinear scaling

All operations use a “z_image” type which holds all the data and metadata for images. A z_image may contain either an RGB or a grayscale file with a depth of 8 bit per pixel.

See “drilbo.h” for more information on the specific functions.

From The Z-Machine-Specification, section 8 (just for reference):

Some details of the known IBM graphics files are given in Paul David Doherty's “Infocom Fact Sheet”. See also Mark Howell's program “pix2gif”, which extracts pictures to GIF files. (This is one of his “Ztools” programs.)

Although Version 6 graphics files are not specified here, and were released in several different formats by Infocom for different computers, a consensus seems to have emerged that the MCGA pictures are the ones to adopt (files with filenames *.MG1). These are visually identical to Amiga pictures (whose format has been deciphered by Mark Knibbs). However, some Version 6 story files were tailored to the interpreters they would run on, and use the pictures differently according to what they expect the pictures to be. (For instance, an Amiga-intended story file will use one big Amiga-format picture where an MSDOS-intended story file will use several smaller MCGA ones.)

The easiest option is to interpret only DOS-intended Version 6 story files and only MCGA pictures. But it may be helpful to examine the Frotz source code, as Frotz implements draw_picture and picture_data so that Amiga and Macintosh forms of Version 6 story files can also be used.

It is generally felt that newly-written graphical games should not imitate the old Infocom graphics formats, which are very awkward to construct and have been overtaken by technology. Instead, the draft Blorb proposal for packaging up resources with Z-machine games calls for PNG format graphics glued together in a fairly simple way. An ideal Version 6 interpreter ought to understand both the four Infocom picture-sets and any Blorb set, thus catering for old and new games alike.

fizmo-0.7.10/libcellif/CHANGELOG.txt000644 000765 000024 00000005740 12606024544 017646 0ustar00chrenderstaff000000 000000 Version 0.7.10 -- October 9, 2015 - Fixed score/turns position in statusline for v<=3 games. - Minor changes for autoconf settings. Version 0.7.9 -- May 25, 2014 - Fixed erase_window and clearing of lines to conform to spec regarding reverse output. Version 0.7.8 -- March 19, 2014 - Adapted to automake version 1.14. - Entire re-implementation of screen refresh and scrolling. Many thanks to Lewis Gentry for bug-reporting and extensive beta-testing. - Fixed a crash that would occur in case the history buffer didn't hold enough input for some screen refresh cases. - Fixed incorrect backspace or delete behaviour which could cause in crash in case of small screen sizes combined with the use of preloaded input. - Several small text input fixes. - Added "clean-dev" build target for better cleanup of installed development files, which helps debian packaging. - Fixed wrong status line display style after restore in v<=3 games. - Added missing license/copyright information. Version 0.7.7 -- June 5, 2013 - Renamed "install-locales" to "install-data-local" build target. Version 0.7.6 -- December 27, 2012 - Minor fix for libcell build target. Version 0.7.5 -- November 30, 2012 - Implemented delete in read_line and read_char. - CTRL-R will now redraw the screen. Contrary to CTRL-L, which refreshes the screen based on the current layout, CTRL-R will reconstruct the latest output based on the output history. This will help to display output which is hidden in case a game clears the screen, writes some text into the top line and then turns on the score line which then overlays the topmost line. - Adapted to new command history interface. Version 0.7.4 -- September 17, 2012 - Adapted to new autoconf / automake build system. Version 0.7.3 -- August 1, 2012 - Merged Andrew Plotkin's iOS-fizmo changes: Adapted to new function "prompt_for_filename" in screen-interface. - Fixed screen interface invocation to not use timeout if not actually required by the game. Version 0.7.2 -- March 9, 2012 - Fixed missing $(DESTDIR) variable -- should already have been present since version 0.7.1. Version 0.7.1 -- November 6, 2011 - Fixed missing "override" statments for CFLAGS in Makefiles. - Fixed $(DESTDIR) evaluation in config.[default|macports].mk. - Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. Version 0.7.0 -- September 18, 2011 - The "libcellif" interface has been developed out of fizmo's ncursesw interface in version 0.6. It assumes that the screen is up of fixed-width charachter cells -- like a standard terminal -- and translates all the Z-Machine output operations into "goto-xy", "print" and similar commands. That means it's possible to implement a cell-based interface without having to worry about window resizes or other Z-Machine related concepts. - The "fizmo-ncurses" interface relies on this library for output. fizmo-0.7.10/libcellif/config-conds.m4000644 000765 000024 00000000000 12606024316 020406 0ustar00chrenderstaff000000 000000 fizmo-0.7.10/libcellif/config-flags.m4000644 000765 000024 00000000000 12606024316 020374 0ustar00chrenderstaff000000 000000 fizmo-0.7.10/libcellif/config-libs.m4000644 000765 000024 00000000000 12606024316 020231 0ustar00chrenderstaff000000 000000 fizmo-0.7.10/libcellif/config-subst.m4000644 000765 000024 00000000571 12606024316 020455 0ustar00chrenderstaff000000 000000 # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. AC_SUBST([libcellif_CFLAGS], "-I$build_prefix_cflags") AC_SUBST([libcellif_LIBS], "-L$build_prefix_libs -lcellif") fizmo-0.7.10/libcellif/configuration-options.txt000644 000765 000024 00000002455 12606024544 022717 0ustar00chrenderstaff000000 000000 libcellif configuration option names 2011-05-14 OVERVIEW This file lists all available configuration options for libcellif. Please note that other options may be available depending on the interface which libcellif is linked to. The following list shows all the options that the API understands via the "set_configuration_value" function. --- VARIABLES Option values may contain variables. Variables start with a dollar sign $ and are enclosed by parantheses. Example: “$(VARIABLE_NAME)”. The only currently implemented variable is “$(HOME)”, which refers to the current user's home directory. --- LIST OF VALID LIBCELLIF OPTION NAMES AND VALUES - “left-margin = ” This parameter will take an integer value and set the left margin of the main window to the specified number of spaces. - “right-margin = ” This parameter will take an integer value and set the right margin of the main window to the specified number of spaces. - “disable-hyphenation” Will completely turn off hyphenation. Useful for languages which are not supported. - “disable-color” Force libfizmo to disabled color mode, even if the output interface reports that color is available. fizmo-0.7.10/libcellif/configure.ac000644 000765 000024 00000004142 12606024316 020074 0ustar00chrenderstaff000000 000000 # configure.ac # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AC_ARG_ENABLE([tracing], [AS_HELP_STRING([--enable-tracing], [enable tracelog for debugging])], [], [enable_tracing=no]) AC_INIT( [libcellif], [0.7.8], fizmo@spellbreaker.org, libcellif) AC_CONFIG_AUX_DIR([.]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_PROG_CC AC_PROG_RANLIB AM_PROG_AR AC_SUBST([DEV_BUILD_PREFIX], "$DESTDIR$prefix") AM_CONDITIONAL([FIZMO_BUILD_PREFIX_EMPTY], [test "$fizmo_build_prefix" = ""]) PKG_CHECK_MODULES([libfizmo], [libfizmo >= 0.7.8]) AM_CONDITIONAL([ENABLE_TRACING], [test "$enable_tracing" = "yes"]) AC_CONFIG_FILES([Makefile src/cell_interface/Makefile]) AC_OUTPUT fizmo-0.7.10/libcellif/COPYRIGHT.txt000644 000765 000024 00000002701 12606024544 017721 0ustar00chrenderstaff000000 000000 Copyright (c) 2009-2015 Christoph Ender All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. fizmo-0.7.10/libcellif/doc/000755 000765 000024 00000000000 12606024316 016352 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libcellif/Makefile.am000644 000765 000024 00000007260 12606024316 017646 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AUTOMAKE_OPTIONS = -Wno-override localedir = $(datarootdir)/fizmo/locales fizmo_build_prefix=$(DEV_BUILD_PREFIX) PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig PKGFILE = $(PKG_DIR)/libcellif.pc SUBDIRS = src/cell_interface . noinst_LIBRARIES = libcellif.a libcellif.a:: cd src/cell_interface ; make mv src/cell_interface/libcellif.a . install-dev:: libcellif.a mkdir -p "$(fizmo_build_prefix)"/lib/fizmo mkdir -p "$(fizmo_build_prefix)"/include/fizmo/cell_interface cp src/cell_interface/*.h \ "$(fizmo_build_prefix)"/include/fizmo/cell_interface cp libcellif.a "$(fizmo_build_prefix)"/lib/fizmo cp src/screen_interface/screen_cell_interface.h \ "$(fizmo_build_prefix)"/include/fizmo/screen_interface mkdir -p "$(PKG_DIR)" echo 'prefix=$(fizmo_build_prefix)' >"$(PKGFILE)" echo 'exec_prefix=$${prefix}' >>"$(PKGFILE)" echo 'libdir=$${exec_prefix}/lib/fizmo' >>"$(PKGFILE)" echo 'includedir=$${prefix}/include/fizmo' >>"$(PKGFILE)" echo >>"$(PKGFILE)" echo 'Name: libcellif' >>"$(PKGFILE)" echo 'Description: libcellif' >>"$(PKGFILE)" echo 'Version: 0.7.10' >>"$(PKGFILE)" echo 'Requires: libfizmo >= 0.7.4 ' >>"$(PKGFILE)" echo 'Requires.private:' >>"$(PKGFILE)" echo 'Cflags: -I$(fizmo_build_prefix)/include/fizmo ' >>"$(PKGFILE)" echo 'Libs: -L$(fizmo_build_prefix)/lib/fizmo -lcellif' >>"$(PKGFILE)" echo >>"$(PKGFILE)" install-data-local:: mkdir -p "$(DESTDIR)$(localedir)" for l in `cd src/locales ; ls -d ??_??`; \ do \ mkdir -p "$(DESTDIR)$(localedir)/$$l" ; \ cp src/locales/$$l/*.txt "$(DESTDIR)$(localedir)/$$l" ; \ done # About "-rmdir": make ignores errors of commands which are prefixed with # a - sign. rmdir may fail in clean-dev in case other libs have installed # development files, or in case clean-dev has been run before. clean-dev:: -rm "$(fizmo_build_prefix)/lib/fizmo/libcellif.a" -rmdir "$(fizmo_build_prefix)/lib/fizmo" rm -rf "$(fizmo_build_prefix)/include/fizmo/cell_interface" -rm "$(fizmo_build_prefix)/include/fizmo/screen_interface/screen_cell_interface.h" -rmdir "$(fizmo_build_prefix)/include/fizmo/screen_interface" -rmdir "$(fizmo_build_prefix)/include/fizmo" -rmdir "$(fizmo_build_prefix)/include" -rm "$(PKGFILE)" -rmdir "$(PKG_DIR)" -rmdir "$(fizmo_build_prefix)/lib" fizmo-0.7.10/libcellif/Makefile.in000644 000765 000024 00000063642 12606024550 017665 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : subdir = libcellif ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libcellif_a_AR = $(AR) $(ARFLAGS) libcellif_a_LIBADD = libcellif_a_SOURCES = libcellif.c libcellif_a_OBJECTS = libcellif.$(OBJEXT) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = libcellif.c DIST_SOURCES = libcellif.c RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = $(datarootdir)/fizmo/locales localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AUTOMAKE_OPTIONS = -Wno-override fizmo_build_prefix = $(DEV_BUILD_PREFIX) PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig PKGFILE = $(PKG_DIR)/libcellif.pc SUBDIRS = src/cell_interface . noinst_LIBRARIES = libcellif.a all: all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 libcellif/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libcellif/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcellif.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 @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 check-am: all-am check: check-recursive all-am: Makefile $(LIBRARIES) installdirs: installdirs-recursive installdirs-am: 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: 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-recursive clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: 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 -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-noinstLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local 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 installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile libcellif.a:: cd src/cell_interface ; make mv src/cell_interface/libcellif.a . install-dev:: libcellif.a mkdir -p "$(fizmo_build_prefix)"/lib/fizmo mkdir -p "$(fizmo_build_prefix)"/include/fizmo/cell_interface cp src/cell_interface/*.h \ "$(fizmo_build_prefix)"/include/fizmo/cell_interface cp libcellif.a "$(fizmo_build_prefix)"/lib/fizmo cp src/screen_interface/screen_cell_interface.h \ "$(fizmo_build_prefix)"/include/fizmo/screen_interface mkdir -p "$(PKG_DIR)" echo 'prefix=$(fizmo_build_prefix)' >"$(PKGFILE)" echo 'exec_prefix=$${prefix}' >>"$(PKGFILE)" echo 'libdir=$${exec_prefix}/lib/fizmo' >>"$(PKGFILE)" echo 'includedir=$${prefix}/include/fizmo' >>"$(PKGFILE)" echo >>"$(PKGFILE)" echo 'Name: libcellif' >>"$(PKGFILE)" echo 'Description: libcellif' >>"$(PKGFILE)" echo 'Version: 0.7.10' >>"$(PKGFILE)" echo 'Requires: libfizmo >= 0.7.4 ' >>"$(PKGFILE)" echo 'Requires.private:' >>"$(PKGFILE)" echo 'Cflags: -I$(fizmo_build_prefix)/include/fizmo ' >>"$(PKGFILE)" echo 'Libs: -L$(fizmo_build_prefix)/lib/fizmo -lcellif' >>"$(PKGFILE)" echo >>"$(PKGFILE)" install-data-local:: mkdir -p "$(DESTDIR)$(localedir)" for l in `cd src/locales ; ls -d ??_??`; \ do \ mkdir -p "$(DESTDIR)$(localedir)/$$l" ; \ cp src/locales/$$l/*.txt "$(DESTDIR)$(localedir)/$$l" ; \ done # About "-rmdir": make ignores errors of commands which are prefixed with # a - sign. rmdir may fail in clean-dev in case other libs have installed # development files, or in case clean-dev has been run before. clean-dev:: -rm "$(fizmo_build_prefix)/lib/fizmo/libcellif.a" -rmdir "$(fizmo_build_prefix)/lib/fizmo" rm -rf "$(fizmo_build_prefix)/include/fizmo/cell_interface" -rm "$(fizmo_build_prefix)/include/fizmo/screen_interface/screen_cell_interface.h" -rmdir "$(fizmo_build_prefix)/include/fizmo/screen_interface" -rmdir "$(fizmo_build_prefix)/include/fizmo" -rmdir "$(fizmo_build_prefix)/include" -rm "$(PKGFILE)" -rmdir "$(PKG_DIR)" -rmdir "$(fizmo_build_prefix)/lib" # 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: fizmo-0.7.10/libcellif/src/000755 000765 000024 00000000000 12606024316 016374 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libcellif/src/cell_interface/000755 000765 000024 00000000000 12606024550 021333 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libcellif/src/locales/000755 000765 000024 00000000000 12606024316 020016 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libcellif/src/screen_interface/000755 000765 000024 00000000000 12606024316 021673 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libcellif/src/screen_interface/screen_cell_interface.h000644 000765 000024 00000007557 12606024316 026360 0ustar00chrenderstaff000000 000000 /* screen_cell_interface.h * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef screen_cell_interface_h_INCLUDED #define screen_cell_interface_h_INCLUDED #include "tools/types.h" #define EVENT_WAS_INPUT 0x1000 #define EVENT_WAS_TIMEOUT 0x2000 #define EVENT_WAS_WINCH 0x3000 #define EVENT_WAS_CODE 0x4000 #define EVENT_WAS_CODE_BACKSPACE 0x4001 #define EVENT_WAS_CODE_DELETE 0x4002 #define EVENT_WAS_CODE_CURSOR_LEFT 0x4003 #define EVENT_WAS_CODE_CURSOR_RIGHT 0x4004 #define EVENT_WAS_CODE_CURSOR_UP 0x4005 #define EVENT_WAS_CODE_CURSOR_DOWN 0x4006 #define EVENT_WAS_CODE_CTRL_A 0x4007 #define EVENT_WAS_CODE_CTRL_E 0x4008 #define EVENT_WAS_CODE_PAGE_UP 0x4009 #define EVENT_WAS_CODE_PAGE_DOWN 0x400A #define EVENT_WAS_CODE_ESC 0x400B struct z_screen_cell_interface { void (*goto_yx)(int y, int x); void (*z_ucs_output)(z_ucs *z_ucs_output); bool (*is_input_timeout_available)(); void (*turn_on_input); void (*turn_off_input); int (*get_next_event)(z_ucs *input, int timeout_millis); char* (*get_interface_name)(); bool (*is_colour_available)(); bool (*is_bold_face_available)(); bool (*is_italic_available)(); int (*parse_config_parameter)(char *key, char *value); char* (*get_config_value)(char *key); char** (*get_config_option_names)(); void (*link_interface_to_story)(struct z_story *story); void (*reset_interface)(); int (*close_interface)(z_ucs *error_message); void (*set_text_style)(z_style text_style); void (*set_colour)(z_colour foreground, z_colour background); void (*set_font)(z_font font_type); void (*output_interface_info)(); int (*get_screen_width)(); int (*get_screen_height)(); void (*update_screen)(); void (*redraw_screen_from_scratch)(); void (*copy_area)(int dsty, int dstx, int srcy, int srcx, int height, int width); void (*clear_to_eol)(); void (*clear_area)(int startx, int starty, int xsize, int ysize); void (*set_cursor_visibility)(bool visible); z_colour (*get_default_foreground_colour)(); z_colour (*get_default_background_colour)(); int (*prompt_for_filename)(char *filename_suggestion, z_file **result_file, char *directory, int filetype_or_mode, int fileaccess); // optional // UI-specific filename dialog. If not implemented, return -3. Return >=0 on // k, -1 on error or -2 in case user cancelled (ESC or similar). }; #endif /* screen_cell_interface_h_INCLUDED */ fizmo-0.7.10/libcellif/src/locales/de_DE/000755 000765 000024 00000000000 12606024316 020756 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libcellif/src/locales/en_US/000755 000765 000024 00000000000 12606024316 021027 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libcellif/src/locales/fr_FR/000755 000765 000024 00000000000 12606024316 021014 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/libcellif/src/locales/libcellif_locales.c000644 000765 000024 00000003340 12606024316 023611 0ustar00chrenderstaff000000 000000 /* libcell_locales.c * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef libcell_locales_c_INCLUDED #define libcell_locales_c_INCLUDED #include "tools/types.h" z_ucs libcellif_module_name[] = { 'l', 'i', 'b', 'c', 'e', 'l', 'l', 'i', 'f', 0}; #endif /* libcell_locales_c_INCLUDED */ fizmo-0.7.10/libcellif/src/locales/libcellif_locales.h000644 000765 000024 00000003650 12606024316 023622 0ustar00chrenderstaff000000 000000 /* libcellif_locales.h * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef libcellif_locales_h_INCLUDED #define libcellif_locales_h_INCLUDED #define i18n_libcellif_MORE_PROMPT 0 #define i18n_libcellif_SCORE 1 #define i18n_libcellif_TURNS 2 #define i18n_libcellif_LIBCELLINTERFACE_VERSION_P0S 3 #define i18n_libcellif_PRESS_ANY_KEY_TO_QUIT 4 #define i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR 5 extern z_ucs libcellif_module_name[]; #endif /* libcellif_locales_h_INCLUDED */ fizmo-0.7.10/libcellif/src/locales/fr_FR/libcellif_i18n.txt000644 000765 000024 00000000213 12606024316 024335 0ustar00chrenderstaff000000 000000 Plus Score Tours libcellinterface version \{0s}. Pressez n'importe quelle touche pour quitter. Function call "\{0s}" aborted due to error. fizmo-0.7.10/libcellif/src/locales/en_US/libcellif_i18n.txt000644 000765 000024 00000000164 12606024316 024355 0ustar00chrenderstaff000000 000000 More Score Turns libcellinterface version \{0s}. Press any key to quit. Function call "\{0s}" aborted due to error. fizmo-0.7.10/libcellif/src/locales/de_DE/libcellif_i18n.txt000644 000765 000024 00000000221 12606024316 024276 0ustar00chrenderstaff000000 000000 Mehr Punkte Züge libcellinterface version \{0s}. Drücken Sie eine Taste zum Beenden. Aufruf der Funktion „\{0s}“ verursachte einen Fehler. fizmo-0.7.10/libcellif/src/cell_interface/cell_interface.c000644 000765 000024 00000336734 12606024316 024456 0ustar00chrenderstaff000000 000000 /* cell_interface.c * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * * * * About screen refreshes * * Refreshing the screen or specific lines is done using the "refresh_window0" * function, which accepts the number of the top line of the area to refresh * and the vertical size. It uses fizmo's output history, which allows * paragraph-wise repeating of the output which has been produced by the * running game so far. * * Redrawing works as follows: One "history_output" reference is always in * memory. Initially, when it's NULL, it's created with a default state (which * means it's pointing at the end of the current output). It is kept along * with the int current_history_screen_line -- "chsl", which stores the number * of the screen line that the history is currently pointing at. * * In general during refreshing, there's always a lower_margin and upper_margin * set, which prevents overwriting of non-affected screen areas by the new * output. * * The following cases may occur: * * 1. In case chsl points to somewhere outside and above the area to refresh, * the cursor is set to the top-left and the following history-paragraph * is sent to the screen, skipping the lines which are outside the screen. * The number of lines to skip is given by: chsl - (scrollback_top - y_top). * * 2. When cshl exactly corresponds to the top line of the area of refresh, * the cursor is placed in the top-left and output can be started right * away. Output is limited to (y_size) lines. After paragraph output, * refresh_window0 is executed recusively, resulting in another step 2 * execution. * * 3. In case cshl is located somewhere inside the refresh area -- not on * the topmost or lowermost line -- the history is rewinded by one * paragraph and this paragraph is sent to the output (without advancing * the history again) in order to measure it's height. This step is * repeated until we're at the top refresh area's line or above it so we * can continue with step 1 or 2. * */ #include #include #include // FOR INT32_MAX #include "tools/i18n.h" #include "tools/tracelog.h" #include "tools/types.h" #include "tools/unused.h" #include "tools/z_ucs.h" #include "interpreter/cmd_hst.h" #include "interpreter/config.h" #include "interpreter/fizmo.h" #include "interpreter/history.h" #include "interpreter/streams.h" #include "interpreter/text.h" #include "interpreter/wordwrap.h" #include "interpreter/zpu.h" #include "interpreter/output.h" #include "cell_interface.h" #include "../screen_interface/screen_cell_interface.h" #include "../locales/libcellif_locales.h" struct z_window { // Attributes as defined by Z-Machine-Spec: int ypos; // 1 is topmost position int xpos; // 1 is leftmost position int ysize; int xsize; int ycursorpos; // 1 is topmost position int xcursorpos; // 1 is leftmost position int leftmargin; int rightmargin; uint32_t newline_routine; int interrupt_countdown; z_style text_style; z_colour foreground_colour; z_colour background_colour; z_font font_type; int font_size; int line_count; bool wrapping; bool stream2copying_active; bool buffering; // Attributes for internal use: int window_number; int nof_consecutive_lines_output; // line counter for [more] int lowermargin; // used by libcellif, not by z-spec int uppermargin; // used by libcellif, not by z-spec int remaining_lines_to_fill; int32_t lines_to_skip; // find something better than int32_t? z_colour output_foreground_colour; z_colour output_background_colour; z_style output_text_style; // This stores the current view's top line number during scrolling. In this // context, line no 1 is the bottommost line which has been displayed on // the screen, 2 the line directly above and so on. int scrollback_top_line; WORDWRAP *wordwrapper; }; static char *screen_cell_interface_version = LIBCELLINTERFACE_VERSION; static int screen_height = -1; static int screen_width = -1; static int nof_active_z_windows = 0; static int statusline_window_id = -1; static int custom_left_margin = 0; static int custom_right_margin = 0; static bool hyphenation_enabled = true; static bool using_colors = false; static bool color_disabled = false; static bool disable_more_prompt = false; static z_ucs *libcellif_more_prompt; static z_ucs *libcellif_score_string; static z_ucs *libcellif_turns_string; static z_ucs space_string[] = { Z_UCS_SPACE, 0 }; static int libcellif_right_status_min_size; static int active_z_window_id = -1; static z_colour current_output_foreground_colour = -3; static z_colour current_output_background_colour = -3; static z_style current_output_text_style = -1; static int last_split_window_size = 0; static bool winch_found = false; static bool interface_open = false; // The "history" is used by the scrolling and and screen-refresh // functions. It is allocated as long as scrolling is in // progress (means as long as the user only presses page-up or page-down // and no output occurs inbetween) and as long as the "refresh_window0" // method is active. Otherwise it must be null. static history_output *history = NULL; static int current_history_screen_line = -1; static bool current_history_hit_top = false; static int rightmost_y_refresh_curpos = -1; // This flag is set to true when an read_line is currently underway. It's // used by screen refresh functions like "new_cell_screen_size". static bool input_line_on_screen = false; static z_ucs *current_input_buffer = NULL; static z_ucs newline_string[] = { '\n', 0 }; static bool timed_input_active; static struct z_window **z_windows; static struct z_screen_cell_interface *screen_cell_interface = NULL; static int *current_input_size, *current_input_scroll_x, *current_input_index; static int *current_input_display_width, *current_input_x, *current_input_y; static char last_left_margin_config_value_as_string[MAX_MARGIN_AS_STRING_LEN]; static char last_right_margin_config_value_as_string[MAX_MARGIN_AS_STRING_LEN]; static char *config_option_names[] = { "left-margin", "right-margin", "disable-hyphenation", "disable-color", NULL }; static void refresh_cursor(int window_id) { TRACE_LOG("refresh_cursor for win %d:%d/%d/%d/%d\n", window_id, z_windows[window_id]->ypos, z_windows[window_id]->ycursorpos, z_windows[window_id]->xpos, z_windows[window_id]->xcursorpos); screen_cell_interface->goto_yx( z_windows[window_id]->ypos + z_windows[window_id]->ycursorpos - 1, z_windows[window_id]->xpos + z_windows[window_id]->xcursorpos - 1); } static void wordwrap_output_colour(void *window_number, uint32_t color_data) { int window_id = *((int*)window_number); TRACE_LOG("wordwrap-color: %d, %d.\n", (z_colour)color_data & 0xff, (z_colour)(color_data >> 16)); z_windows[window_id]->output_foreground_colour = (z_colour)color_data & 0xff; z_windows[window_id]->output_background_colour = (z_colour)(color_data >> 16); } static void wordwrap_output_style(void *window_number, uint32_t style_data) { int window_id = *((int*)window_number); TRACE_LOG("wordwrap-style:%d.\n", style_data); TRACE_LOG("window: %d.\n", window_id); z_windows[window_id]->output_text_style = (z_style)style_data; } static void switch_to_window(int window_id) { TRACE_LOG("Switching to window %d.\n", window_id); active_z_window_id = window_id; refresh_cursor(active_z_window_id); } static void update_output_colours(int window_number) { if (using_colors == false) return; if ( (z_windows[window_number]->output_foreground_colour != current_output_foreground_colour) || (z_windows[window_number]->output_background_colour != current_output_background_colour) ) { screen_cell_interface->set_colour( z_windows[window_number]->output_foreground_colour, z_windows[window_number]->output_background_colour); current_output_foreground_colour = z_windows[window_number]->output_foreground_colour; current_output_background_colour = z_windows[window_number]->output_background_colour; } } static void update_output_text_style(int window_number) { if (z_windows[window_number]->output_text_style != current_output_text_style) { current_output_text_style = z_windows[window_number]->output_text_style; screen_cell_interface->set_text_style(current_output_text_style); } } static void flush_all_buffered_windows() { int i; for (i=0; ibuffering, true)) wordwrap_flush_output(z_windows[i]->wordwrapper); } void clear_to_end_of_cell_line() { z_style style_buf; // Disable potential reverse output. style_buf = z_windows[active_z_window_id]->output_text_style; z_windows[active_z_window_id]->output_text_style &= ~Z_STYLE_REVERSE_VIDEO; update_output_text_style(active_z_window_id); screen_cell_interface->clear_to_eol(); // Re-enable potential reverse output. z_windows[active_z_window_id]->output_text_style = style_buf; } void z_ucs_output_window_target(z_ucs *z_ucs_output, void *window_number_as_void) { int window_number = *((int*)window_number_as_void); z_ucs input, event_type; z_ucs buf = 0; // init to 0 to calm compiler. z_ucs *linebreak; int space_on_line, i; if (*z_ucs_output == 0) return; if (z_windows[window_number]->ycursorpos - 1 + z_windows[window_number]->lowermargin >= z_windows[window_number]->ysize) { z_windows[window_number]->ycursorpos = z_windows[window_number]->ysize - z_windows[window_number]->lowermargin; } update_output_colours(window_number); update_output_text_style(window_number); refresh_cursor(window_number); TRACE_LOG("output-window-target, win %d, %dx%d.\n", window_number, z_windows[window_number]->xsize, z_windows[window_number]->ysize); while (*z_ucs_output != 0) { TRACE_LOG("remaining_lines_to_fill: %d, lines to skip: %d.\n", z_windows[window_number]->remaining_lines_to_fill, z_windows[0]->lines_to_skip); TRACE_LOG("Output queue: \""); TRACE_LOG_Z_UCS(z_ucs_output); TRACE_LOG("\".\n"); space_on_line = z_windows[window_number]->xsize - z_windows[window_number]->rightmargin - (z_windows[window_number]->xcursorpos - 1); TRACE_LOG("space on line: %d, xcursorpos: %d.\n", space_on_line, z_windows[window_number]->xcursorpos - 1); // Find a suitable spot to break the line. Check if data contains some // newline char. linebreak = z_ucs_chr(z_ucs_output, Z_UCS_NEWLINE); // In case we cannot put anymore on this line anyway, simple advance // to the next newline or finish output. if ( (space_on_line <= 0) && (z_windows[window_number]->wrapping == false) ) { // If wrapping is not allowed and there's either no newline found or // we're at the bottom of the window, simply quit. if ( (linebreak == NULL) || (z_windows[window_number]->ycursorpos == z_windows[window_number]->ysize) ) return; if (z_windows[window_number]->lines_to_skip > 0) { z_windows[window_number]->lines_to_skip--; z_ucs_output = linebreak + 1; } else { // Else we can advance to the next line. z_ucs_output = linebreak + 1; z_windows[window_number]->xcursorpos = 1 + z_windows[window_number]->leftmargin; z_windows[window_number]->ycursorpos++; continue; } } if (space_on_line < 0) { // This may happen in case the cursor moved off the right side of // a non-wrapping window. space_on_line = 0; } // In case no newline was found or in case the found newline is too far // away to fit on the current line ... if ( (linebreak == NULL) || (linebreak - z_ucs_output > space_on_line) ) { // ... test if the rest of the line fits on screen. If it doesn't // we'll put as much on the line as possible and break after that. linebreak = (signed)z_ucs_len(z_ucs_output) > space_on_line ? z_ucs_output + space_on_line : NULL; } // Direct output of the current line including the newline char does // not work if margins are used and probably (untested) if a window // is not at the left side. // In case we're breaking in the middle of the line, we'll have to // put a '\0' there and store the original data in "buf". if (linebreak != NULL) { TRACE_LOG("linebreak found.\n"); buf = *linebreak; *linebreak = 0; TRACE_LOG("buf: %d\n", buf); } TRACE_LOG("Output at %d/%d:\"", z_windows[window_number]->xcursorpos, z_windows[window_number]->ycursorpos); refresh_cursor(window_number); TRACE_LOG_Z_UCS(z_ucs_output); TRACE_LOG("\".\n"); // Output data as far space on the line permits. if ( (z_windows[window_number]->lines_to_skip < 1) && (z_windows[window_number]->remaining_lines_to_fill != 0) ) { screen_cell_interface->z_ucs_output(z_ucs_output); z_windows[window_number]->xcursorpos += z_ucs_len(z_ucs_output); } if (linebreak != NULL) { // At the end of the line TRACE_LOG("At end of line, to_skip: %d, to_fill: %d.\n", z_windows[window_number]->lines_to_skip, z_windows[window_number]->remaining_lines_to_fill); if ( (z_windows[window_number]->lines_to_skip < 1) && ( (z_windows[window_number]->remaining_lines_to_fill != 0) && (z_windows[window_number]->remaining_lines_to_fill != 1))) { // In order to keep clean margins, remove current style. screen_cell_interface->set_text_style(0); z_windows[window_number]->xcursorpos = 1; if ( (z_windows[window_number]->ycursorpos + z_windows[window_number]->lowermargin == z_windows[window_number]->ysize) && (z_windows[window_number]->wrapping == true) ) { // Due to the if clause regarding wrapping above, at this point we // now we're allowed to scroll at the bottom of the window. TRACE_LOG("copy_area with upper margin %d, lower margin: %d.\n", z_windows[0]->uppermargin, z_windows[0]->lowermargin); screen_cell_interface->copy_area( z_windows[window_number]->ypos + z_windows[window_number]->uppermargin, z_windows[window_number]->xpos, z_windows[window_number]->ypos + z_windows[window_number]->uppermargin + 1, z_windows[window_number]->xpos, z_windows[window_number]->ysize - z_windows[window_number]->lowermargin - z_windows[window_number]->uppermargin - 1, z_windows[window_number]->xsize); refresh_cursor(window_number); // Clear line, including left margin, to EOL. clear_to_end_of_cell_line(); } else { // If we're not at the bottom of the window, simply move // to next line. z_windows[window_number]->ycursorpos++; refresh_cursor(window_number); } // Move cursor to right margin and re-activate current style setting. z_windows[window_number]->xcursorpos = 1 + z_windows[window_number]->leftmargin; refresh_cursor(window_number); screen_cell_interface->set_text_style( z_windows[window_number]->output_text_style); } else { z_windows[window_number]->xcursorpos = 1 + z_windows[window_number]->leftmargin; } // Restore char at linebreak and additionally skip newline if // required. *linebreak = buf; z_ucs_output = linebreak; if (*z_ucs_output == Z_UCS_NEWLINE) { TRACE_LOG("newline-skip.\n"); z_ucs_output++; } if (z_windows[window_number]->wrapping == true) { z_windows[window_number]->nof_consecutive_lines_output++; TRACE_LOG("consecutive lines: %d.\n", z_windows[window_number]->nof_consecutive_lines_output); // FIXME: Implement height 255 if ( (z_windows[window_number]->nof_consecutive_lines_output == z_windows[window_number]->ysize - 1) && (disable_more_prompt == false) && (winch_found == false) && (z_windows[window_number]->remaining_lines_to_fill != 0) && (z_windows[window_number]->lines_to_skip < 1) ) { TRACE_LOG("Displaying more prompt.\n"); // Loop below will result in recursive "z_ucs_output_window_target" // call. Dangerous? for (i=0; ibuffering, true)) ) { wordwrap_flush_output(z_windows[i]->wordwrapper); } } screen_cell_interface->z_ucs_output(libcellif_more_prompt); screen_cell_interface->update_screen(); refresh_cursor(window_number); // FIXME: Check for sound interrupt? do { event_type = screen_cell_interface->get_next_event(&input, 0); if (event_type == EVENT_WAS_TIMEOUT) { TRACE_LOG("timeout.\n"); } } while (event_type == EVENT_WAS_TIMEOUT); z_windows[window_number]->xcursorpos = z_windows[window_number]->leftmargin + 1; refresh_cursor(window_number); clear_to_end_of_cell_line(); if (event_type == EVENT_WAS_WINCH) { winch_found = true; // The more prompt was "interrupted" by a window screen size // change. We'll now have to initiate a redraw. Since a redraw // is always based on the history, which is not synced to the // output this function receives, we'll now forget about the // current output and then initiate a redraw from before the // next input. break; } z_windows[window_number]->nof_consecutive_lines_output = 0; TRACE_LOG("more prompt finished: %d.\n", event_type); } } if (z_windows[window_number]->lines_to_skip > 0) z_windows[window_number]->lines_to_skip--; else if (z_windows[window_number]->remaining_lines_to_fill > 0) z_windows[window_number]->remaining_lines_to_fill--; } else z_ucs_output += z_ucs_len(z_ucs_output); } TRACE_LOG("z_ucs_output_window_target finished.\n"); } static char* get_interface_name() { return screen_cell_interface->get_interface_name(); } static bool is_status_line_available() { return true; } static bool is_split_screen_available() { return true; } static bool is_variable_pitch_font_default() { return false; } static bool is_colour_available() { return using_colors; } static bool is_picture_displaying_available() { return false; } static bool is_bold_face_available() { return screen_cell_interface->is_bold_face_available(); } static bool is_italic_available() { return screen_cell_interface->is_italic_available(); } static bool is_fixed_space_font_available() { return true; } static bool is_timed_keyboard_input_available() { return screen_cell_interface->is_input_timeout_available(); } static bool is_preloaded_input_available() { return true; } static bool is_character_graphics_font_availiable() { return true; } static bool is_picture_font_availiable() { return false; } static uint8_t get_screen_height() { if (screen_height < 0) exit(-1); else return screen_height; } static uint8_t get_screen_width() { if (screen_width < 0) exit(-1); else return screen_width; } static uint8_t get_screen_height_in_units() { return get_screen_height(); } static uint8_t get_screen_width_in_units() { return get_screen_width(); } static uint8_t get_font_width_in_units() { return 1; } static uint8_t get_font_height_in_units() { return 1; } static z_colour get_default_foreground_colour() { return screen_cell_interface->get_default_foreground_colour(); } static z_colour get_default_background_colour() { return screen_cell_interface->get_default_background_colour(); } static uint8_t get_total_width_in_pixels_of_text_sent_to_output_stream_3() { return 0; } static int parse_config_parameter(char *key, char *value) { long long_value; char *endptr; TRACE_LOG("cell-if parsing config param key \"%s\", value \"%s\".\n", key, value != NULL ? value : "(null)"); if ( (strcasecmp(key, "left-margin") == 0) || (strcasecmp(key, "right-margin") == 0) ) { if ( (value == NULL) || (strlen(value) == 0) ) return -1; long_value = strtol(value, &endptr, 10); free(value); if (*endptr != 0) return -1; if (strcasecmp(key, "left-margin") == 0) set_custom_left_cell_margin(long_value); else set_custom_right_cell_margin(long_value); return 0; } else if (strcasecmp(key, "disable-hyphenation") == 0) { if ( (value == NULL) || (*value == 0) || (strcmp(value, config_true_value) == 0)) hyphenation_enabled = false; else hyphenation_enabled = true; free(value); return 0; } else if (strcasecmp(key, "disable-color") == 0) { if ( (value == NULL) || (*value == 0) || (strcmp(value, config_true_value) == 0) ) color_disabled = true; else color_disabled = false; free(value); return 0; } else if (strcasecmp(key, "enable-color") == 0) { if ( (value == NULL) || (*value == 0) || (strcmp(value, config_true_value) == 0) ) color_disabled = false; else color_disabled = true; free(value); return 0; } else { return screen_cell_interface->parse_config_parameter(key, value); } } static char *get_config_value(char *key) { if (strcasecmp(key, "left-margin") == 0) { snprintf(last_left_margin_config_value_as_string, MAX_MARGIN_AS_STRING_LEN, "%d", custom_left_margin); return last_left_margin_config_value_as_string; } else if (strcasecmp(key, "right-margin") == 0) { snprintf(last_right_margin_config_value_as_string, MAX_MARGIN_AS_STRING_LEN, "%d", custom_right_margin); return last_right_margin_config_value_as_string; } else if (strcasecmp(key, "disable-hyphenation") == 0) { return hyphenation_enabled == false ? config_true_value : config_false_value; } else if (strcasecmp(key, "disable-color") == 0) { return color_disabled == true ? config_true_value : config_false_value; } else if (strcasecmp(key, "enable-color") == 0) { return color_disabled == false ? config_true_value : config_false_value; } else { return screen_cell_interface->get_config_value(key); } } static char **get_config_option_names() { return config_option_names; } static void z_ucs_output(z_ucs *z_ucs_output) { TRACE_LOG("Output: \""); TRACE_LOG_Z_UCS(z_ucs_output); TRACE_LOG("\" to window %d, buffering: %d.\n", active_z_window_id, active_z_window_id != -1 ? z_windows[active_z_window_id]->buffering : -1); if (active_z_window_id == -1) screen_cell_interface->z_ucs_output(z_ucs_output); else { if (bool_equal(z_windows[active_z_window_id]->buffering, false)) { update_output_colours(active_z_window_id); update_output_text_style(active_z_window_id); z_ucs_output_window_target( z_ucs_output, (void*)(&z_windows[active_z_window_id]->window_number)); } else { wordwrap_wrap_z_ucs( z_windows[active_z_window_id]->wordwrapper, z_ucs_output); } } TRACE_LOG("z_ucs_output finished.\n"); } static void link_interface_to_story(struct z_story *story) { int bytes_to_allocate; int len; int i; TRACE_LOG("Linking screen interface to cell interface.\n"); screen_cell_interface->link_interface_to_story(story); TRACE_LOG("Linking complete.\n"); if (ver >= 5) { if ( (color_disabled == false) && (screen_cell_interface->is_colour_available() == true) ) { // we'll be using colors for this story. using_colors = true; TRACE_LOG("Color enabled.\n"); } else { TRACE_LOG("Color disabled.\n"); } } screen_height = screen_cell_interface->get_screen_height(); screen_width = screen_cell_interface->get_screen_width(); if (ver <= 2) nof_active_z_windows = 1; else if (ver == 6) nof_active_z_windows = 8; else nof_active_z_windows = 2; if (ver <= 3) { statusline_window_id = nof_active_z_windows; nof_active_z_windows++; } TRACE_LOG("Number of active windows: %d.\n", nof_active_z_windows); bytes_to_allocate = sizeof(struct z_window*) * nof_active_z_windows; z_windows = (struct z_window**)fizmo_malloc(bytes_to_allocate); bytes_to_allocate = sizeof(struct z_window); for (i=0; iwindow_number = i; z_windows[i]->ypos = 1; z_windows[i]->xpos = 1; z_windows[i]->text_style = Z_STYLE_ROMAN; z_windows[i]->output_text_style = Z_STYLE_ROMAN; z_windows[i]->nof_consecutive_lines_output = 0; z_windows[i]->uppermargin = 0; z_windows[i]->lowermargin = 0; z_windows[i]->remaining_lines_to_fill = -1; z_windows[i]->lines_to_skip = -1; if (i == 0) { z_windows[i]->ysize = screen_height; z_windows[i]->scrollback_top_line = screen_height; z_windows[i]->xsize = screen_width; z_windows[i]->stream2copying_active = true; if (ver != 6) { z_windows[i]->leftmargin = custom_left_margin; z_windows[i]->rightmargin = custom_right_margin; } if (statusline_window_id > 0) { z_windows[i]->ysize--; z_windows[i]->scrollback_top_line--; z_windows[i]->ypos++; } } else { z_windows[i]->stream2copying_active = false; z_windows[i]->leftmargin = 0; z_windows[i]->rightmargin = 0; if (i == 1) { z_windows[i]->ysize = 0; z_windows[i]->scrollback_top_line = 0; z_windows[i]->xsize = screen_width; if (statusline_window_id > 0) z_windows[i]->ypos++; } else if (i == statusline_window_id) { z_windows[i]->ysize = 1; z_windows[i]->scrollback_top_line = 1; z_windows[i]->xsize = screen_width; z_windows[i]->text_style = Z_STYLE_REVERSE_VIDEO; z_windows[i]->output_text_style = Z_STYLE_REVERSE_VIDEO; } else { z_windows[i]->ysize = 0; z_windows[i]->scrollback_top_line = 0; z_windows[i]->xsize = 0; } } z_windows[i]->ycursorpos = (ver >= 5 ? 1 : z_windows[i]->ysize); z_windows[i]->xcursorpos = 1 + z_windows[i]->leftmargin; z_windows[i]->newline_routine = 0; z_windows[i]->interrupt_countdown = 0; z_windows[i]->foreground_colour = default_foreground_colour; z_windows[i]->background_colour = default_background_colour; z_windows[i]->output_foreground_colour = default_foreground_colour; z_windows[i]->output_background_colour = default_background_colour; z_windows[i]->font_type = 0; z_windows[i]->font_size = 0; z_windows[i]->line_count = 0; z_windows[i]->wrapping = (i == 0) ? true : false; z_windows[i]->buffering = ((ver == 6) || (i == 0)) ? true : false; z_windows[i]->wordwrapper = wordwrap_new_wrapper( z_windows[i]->xsize-z_windows[i]->leftmargin-z_windows[i]->rightmargin, &z_ucs_output_window_target, (void*)(&z_windows[i]->window_number), true, 0, false, hyphenation_enabled); } active_z_window_id = 0; // First, set default colors for the screen, then clear it to correctly // initialize everything with the desired colors. if (using_colors == true) screen_cell_interface->set_colour( default_foreground_colour, default_background_colour); screen_cell_interface->clear_area(1, 1, screen_width, screen_height); libcellif_more_prompt = i18n_translate_to_string( libcellif_module_name, i18n_libcellif_MORE_PROMPT); len = z_ucs_len(libcellif_more_prompt); libcellif_more_prompt = (z_ucs*)fizmo_realloc(libcellif_more_prompt, sizeof(z_ucs) * (len + 3)); memmove( libcellif_more_prompt + 1, libcellif_more_prompt, len * sizeof(z_ucs)); libcellif_more_prompt[0] = '['; libcellif_more_prompt[len+1] = ']'; libcellif_more_prompt[len+2] = 0; libcellif_score_string = i18n_translate_to_string( libcellif_module_name, i18n_libcellif_SCORE); libcellif_turns_string = i18n_translate_to_string( libcellif_module_name, i18n_libcellif_TURNS); // -> "Score: x Turns: x ", libcellif_right_status_min_size = z_ucs_len(libcellif_score_string) + z_ucs_len(libcellif_turns_string) + 9; // 5 Spaces, 2 colons, 2 digits. refresh_cursor(active_z_window_id); /* // Advance the cursor for ZTUU. This will allow the player to read // the first line of text before it's overwritten by the status line. if ( (strcmp(story->serial_code, "970828") == 0) && (story->release_code == (uint16_t)16) && (story->checksum == (uint16_t)4485) ) waddch(z_windows[0]->curses_window, '\n'); if ( (story->title != NULL) && (use_xterm_title == true) ) printf("%c]0;%s%c", 033, story->title, 007); */ interface_open = true; } static void reset_interface() { screen_cell_interface->reset_interface(); } static int cell_close_interface(z_ucs *error_message) { int event_type; z_ucs input; int i; if ( (error_message == NULL) && (interface_open == true) ) { streams_latin1_output("["); i18n_translate( libcellif_module_name, i18n_libcellif_PRESS_ANY_KEY_TO_QUIT); streams_latin1_output("]"); wordwrap_flush_output(z_windows[active_z_window_id]->wordwrapper); screen_cell_interface->update_screen(); do event_type = screen_cell_interface->get_next_event(&input, 0); while (event_type == EVENT_WAS_WINCH); } screen_cell_interface->close_interface(error_message); free(libcellif_more_prompt); free(libcellif_score_string); free(libcellif_turns_string); for (i=0; iwordwrapper != NULL) { if (z_windows[i] != NULL) { wordwrap_destroy_wrapper(z_windows[i]->wordwrapper); z_windows[i]->wordwrapper = NULL; free(z_windows[i]); z_windows[i] = NULL; } } } if (z_windows != NULL) { free(z_windows); z_windows = NULL; } interface_open = false; return 0; } static void set_buffer_mode(uint8_t UNUSED(new_buffer_mode)) { } static void split_window(int16_t nof_lines) { int lines_delta; if (nof_lines >= 0) { if (nof_lines > screen_height) nof_lines = screen_height; lines_delta = nof_lines - z_windows[1]->ysize; if (lines_delta != 0) { TRACE_LOG("Old cursor y-pos for window 0: %d.\n", z_windows[0]->ycursorpos); TRACE_LOG("delta %d\n", lines_delta); if (bool_equal(z_windows[0]->buffering, true)) wordwrap_flush_output(z_windows[0]->wordwrapper); z_windows[0]->ysize -= lines_delta; z_windows[0]->scrollback_top_line -= lines_delta; z_windows[0]->ycursorpos -= lines_delta; z_windows[0]->ypos += lines_delta; z_windows[1]->ysize += lines_delta; z_windows[1]->scrollback_top_line += lines_delta; if (z_windows[0]->ycursorpos < 1) { z_windows[0]->xcursorpos = 1; z_windows[0]->ycursorpos = 1; TRACE_LOG("Re-adjusting cursor for lower window.\n"); } if (z_windows[1]->ycursorpos > z_windows[1]->ysize) { z_windows[1]->xcursorpos = 1; z_windows[1]->ycursorpos = 1; TRACE_LOG("Re-adjusting cursor for upper window.\n"); } TRACE_LOG("New cursor y-pos for window 0: %d (%d).\n", z_windows[0]->ycursorpos, z_windows[0]->ypos); if (ver == 3) screen_cell_interface->clear_area( z_windows[1]->xpos, z_windows[1]->ypos, z_windows[1]->xsize, z_windows[1]->ysize); } last_split_window_size = nof_lines; } } static void erase_window(int16_t window_number) { z_style style_buf; if ( (window_number >= 0) && (window_number <= nof_active_z_windows - (statusline_window_id >= 0 ? 1 : 0)) ) { // Erasing window -1 clears the whole screen to the background colour of // the lower screen, collapses the upper window to height 0, moves the // cursor of the lower screen to bottom left (in Version 4) or top left // (in Versions 5 and later) and selects the lower screen. The same // operation should happen at the start of a game (Z-Spec 8.7.3.3). if (bool_equal(z_windows[window_number]->buffering, true)) wordwrap_flush_output(z_windows[window_number]->wordwrapper); update_output_colours(window_number); // Disable potential reverse output. style_buf = z_windows[window_number]->output_text_style; z_windows[window_number]->output_text_style &= ~Z_STYLE_REVERSE_VIDEO; update_output_text_style(window_number); screen_cell_interface->clear_area( z_windows[window_number]->xpos, z_windows[window_number]->ypos, z_windows[window_number]->xsize, z_windows[window_number]->ysize); // Re-enable potential reverse output. z_windows[window_number]->output_text_style = style_buf; z_windows[window_number]->xcursorpos = 1 + z_windows[window_number]->leftmargin; z_windows[window_number]->ycursorpos = (ver >= 5 ? 1 : z_windows[window_number]->ysize); z_windows[window_number]->nof_consecutive_lines_output = 0; } } static void set_text_style(z_style text_style) { int i; TRACE_LOG("New text style is %d.\n", text_style); //z_windows[active_z_window_id]->text_style = text_style; for (i=0; ibuffering, false)) z_windows[i]->output_text_style = text_style; else wordwrap_insert_metadata( z_windows[i]->wordwrapper, &wordwrap_output_style, (void*)(&z_windows[i]->window_number), (uint32_t)text_style); } } } static void set_colour(z_colour foreground, z_colour background, int16_t window_number) { int index, end_index, highest_valid_window_id; TRACE_LOG("set-color: %d,%d,%d\n", foreground, background, window_number); if (using_colors != true) return; if ( (foreground < 0) || (background < 0) ) { TRACE_LOG("Colors < 0 not yet implemented.\n"); exit(-102); } highest_valid_window_id = nof_active_z_windows - (statusline_window_id >= 0 ? 2 : 1); if (window_number == -1) { index = 0; end_index = highest_valid_window_id; } else if ( (window_number >= 0) && (window_number <= highest_valid_window_id) ) { index = window_number; end_index = window_number; } else return; while (index <= end_index) { TRACE_LOG("Processing window %d.\n", index); if (bool_equal(z_windows[index]->buffering, false)) { z_windows[index]->output_foreground_colour = foreground; z_windows[index]->output_background_colour = background; } else { TRACE_LOG("new metadata color(%d): %d/%d.\n", index, foreground, background); wordwrap_insert_metadata( z_windows[index]->wordwrapper, &wordwrap_output_colour, (void*)(&z_windows[index]->window_number), ((uint16_t)foreground | ((uint16_t)(background) << 16))); } index++; } } static void set_font(z_font UNUSED(font_type)) { } static history_output_target history_target = { &set_text_style, &set_colour, &set_font, &z_ucs_output, }; static void refresh_input_line() { z_ucs buf = 0; int last_active_z_window_id = -1; TRACE_LOG("Refreshing input line.\n"); if (input_line_on_screen == false) return; if (active_z_window_id != 0) { last_active_z_window_id = active_z_window_id; switch_to_window(0); } if (*current_input_size > 0) { TRACE_LOG("out:%d, %d, %d\n", *current_input_size, *current_input_scroll_x, *current_input_display_width); // Set output style to current window 0 style. update_output_colours(0); update_output_text_style(0); TRACE_LOG("Current input size: %d.\n", *current_input_size); if (*current_input_size - *current_input_scroll_x >= *current_input_display_width + 1) { buf = current_input_buffer[ *current_input_scroll_x + *current_input_display_width]; current_input_buffer[ *current_input_scroll_x + *current_input_display_width] = 0; } screen_cell_interface->goto_yx(*current_input_y, *current_input_x); screen_cell_interface->z_ucs_output( current_input_buffer + *current_input_scroll_x); if (buf != 0) current_input_buffer[ *current_input_scroll_x + *current_input_display_width] = buf; } TRACE_LOG("cii: %d, cis: %d\n", *current_input_index, *current_input_scroll_x); z_windows[0]->xcursorpos = *current_input_x + *current_input_index - *current_input_scroll_x; TRACE_LOG("ycp:%d, ciy: %d.\n", z_windows[0]->ycursorpos, *current_input_y); z_windows[0]->ycursorpos = *current_input_y - (z_windows[0]->ypos - 1); wordwrap_set_line_index(z_windows[0]->wordwrapper, *current_input_x - z_windows[0]->xpos - z_windows[0]->leftmargin); refresh_cursor(active_z_window_id); if (last_active_z_window_id != -1) switch_to_window(last_active_z_window_id); } // This function returns true if at least one line of the desired output // could be displayed. It returns false in case nothing could be shown (which // means that the desired area-to-show is outside the recorded history). // // If nof_paragraph_diff is non-NULL, this function will modify it by the // number of paragraph history advances. That means that if one paragraph // has been repeated and the history pointer advanced accordingly, 1 is // added to the value references by this pointer. In case the history has been // rewinded by one last paragraph, 1 is being subtracted. static bool refresh_window0_inner(int y_size, int y_refresh_top, int *nof_paragraph_diff) { int return_code, lines_left, nof_paragraph_lines; int nof_relevant_lines, original_pos; int my_paragraph_diff = 0; bool result = false; //z_ucs input; TRACE_LOG("refresh_window0_inner(y_size:%d, y_refresh_top:%d)\n", y_size, y_refresh_top); TRACE_LOG("lowermargin %d, uppermargin %d.\n", z_windows[0]->lowermargin, z_windows[0]->uppermargin); if (y_size == 0) { return false; } else if (y_size < 0) { y_size = z_windows[0]->ysize; } if (y_refresh_top > z_windows[0]->ysize) { TRACE_LOG("Cannot refresh below screen at line %d.\n", y_refresh_top); exit(-1); } else if (y_refresh_top < 1) { TRACE_LOG("Cannot refresh above screen at line %d.\n", y_refresh_top); exit(-1); } if (y_refresh_top - 1 + y_size > z_windows[0]->ysize) { TRACE_LOG("Cannot refresh area longer than screen at %d lines.\n", z_windows[0]->ysize); exit(-1); //y_size = z_windows[0]->ysize - y_refresh_top; } TRACE_LOG("current_history_screen_line: %d, scrollback_top_line: %d\n", current_history_screen_line, z_windows[0]->scrollback_top_line); TRACE_LOG("Refreshing screen from %d to %d at scrollback %d/%d.\n", y_refresh_top, y_refresh_top + (y_size - 1), z_windows[0]->scrollback_top_line - (y_refresh_top - 1), z_windows[0]->scrollback_top_line - ((y_refresh_top - 1) + (y_size - 1))); // Please note: // In the very first iteration, current_history_screen_line == 0 which means // below the screen. if (z_windows[0]->scrollback_top_line - (y_refresh_top - 1) - y_size > current_history_screen_line) { // 0. chsl lower than refresh-area boundary. this is a not-so-nice // case, since we don't know how many lines the next "upwards" // paragraph has, so we have to measure first -- we'll set // lines to skip to pseudo-infinite and proceed with case 1 or 2 // afterwards. TRACE_LOG("Scrolling case #0.\n"); return_code = output_rewind_paragraph(history, NULL, NULL, NULL); if (return_code < 0) { i18n_translate_and_exit( libcellif_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "output_rewind_paragraph"); } else if (return_code == 1) { // In case we've hit the buffer back there's nothing more to do since // we're below the area to redraw. current_history_hit_top = true; result = false; } else { my_paragraph_diff--; z_windows[0]->lines_to_skip = INT32_MAX; z_windows[0]->nof_consecutive_lines_output = 0; wordwrap_set_line_index(z_windows[0]->wordwrapper, 0); z_windows[0]->xcursorpos = 1 + z_windows[0]->leftmargin; // No need to set ypos since we're not writing to screen anyway. All // the other positions are required for proper linebreaking, though. return_code = output_repeat_paragraphs(history, 1, true, false); if (bool_equal(z_windows[0]->buffering, true)) wordwrap_flush_output(z_windows[0]->wordwrapper); nof_paragraph_lines = z_windows[0]->nof_consecutive_lines_output + 1; if ( (return_code < 0) && (current_history_screen_line != 0) ) { TRACE_LOG("history inconsistent, buffer end at chsl: %d.\n", current_history_screen_line); i18n_translate_and_exit( libcellif_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "output_rewind_paragraph"); } current_history_screen_line += nof_paragraph_lines; z_windows[0]->lines_to_skip = 0; result = refresh_window0_inner(y_size, y_refresh_top, &my_paragraph_diff); } } else if (z_windows[0]->scrollback_top_line - (y_refresh_top - 1) - y_size == current_history_screen_line) { // 1. chsl exactly on lower refresh-area boundary. TRACE_LOG("Scrolling case #1.\n"); z_windows[0]->xcursorpos = 1 + z_windows[0]->leftmargin; z_windows[0]->ycursorpos = y_refresh_top + y_size - 1; z_windows[0]->lowermargin = z_windows[0]->ysize - (y_refresh_top + (y_size - 1)); z_windows[0]->nof_consecutive_lines_output = 0; wordwrap_set_line_index(z_windows[0]->wordwrapper, 0); refresh_cursor(0); TRACE_LOG("Refreshing above history line %d with lowermargin %d.\n", current_history_screen_line, z_windows[0]->lowermargin); if ((return_code = output_rewind_paragraph(history,NULL,NULL,NULL)) < 0) { i18n_translate_and_exit( libcellif_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "output_rewind_paragraph"); } else if (return_code == 1) { // In case we've hit the buffer back there's nothing more to do since // we're at the bottom of the area to redraw. current_history_hit_top = true; result = false; } else { z_windows[0]->uppermargin = y_refresh_top - 1; if ( (output_repeat_paragraphs(history, 1, true, false) == -1) && (current_history_screen_line != 0) ) { TRACE_LOG("Buffer end, case #1, current_history_screen_line: %d.\n", current_history_screen_line); i18n_translate_and_exit( libcellif_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "output_repeat_paragraphs"); } result = true; TRACE_LOG("rewound_paragraph_was_newline_terminated: %d.\n", history->rewound_paragraph_was_newline_terminated); // This is a special case: When we're just starting rebuilding the // screen from the bottom of the buffer -- which means that // current_history_screen_line == 0 -- and the last paragraph was // terminated with a newline, we have to send this one explicitly // to the screen. if ( (current_history_screen_line == 0) && (history->rewound_paragraph_was_newline_terminated == true) ) { z_ucs_output_window_target( newline_string, (void*)(&z_windows[0]->window_number)); } my_paragraph_diff--; if (bool_equal(z_windows[0]->buffering, true)) wordwrap_flush_output(z_windows[0]->wordwrapper); //screen_cell_interface->update_screen(); //screen_cell_interface->get_next_event(&input, -1); z_windows[0]->uppermargin = 0; if (current_history_screen_line == 0) { rightmost_y_refresh_curpos = z_windows[0]->xpos + z_windows[0]->xcursorpos - 1; if (input_line_on_screen == true) { TRACE_LOG("At end of history, storing input-pos at: %d, width: %d.\n", z_windows[0]->xpos + z_windows[0]->xcursorpos + z_windows[0]->rightmargin, z_windows[0]->xsize - 1); *current_input_y = z_windows[0]->ypos + z_windows[0]->ycursorpos - 1; *current_input_x = z_windows[0]->xpos + z_windows[0]->xcursorpos - 1; *current_input_display_width = z_windows[0]->xpos + z_windows[0]->xsize - *current_input_x - z_windows[0]->rightmargin; TRACE_LOG("refresh-x: %d, refresh-y: %d.\n", *current_input_x, *current_input_y); TRACE_LOG("new input width: %d.\n", *current_input_display_width); } } nof_paragraph_lines = z_windows[0]->nof_consecutive_lines_output + 1; current_history_screen_line += nof_paragraph_lines; TRACE_LOG("Number of lines in last paragraph: %d.\n", nof_paragraph_lines); // We'll now determine whether some of the output is actually // relevant to our redraw operation. nof_relevant_lines = current_history_screen_line - (z_windows[0]->scrollback_top_line - (y_refresh_top - 1) - y_size); TRACE_LOG("Number of relevant lines: %d.\n", nof_relevant_lines); lines_left = y_size; if (nof_relevant_lines > 0) { lines_left -= nof_relevant_lines; } TRACE_LOG("lines_left: %d.\n", lines_left); if ( (lines_left> 0) && (return_code != 1) ) { result |= refresh_window0_inner( lines_left, y_refresh_top, &my_paragraph_diff); } } } else if ( (z_windows[0]->scrollback_top_line - (y_refresh_top - 1) > current_history_screen_line) && (z_windows[0]->scrollback_top_line - (y_refresh_top - 1) - y_size < current_history_screen_line) ) { // 2. chsl between upper and lower refresh area bounds TRACE_LOG("Scrolling case #2.\n"); original_pos = current_history_screen_line; TRACE_LOG("original_pos: %d\n", original_pos); TRACE_LOG("current_paragraph_index: %p\n", history->current_paragraph_index); z_windows[0]->remaining_lines_to_fill = current_history_screen_line - (z_windows[0]->scrollback_top_line - (y_refresh_top - 1) - y_size); TRACE_LOG("Lines to fill below chsl: %d.\n", z_windows[0]->remaining_lines_to_fill); z_windows[0]->lowermargin = z_windows[0]->ysize - ((y_refresh_top - 1) + y_size); z_windows[0]->ycursorpos //= z_windows[0]->lowermargin - z_windows[0]->remaining_lines_to_fill; //= y_refresh_top + 1 //+ (z_windows[0]->scrollback_top_line - current_history_screen_line); //= z_windows[0]->lowermargin - 1; //= z_windows[0]->ysize - z_windows[0]->lowermargin; //= y_refresh_top; = z_windows[0]->scrollback_top_line - current_history_screen_line; do { TRACE_LOG("ycursorpos: %d\n", z_windows[0]->ycursorpos); z_windows[0]->xcursorpos = 1 + z_windows[0]->leftmargin; z_windows[0]->ycursorpos++; wordwrap_set_line_index(z_windows[0]->wordwrapper, 0); z_windows[0]->nof_consecutive_lines_output = 0; refresh_cursor(0); TRACE_LOG("Refresh at %d/%d with lower margin %d.\n", z_windows[0]->xcursorpos, z_windows[0]->ycursorpos, z_windows[0]->lowermargin); return_code = output_repeat_paragraphs(history, 1, true, true); TRACE_LOG("Return code: %d.\n", return_code); /* if (return_code == -1) { TRACE_LOG("Error, remaining_lines_to_fill: %d.\n", z_windows[0]->remaining_lines_to_fill); i18n_translate_and_exit( libcellif_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "output_repeat_paragraphs"); } */ my_paragraph_diff++; current_history_hit_top = false; if (bool_equal(z_windows[0]->buffering, true)) wordwrap_flush_output(z_windows[0]->wordwrapper); if (z_windows[0]->remaining_lines_to_fill > 0) z_windows[0]->remaining_lines_to_fill--; nof_paragraph_lines = z_windows[0]->nof_consecutive_lines_output + 1; current_history_screen_line += nof_paragraph_lines; TRACE_LOG("last paragraph size %d, remaining_lines_to_fill: %d.\n", nof_paragraph_lines, z_windows[0]->remaining_lines_to_fill); TRACE_LOG("current_history_screen_line after output repeat: %d.\n", current_history_screen_line); TRACE_LOG("Cursor after refresh at %d/%d\n", z_windows[0]->xcursorpos, z_windows[0]->ycursorpos); } while ( (z_windows[0]->remaining_lines_to_fill > 0) && (return_code >= 0) ); z_windows[0]->remaining_lines_to_fill = -1; TRACE_LOG("Paragraphs to rewind: %d.\n", my_paragraph_diff); while (my_paragraph_diff > 0) { output_rewind_paragraph(history, NULL, NULL, NULL); my_paragraph_diff--; } current_history_screen_line = original_pos; TRACE_LOG("current_paragraph_index: %p\n", history->current_paragraph_index); TRACE_LOG("scrollback_top_line: %d, chsl: %d\n", z_windows[0]->scrollback_top_line, current_history_screen_line); refresh_window0_inner(z_windows[0]->scrollback_top_line - (y_refresh_top - 1) - current_history_screen_line, y_refresh_top, &my_paragraph_diff); // Since in case #2 our history position is always between upper and // lower refresh bounds, there has to be something we can display at // least underneath the current position. Se, we can always return true. result = true; } else { // 3. chsl above or exactly on upper refresh-area boundary. TRACE_LOG("Scrolling case #3.\n"); z_windows[0]->lowermargin = z_windows[0]->ysize - (y_refresh_top + (y_size - 1)); z_windows[0]->uppermargin = y_refresh_top - 1; z_windows[0]->ycursorpos = z_windows[0]->uppermargin + 1; z_windows[0]->xcursorpos = 1 + z_windows[0]->leftmargin; refresh_cursor(0); TRACE_LOG("Lower margin: %d, upper: %d.\n", z_windows[0]->lowermargin, z_windows[0]->uppermargin); z_windows[0]->lines_to_skip = current_history_screen_line - (z_windows[0]->scrollback_top_line - y_refresh_top + 1); z_windows[0]->remaining_lines_to_fill = y_size; while (z_windows[0]->remaining_lines_to_fill > 0) { //if (z_windows[0]->lines_to_skip < 35) break; if (bool_equal(z_windows[0]->buffering, true)) { wordwrap_set_line_index(z_windows[0]->wordwrapper, 0); } z_windows[0]->nof_consecutive_lines_output = 0; TRACE_LOG("remaining_lines_to_fill: %d.\n", z_windows[0]->remaining_lines_to_fill); if (is_output_at_frontindex(history) == true) { TRACE_LOG("no more output, break.\n"); break; } return_code = output_repeat_paragraphs(history, 1, true, true); current_history_hit_top = false; if (bool_equal(z_windows[0]->buffering, true)) { wordwrap_flush_output(z_windows[0]->wordwrapper); } //screen_cell_interface->update_screen(); //screen_cell_interface->get_next_event(&input, -1); if (z_windows[0]->lines_to_skip < 1) { z_windows[0]->ycursorpos++; TRACE_LOG("ycursorpos: %d\n", z_windows[0]->ycursorpos); z_windows[0]->xcursorpos = 1 + z_windows[0]->leftmargin; refresh_cursor(0); } // Compensate for missing newline after paragraph: if (z_windows[0]->lines_to_skip > 0) z_windows[0]->lines_to_skip--; else if (z_windows[0]->remaining_lines_to_fill > 0) z_windows[0]->remaining_lines_to_fill--; my_paragraph_diff++; TRACE_LOG("Lines to skip: %d.\n", z_windows[0]->lines_to_skip); TRACE_LOG("current_history_screen_line: %d.\n", current_history_screen_line); nof_paragraph_lines = z_windows[0]->nof_consecutive_lines_output + 1; current_history_screen_line -= nof_paragraph_lines; if ( (return_code < 0) && (current_history_screen_line != 0) ) { TRACE_LOG("history inconsistent, buffer end at chsl: %d.\n", current_history_screen_line); i18n_translate_and_exit( libcellif_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "output_rewind_paragraph"); } /* nof_relevant_lines = current_history_screen_line - (z_windows[0]->scrollback_top_line - (y_refresh_top - 1)); TRACE_LOG("nof_relevant_lines: %d\n", nof_relevant_lines); */ } result = true; // Since case #3 deals with a position at the top or above the top // position to display, we know there must be some output to display // in the refresh window and can accordingly always return true. } z_windows[0]->uppermargin = 0; if (nof_paragraph_diff != NULL) *nof_paragraph_diff += my_paragraph_diff; TRACE_LOG("Returning %d from refresh_window0_inner.\n", result); return result; } static void init_output_history() { if (history != NULL) { TRACE_LOG("Destroying history output.\n"); destroy_history_output(history); history = NULL; current_history_hit_top = false; } //if (current_history_screen_line != 0) { // if ((history = init_history_output( outputhistory[0], &history_target, Z_HISTORY_OUTPUT_WITHOUT_EXTRAS)) == NULL) { i18n_translate_and_exit( libcellif_module_name, i18n_libfizmo_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x0100, "init_history_output"); return; } TRACE_LOG("History initialized at: %p\n", history); current_history_screen_line = 0; //current_history_screen_line = -1; } // Please note: scrollback_top_line has to be set correctly before // invoking this function if scrolling back should work as expected. // // y_size: The height of the window area to refresh on screen. If this is a // called with a negative number, the entire window height is chosen. // y_refresh_top: The top line of the area to refresh. line 1 denotes the // top line of the window (not screen), the bottommost line number is equal // to the window height. These line numbers are independent from the current // scollback position, which means that no matter how far the user scrolled // up, line 1 always marks the top line of the window. // static bool refresh_window0(int y_size, int y_refresh_top, bool reset_history) { int last_active_z_window_id = -1; bool result; if ( (reset_history == true) || (history == NULL) ) { init_output_history(); } if (input_line_on_screen == true) *current_input_y = z_windows[0]->ypos + z_windows[0]->ysize - 1; if (active_z_window_id != 0) { last_active_z_window_id = active_z_window_id; switch_to_window(0); } disable_more_prompt = true; rightmost_y_refresh_curpos = -1; TRACE_LOG("refresh_window0(ysize:%d, y_refresh_top:%d, reset_history:%d)\n", y_size, y_refresh_top, reset_history); /* if ( (y_size == -1) && (y_refresh_top == -1) ) { y_size = z_windows[0]->ysize; y_refresh_top = 1; } */ result = refresh_window0_inner(y_size, y_refresh_top, NULL); TRACE_LOG("Final refresh_window0_inner result: %d.\n", result); screen_cell_interface->set_text_style(0); disable_more_prompt = false; z_windows[0]->remaining_lines_to_fill = -1; z_windows[0]->lowermargin = 0; z_windows[0]->uppermargin = 0; if (last_active_z_window_id != -1) switch_to_window(last_active_z_window_id); if (z_windows[0]->scrollback_top_line <= z_windows[0]->ysize) { if (input_line_on_screen == true) { // current_input_x and current_input_y have already been adjusted // in "refresh_window0_inner". //z_windows[0]->ycursorpos = *current_input_y - 1; refresh_input_line(); /* xcursorpos ist set by "refresh_input_line". z_windows[0]->xcursorpos = *current_input_size > *current_input_display_width ? *current_input_x + *current_input_display_width : *current_input_x + *current_input_size; */ } else { z_windows[0]->ycursorpos = z_windows[0]->ysize; z_windows[0]->xcursorpos = rightmost_y_refresh_curpos; //z_windows[0]->ycursorpos = z_windows[0]->ysize; //z_windows[0]->xcursorpos = 1 + z_windows[0]->leftmargin; } } TRACE_LOG("end: current_history_screen_line: %d, scrollback_top_line: %d\n", current_history_screen_line, z_windows[0]->scrollback_top_line); TRACE_LOG("rightmost_y_refresh_curpos: %d.\n", rightmost_y_refresh_curpos); return result; } static void refresh_screen() { z_ucs *blockbuf_line; int i, j; int block_index, output_index; erase_window(0); //z_windows[0]->scrollback_top_line = z_windows[0]->ysize - 1; refresh_window0(z_windows[0]->ysize, 1, true); if (ver <= 3) display_status_line(); // FIXME: Add color and styles. if (z_windows[1]->ysize > 0) { TRACE_LOG("Redrawing upper window (%d).\n", z_windows[1]->xsize); blockbuf_line = fizmo_malloc(sizeof(z_ucs) * (z_windows[1]->xsize + 1)); //upper_font = upper_window_buffer->content[0].font; current_output_text_style = upper_window_buffer->content[0].style; current_output_foreground_colour = upper_window_buffer->content[0].foreground_colour; current_output_background_colour = upper_window_buffer->content[0].background_colour; // z_windows[window_number]->output_text_style //screen_cell_interface->set_font(upper_font); screen_cell_interface->set_text_style(current_output_text_style); if (using_colors == true) screen_cell_interface->set_colour( current_output_foreground_colour, current_output_background_colour); for (i=0; iysize; i++) { TRACE_LOG("Line %d.\n", i); block_index = i * upper_window_buffer->width; j = 0; screen_cell_interface->goto_yx(i + (ver <= 3 ? 2 : 1), 1); while ( (j < z_windows[1]->xsize) && (j < upper_window_buffer->width)) { output_index = 0; while ( (j < z_windows[1]->xsize) && (j < upper_window_buffer->width) /* && (upper_window_buffer->content[block_index].font == upper_font) */ && (upper_window_buffer->content[block_index].style == current_output_text_style) && ( (upper_window_buffer->content[block_index].foreground_colour == current_output_foreground_colour) || (upper_window_buffer->content[block_index].foreground_colour == 0) ) && ( (upper_window_buffer->content[block_index].background_colour == current_output_background_colour) || (upper_window_buffer->content[block_index].background_colour == 0) )) { blockbuf_line[output_index] = upper_window_buffer->content[block_index].character; block_index++; output_index++; j++; } blockbuf_line[output_index] = 0; screen_cell_interface->z_ucs_output(blockbuf_line); if ( (j < z_windows[1]->xsize) && (j < upper_window_buffer->width)) { TRACE_LOG("New style/colour at column %d.\n", j); /* if (upper_window_buffer->content[block_index].font != upper_font) { upper_font = upper_window_buffer->content[block_index].font; screen_cell_interface->set_font(upper_font); } */ if (upper_window_buffer->content[block_index].style != current_output_text_style) { current_output_text_style = upper_window_buffer->content[block_index].style; screen_cell_interface->set_text_style(current_output_text_style); } if ( ( (upper_window_buffer->content[block_index].foreground_colour != current_output_foreground_colour) && (upper_window_buffer->content[block_index].foreground_colour!=0) ) || ( (upper_window_buffer->content[block_index].background_colour != current_output_background_colour) && (upper_window_buffer->content[block_index].background_colour!=0) ) ) { if (upper_window_buffer->content[block_index].foreground_colour!=0) current_output_foreground_colour = upper_window_buffer->content[block_index].foreground_colour; if (upper_window_buffer->content[block_index].background_colour!=0) current_output_background_colour = upper_window_buffer->content[block_index].background_colour; if (using_colors == true) screen_cell_interface->set_colour( current_output_foreground_colour, current_output_background_colour); } } } } /* screen_cell_interface->set_text_style( current_output_text_style); screen_cell_interface->set_colour( z_windows[window_number]->output_foreground_colour, z_windows[window_number]->output_background_colour); */ free(blockbuf_line); } update_output_colours(0); update_output_text_style(0); refresh_cursor(0); screen_cell_interface->redraw_screen_from_scratch(); } // NOTE: Keep in mind that the verification routine may recursively // call a read (Border Zone does this). // This function reads a maximum of maximum_length characters from stdin // to dest. The number of characters read is returned. The input is NOT // terminated with a newline (in order to conform to V5+ games). // Returns -1 when int routine returns != 0 // Returns -2 when user ended input with ESC static int16_t read_line(zscii *dest, uint16_t maximum_length, uint16_t tenth_seconds, uint32_t verification_routine, uint8_t preloaded_input, int *tenth_seconds_elapsed, bool disable_command_history, bool return_on_escape) { z_ucs input, buf; int timeout_millis = -1, event_type, i; bool input_in_progress = true, redraw_result; z_ucs char_buf[] = { 0, 0 }; //int original_screen_width = screen_width; //int original_screen_height = screen_height; int input_size = preloaded_input; int input_scroll_x = 0; int input_index = preloaded_input; int input_display_width; // Width of the input line on-screen. int input_x, input_y; // Leftmost position of the input line on-screen. z_ucs input_buffer[maximum_length + 1]; int cmd_history_index = 0; zscii *cmd_history_ptr; int current_tenth_seconds = 0; int timed_routine_retval, index; int scroll_area_ysize; int new_width, new_height; current_input_size = &input_size; current_input_scroll_x = &input_scroll_x; current_input_index = &input_index; current_input_display_width = &input_display_width; current_input_x = &input_x; current_input_y = &input_y; current_input_buffer = input_buffer; TRACE_LOG("maxlen:%d, preload: %d.\n", maximum_length, preloaded_input); flush_all_buffered_windows(); for (i=0; inof_consecutive_lines_output = 0; if (z_windows[active_z_window_id]->xcursorpos + z_windows[active_z_window_id]->rightmargin > z_windows[active_z_window_id]->xsize - 1) { TRACE_LOG("breaking line, too short for input.\n"); z_ucs_output_window_target( newline_string, (void*)(&z_windows[active_z_window_id]->window_number)); //refresh_window0(-1, -1); } if (winch_found == true) { new_cell_screen_size( screen_cell_interface->get_screen_height(), screen_cell_interface->get_screen_width()); winch_found = false; } TRACE_LOG("Flush finished.\n"); TRACE_LOG("1/10s: %d, routine: %d.\n", tenth_seconds, verification_routine); if ((tenth_seconds != 0) && (verification_routine != 0)) { TRACE_LOG("timed input in read_line every %d tenth seconds.\n", tenth_seconds); timed_input_active = true; timeout_millis = (is_timed_keyboard_input_available() == true ? 100 : 0); if (tenth_seconds_elapsed != NULL) *tenth_seconds_elapsed = 0; } else { timeout_millis = 0; timed_input_active = false; } screen_cell_interface->update_screen(); update_output_colours(active_z_window_id); update_output_text_style(active_z_window_id); input_x = z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos - 1 - preloaded_input; input_y = z_windows[active_z_window_id]->ypos + z_windows[active_z_window_id]->ycursorpos - 1; input_display_width = z_windows[active_z_window_id]->xsize - (z_windows[active_z_window_id]->xcursorpos - 1 - preloaded_input) - z_windows[active_z_window_id]->rightmargin; TRACE_LOG("input_x:%d, input_y:%d.\n", input_x, input_y); TRACE_LOG("input width: %d.\n", input_display_width); for (i=0; iget_next_event(&input, timeout_millis); TRACE_LOG("Evaluating event %d.\n", event_type); TRACE_LOG("current_history_hit_top: %d.\n", current_history_hit_top); if (event_type == EVENT_WAS_TIMEOUT) { // Don't forget to restore current_input_buffer on recursive read. TRACE_LOG("timeout found.\n"); if (timed_input_active == true) { current_tenth_seconds++; TRACE_LOG("%d / %d.\n", current_tenth_seconds, tenth_seconds); if (tenth_seconds_elapsed != NULL) (*tenth_seconds_elapsed)++; if (current_tenth_seconds == tenth_seconds) { current_tenth_seconds = 0; stream_output_has_occured = false; TRACE_LOG("calling timed-input-routine at %x.\n", verification_routine); timed_routine_retval = interpret_from_call(verification_routine); TRACE_LOG("timed-input-routine finished.\n"); if (terminate_interpreter != INTERPRETER_QUIT_NONE) { TRACE_LOG("Quitting after verification.\n"); input_in_progress = false; input_size = 0; } else { if (stream_output_has_occured == true) { flush_all_buffered_windows(); refresh_input_line(); z_windows[active_z_window_id]->xcursorpos = *current_input_size > *current_input_display_width ? *current_input_x + *current_input_display_width : *current_input_x + *current_input_size; screen_cell_interface->update_screen(); } if (timed_routine_retval != 0) { input_in_progress = false; input_size = 0; } } } } } else if ( (event_type == EVENT_WAS_CODE_PAGE_UP) || (event_type == EVENT_WAS_CODE_PAGE_DOWN) ) { scroll_area_ysize = z_windows[0]->ysize / 2; TRACE_LOG("scroll_area_ysize: %d.\n", scroll_area_ysize); // "scroll_area_ysize" denotes the area which we're refreshing, not(!) // the area we're copying on-screen. Example: In case the screen has // height 29, we're copying 15 lines of existing screen contents and // refresh the remaining 14 lines. // FIXME: Cursor not at bottom, have to redraw everything. if ( (event_type == EVENT_WAS_CODE_PAGE_UP) && (current_history_hit_top == false) ) { z_windows[0]->scrollback_top_line += scroll_area_ysize; TRACE_LOG("scrollback_top_line: %d.\n", z_windows[0]->scrollback_top_line); if (z_windows[0]->ycursorpos != z_windows[0]->ysize) { TRACE_LOG("Cursor not at bottom, have to redraw everything.\n"); screen_cell_interface->clear_area( z_windows[0]->xpos, z_windows[0]->ypos, screen_width, z_windows[0]->ysize); redraw_result = refresh_window0( z_windows[0]->ysize, 1, true); } else { TRACE_LOG("Cursor at bottom, copying and refreshing half screen.\n"); screen_cell_interface->copy_area( z_windows[0]->ypos + scroll_area_ysize, z_windows[0]->xpos, z_windows[0]->ypos, z_windows[0]->xpos, z_windows[0]->ysize - scroll_area_ysize, z_windows[0]->xsize); screen_cell_interface->clear_area( z_windows[0]->xpos, z_windows[0]->ypos, screen_width, scroll_area_ysize); redraw_result = refresh_window0( scroll_area_ysize, 1, false); } if (redraw_result == false) { TRACE_LOG("Area to display outside history bounds.\n"); z_windows[0]->scrollback_top_line -= scroll_area_ysize; // Clear window before redraw: Although we've already cleared // window 0 above and the return code of refresh_window0 shows // there was no output in the meantime, the "copy_area" above // may have written to areas which will be left empty by the // "refresh_window0" further below. screen_cell_interface->clear_area( z_windows[0]->xpos, z_windows[0]->ypos, screen_width, z_windows[0]->ysize); refresh_window0( z_windows[0]->ysize, 1, true); } TRACE_LOG("Finished page-up repainting.\n"); } else if ( (event_type == EVENT_WAS_CODE_PAGE_DOWN) && (z_windows[0]->scrollback_top_line > z_windows[0]->ysize) ) { z_windows[0]->scrollback_top_line -= scroll_area_ysize; screen_cell_interface->copy_area( z_windows[0]->ypos, z_windows[0]->xpos, z_windows[0]->ypos + scroll_area_ysize, z_windows[0]->xpos, z_windows[0]->ysize - scroll_area_ysize, z_windows[0]->xsize); screen_cell_interface->clear_area( z_windows[0]->xpos, z_windows[0]->ypos + (z_windows[0]->ysize - scroll_area_ysize), screen_width, scroll_area_ysize); refresh_window0( scroll_area_ysize, 1 + (z_windows[0]->ysize - scroll_area_ysize), false); TRACE_LOG("Finished page-down repainting.\n"); } screen_cell_interface->set_cursor_visibility( z_windows[0]->scrollback_top_line > z_windows[0]->ysize ? false : true); screen_cell_interface->update_screen(); } else { if (z_windows[0]->scrollback_top_line > z_windows[0]->ysize) { erase_window(0); z_windows[0]->scrollback_top_line = z_windows[0]->ysize; refresh_window0(z_windows[0]->ysize, 1, false); screen_cell_interface->set_cursor_visibility(true); screen_cell_interface->update_screen(); } // Invalidate history from scrolling, since it will no longer be // valid in case of new output. if (history != NULL) { TRACE_LOG("Destroying history output.\n"); destroy_history_output(history); history = NULL; current_history_screen_line = -1; current_history_hit_top = false; } if (event_type == EVENT_WAS_INPUT) { if (input == Z_UCS_NEWLINE) { input_in_progress = false; } else if (input == 12) { TRACE_LOG("Got CTRL-L.\n"); //erase_window(0); //refresh_window0(z_windows[0]->ysize, 1, true); //screen_cell_interface->redraw_screen_from_scratch(); refresh_screen(); } else if (input == 18) { TRACE_LOG("Got CTRL-R.\n"); new_cell_screen_size( screen_cell_interface->get_screen_height(), screen_cell_interface->get_screen_width()); } else if ( // Check if we have a valid input char. (unicode_char_to_zscii_input_char(input) != 0xff) && ( // We'll also only add new input if we're either not at the end // of a filled input line ... (input_size < maximum_length) || // ... or if the cursor is left of the input end. (input_index < input_size) ) ) { TRACE_LOG("New ZSCII input char %d / z_ucs code %d.\n", unicode_char_to_zscii_input_char(input), input); TRACE_LOG("Input_buffer at %p (length %d): \"", input_buffer, input_index); TRACE_LOG_Z_UCS(input_buffer); TRACE_LOG("\".\n"); TRACE_LOG("input_index: %d, input_size: %d, maximum_length: %d.\n", input_index, input_size, maximum_length); if (input_index < input_size) { // In case we're not appending at the end of the input, we'll // provide space for a new char in the input (and lose the rightmost // char in case the input line is full): memmove( input_buffer + input_index + 1, input_buffer + input_index, sizeof(z_ucs) * (input_size - input_index + 1 - (input_size < maximum_length ? 0 : 1))); TRACE_LOG("%p, %p, %lu.\n", input_buffer + input_index + 1, input_buffer + input_index, sizeof(z_ucs) * (input_size - input_index + 1 - (input_size < maximum_length ? 0 : 1))); } else { input_buffer[input_index + 1] = 0; } input_buffer[input_index] = input; input_index++; TRACE_LOG("fresh input_buffer (length %d): \"", input_index); TRACE_LOG_Z_UCS(input_buffer); TRACE_LOG("\".\n"); if (input_size < maximum_length) input_size++; TRACE_LOG("xcp %d, rm %d, xs: %d.\n", z_windows[active_z_window_id]->xcursorpos, z_windows[active_z_window_id]->rightmargin, z_windows[active_z_window_id]->xsize); if (z_windows[active_z_window_id]->xcursorpos + z_windows[active_z_window_id]->rightmargin == z_windows[active_z_window_id]->xsize) { TRACE_LOG("Input at rightmost position.\n"); screen_cell_interface->copy_area( input_y, input_x, input_y, input_x + 1, 1, input_display_width - 1); input_scroll_x++; char_buf[0] = Z_UCS_SPACE; screen_cell_interface->goto_yx( input_y, input_x + input_display_width - 1); screen_cell_interface->z_ucs_output(char_buf); } else z_windows[active_z_window_id]->xcursorpos++; buf = 0; TRACE_LOG("out:%d, %d, %d\n", input_size, input_scroll_x, input_display_width); if (input_size - input_scroll_x >= input_display_width+1) { buf = input_buffer[input_scroll_x + input_display_width]; input_buffer[input_scroll_x + input_display_width] = 0; } screen_cell_interface->goto_yx(input_y, input_x); screen_cell_interface->z_ucs_output(input_buffer + input_scroll_x); if (buf != 0) input_buffer[input_scroll_x + input_display_width] = buf; refresh_cursor(active_z_window_id); screen_cell_interface->update_screen(); } } else if (event_type == EVENT_WAS_CODE_BACKSPACE) { // We only have something to do if the cursor is not at the start of // the input. if (input_index > 0) { TRACE_LOG("input_display_width: %d.\n", input_display_width); TRACE_LOG("xpos: %d.\n", z_windows[active_z_window_id]->xpos); TRACE_LOG("xcursorpos: %d.\n", z_windows[active_z_window_id]->xcursorpos - 1); TRACE_LOG("input_x: %d.\n", input_x); // We always have to move all chars from the cursor position onward // one position to the left. memmove( input_buffer + input_index - 1, input_buffer + input_index, sizeof(z_ucs)*(input_size - input_index + 1)); input_size--; input_index--; // Check if the cursor is on the leftmost input column. if (z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos - 1 == input_x) { // In this case we don't have to do anything to correct the // display, modifying the memory is enough. input_scroll_x--; } else { // If we're at any point right of the leftmost column, we'll first // move everthing right of the cursor on position to the left. TRACE_LOG("Moving %d chars from %d/%d to %d/%d.\n", input_display_width - ((z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos - 1) - input_x), z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos - 1, input_y, z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos - 2, input_y); screen_cell_interface->copy_area( input_y, z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos - 2, input_y, z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos - 1, 1, input_display_width - ((z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos - 1) - input_x)); char_buf[0] = Z_UCS_SPACE; screen_cell_interface->goto_yx( input_y, input_x + input_display_width - 1); screen_cell_interface->z_ucs_output(char_buf); z_windows[active_z_window_id]->xcursorpos--; refresh_cursor(active_z_window_id); screen_cell_interface->update_screen(); } } } else if (event_type == EVENT_WAS_CODE_DELETE) { // We only have something to do if the cursor is not after the end of // input. if (input_index < input_size) { // We always have to move all chars from the cursor position onward // one position to the left. memmove( input_buffer + input_index, input_buffer + input_index + 1, sizeof(z_ucs)*(input_size - input_index)); input_size--; TRACE_LOG("Moving %d chars from %d/%d to %d/%d.\n", input_display_width - ((z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos) - input_x), z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos, input_y, z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos - 1, input_y); screen_cell_interface->copy_area( input_y, z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos - 1, input_y, z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos, 1, input_display_width - ((z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos) - input_x)); TRACE_LOG("DEL: size:%d, index:%d, width:%d, input_scroll_x:%d.\n", input_size, input_index, input_display_width, input_scroll_x); // Check whether we have to fill the rightmost column with a // space, of if the input is longer than the screen and if we // have to fill the column with user input. char_buf[0] = input_size - input_scroll_x >= input_display_width ? input_buffer[input_scroll_x + input_display_width] : Z_UCS_SPACE; screen_cell_interface->goto_yx( input_y, input_x + input_display_width - 1); screen_cell_interface->z_ucs_output(char_buf); refresh_cursor(active_z_window_id); screen_cell_interface->update_screen(); } } else if (event_type == EVENT_WAS_CODE_CURSOR_LEFT) { if (input_index > 0) { if (z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos - 1 > input_x) { z_windows[active_z_window_id]->xcursorpos--; refresh_cursor(active_z_window_id); screen_cell_interface->update_screen(); } else { screen_cell_interface->copy_area( input_y, z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos, input_y, z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos - 1, 1, input_display_width - 1); screen_cell_interface->goto_yx(input_y, input_x); char_buf[0] = input_buffer[input_scroll_x - 1]; input_scroll_x--; screen_cell_interface->z_ucs_output(char_buf); screen_cell_interface->goto_yx(input_y, input_x); //refresh_cursor(active_z_window_id); screen_cell_interface->update_screen(); } input_index--; } } else if (event_type == EVENT_WAS_CODE_CURSOR_RIGHT) { // Verify if we're at the end of input (plus one more char since // the cursor must also be allowed behind the input for appending): if (input_index < input_size) { // Check if advancing the cursor right would move it behind the // rightmost allowed input column. if (z_windows[active_z_window_id]->xpos + z_windows[active_z_window_id]->xcursorpos < input_x + input_display_width) { // In this case, the cursor is still left of the right border, so // we can just move it left: z_windows[active_z_window_id]->xcursorpos++; refresh_cursor(active_z_window_id); } else { // If the cursor moves behind the current rightmost position, we // have to scroll the input line. screen_cell_interface->copy_area( input_y, input_x, input_y, input_x + 1, 1, input_display_width - 1); // Verify if the cusor is still over the input line or if it's // now on the "append" column behind. if (input_index == input_size - 1) { // In case we're at the end we have to fill the new, empty // column with a space. char_buf[0] = Z_UCS_SPACE; } else { // If the cursor is still over the input, we'll fill the // rightmost column with appropriate char. char_buf[0] = input_buffer[input_scroll_x + input_display_width]; } // After determining how to fill the rightmost column, jump to // the correct position on-screen, display the new char and // re-position the cursor over the rightmost column. screen_cell_interface->goto_yx(input_y, input_x + input_display_width - 1); screen_cell_interface->z_ucs_output(char_buf); screen_cell_interface->goto_yx(input_y, input_x + input_display_width - 1); input_scroll_x++; } screen_cell_interface->update_screen(); // No matter whether we had to scroll or not, as long as we were // not at the end of the input, the cursor was moved right, and thus // the input index has to be altered. input_index++; } } else if ( (disable_command_history == false) && ( ( (event_type == EVENT_WAS_CODE_CURSOR_UP) && (cmd_history_index < get_number_of_stored_commands()) ) || ( (event_type == EVENT_WAS_CODE_CURSOR_DOWN) && (cmd_history_index != 0) ) ) ) { TRACE_LOG("old history index: %d.\n", cmd_history_index); cmd_history_index += event_type == EVENT_WAS_CODE_CURSOR_UP ? 1 : -1; cmd_history_ptr = get_command_from_history(cmd_history_index - 1); TRACE_LOG("cmd_history_ptr: %p.\n", cmd_history_ptr); if (cmd_history_index > 0) { input_size = strlen((char*)cmd_history_ptr); if (input_size > input_display_width + 1) { input_scroll_x = input_size - input_display_width; z_windows[active_z_window_id]->xcursorpos = input_x + input_display_width; } else { input_scroll_x = 0; z_windows[active_z_window_id]->xcursorpos = input_x + input_size; } input_index = input_size; for (i=0; i<=input_size; i++) input_buffer[i] = zscii_input_char_to_z_ucs(*(cmd_history_ptr++)); TRACE_LOG("out:%d, %d, %d\n", input_size, input_scroll_x, input_display_width); if (input_size - input_scroll_x >= input_display_width+1) { buf = input_buffer[input_scroll_x + input_display_width]; input_buffer[input_scroll_x + input_display_width] = 0; } else buf = 0; screen_cell_interface->goto_yx(input_y, input_x); screen_cell_interface->z_ucs_output(input_buffer + input_scroll_x); if (buf != 0) input_buffer[input_scroll_x + input_display_width] = buf; clear_to_end_of_cell_line(); } else { input_size = 0; input_scroll_x = 0; input_index = 0; z_windows[active_z_window_id]->xcursorpos = input_x; screen_cell_interface->goto_yx(input_y, input_x); clear_to_end_of_cell_line(); } refresh_cursor(active_z_window_id); screen_cell_interface->update_screen(); } else if (event_type == EVENT_WAS_WINCH) { TRACE_LOG("timeout.\n"); new_width = screen_cell_interface->get_screen_width(); new_height = screen_cell_interface->get_screen_height(); if ( (screen_height != new_height) || (screen_width != new_width) ) { new_cell_screen_size( screen_cell_interface->get_screen_height(), screen_cell_interface->get_screen_width()); } } else if (event_type == EVENT_WAS_CODE_CTRL_A) { if (input_index > 0) { if (input_scroll_x > 0) { input_scroll_x = 0; index = input_display_width < input_size ? input_display_width : input_size; char_buf[0] = input_buffer[index]; input_buffer[index] = 0; screen_cell_interface->goto_yx(input_y, input_x); screen_cell_interface->z_ucs_output(input_buffer); input_buffer[index] = char_buf[0]; } z_windows[active_z_window_id]->xcursorpos = input_x; input_index = 0; refresh_cursor(active_z_window_id); screen_cell_interface->update_screen(); } } else if (event_type == EVENT_WAS_CODE_CTRL_E) { TRACE_LOG("input_size:%d, input_display_width:%d.\n", input_size, input_display_width); if (input_size > input_display_width - 1) { input_scroll_x = input_size - input_display_width + 1; screen_cell_interface->goto_yx(input_y, input_x); screen_cell_interface->z_ucs_output(input_buffer + input_scroll_x); clear_to_end_of_cell_line(); z_windows[active_z_window_id]->xcursorpos = input_x + input_display_width - 1; } else z_windows[active_z_window_id]->xcursorpos = input_x + input_size; input_index = input_size; refresh_cursor(active_z_window_id); screen_cell_interface->update_screen(); } else if (event_type == EVENT_WAS_CODE_ESC) { if (return_on_escape == true) { input_in_progress = false; input_size = -2; } } } TRACE_LOG("readline-ycursorpos: %d.\n", z_windows[0]->ycursorpos); TRACE_LOG("current input_buffer: \""); TRACE_LOG_Z_UCS(input_buffer); TRACE_LOG("\".\n"); TRACE_LOG("input_scroll_x:%d\n", input_scroll_x); } TRACE_LOG("x-readline-ycursorpos: %d.\n", z_windows[0]->ycursorpos); screen_cell_interface->goto_yx(input_y, input_x); clear_to_end_of_cell_line(); z_windows[active_z_window_id]->xcursorpos = input_x - (z_windows[active_z_window_id]->xpos - 1); refresh_cursor(active_z_window_id); input_line_on_screen = false; for (i=0; iycursorpos); return input_size; } static int read_char(uint16_t tenth_seconds, uint32_t verification_routine, int *tenth_seconds_elapsed) { bool input_in_progress = true; int event_type; int timeout_millis = -1; z_ucs input; zscii result; //int i; int current_tenth_seconds = 0; int timed_routine_retval; int i; int scroll_area_ysize; bool redraw_result; flush_all_buffered_windows(); for (i=0; inof_consecutive_lines_output = 0; if (winch_found == true) { new_cell_screen_size( screen_cell_interface->get_screen_height(), screen_cell_interface->get_screen_width()); winch_found = false; } screen_cell_interface->update_screen(); if ((tenth_seconds != 0) && (verification_routine != 0)) { TRACE_LOG("timed input in read_line every %d tenth seconds.\n", tenth_seconds); timed_input_active = true; timeout_millis = (is_timed_keyboard_input_available() == true ? 100 : 0); if (tenth_seconds_elapsed != NULL) *tenth_seconds_elapsed = 0; } else timed_input_active = false; while (input_in_progress == true) { event_type = screen_cell_interface->get_next_event(&input, timeout_millis); if ( (event_type == EVENT_WAS_CODE_PAGE_UP) || (event_type == EVENT_WAS_CODE_PAGE_DOWN) ) { scroll_area_ysize = z_windows[0]->ysize / 2; TRACE_LOG("scroll_area_ysize: %d.\n", scroll_area_ysize); // "scroll_area_ysize" denotes the area which we're refreshing, not(!) // the area we're copying on-screen. Example: In case the screen has // height 29, we're copying 15 lines of existing screen contents and // refresh the remaining 14 lines. if ( (event_type == EVENT_WAS_CODE_PAGE_UP) && (current_history_hit_top == false) ) { z_windows[0]->scrollback_top_line += scroll_area_ysize; TRACE_LOG("scrollback_top_line: %d.\n", z_windows[0]->scrollback_top_line); if (z_windows[0]->ycursorpos != z_windows[0]->ysize) { TRACE_LOG("Cursor not at bottom, have to redraw everything.\n"); screen_cell_interface->clear_area( z_windows[0]->xpos, z_windows[0]->ypos, screen_width, z_windows[0]->ysize); redraw_result = refresh_window0( z_windows[0]->ysize, 1, true); } else { TRACE_LOG("Cursor at bottom, copying and refreshing half screen.\n"); screen_cell_interface->copy_area( z_windows[0]->ypos + scroll_area_ysize, z_windows[0]->xpos, z_windows[0]->ypos, z_windows[0]->xpos, z_windows[0]->ysize - scroll_area_ysize, z_windows[0]->xsize); screen_cell_interface->clear_area( z_windows[0]->xpos, z_windows[0]->ypos, screen_width, scroll_area_ysize); redraw_result = refresh_window0( scroll_area_ysize, 1, false); } if (redraw_result == false) { TRACE_LOG("Area to display outside history bounds.\n"); z_windows[0]->scrollback_top_line -= scroll_area_ysize; // Clear window before redraw: Although we've already cleared // window 0 above and the return code of refresh_window0 shows // there was no output in the meantime, the "copy_area" above // may have written to areas which will be left empty by the // "refresh_window0" further below. screen_cell_interface->clear_area( z_windows[0]->xpos, z_windows[0]->ypos, screen_width, z_windows[0]->ysize); refresh_window0( z_windows[0]->ysize, 1, true); } TRACE_LOG("Finished page-up repainting.\n"); } else if ( (event_type == EVENT_WAS_CODE_PAGE_DOWN) && (z_windows[0]->scrollback_top_line > z_windows[0]->ysize) ) { z_windows[0]->scrollback_top_line -= scroll_area_ysize; screen_cell_interface->copy_area( z_windows[0]->ypos, z_windows[0]->xpos, z_windows[0]->ypos + scroll_area_ysize, z_windows[0]->xpos, z_windows[0]->ysize - scroll_area_ysize, z_windows[0]->xsize); screen_cell_interface->clear_area( z_windows[0]->xpos, z_windows[0]->ypos + (z_windows[0]->ysize - scroll_area_ysize), screen_width, scroll_area_ysize); refresh_window0( scroll_area_ysize, 1 + (z_windows[0]->ysize - scroll_area_ysize), false); TRACE_LOG("Finished page-down repainting.\n"); } screen_cell_interface->set_cursor_visibility( z_windows[0]->scrollback_top_line > z_windows[0]->ysize ? false : true); screen_cell_interface->update_screen(); } else { if (z_windows[0]->scrollback_top_line > z_windows[0]->ysize) { erase_window(0); z_windows[0]->scrollback_top_line = z_windows[0]->ysize; refresh_window0(z_windows[0]->ysize, 1, false); screen_cell_interface->set_cursor_visibility(true); screen_cell_interface->update_screen(); } // Invalidate history from scrolling, since it will no longer be // valid in case of new output. if (history != NULL) { TRACE_LOG("Destroying history output.\n"); destroy_history_output(history); history = NULL; current_history_screen_line = -1; current_history_hit_top = false; } if (event_type == EVENT_WAS_INPUT) { if (input == 12) { TRACE_LOG("Got CTRL-L.\n"); //erase_window(0); //refresh_window0(z_windows[0]->ysize, 1, true); //screen_cell_interface->redraw_screen_from_scratch(); refresh_screen(); } else { result = unicode_char_to_zscii_input_char(input); if (result != 0xff) input_in_progress = false; } } else if (event_type == EVENT_WAS_CODE_CURSOR_UP) { result = 129; input_in_progress = false; } else if (event_type == EVENT_WAS_CODE_CURSOR_DOWN) { result = 130; input_in_progress = false; } else if (event_type == EVENT_WAS_CODE_CURSOR_LEFT) { result = 131; input_in_progress = false; } else if (event_type == EVENT_WAS_CODE_CURSOR_RIGHT) { result = 132; input_in_progress = false; } else if (event_type == EVENT_WAS_CODE_BACKSPACE) { result = 8; input_in_progress = false; } else if (event_type == EVENT_WAS_CODE_DELETE) { result = 127; input_in_progress = false; } else if (event_type == EVENT_WAS_TIMEOUT) { TRACE_LOG("timeout found.\n"); if (timed_input_active == true) { current_tenth_seconds++; if (tenth_seconds_elapsed != NULL) (*tenth_seconds_elapsed)++; if (current_tenth_seconds == tenth_seconds) { current_tenth_seconds = 0; stream_output_has_occured = false; TRACE_LOG("calling timed-input-routine at %x.\n", verification_routine); timed_routine_retval = interpret_from_call(verification_routine); TRACE_LOG("timed-input-routine finished.\n"); if (terminate_interpreter != INTERPRETER_QUIT_NONE) { TRACE_LOG("Quitting after verification.\n"); input_in_progress = false; result = 0; } else { if (stream_output_has_occured == true) { flush_all_buffered_windows(); screen_cell_interface->update_screen(); } if (timed_routine_retval != 0) { input_in_progress = false; result = 0; } } } } } else if (event_type == EVENT_WAS_WINCH) { TRACE_LOG("timeout.\n"); new_cell_screen_size( screen_cell_interface->get_screen_height(), screen_cell_interface->get_screen_width()); } } } return result; } static void show_status(z_ucs *room_description, int status_line_mode, int16_t parameter1, int16_t parameter2) { int desc_len = z_ucs_len(room_description); int rightside_length, room_desc_space; z_ucs rightside_buf_zucs[libcellif_right_status_min_size + 12]; z_ucs buf = 0; z_ucs *ptr; static char latin1_buf1[8]; static char latin1_buf2[8]; int last_active_z_window_id; TRACE_LOG("statusline: \""); TRACE_LOG_Z_UCS(room_description); TRACE_LOG("\".\n"); TRACE_LOG("statusline-xsize: %d, screen:%d.\n", z_windows[statusline_window_id]->xsize, screen_width); if (statusline_window_id > 0) { last_active_z_window_id = active_z_window_id; switch_to_window(statusline_window_id); erase_window(statusline_window_id); z_windows[statusline_window_id]->ycursorpos = 1; z_windows[statusline_window_id]->xcursorpos = 1; refresh_cursor(statusline_window_id); z_ucs_output(space_string); if (status_line_mode == SCORE_MODE_SCORE_AND_TURN) { sprintf(latin1_buf1, ": %d ", parameter1); sprintf(latin1_buf2, ": %d", parameter2); ptr = z_ucs_cpy(rightside_buf_zucs, libcellif_score_string); ptr = z_ucs_cat_latin1(ptr, latin1_buf1); ptr = z_ucs_cat(ptr, libcellif_turns_string); ptr = z_ucs_cat_latin1(ptr, latin1_buf2); rightside_length = z_ucs_len(rightside_buf_zucs) + 1; TRACE_LOG("rightside_length: %d.\n", rightside_length); room_desc_space = z_windows[statusline_window_id]->xsize - rightside_length - 3; if (room_desc_space < desc_len) { buf = room_description[room_desc_space]; room_description[room_desc_space] = 0; } z_ucs_output(room_description); while (z_windows[statusline_window_id]->xcursorpos < z_windows[statusline_window_id]->xsize - rightside_length + 1) { z_ucs_output(space_string); } z_windows[statusline_window_id]->xcursorpos = z_windows[statusline_window_id]->xsize - rightside_length + 1; refresh_cursor(statusline_window_id); } else if (status_line_mode == SCORE_MODE_TIME) { room_desc_space = z_windows[statusline_window_id]->xsize - 8; if (room_desc_space < desc_len) { buf = room_description[room_desc_space]; room_description[room_desc_space] = 0; } z_ucs_output(room_description); while (z_windows[statusline_window_id]->xcursorpos < z_windows[statusline_window_id]->xsize - 5) { z_ucs_output(space_string); } z_windows[statusline_window_id]->xcursorpos = z_windows[statusline_window_id]->xsize - 5; refresh_cursor(statusline_window_id); sprintf(latin1_buf1, "%02d:%02d", parameter1, parameter2); latin1_string_to_zucs_string(rightside_buf_zucs, latin1_buf1, 8); } z_ucs_output(rightside_buf_zucs); z_ucs_output(space_string); if (buf != 0) { room_description[room_desc_space] = buf; } switch_to_window(last_active_z_window_id); } } static void set_window(int16_t window_number) { if ( (window_number >= 0) && (window_number <= nof_active_z_windows - (statusline_window_id >= 0 ? 1 : 0)) ) { if ((ver != 6) && (window_number == 1)) { z_windows[1]->ycursorpos = 1; z_windows[1]->xcursorpos = 1; } switch_to_window(window_number); } } static void set_cursor(int16_t line, int16_t column, int16_t window_number) { if (bool_equal(z_windows[window_number]->buffering, true)) wordwrap_flush_output(z_windows[window_number]->wordwrapper); if (column < 0) return; else if (line < 0) { if (ver < 6) return; else { if (line == -1) screen_cell_interface->set_cursor_visibility(false); else if (line == -2) screen_cell_interface->set_cursor_visibility(true); else return; } } TRACE_LOG("set_cursor: %d %d %d %d\n", line, column, window_number, z_windows[window_number]->ysize); if ( (window_number >= 0) && (window_number <= nof_active_z_windows - (statusline_window_id >= 0 ? 1 : 0)) ) { z_windows[window_number]->ycursorpos = line > z_windows[window_number]->ysize ? z_windows[window_number]->ysize : line; z_windows[window_number]->xcursorpos = column > z_windows[window_number]->xsize ? (z_windows[window_number]->wrapping == false ? z_windows[window_number]->xsize + 1 : z_windows[window_number]->xsize) : column; refresh_cursor(window_number); } } static uint16_t get_cursor_row() { return (z_windows[active_z_window_id]->ypos - 1) + (z_windows[active_z_window_id]->ycursorpos - 1) + 1; } static uint16_t get_cursor_column() { return (z_windows[active_z_window_id]->xpos - 1) + (z_windows[active_z_window_id]->xcursorpos - 1) + 1; } static void erase_line_value(uint16_t UNUSED(start_position)) { } static void erase_line_pixels(uint16_t UNUSED(start_position)) { } static void output_interface_info() { screen_cell_interface->output_interface_info(); i18n_translate( libcellif_module_name, i18n_libcellif_LIBCELLINTERFACE_VERSION_P0S, LIBCELLINTERFACE_VERSION); streams_latin1_output("\n"); } static bool input_must_be_repeated_by_story() { return true; } static void game_was_restored_and_history_modified() { //bool input_line_on_screen_buf; if (interface_open == true) { flush_all_buffered_windows(); z_windows[0]->scrollback_top_line = z_windows[0]->ysize; //screen_cell_interface->update_screen(); screen_cell_interface->clear_area( z_windows[0]->xpos, z_windows[0]->ypos+1, z_windows[0]->xsize, z_windows[0]->ysize); //input_line_on_screen_buf = input_line_on_screen; //input_line_on_screen = true; refresh_window0(z_windows[0]->ysize, 1, true); if (history != NULL) { TRACE_LOG("Destroying history output.\n"); destroy_history_output(history); history = NULL; current_history_hit_top = false; } z_windows[0]->ycursorpos = z_windows[0]->ysize; z_windows[0]->xcursorpos = z_windows[0]->leftmargin + 1; //refresh_cursor(0); TRACE_LOG("restore-y: %d\n", *current_input_y); //input_line_on_screen = input_line_on_screen_buf; } } static int prompt_for_filename(char *filename_suggestion, z_file **result_file, char *directory, int filetype_or_mode, int fileaccess) { return screen_cell_interface->prompt_for_filename(filename_suggestion, result_file, directory, filetype_or_mode, fileaccess); } static struct z_screen_interface z_cell_interface = { &get_interface_name, &is_status_line_available, &is_split_screen_available, &is_variable_pitch_font_default, &is_colour_available, &is_picture_displaying_available, &is_bold_face_available, &is_italic_available, &is_fixed_space_font_available, &is_timed_keyboard_input_available, &is_preloaded_input_available, &is_character_graphics_font_availiable, &is_picture_font_availiable, &get_screen_height, &get_screen_width, &get_screen_width_in_units, &get_screen_height_in_units, &get_font_width_in_units, &get_font_height_in_units, &get_default_foreground_colour, &get_default_background_colour, &get_total_width_in_pixels_of_text_sent_to_output_stream_3, &parse_config_parameter, &get_config_value, &get_config_option_names, &link_interface_to_story, &reset_interface, &cell_close_interface, &set_buffer_mode, &z_ucs_output, &read_line, &read_char, &show_status, &set_text_style, &set_colour, &set_font, &split_window, &set_window, &erase_window, &set_cursor, &get_cursor_row, &get_cursor_column, &erase_line_value, &erase_line_pixels, &output_interface_info, &input_must_be_repeated_by_story, &game_was_restored_and_history_modified, &prompt_for_filename, NULL, /* do_autosave */ NULL, /* restore_autosave */ }; void fizmo_register_screen_cell_interface(struct z_screen_cell_interface *new_screen_cell_interface) { if (screen_cell_interface == NULL) { TRACE_LOG("Registering screen cell interface at %p.\n", new_screen_cell_interface); screen_cell_interface = new_screen_cell_interface; set_configuration_value("enable-font3-conversion", "true"); fizmo_register_screen_interface(&z_cell_interface); } } void set_custom_left_cell_margin(int width) { custom_left_margin = (width > 0 ? width : 0); } void set_custom_right_cell_margin(int width) { custom_right_margin = (width > 0 ? width : 0); } // This function will redraw the screen on a resize. void new_cell_screen_size(int newysize, int newxsize) { int i, dy, status_offset = statusline_window_id > 0 ? 1 : 0; //int consecutive_lines_buffer[nof_active_z_windows]; if ( (newysize < 1) || (newxsize < 1) ) return; /* for (i=0; inof_consecutive_lines_output; disable_more_prompt = true; */ dy = newysize - screen_height; screen_width = newxsize; screen_height = newysize; fizmo_new_screen_size(screen_width, screen_height); TRACE_LOG("new cell-window-size: %d*%d.\n", screen_width, screen_height); z_windows[1]->ysize = last_split_window_size; if (last_split_window_size > newysize - status_offset) z_windows[1]->ysize = newysize - status_offset; z_windows[1]->scrollback_top_line = z_windows[1]->ysize; // Crop cursor positions and windows to new screen size for (i=0; ixsize < screen_width) z_windows[0]->xsize = screen_width; z_windows[0]->ysize = screen_height - status_offset - z_windows[1]->ysize; z_windows[0]->scrollback_top_line = z_windows[0]->ysize; z_windows[0]->ycursorpos += dy; } else if (i == 1) { if (z_windows[1]->xsize != screen_width) z_windows[1]->xsize = screen_width; } else if (i == statusline_window_id) { if (z_windows[statusline_window_id]->xsize != screen_width) z_windows[statusline_window_id]->xsize = screen_width; } } if (z_windows[i]->ypos > screen_height) z_windows[i]->ypos = screen_height; if (z_windows[i]->xpos > screen_width) z_windows[i]->xpos = screen_width; if (z_windows[i]->ypos + z_windows[i]->ysize > screen_height) { z_windows[i]->ysize = screen_height - z_windows[i]->ypos + 1; z_windows[i]->scrollback_top_line = z_windows[i]->ysize; } if (z_windows[i]->xpos + z_windows[i]->xsize > screen_width) { z_windows[i]->xsize = screen_width - z_windows[i]->xpos + 1; if (z_windows[i]->xsize - z_windows[i]->leftmargin - z_windows[i]->rightmargin < 1) { z_windows[i]->leftmargin = 0; z_windows[i]->rightmargin = 0; } wordwrap_adjust_line_length( z_windows[i]->wordwrapper, z_windows[i]->xsize - z_windows[i]->rightmargin - z_windows[i]->leftmargin); } if (z_windows[i]->ycursorpos > z_windows[i]->ysize) z_windows[i]->ycursorpos = z_windows[i]->ysize; TRACE_LOG("new ycursorpos[%d]: %d\n", i, z_windows[i]->ycursorpos); TRACE_LOG("new ypos[%d]: %d\n", i, z_windows[i]->ypos); if (z_windows[i]->xcursorpos > z_windows[i]->xsize) z_windows[i]->xcursorpos = z_windows[i]->xsize; } refresh_screen(); } char *get_screen_cell_interface_version() { return screen_cell_interface_version; } fizmo-0.7.10/libcellif/src/cell_interface/cell_interface.h000644 000765 000024 00000004044 12606024316 024445 0ustar00chrenderstaff000000 000000 /* cell_interface.h * * This file is part of fizmo. * * Copyright (c) 2010-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef cellscreen_h_INCLUDED #define cellscreen_h_INCLUDED #define LIBCELLINTERFACE_VERSION "0.7.10" #include "../screen_interface/screen_cell_interface.h" #define MAX_MARGIN_SIZE 100 #define MAX_MARGIN_AS_STRING_LEN 4 void fizmo_register_screen_cell_interface(struct z_screen_cell_interface *screen_cell_interface); void new_cell_screen_size(int newysize, int newxsize); void set_custom_left_cell_margin(int width); void set_custom_right_cell_margin(int width); char *get_screen_cell_interface_version(); #endif // cellscreen_h_INCLUDED fizmo-0.7.10/libcellif/src/cell_interface/Makefile.am000644 000765 000024 00000003414 12606024316 023371 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AUTOMAKE_OPTIONS = subdir-objects AM_CFLAGS = $(libfizmo_CFLAGS) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) localedir = $(datarootdir)/fizmo/locales noinst_LIBRARIES = libcellif.a libcellif_a_SOURCES = ../locales/libcellif_locales.c cell_interface.c if ENABLE_TRACING AM_CFLAGS += -DENABLE_TRACING= endif fizmo-0.7.10/libcellif/src/cell_interface/Makefile.in000644 000765 000024 00000051540 12606024550 023405 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : @ENABLE_TRACING_TRUE@am__append_1 = -DENABLE_TRACING= subdir = libcellif/src/cell_interface ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libcellif_a_AR = $(AR) $(ARFLAGS) libcellif_a_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp am_libcellif_a_OBJECTS = ../locales/libcellif_locales.$(OBJEXT) \ cell_interface.$(OBJEXT) libcellif_a_OBJECTS = $(am_libcellif_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libcellif_a_SOURCES) DIST_SOURCES = $(libcellif_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = $(datarootdir)/fizmo/locales localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AUTOMAKE_OPTIONS = subdir-objects AM_CFLAGS = $(libfizmo_CFLAGS) $(am__append_1) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) noinst_LIBRARIES = libcellif.a libcellif_a_SOURCES = ../locales/libcellif_locales.c cell_interface.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 libcellif/src/cell_interface/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libcellif/src/cell_interface/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) ../locales/$(am__dirstamp): @$(MKDIR_P) ../locales @: > ../locales/$(am__dirstamp) ../locales/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ../locales/$(DEPDIR) @: > ../locales/$(DEPDIR)/$(am__dirstamp) ../locales/libcellif_locales.$(OBJEXT): ../locales/$(am__dirstamp) \ ../locales/$(DEPDIR)/$(am__dirstamp) libcellif.a: $(libcellif_a_OBJECTS) $(libcellif_a_DEPENDENCIES) $(EXTRA_libcellif_a_DEPENDENCIES) $(AM_V_at)-rm -f libcellif.a $(AM_V_AR)$(libcellif_a_AR) libcellif.a $(libcellif_a_OBJECTS) $(libcellif_a_LIBADD) $(AM_V_at)$(RANLIB) libcellif.a mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f ../locales/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@../locales/$(DEPDIR)/libcellif_locales.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cell_interface.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)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@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)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@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 $(LIBRARIES) 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) -rm -f ../locales/$(DEPDIR)/$(am__dirstamp) -rm -f ../locales/$(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-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ../locales/$(DEPDIR) ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-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 -rf ../locales/$(DEPDIR) ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic 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-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile # 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: fizmo-0.7.10/libcellif/doc/changelog.xml000644 000765 000024 00000011602 12606024316 021023 0ustar00chrenderstaff000000 000000 Fixed score/turns position in statusline for v≤3 games. Minor changes for autoconf settings. Fixed erase_window and clearing of lines to conform to spec regarding reverse output. Adapted to automake version 1.14. Entire re-implementation of screen refresh and scrolling. Many thanks to Lewis Gentry for bug-reporting and extensive beta-testing. Fixed a crash that would occur in case the history buffer didn't hold enough input for some screen refresh cases. Fixed incorrect backspace or delete behaviour which could cause in crash in case of small screen sizes combined with the use of preloaded input. Several small text input fixes. Added “clean-dev” build target for better cleanup of installed development files, which helps debian packaging. Fixed wrong status line display style after restore in v<=3 games. Added missing license/copyright information. Renamed “install-locales” to “install-data-local” build target. Minor fix for libcell build target. Implemented delete in read_line and read_char. CTRL-R will now redraw the screen. Contrary to CTRL-L, which refreshes the screen based on the current layout, CTRL-R will reconstruct the latest output based on the output history. This will help to display output which is hidden in case a game clears the screen, writes some text into the top line and then turns on the score line which then overlays the topmost line. Adapted to new command history interface. Adapted to new autoconf / automake build system. Merged Andrew Plotkin's iOS-fizmo changes: Adapted to new function “prompt_for_filename” in screen-interface. Fixed screen interface invocation to not use timeout if not actually required by the game. Fixed missing $(DESTDIR) variable – should already have been present since version 0.7.1. Fixed missing “override” statments for CFLAGS in Makefiles. Fixed $(DESTDIR) evaluation in config.[default|macports].mk. Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. The “libcellif” interface has been developed out of fizmo's ncursesw interface in version 0.6. It assumes that the screen is up of fixed-width charachter cells – like a standard terminal – and translates all the Z-Machine output operations into “goto-xy”, “print” and similar commands. That means it's possible to implement a cell-based interface without having to worry about window resizes or other Z-Machine related concepts. The “fizmo-ncurses” interface relies on this library for output. fizmo-0.7.10/libcellif/doc/configuration-options.xml000644 000765 000024 00000002754 12606024316 023444 0ustar00chrenderstaff000000 000000

This file lists all available configuration options for libcellif. Please note that other options may be available depending on the interface which libcellif is linked to. The following list shows all the options that the API understands via the "set_configuration_value" function.

Option values may contain variables. Variables start with a dollar sign $ and are enclosed by parantheses. Example: $(VARIABLE_NAME). The only currently implemented variable is $(HOME), which refers to the current user's home directory.

  • left-margin = <margin-size>
    This parameter will take an integer value and set the left margin of the main window to the specified number of spaces.
  • right-margin = <margin-size>
    This parameter will take an integer value and set the right margin of the main window to the specified number of spaces.
  • disable-hyphenation
    Will completely turn off hyphenation. Useful for languages which are not supported.
  • disable-color
    Force libfizmo to disabled color mode, even if the output interface reports that color is available.
fizmo-0.7.10/libcellif/doc/copyright.xml000644 000765 000024 00000003041 12606024316 021102 0ustar00chrenderstaff000000 000000

Copyright (c) 2009-2015 Christoph Ender
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

fizmo-0.7.10/libcellif/doc/create-mds.sh000755 000765 000024 00000001472 12606024316 020741 0ustar00chrenderstaff000000 000000 #!/bin/bash function xslt { if [ "$5" == "true" -a "$2" != "configuration-options" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.md" else OUTPUTFILE="${1}/${2}.md" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-md.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/md.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/libcellif/doc/create-txts.sh000755 000765 000024 00000001502 12606024316 021152 0ustar00chrenderstaff000000 000000 #!/bin/bash function xslt { if [ "$5" == "true" -a "$2" != "configuration-options" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.txt" else OUTPUTFILE="${1}/${2}.txt" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-ascii.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/ascii.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/fizmo-ncursesw/CHANGELOG.txt000644 000765 000024 00000020037 12606024544 020710 0ustar00chrenderstaff000000 000000 Version 0.7.9 -- October 9, 2015 - No more strict dependency on libncursesw since libncurses works equally well. - Added forgotten configuration options "with-ncurses-includedir", "with-ncursesw-libdir" and "with-ncurses-libdir". - Minor autoconf-related changes for fizmo-dist-0.7.10-compatibility. Version 0.7.8 -- March 19, 2014 - Adapted to automake v1.14 "subdir-objects" option. - Added missing license/copyright information. Version 0.7.7 -- June 5, 2013 - Adapted to new "fizmo_register_screen_interface" and "fizmo_start" functions. - Fix build error for some systems due to missing wchar.h include -- thanks to Nikos Chantziaras. - Added default terminal color evluation. - Adapted to new "install-data-local" build target. Version 0.7.6 -- December 27, 2012 - Improved configure-detection for libncursesw for systems without pkg-config's ncursesw.pc. - Adapted to new "disable-x11" and "disable-sound" configuration. Version 0.7.5 -- November 30, 2012 - Fixed missing delete input. - Fixed manpage typos, thanks to Johan Ljunglid. - Implemented redraw via CTRL-R. Version 0.7.4 -- September 17, 2012 - Adapted to new autoconf/automake build system. Version 0.7.3 -- August 1, 2012 - Merged Andrew Plotkin's iOS-fizmo changes: Adapted to "prompt_for_filename" function in screen-cell-interface. - Minor memory leak cleanups. Version 0.7.2 -- March 9, 2012 - Fixed missing $(DESTDIR) variable -- should already have been present since version 0.7.1. Version 0.7.1 -- November 6, 2011 - Fixed missing "override" statments for CFLAGS in Makefiles. - Fixed $(DESTDIR) evaluation in config.[default|macports].mk. - Changed manpage install dir from "man" to "share/man". - Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. - Respect LD_FLAGS for linking. Version 0.7.0 -- September 18, 2011 - The "fizmo-ncursesw" interface has been re-implemented for version 0.7. It now makes use of libcellif for output. It uses libfizmo's new word hyphenation and implements better X11-output through libdrilbo. - X11 frontispiece display is now by default in a separate window, which, contrary to the older implementation that simply invoked a XCopyArea directly into the terminal's X window, should work reliably. For terminals which by chance support it, the old behaviour is still available by using the "display-x11-inline-image" config option. The inline display has been changed to no longer write directly into the terminal window, but instead to use a subwindow instead. - Adapted to version 0.7 locale system and the new build process. Version 0.6.9 -- April 24, 2011 - Added NCURSESW_INCLUDE_FROM_W_DIRNAME to configs to allow usage of Apple's ncurses implementation, added GDKPIXBUF_INC_DIR configuration variable. Version 0.6.4 -- May 24, 2009 - Bugfix release: Definitely recommend for read_char fix. - Fixed interface to supply default colors in case ncurses' "pair_content" returned invalid colors (thanks to Samuel Verschelde). - Input from read_char is no longer re-echoed to the screen (thanks to Samnuel Verschelde). Version 0.6.0 -- March 25, 2009 - This marks the point for the first public beta release. - Implemented conversion of font 3 (charachter font) to unicode. This appears to make Beyond Zork's map appear at least readable. - Implemented recording and replaying of timed input. - The filename input for save and restore may now be cancelled using the escape key. - Pressing arrow up/down during filename input no longer displays the command history. - Implemented wordwrapper / ncursesw margins. - Implemented "no-update" command line flag and config option to avoid long startup scan times (for example on slow notebook drivers with many story files). - Implemented "--search" and "--recursively-search" command line invocations. - Fixed bug in scrollback parapgraph position cache. - Fixed scroll-down display for scrolling to bottom. - Fixed crash that occured when a read-instruction was recursively called from a timed input verification-routine. - Fixed display error on refresh of preloaded input from history. - Implemented forced predictable mode (ignores seeding random generator). - Many, many other minor fixes and extensions. Version 0.5.3 -- March 11, 2009 - Re-wrote Makefile system. Releveant module defaults are now kept in separate .mk-files. - Added support for extra-blorb files (these are specified on the command line directly after the story file name). - Added "-Wextra" flag to CFLAGS and cleaned up new warnings caused by the new flag. - Many minor fixes (option system, running X11-enabled fizmo in text-only console, etc). Version 0.5.2 -- January 17, 2009 - Implemented story selection menu in ncursesw interface. - Implemented parsing of rc file. - Added bold-for-bright-foreground and blink-for-bright-background terminal options. - Implemented dont-use-color and force-color option. - Fixed interface for > 121 colors. - Added "help" command. - Implemented text paragraph position cache to speed up scrollback for large amounts of text (not elegant, but works). - Implemened "force-quetzal-umem" config option from the command line. - Added manpage. - Implemented basic blorb support (meaning that blorb files are detected, information about pictures and sound is parsed and the first found "ZCOD" chunk is executed). - Stories may now be started from the command line using their "real name" in case they are stored in the story-list. Example: "fizmo sorcerer". - Many, many small fixes (scrollback, winch-redisplay, negative score, undo, crash on large scrollbacks, etc). Version 0.5.1 -- November 4, 2008 - Fixed scrollback and i18n-exit-translation. - Fixed libfizmo to also use setitimer/sigaction (makes fizmo work better on linux). - Implemented foreground/background color command line parameters for ncursesw interface. - Fixed get-cursor-[column|row] for ncursesw (makes PRINT_TABLE and Sherlock work). - Implemented restore from the command line: In case a quetzal-savegame containing the non-standard-chunk "FILE" is given on the command line, fizmo will try to restore the savegame using the story filename stored in this chunk. Version 0.5.0 -- October 30, 2008 - This version is now definitely usable to play all non-v6 games. Did extensive testing using Borderzone, "LostPig.z8", "Zokoban.z5", "crashme.z5", "etude.z5", "paint.z5", "random.z5", "reverzi.z5" and "unicode.z5". Only two minor known bugs remain: Scrollback sometimes miscalculates the current row after a lot of scrolling back and forth (which is always "fixable" to pressing any-key which correctly rebuilds the current output page, and a display anomaly on the frontpage of "vampire.z8" which I intended to keep after a lot of code-inspection (since fizmo appears to be implementing the screen modell correctly and fixing this display problem breaks a lot of other games). This version has been tested on Linux, Darwin (Mac Os X) and a little bit on XP/Cygwin (using a self-built ncursesw). - Fixed timed-input detection for "read" opcode. This fixes the crash in ZTUU when the lantern goes out. - Ran fizmo through (sp)lint, fixed memory leaks, minor bugs, many typecasts, some double and inconsistent definitions, cleanup up code. - Fixed Makefile dependencies. - Implemened scrollback for ncursesw interface, added support method for scrollback in "history.c". - Added configuration system. - Some split-window / set_window / set_cursor fixed for ncursesw-interface. - Substitued ualarm/signal with setitimer/sigaction since the first one won't catch SIGALRM on linux and manpage says that ualarm is obsolete. - Fixed color management so that ncurses color pair is avaiable for reading. - Many, many minor bugfixes. Version 0.4.1 -- November 14, 2007 - Separated code in core, interface, c and cpp interfaces. - Improved upper window handling (trinity sundial) and blockbuffer (zork1.z5). fizmo-0.7.10/fizmo-ncursesw/config-conds.m4000644 000765 000024 00000000524 12606024326 021470 0ustar00chrenderstaff000000 000000 AM_CONDITIONAL([ENABLE_X11_IMAGES], [test "$enable_x11" != "no"]) AM_CONDITIONAL([ENABLE_SDL], [test "$enable_sdl" != "no"]) AM_CONDITIONAL([ENABLE_FILELIST], [test "$enable_filelist" != "no"]) AM_CONDITIONAL([ENABLE_CONFIG_FILES], [test "$enable_config_files" != "no"]) fizmo-0.7.10/fizmo-ncursesw/config-flags.m4000644 000765 000024 00000001340 12606024326 021453 0ustar00chrenderstaff000000 000000 AC_ARG_ENABLE([x11], [AS_HELP_STRING([--disable-x11], [disable X11 support])], [], [enable_x11=yes]) AC_ARG_ENABLE([sound], [AS_HELP_STRING([--disable-sound], [Disable sound support])], [], [enable_sound=yes]) AC_ARG_WITH([ncurses-includedir], [AS_HELP_STRING([--with-ncurses-includedir], [Specify include directory to use for ncurses.h])], [], [ncurses_h_dir=]) AC_ARG_WITH([ncursesw-libdir], [AS_HELP_STRING([--with-ncursesw-libdir], [Specify library directory for ncursesw])], [], [with_ncursesw_libdir=]) AC_ARG_WITH([ncurses-libdir], [AS_HELP_STRING([--with-ncurses-libdir], [Specify library directory for ncurses])], [], [with_ncurses_libdir=]) fizmo-0.7.10/fizmo-ncursesw/config-libs.m4000644 000765 000024 00000004146 12606024326 021317 0ustar00chrenderstaff000000 000000 libncursesw_nonpkg_cflags="" libncursesw_nonpkg_libs="" PKG_CHECK_MODULES( [ncursesw], [ncursesw], , [for dir in $with_ncurses_includedir /usr/include /usr/local/include /opt/local/include ; do AC_MSG_CHECKING(for $dir/ncurses.h) if [ test -e $dir/ncurses.h ]; then AC_MSG_RESULT(yes) ncurses_h_dir=$dir break else AC_MSG_RESULT(no) fi done if [ test "x$ncurses_h_dir" == "x"] ; then echo "Could not find ncurses.h." echo "Try setting the location using --with-ncurses-includedir." exit fi libncursesw_nonpkg_cflags+="-I$ncurses_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-lncursesw" for dir in $with_ncursesw_libdir /usr/lib /usr/local/lib /opt/local/lib ; do AC_MSG_CHECKING(for libncursesw in $dir) LDFLAGS="-L$dir" AC_TRY_LINK( [ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h"], [ wchar_t buf[2]; addwstr(buf); ], [AC_MSG_RESULT(yes) ncursesw_l_dir=$dir break], [AC_MSG_RESULT(no)]) done if [ test "x$ncursesw_l_dir" != "x"] ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncursesw" else echo "Could not find libncursesw. Trying to use libcurses instead." LIBS="-lncurses" for dir in $with_ncurses_libdir /usr/lib /usr/local/lib /opt/local/lib ; do AC_MSG_CHECKING(for libncurses in $dir) LDFLAGS="-L$dir" AC_TRY_LINK( [ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h"], [ wchar_t buf[2]; addwstr(buf); ], [AC_MSG_RESULT(yes) ncursesw_l_dir=$dir break], [AC_MSG_RESULT(no)]) done if [ test "x$ncursesw_l_dir" != "x"] ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncurses" else echo "Couldn't find libncursesw or libncurses. You can set the location manually using --with-ncurses-libdir or --with-ncursesw-libdir." exit fi fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED ]) AS_IF([test "x$enable_x11" != "xno"], [ PKG_CHECK_MODULES([x11], [x11]) ]) fizmo-0.7.10/fizmo-ncursesw/config-subst-libsndifsdl2.m4000644 000765 000024 00000000750 12606024326 024100 0ustar00chrenderstaff000000 000000 # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. AC_SUBST([SOUND_INTERFACE_NAME], libsndifsdl2) AC_SUBST([SOUND_INTERFACE_STRUCT_NAME], sound_interface_sdl2) AC_SUBST([SOUND_INTERFACE_CONFIGNAME], SOUNDSDL2) AC_SUBST([SOUND_INTERFACE_INCLUDE_FILE], sound_sdl2/sound_sdl2.h) fizmo-0.7.10/fizmo-ncursesw/config-subst.m4000644 000765 000024 00000000612 12606024326 021520 0ustar00chrenderstaff000000 000000 # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. AC_SUBST([LIBNCURSESW_NONPKG_CFLAGS], "$libncursesw_nonpkg_cflags") AC_SUBST([LIBNCURSESW_NONPKG_LIBS], "$libncursesw_nonpkg_libs") fizmo-0.7.10/fizmo-ncursesw/configure.ac000644 000765 000024 00000005675 12606024326 021157 0ustar00chrenderstaff000000 000000 # configure.ac # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AC_ARG_ENABLE([tracing], [AS_HELP_STRING([--enable-tracing], [enable tracelog for debugging])], [], [enable_tracing=no]) AC_ARG_ENABLE([filelist], [AS_HELP_STRING([--disable-filelist], [disable story-list-keeping functionality])], [], [enable_filelist=yes]) AC_ARG_ENABLE([config-files], [AS_HELP_STRING([--disable-config-files], [disable parsing of configuration files])], [], [enable_config_files=yes]) AC_ARG_ENABLE([sdl], [AS_HELP_STRING([--disable-sdl], [SDL will not be required for building, this will however disable sound support])], [], [enable_sdl=yes]) AC_INIT( [fizmo-ncursesw], [0.7.9], fizmo@spellbreaker.org, fizmo-ncursesw) AC_CONFIG_AUX_DIR([.]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_PROG_CC AC_PROG_RANLIB PKG_CHECK_MODULES([libfizmo], [libfizmo >= 0.7.8]) PKG_CHECK_MODULES([libcellif], [libcellif >= 0.7.8]) PKG_CHECK_MODULES([libdrilbo], [libdrilbo >= 0.2.6]) AS_IF([test "$enable_sdl" != "no"], [ PKG_CHECK_MODULES([libsndifsdl2], [libsndifsdl2 >= 0.8.0]) ]) m4_include(config-libs.m4) AM_CONDITIONAL([ENABLE_TRACING], [test "$enable_tracing" = "yes"]) m4_include(config-conds.m4) m4_include(config-subst.m4) # Due to autoconf limitations (no variables in include files?) the file # below has to be manually copied over from the sound interface's # "config-subst.m4". m4_include(config-subst-libsndifsdl2.m4) AC_CONFIG_FILES([Makefile src/fizmo-ncursesw/Makefile]) AC_OUTPUT fizmo-0.7.10/fizmo-ncursesw/COPYRIGHT.txt000644 000765 000024 00000002701 12606024544 020767 0ustar00chrenderstaff000000 000000 Copyright (c) 2009-2015 Christoph Ender All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. fizmo-0.7.10/fizmo-ncursesw/doc/000755 000765 000024 00000000000 12606024326 017421 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-ncursesw/Makefile.am000644 000765 000024 00000003500 12606024326 020706 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # AUTOMAKE_OPTIONS = -Wno-override localedir = $(datarootdir)/fizmo/locales SUBDIRS = src/fizmo-ncursesw man6_MANS = src/man/fizmo-ncursesw.6 install-data-local:: mkdir -p $(DESTDIR)$(localedir) for l in `cd src/locales ; ls -d ??_??`; \ do \ mkdir -p $(DESTDIR)$(localedir)/$$l; \ cp src/locales/$$l/*.txt $(DESTDIR)$(localedir)/$$l; \ done fizmo-0.7.10/fizmo-ncursesw/Makefile.in000644 000765 000024 00000061555 12606024550 020734 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # AUTOMAKE_OPTIONS = -Wno-override VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : subdir = fizmo-ncursesw ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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 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; }; \ } man6dir = $(mandir)/man6 am__installdirs = "$(DESTDIR)$(man6dir)" NROFF = nroff MANS = $(man6_MANS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = $(datarootdir)/fizmo/locales localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ SUBDIRS = src/fizmo-ncursesw man6_MANS = src/man/fizmo-ncursesw.6 all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(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 fizmo-ncursesw/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign fizmo-ncursesw/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-man6: $(man6_MANS) @$(NORMAL_INSTALL) @list1='$(man6_MANS)'; \ list2=''; \ test -n "$(man6dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man6dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man6dir)" || 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 '/\.6[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,^[^6][0-9a-z]*$$,6,;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)$(man6dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man6dir)/$$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)$(man6dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man6dir)" || exit $$?; }; \ done; } uninstall-man6: @$(NORMAL_UNINSTALL) @list='$(man6_MANS)'; test -n "$(man6dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^6][0-9a-z]*$$,6,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man6dir)'; $(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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 @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 check-am: all-am check: check-recursive all-am: Makefile $(MANS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man6dir)"; 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: 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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man6 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 Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man6 .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-data-local install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man6 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-am uninstall uninstall-am uninstall-man uninstall-man6 .PRECIOUS: Makefile install-data-local:: mkdir -p $(DESTDIR)$(localedir) for l in `cd src/locales ; ls -d ??_??`; \ do \ mkdir -p $(DESTDIR)$(localedir)/$$l; \ cp src/locales/$$l/*.txt $(DESTDIR)$(localedir)/$$l; \ done # 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: fizmo-0.7.10/fizmo-ncursesw/README.txt000644 000765 000024 00000000202 12606024544 020346 0ustar00chrenderstaff000000 000000 Note for Mac OS X: It seems cursor visibility settings are not supported, meaning that the cursor will always be visible. fizmo-0.7.10/fizmo-ncursesw/src/000755 000765 000024 00000000000 12606024326 017443 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-ncursesw/src/fizmo-ncursesw/000755 000765 000024 00000000000 12606024550 022435 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-ncursesw/src/locales/000755 000765 000024 00000000000 12606024326 021065 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-ncursesw/src/man/000755 000765 000024 00000000000 12606024326 020216 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-ncursesw/src/man/fizmo-ncursesw.6000644 000765 000024 00000036147 12606024326 023313 0ustar00chrenderstaff000000 000000 .TH FIZMO-NCURSESW 6 "October 2, 2015" "0.7.10" .SH NAME fizmo-ncursesw - wide-character-ncurses implementation of the fizmo Z-Machine Interpreter. .SH SYNOPSIS .B fizmo-ncursesw [ options ] [ .I storyfile [ blorbfile ] | .I storytitle | .I quetzal-save-file ] .SH DESCRIPTION .B fizmo-ncursesw is a frontend for the fizmo Z-Machine interpreter\[em]\[lq]\fBF\fPimzo \fBi\fPnterprets \fBZ\fP-\fBm\fPachine \fBo\fPpcodes\[rq]\[em]based on the ncurses library, and supporting wide characters. It runs most of the interactive fiction games aka text adventures written by Infocom or other games which are based on the Z-Machine. Currently all versions except version 6 are supported. It also supports sound via the SDL media library\[em]see subsection \[lq]Sound Support\[rq]\[em]and implements basic Blorb support. .SS Starting a new game by providing a filename This is the most direct way to get a game running. Just give the filename of the story file at the end of the command line. .SS Starting a new game by providing its title If the game you want to play is stored in the list of known games, you can simply start it by providing the title instead of the full filename. Example: "fizmo sorcerer" will run the game \[lq]Sorcerer\[rq], no matter if it is stored in the current directory or somewhere else. .SS Starting a game from the list of story files Without any filename given, fizmo will display the list of the currently known story files it has indexed so far. Everytime fizmo is started and no story-name is provided, fizmo will update the list of stories by indexing the directories listed in \fCZCODE_PATH\fP or \fCINFOCOM_PATH\fP. .SS Restoring a game from the command line If you give the name of a quetzal save-game file at the end of the command line, fizmo will use its story file list to locate the story file the saved game originates from to directly restore the game. .SS Sound Support fizmo-ncursesw supports sound via the SDL multimedia library which is available for most unix flavors and Windows. Sound files are either read from a blorb file, or, old-infocom-style-wise, from separate *.snd files which have to be stored in the same directory as the game file. At the moment, only AIFF sounds can be read from a blorb file. When the game requests a sound, fizmo uses the sound from the current blorb file. If no blorb file is given or the sound cannot be found in it, fizmo tries to locate a file with the format \[lq]GAMFIL00.SND\[rq] where GAMEFIL symbolizes the game filename shortened to a maximum of six characters, the sound number\[em]eventually padded by a leading zero so it has always a length of two characters\[em]and a \[lq].SND\[rq] suffix. Both upper- and lowercase filenames are attempted. That means you can directly use the sounds from the IF-archive at \fC\[lq]/if-archive/infocom/media/sound\[rq]\fP. .SS Story-Metadata / IF Bibliography fizmo-ncursesw is able to read metadata-files as defined in the \[lq]Treaty of Babel\[rq]. It will try to read the metadata from all files ending in \fC.iFiction\fP which are found in the \fC$HOME/.config/fizmo\fP directory. Fizmo will re-build the story list once the metadata files have been changed. For this purpose, the timestamps for the metadata-files are stored in the file \fC$HOME/.config/fizmo/babel-timestamps\fP. For more information about the treaty, see \fChttp://babel.ifarchive.org/\fP. .SH OPTIONS .TP .B -h, --help Show help message and exit. .TP .B -b, --background-color \fI\fP Set background color. Valid color names are \fIblack\fP, \fIred\fP, \fIgreen\fP, \fIyellow\fP, \fIblue\fP, \fImagenta\fP, \fIcyan\fP and \fIwhite\fP. .TP .B -dh, --disable-hyphenation Disable word hyphenation. Useful for languages other than the supported ones. .TP .B -ds, --disable-sound Disable sound alltogether. May be useful when playing on remote machines. .TP .B -ec, --enable-colors Enable colors. .TP .B -f, --foreground-color \fI\fP Set foreground color. Valid color names are \fIblack\fP, \fIred\fP, \fIgreen\fP, \fIyellow\fP, \fIblue\fP, \fImagenta\fP, \fIcyan\fP and \fIwhite\fP. .TP .B -fi, --start-file-input Start game with input from file. .TP .B -if, --input-file Filename to read commands from. .TP .B -l, --set-locale \fI\fP Set locale name for interpreter messages. Currently valid locale codes are \fIen_US\fP, \fIde_DE\fP and \fIfr_FR\fP. .TP .B -lm, --left-margin \fI\fP Set left margin width, requires a numeric argument. .TP .B -nc, --dont-use-colors Don't use colors. .TP .B -nu, --dont-update-story-list Don't update story-list on startup. Useful in case you've got a large number of story files in your repository. .TP .B -nx, --disable-x11-graphics Disable X11 graphics. .TP .B -pr, --predictable Start with random generator in predictable mode. .TP .B -ra, --random Start with random generator in standard random mode. .TP .B -rc, --record-commands Activate recording of commands as soon as the game starts. .TP .B -rf, --record-filename Filename to record input to. .TP .B -rm, --right-margin \fI\fP Set right margin width, requires a numeric argument. .TP .B -rs, --recursively-search \fI\fP Search a directory recursively, meaning including subdirectories, for Z-Machine files. .TP .B -s, --search \fI\fP Search a single directory for Z-Machine files. .TP .B -s8, --force-8bit-sound Never use 16-bit resolution, always convert to 8bit (some systems may not be capable of 16-bit sound output). .TP .B -st, --start-transcript Start game with scripting already enabled. .TP .B -sy, --sync-transcript When a transcript is active, write data directly into the file as soon as possible. .TP .B -t, --set-tandy-flag Sets the tandy flag, which emulates a game sold by the Tandy Corporation and slightly alters the game behaviour. See \fChttp://www.ifarchive.org/if-archive/infocom/info/tandy_bits.html\fP for detailed information on what the tandy flag does. .TP .B -tf, --transcript-filename Set transcript filename for the current session. .TP .B -u, --update-story-list In case you have disabled automatic updates for your story list, this option will allow you to run the re-indexing manually. .TP .B -um, --umem Use UMem instead of CMem for saving. .TP .B -mu, --maximum-undo-steps Set number of maximum undo steps. .TP .B -xi, -enable-x11-inline-graphics Enable XTerm graphics. This will make fizmo try to display graphics into a X-Terminal. Since this represents a rather ugly hack\[em]and may not work at all for some installations\[em]it is not enabled by default. .TP .B -xt, --enable-xterm-title Use the XTerminal title bar to display the game name. .SH IN-GAME COMMANDS .TP .B /help Displays the list of available in-game commands. .TP .B /info Displays general version about the interpreter and its status, such as the version number, story release and serial number, stack, memory and random generator status. .TP .B /config Displays current configuration values. .TP .B /predictable Switches the random generator from \[lq]random\[rq] in \[lq]predictable\[rq] state and vice-versa. .TP .B /recstart Records all user input in a command-file. .TP .B /recstop Stop recording user input. .TP .B /fileinput Start reading commands from a file. .SH ENVIRONMENT .TP \fC ZCODE_PATH Default list of path names\[em]separated by colons\[em]to search for Z-Machine games. .TP \fC INFOCOM_PATH Alternate list of pathnames which is used when \fCZCODE_PATH\fP is not set. .TP \fC ZCODE_ROOT_PATH List of colon-separated path names which are recursively searched for Z-Machine games. .SH FILES .SS List of files .TP \fC$HOME/.config/fizmo/config\fP May contain user configuration parameters. In case \fC$XDG_CONFIG_HOME\fP is defined and contains an absolute path, \fC$XDG_CONFIG_HOME/fizmo/config\fP is used, in case of a relative path \fC$HOME/$XDG_CONFIG_HOME/fizmo/confg\fP is read. .TP \fC($XDG_CONFIG_DIRS)/fizmo/config\fP $XDG_CONFIG_DIRS may contain a colon separated list of config directories to search. In case $XDG_CONFIG_DIRS is not set or empty \fC/etc/xdg\fP is used instead. Every directory is searched for a subdirectory named \fCfizmo\fP containing a file \fCconfig\fP, which will be searched for configuration parameters. .TP \fC/etc/fizmo.conf\fP Global configuration parameters. .TP \fC$HOME/.config/fizmo/story\-list.txt\fP Contains the current list of story files known. In case $XDG_CONFIG_HOME is set the path is altered as described above. .TP \fC$HOME/.config/fizmo/*.iFiction\fP Fizmo treats all files with a suffix of \fC.iFiction\fP in the \fC$HOME/.config/fizmo\fP directory as sources for story metadata. For more info, see section \[lq]Story-Metadata / IF Bibliography\[rq] above. In case $XDG_CONFIG_HOME is defined, see above. .TP \fC$HOME/.config/fizmo/babel\-timestamps\fP A list of .iFiction-files and their respective timestamps as they were found when the story list was last built (knowing if the babel info has changed speeds up the update process). $XDG_CONFIG_HOME will alter the directory as described before. .SS Option names for config files The following section lists the config-file's equivalents for the command lines options. For a detailed description of these options, see the \[lq]Options\[rq] section. Options have to start at the beginning of the line without any leading whitespace. Comments start with a '#' at the beginning of the line. background-color = .br foreground-color = .br transcript-filename = .br command-filename = .br i18n-search-path = .br locale = .br savegame-path = .br random-mode = .br save-text-history-paragraphs = .br z-code-path = .br z-code-root-path = .br disable-sound = .br quetzal-umem = .br set-tandy-flag = .br start-command-recording-when-story-starts = .br start-file-input-when-story-starts = .br start-script-when-story-starts = .br disable-stream-2-hyphenation = .br disable-stream-2-wrap = .br stream-2-line-width = .br stream-2-left-margin = .br sync-transcript = .br left-margin = .br right-margin = .br disable-hyphenation = .br disable-color = .br force-8bit-sound = .br enable-xterm-title = .br dont-udpate-story-list = .br max-undo-steps = .br enable-xterm-graphics = .br display-x11-inline-image = .SH MISCELLANEOUS .SS Scrolling back You can use the \fCPageUp\fP and \fCPageDown\fP keys (some terminals may require holding down shift) anytime to review text which was scrolled above the current window border. .SS Refreshing the screen \fCCTRL-L\fP will refresh the current display. .SS Redrawing the screen \fCCTRL-R\fP will redraw the current display. Contrary to CTRL-L, which refreshes the screen based on the current layout, CTRL-R will reconstruct the latest output based on the output history. This will help to display output which is hidden in case a game clears the screen, writes some text into the top line and then turns on the score line which then overlays the topmost line. .SS Resizing the screen In general, resizing the screen works best for game versions 3 and before, which is unfortunate since this encompasses only a part of the old Infocom games and none of the modern ones. For all others\[em]including Seastalker\[em]the upper window (which means mostly the status bar) cannot be resized and will remain fixed. .SS Undocumented Infocom commands Here is a list of commands that some of Infocom's games seem to support, although I never saw them menitioned in a manual or reference card. .TP \fC$verify, $ve, $ver\fP Verifies if the game file is correct (essentially executes the \[lq]verify\[rq] opcode). \[lq]$ve\[rq] works in almost all original Infocom games, \[lq]$ver\[rq] works in AMFV, Beyond Zork, Bureaucracy, Nord and Bert, Sherlock, Trinity and Zork Zero. .TP \fC$refre\fP Refreshes the screen. Works in AMFV, Arthur, Bureaucracy, Nord and Bert, Sherlock, Shogun, Trinity and Zork Zero. .TP \fC$id\fP The \[lq]$id\[rq] command gives information about the interpreter. Works in Border Zone, Bureaucracy and Trinity. .TP \fC$credi\fP Shows a credit screen in Trinity and Beyond Zork. .TP \fC#comm, #command\fP This will read your input from a file. Works in AMFV, Ballyhoo, Bureaucracy, Enchanter, Hollywood Hjinx, Leather Goddesses, Lurking Horror, Plundered Hearts, Shogun, Sorcerer, Spellbreaker, Stationfall, Trinity and Zork Zero. .TP \fC#rand \fP Seeds the random generator with the given value. May be used in AMFV, Ballyhoo, Border Zone, Bureaucracy, Enchanter, Hollywood Hijinx, Leather Goddesses, Lurking Horror, Plundered Hearts, Shogun, Sorcerer, Spellbreaker, Stationfall and Zork Zero. .TP \fC#reco, #record\fP This will record your commands into a file. Works in AMFV, Ballyhoo, Bureaucracy, Enchanter, Hollywood Hjinx, Leather Goddesses, Lurking Horror, Plundered Hearts, Shogun, Sorcerer, Spellbreaker, Stationfall and Zork Zero. .TP \fC#unre, #unrecord\fP Stops recording commands into a file. Used in AMFV, Ballyhoo, Bureaucracy, Enchanter, Hollywood Hijinx, Leather Goddesses, Lurking Horror, Plundered Hearts, Shogun, Sorcerer, Spellbreaker, Stationfall and Zork Zero. .SH CREDITS .SS ITF \[em] The InfoTaskForce All the people who drew up the Z-Machine Specification, in alphabetical order: Chris Tham, David Beazley, George Janczuk, Graham Nelson, Mark Howell, Matthias Pfaller, Mike Threepoint, Paul David Doherty, Peter Lisle, Russell Hoare and Stefan Jokisch. See \fChttp://en.wikipedia.org/wiki/InfoTaskForce\fP for more information. .SS The Frotz authors When I got stuck I peeked into the frotz source. Thanks to Stefan Jokisch, Galen Hazelwood and David Griffith. .SS Mark Howell For the pix2gif code which is used in libdrilbo to parse the infocom .mg1 image files. .SS People helping with bug fixes, extensions, packaging, translations and more in alphabetical order: Andrew Plotkin, B. Watson, David Batchelder, David Leverton, Eric Forgeot, irb, Lewis Gentry, Michael Dunlap, Mikko Torvinen, Nikos Chantziaras, Patrick Matth\(:ai, Samuel Verschelde, Zachary Kline and the people at MacPorts. .SH SEE ALSO .BR fizmo-console(6), .BR frotz(6), .BR xzip(6), .BR jzip(6), .BR inform(1) .SH AUTHOR Fizmo was written in 2005\[en]2015 by Christoph Ender. .SH BUGS Fizmo is in beta stage and will probably still have some bugs. If you stumble upon one, please send an e-mail to fizmo@spellbreaker.org. fizmo-0.7.10/fizmo-ncursesw/src/locales/de_DE/000755 000765 000024 00000000000 12606024326 022025 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-ncursesw/src/locales/en_US/000755 000765 000024 00000000000 12606024326 022076 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-ncursesw/src/locales/fizmo_ncursesw_locales.c000644 000765 000024 00000003430 12606024326 026010 0ustar00chrenderstaff000000 000000 /* fizmo_ncursesw_locales.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef fizmo_ncursesw_locales_c_INCLUDED #define fizmo_ncursesw_locales_c_INCLUDED #include z_ucs fizmo_ncursesw_module_name[] = { 'f', 'i', 'z', 'm', 'o', '_', 'n', 'c', 'u', 'r', 's', 'e', 's', 'w', 0 }; #endif // fizmo_ncursesw_locales_c_INCLUDED fizmo-0.7.10/fizmo-ncursesw/src/locales/fizmo_ncursesw_locales.h000644 000765 000024 00000010715 12606024326 026021 0ustar00chrenderstaff000000 000000 /* fizmo_ncursesw_locales.h * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef fizmo_ncursesw_locales_h_INCLUDED #define fizmo_ncursesw_locales_h_INCLUDED #define i18n_ncursesw_SET_FOREGROUND_COLOR 0 #define i18n_ncursesw_SET_BACKGROUND_COLOR 1 #define i18n_ncursesw_SET_LEFT_MARGIN_SIZE 2 #define i18n_ncursesw_SET_RIGHT_MARGIN_SIZE 3 #define i18n_ncursesw_INVALID_CONFIGURATION_VALUE_P0S_FOR_P1S 4 #define i18n_ncursesw_USAGE_DESCRIPTION 5 #define i18n_ncursesw_VALID_OPTIONS_ARE 6 #define i18n_ncursesw_SET_LOCALE_NAME_FOR_INTERPRETER_MESSAGES 7 #define i18n_ncursesw_START_WITH_RANDOM_GENERATOR_IN_PREDICTABLE_MODE 8 #define i18n_ncursesw_START_GAME_WITH_TRANSCRIPT_ENABLED 9 #define i18n_ncursesw_LIBFIZMO_VERSION_P0S 10 #define i18n_ncursesw_LOCALES_AVAILIABLE 11 #define i18n_ncursesw_MORE_PROMPT 12 #define i18n_ncursesw_SCORE 13 #define i18n_ncursesw_TURNS 14 #define i18n_ncursesw_NUMBER_OF_COLOR_COMBINATIONS_AVAILABLE_P0D 15 #define i18n_ncursesw_COLORS_AVAILABLE 16 #define i18n_ncursesw_INVALID_COLOR_NAME 17 #define i18n_ncursesw_SHOW_HELP_MESSAGE_AND_EXIT 18 #define i18n_ncursesw_USE_BOLD_FOR_BRIGHT_FOREGROUND_COLORS 19 #define i18n_ncursesw_USE_BLINK_FOR_BRIGHT_BACKGROUND_COLORS 20 #define i18n_ncursesw_DONT_USE_COLORS 21 #define i18n_ncursesw_ENABLE_COLORS 22 #define i18n_ncursesw_NO_STORIES_REGISTERED_PLUS_HELP 23 #define i18n_ncursesw_SPACE_FOR_NEXT_PAGE 24 #define i18n_ncursesw_B_FOR_LAST_PAGE 25 #define i18n_ncursesw_USE_UMEM_FOR_SAVEGAMES 26 #define i18n_ncursesw_DISABLE_X11_GRAPHICS 27 #define i18n_ncursesw_USE_XTERM_TITLE 28 #define i18n_ncursesw_FORCE_8BIT_SOUND 29 #define i18n_ncursesw_DISABLE_SOUND 30 #define i18n_ncursesw_SET_TANDY_FLAG 31 #define i18n_ncursesw_DONT_UPDATE_STORY_LIST_ON_START 32 #define i18n_ncursesw_SEARCH_DIRECTORY 33 #define i18n_ncursesw_RECURSIVELY_SEARCH_DIRECTORY 34 #define i18n_ncursesw_START_GAME_WITH_RECORDING_COMMANDS 35 #define i18n_ncursesw_START_GAME_WITH_INPUT_FROM_FILE 36 #define i18n_ncursesw_UPDATE_STORY_LIST_ON_START 37 #define i18n_ncursesw_START_WITH_RANDOM_GENERATOR_IN_RANDOM_MODE 38 #define i18n_ncursesw_SYNC_TRANSCRIPT 39 #define i18n_ncursesw_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR 40 #define i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S 41 #define i18n_ncursesw_ERROR_P0D_OCCURED_BEFORE_READ_P1S 42 #define i18n_ncursesw_UNKNOWN_ERROR_CASE 43 #define i18n_ncursesw_FUNCTION_CALL_MALLOC_P2D_RETURNED_NULL_PROBABLY_OUT_OF_MEMORY 44 #define i18n_ncursesw_FIZMO_NCURSESW_VERSION_P0S 45 #define i18n_ncursesw_LIBCELLINTERFACE_VERSION_P0S 46 #define i18n_ncursesw_LOCALE_SEARCH_PATH 47 #define i18n_ncursesw_FILENAME_TO_READ_COMMANDS_FROM 48 #define i18n_ncursesw_ENABLE_X11_INLINE_GRAPHICS 49 #define i18n_ncursesw_LIBDRILBO_VERSION_P0S 50 #define i18n_ncursesw_DISABLE_HYPHENATION 51 #define i18n_ncursesw_SET_TRANSCRIPT_FILENAME 52 #define i18n_ncursesw_FILENAME_TO_RECORD_INPUT_TO 53 #define i18n_ncursesw_COULD_NOT_OPEN_OR_FIND_P0S 54 #define i18n_ncursesw_SET_NUMBER_OF_MAXIMUM_UNDO_STEPS 55 extern z_ucs fizmo_ncursesw_module_name[]; #endif // fizmo_ncursesw_locales_h_INCLUDED fizmo-0.7.10/fizmo-ncursesw/src/locales/fr_FR/000755 000765 000024 00000000000 12606024326 022063 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-ncursesw/src/locales/fr_FR/fizmo_ncursesw_i18n.txt000644 000765 000024 00000003775 12606024326 026554 0ustar00chrenderstaff000000 000000 Set foreground color. Set background color. Set left margin size. Set right margin size. Invalid configuration value "\{0s}" for option "\{1s}". Usage: fizmo-ncursesw [options] [storyfile | quetzal-savefile] [blorbfile] Valid options are: Set locale name for interpreter messages. Start with random generator in predictable mode. Start game with scripting already enabled. libfizmo version \{0s}. Locales availiable: More Score Turns Number of color combinations available: \{0d}. Colors available Invalid color name. Show help message and exit. Use bold for bright foreground colors. Use blink for bright background colors. Don't use colors. Enable colors. No story files are currently known. If you would like to start a specific\nstory file, just append it to the command line (like "fizmo mystory.z5"). If\nyou would like to search a directory you can type "fizmo -s mydirectoryname".\nand run "fizmo" again. There are many more options for finding and updating\nstory data, just take a look at the manual page or type "fizmo -h". Space for next page b for last page Use UMem instead of CMem for saving. Disable X11 graphics. Use XTerm title. Force 8-bit sound output. Disable sound. Set tandy flag. Don't update story-list on startup. Search directory for story files. Recursively search directory for story files. Start recording commands when game starts. Start game with input from file. Update story list. Start with random generator in random mode. Always write transcript directly through to disk. Function call "\{0s}" aborted due to error. Function call "\{0s}" resulted in error \{1d}: "\{2s}". Error \{0d} occured before read: "\{1s}". Unknown error case. Function call malloc(\{0d}) returned null, probably out of memory. fizmo-ncursesw version \{0s}. libcellinterface version \{0s}. Locale search path Filename to read commands from. Enable X11 inline graphics. libdrilbo version \{0s}. Disable hyphenation. Set transcript filename. Filename to record input to. Could not open or find "\{0s}". Set number of maximum undo steps. fizmo-0.7.10/fizmo-ncursesw/src/locales/en_US/fizmo_ncursesw_i18n.txt000644 000765 000024 00000003775 12606024326 026567 0ustar00chrenderstaff000000 000000 Set foreground color. Set background color. Set left margin size. Set right margin size. Invalid configuration value "\{0s}" for option "\{1s}". Usage: fizmo-ncursesw [options] [storyfile | quetzal-savefile] [blorbfile] Valid options are: Set locale name for interpreter messages. Start with random generator in predictable mode. Start game with scripting already enabled. libfizmo version \{0s}. Locales availiable: More Score Turns Number of color combinations available: \{0d}. Colors available Invalid color name. Show help message and exit. Use bold for bright foreground colors. Use blink for bright background colors. Don't use colors. Enable colors. No story files are currently known. If you would like to start a specific\nstory file, just append it to the command line (like "fizmo mystory.z5"). If\nyou would like to search a directory you can type "fizmo -s mydirectoryname".\nand run "fizmo" again. There are many more options for finding and updating\nstory data, just take a look at the manual page or type "fizmo -h". Space for next page b for last page Use UMem instead of CMem for saving. Disable X11 graphics. Use XTerm title. Force 8-bit sound output. Disable sound. Set tandy flag. Don't update story-list on startup. Search directory for story files. Recursively search directory for story files. Start recording commands when game starts. Start game with input from file. Update story list. Start with random generator in random mode. Always write transcript directly through to disk. Function call "\{0s}" aborted due to error. Function call "\{0s}" resulted in error \{1d}: "\{2s}". Error \{0d} occured before read: "\{1s}". Unknown error case. Function call malloc(\{0d}) returned null, probably out of memory. fizmo-ncursesw version \{0s}. libcellinterface version \{0s}. Locale search path Filename to read commands from. Enable X11 inline graphics. libdrilbo version \{0s}. Disable hyphenation. Set transcript filename. Filename to record input to. Could not open or find "\{0s}". Set number of maximum undo steps. fizmo-0.7.10/fizmo-ncursesw/src/locales/de_DE/fizmo_ncursesw_i18n.txt000644 000765 000024 00000004665 12606024326 026515 0ustar00chrenderstaff000000 000000 Vordergrundfarbe festlegen. Hintergrundfarbe festlegen. Abstand zum rechten Rand festlegen. Abstand zum linken Rand festlegen. Ungültiger Konfigurationswert "\{0s}" für Option "\{1s}". Syntax: fizmo-ncursesw [optionen] [storyfile | quetzal-datei] [blorbfile] Gültige Optionen sind: Lokalisierung für Interpretermeldungen setzen. Zufallsgenerator im berechenbaren Modus starten. Starte Spiel mit aktiviertem Transcript. libfizmo version \{0s}. Verfügbare Sprachen: Weiter Punkte Züge Anzahl der verfügbaren Farbkombinationen: \{0d}. Verfügbare Farben Ungültiger Farbname. Hilfe anzeigen und beenden. Bold-Attribut für helle Vordergrundfarben. Blink-Attribut für helle Hintergrundfarben. Keine Farben verwenden. Farben aktivieren. Zur Zeit sind noch keine Story-Dateien registriert. Wenn Sie eine bestimmte\nGeschichte starten wollen, fügen Sie den Dateinamen an die Kommandozeile an\n(in der Art von "fizmo storydatei.z5"). Es ist auch möglich ein komplettes\nVerzeichnis zu durchsuchen, verwenden Sie dazu "fizmo -s verzeichnisname"\nund starten Sie dann "fizmo" erneut. Darüberhinaus existieren noch viele\nweitere Optionen Story-Dateien zu verwalten, die Manual Page oder ein Aufruf\nvon "fizmo -h" liefern weitere Informationen. Leertaste für nächste Seite b für letzte Seite mit UMem statt CMem abspeichern. X11-Grafik deaktivieren. XTerm-Titelzeile verwenden. Sound als 8-Bit-Samples abspielen. Sound deaktivieren. Tandy-Flag setzen. Story-Liste beim Start nicht aktualisieren. Verzeichnis nach Story-Files durchsuchen. Verzeichnis rekursiv nach Story-Files durchsuchen. Aufzeichen von Kommandos aktivieren. Spiel mit Eingabe aus Datei beginnen. Story-Liste aktualisieren. Zufallsgenerator im zufälligen Modus starten. Transcript-Datei immer sofort speichern. Funtionsaufruf „\{0s}“ aufgrund eines Fehlers abgebrochen. Funtionsaufruf „\{0s}“ führte zu Fehlercode \{1d}: „\{2s}“. Fehler \{0d} trat vor Read auf: „\{1s}“. Unbekannter Fehlerfall. Funktionsaufruf von malloc(\{0d}) lieferte NULL, wahrscheinlich verursacht durch Speichermangel. fizmo-ncursesw version \{0s}. libcellinterface version \{0s}. Lokalisierungsdaten-Suchpfad Dateiname, von dem Kommandos gelesen werden. X11-Inline-Grafik aktivieren. libdrilbo version \{0s}. Worttrennung deaktivieren. Dateiname für Transcript festlegen. Name der Datei zum Speichern der Benutzereingaben. Konnte „\{0s}“ nicht finden oder öffnen. Maximale Anzahl möglicher Undo-Aktionen festlegen. fizmo-0.7.10/fizmo-ncursesw/src/fizmo-ncursesw/fizmo-ncursesw.c000644 000765 000024 00000230210 12606024326 025573 0ustar00chrenderstaff000000 000000 /* fizmo-ncursesw.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #define _XOPEN_SOURCE_EXTENDED 1 // for cchar_t and wcval // Note: Colors may require --enable-ext-colors ? #include #include #include #include #include #include #include #include #include #include //#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef SOUND_INTERFACE_INCLUDE_FILE #include SOUND_INTERFACE_INCLUDE_FILE #endif /* SOUND_INTERFACE_INCLUDE_FILE */ #include "../locales/fizmo_ncursesw_locales.h" #define FIZMO_NCURSESW_VERSION "0.7.9" #ifdef ENABLE_X11_IMAGES #include #include #include #include #endif //ENABLE_X11_IMAGES #define NCURSESW_WCHAR_T_BUF_SIZE 64 #define NCURSESW_Z_UCS_BUF_SIZE 32 #define NCURSESW_OUTPUT_CHAR_BUF_SIZE 80 static char* interface_name = "ncursesw"; static int ncursesw_if_signalling_pipe[2]; static struct sigaction default_sigaction; static struct itimerval timerval; static struct itimerval empty_timerval; static bool use_xterm_title = false; static int ncursesw_argc; static char **ncursesw_argv; static bool dont_update_story_list_on_start = false; static bool directory_was_searched = false; static WORDWRAP *infowin_output_wordwrapper; static WINDOW *infowin; static z_ucs *infowin_more, *infowin_back; static int infowin_height, infowin_width; static int infowin_topindex; static int infowin_lines_skipped; static int infowin_skip_x; static bool infowin_full = false; static wchar_t wchar_t_buf[NCURSESW_WCHAR_T_BUF_SIZE]; static z_ucs z_ucs_t_buf[NCURSESW_Z_UCS_BUF_SIZE]; static char output_char_buf[NCURSESW_OUTPUT_CHAR_BUF_SIZE]; static bool ncursesw_interface_open = false; static z_colour screen_default_foreground_color = -1; static z_colour screen_default_background_color = -1; static int n_color_pairs_in_use; static int n_color_pairs_available; static bool color_initialized = false; // This array contains (n_color_pairs_in_use) elements. The first element // contains the number of the color pair the was selected last, the // second element the color pair used before that. The array is used in // case the Z-Code tries to use more color pairs than the terminal can // provide. In such a case, the color pair that has not been used for // a longer time than all others is recycled. static short *color_pair_usage; static int ncursesw_interface_screen_height = -1; static int ncursesw_interface_screen_width = -1; static attr_t ncursesw_no_attrs = 0; static wchar_t ncursesw_setcchar_init_string[2]; static bool dont_allocate_new_colour_pair = false; // "max_nof_color_pairs" will be equal to story->max_nof_color_pairs once // the interface is initialized. Up to then it will contain -1 or COLOR_PAIRS-1 // if the story menu is in use. static int max_nof_color_pairs = -1; static bool timer_active = true; #ifdef ENABLE_X11_IMAGES static z_image *frontispiece = NULL; static bool enable_x11_graphics = true; static bool enable_x11_inline_graphics = false; static x11_image_window_id drilbo_window_id = -1; static int x11_signalling_pipe[2]; unsigned int x11_read_buf[1]; fd_set x11_in_fds; #endif // ENABLE_X11_IMAGES static char *config_option_names[] = { "enable-xterm-title", "disable-x11-graphics", "display-x11-inline-image", "dont-update-story-list", NULL }; static z_colour colorname_to_infocomcode(char *colorname) { if (strcmp(colorname, "black") == 0) return Z_COLOUR_BLACK; else if (strcmp(colorname, "red") == 0) return Z_COLOUR_RED; else if (strcmp(colorname, "green") == 0) return Z_COLOUR_GREEN; else if (strcmp(colorname, "yellow") == 0) return Z_COLOUR_YELLOW; else if (strcmp(colorname, "blue") == 0) return Z_COLOUR_BLUE; else if (strcmp(colorname, "magenta") == 0) return Z_COLOUR_MAGENTA; else if (strcmp(colorname, "cyan") == 0) return Z_COLOUR_CYAN; else if (strcmp(colorname, "white") == 0) return Z_COLOUR_WHITE; else return -1; } static z_ucs *z_ucs_string_to_wchar_t(wchar_t *dest, z_ucs *src, size_t max_dest_len) { if (max_dest_len < 2) { return NULL; } while (*src != 0) { if (max_dest_len == 1) { *dest = L'\0'; return src; } *dest = (wchar_t)*src; dest++; src++; max_dest_len--; } *dest = L'\0'; return NULL; } static void infowin_z_ucs_output_wordwrap_destination(z_ucs *z_ucs_output, void *UNUSED(dummyparameter)) { z_ucs *ptr; int y; #ifdef __GNUC__ int __attribute__ ((unused)) x; #else int x; #endif // __GNU_CC #ifdef ENABLE_TRACING z_ucs buf; #endif // ENABLE_TRACING if (infowin_full == true) return; // In case we're supposed to skip some story description in case the user // has scrolled down, loop here until we're at the "infowin_topindex", at the // point we're supposed to start output. TRACE_LOG("line length: %d\n", infowin_width - infowin_skip_x); if (infowin_lines_skipped < infowin_topindex) { while ( ((ptr = z_ucs_chr(z_ucs_output, Z_UCS_NEWLINE)) != NULL) || ((long)z_ucs_len(z_ucs_output) >= infowin_width - infowin_skip_x) ) { TRACE_LOG("loop: ptr:%p, len:%d.\n", ptr, (long)z_ucs_len(z_ucs_output)); if (ptr != NULL) { #ifdef ENABLE_TRACING buf = *ptr; *ptr = 0; TRACE_LOG("skip infowin output: \""); TRACE_LOG_Z_UCS(z_ucs_output); TRACE_LOG("\"\n"); *ptr = buf; #endif // ENABLE_TRACING TRACE_LOG("diff: %d, %d\n", ptr - z_ucs_output, infowin_width - infowin_skip_x); if (ptr - z_ucs_output > infowin_width - infowin_skip_x) z_ucs_output += infowin_width - infowin_skip_x; else z_ucs_output = ptr + 1; } else { TRACE_LOG("overlong line, skipping %d chars.\n", infowin_width - infowin_skip_x); z_ucs_output += (infowin_width - infowin_skip_x); } if (++infowin_lines_skipped == infowin_topindex) { TRACE_LOG("break after: infowin_lines_skipped: %d\n", infowin_lines_skipped); break; } } infowin_skip_x = z_ucs_len(z_ucs_output); TRACE_LOG("infowin_lines_skipped: %d\n", infowin_lines_skipped); if (infowin_lines_skipped < infowin_topindex) return; } // At this point we've skipped all required lines. Skip any newline we come // accross before starting the true output. /* if (infowin_lines_skipped == infowin_topindex) { while (*z_ucs_output == Z_UCS_NEWLINE) z_ucs_output++; infowin_lines_skipped++; } */ // Display output. Output will be either the supplied "z_ucs_output", or the // "infowin_more" message in case we're at the bottom of the infowin page. // Determine if we're at the bottom and adjust output contents in this case. getyx(infowin, y, x); if (y == infowin_height - 1) { TRACE_LOG("infowin full.\n"); infowin_full = true; waddstr(infowin, "["); z_ucs_output = infowin_more; } // Display output. while (z_ucs_output != NULL) { TRACE_LOG("infowin output: \""); TRACE_LOG_Z_UCS(z_ucs_output); TRACE_LOG("\"\n"); z_ucs_output = z_ucs_string_to_wchar_t( wchar_t_buf, z_ucs_output, NCURSESW_WCHAR_T_BUF_SIZE); // Ignore errors, since output on the last line always causes // ERR to be returned. waddwstr(infowin, wchar_t_buf); } // Add closing bracket in case we're displaying the "infowin_more" message. if (infowin_full == true) waddstr(infowin, "]"); } static z_colour curses_to_z_colour(short curses_color) { switch (curses_color) { case COLOR_BLACK: return Z_COLOUR_BLACK; case COLOR_RED: return Z_COLOUR_RED; case COLOR_GREEN: return Z_COLOUR_GREEN; case COLOR_YELLOW: return Z_COLOUR_YELLOW; case COLOR_BLUE: return Z_COLOUR_BLUE; case COLOR_MAGENTA: return Z_COLOUR_MAGENTA; case COLOR_CYAN: return Z_COLOUR_CYAN; case COLOR_WHITE: return Z_COLOUR_WHITE; } return -1; } static void goto_yx(int y, int x) { TRACE_LOG("move: %d,%d\n", y, x); move(y-1, x-1); } static void ncursesw_fputws(wchar_t *str, FILE *out) { #ifdef __CYGWIN__ while(*str != 0) fputc(wctob(*(str++)), out); #else fputws(str, out); #endif } static void z_ucs_output(z_ucs *output) { cchar_t wcval; //int errorcode; TRACE_LOG("Interface-Output(%d): \"", ncursesw_interface_open); TRACE_LOG_Z_UCS(output); TRACE_LOG("\".\n"); if (ncursesw_interface_open == false) { while (*output != 0) { zucs_string_to_utf8_string( output_char_buf, &output, NCURSESW_OUTPUT_CHAR_BUF_SIZE); fputs(output_char_buf, stdout); } fflush(stdout); } else { ncursesw_setcchar_init_string[1] = L'\0'; while (*output != '\0') { ncursesw_setcchar_init_string[0] = *output; //TRACE_LOG("%c/%d\n", *output, *output); //errorcode = setcchar( &wcval, ncursesw_setcchar_init_string, ncursesw_no_attrs, 0, NULL); add_wch(&wcval); output++; } } } static bool is_input_timeout_available() { return true; } static void turn_on_input() { } static void turn_off_input() { } static char* get_interface_name() { return interface_name; } static bool is_colour_available() { return has_colors(); } static bool is_bold_face_available() { return true; } static bool is_italic_available() { return true; } static void print_startup_syntax() { int i; char **available_locales = get_available_locale_names(); streams_latin1_output("\n"); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_USAGE_DESCRIPTION); streams_latin1_output("\n\n"); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_FIZMO_NCURSESW_VERSION_P0S, FIZMO_NCURSESW_VERSION); streams_latin1_output("\n"); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_LIBFIZMO_VERSION_P0S, FIZMO_VERSION); streams_latin1_output("\n"); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_LIBCELLINTERFACE_VERSION_P0S, get_screen_cell_interface_version()); streams_latin1_output("\n"); if (active_sound_interface != NULL) { streams_latin1_output(active_sound_interface->get_interface_name()); streams_latin1_output(" "); streams_latin1_output("version "); streams_latin1_output(active_sound_interface->get_interface_version()); streams_latin1_output(".\n"); } #ifdef ENABLE_X11_IMAGES (void)i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_LIBDRILBO_VERSION_P0S, get_drilbo_version()); (void)streams_latin1_output("\n"); #endif //ENABLE_X11_IMAGES streams_latin1_output("\n"); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_LOCALES_AVAILIABLE); streams_latin1_output(" "); i = 0; while (available_locales[i] != NULL) { if (i != 0) streams_latin1_output(", "); streams_latin1_output(available_locales[i]); free(available_locales[i]); i++; } free(available_locales); streams_latin1_output(".\n"); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_LOCALE_SEARCH_PATH); streams_latin1_output(": "); streams_latin1_output( get_i18n_default_search_path()); streams_latin1_output(".\n"); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_COLORS_AVAILABLE); streams_latin1_output(": "); for (i=Z_COLOUR_BLACK; i<=Z_COLOUR_WHITE; i++) { if (i != Z_COLOUR_BLACK) streams_latin1_output(", "); streams_latin1_output(z_colour_names[i]); } streams_latin1_output(".\n\n"); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_VALID_OPTIONS_ARE); streams_latin1_output("\n"); streams_latin1_output( " -l, --set-locale: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_SET_LOCALE_NAME_FOR_INTERPRETER_MESSAGES); streams_latin1_output("\n"); streams_latin1_output( " -pr, --predictable: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_START_WITH_RANDOM_GENERATOR_IN_PREDICTABLE_MODE); streams_latin1_output("\n"); streams_latin1_output( " -ra, --random: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_START_WITH_RANDOM_GENERATOR_IN_RANDOM_MODE); streams_latin1_output("\n"); streams_latin1_output( " -st, --start-transcript: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_START_GAME_WITH_TRANSCRIPT_ENABLED); streams_latin1_output("\n"); streams_latin1_output( " -tf, --transcript-filename: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_SET_TRANSCRIPT_FILENAME); streams_latin1_output("\n"); streams_latin1_output( " -rc, --record-commands: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_START_GAME_WITH_RECORDING_COMMANDS); streams_latin1_output("\n"); streams_latin1_output( " -fi, --start-file-input: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_START_GAME_WITH_INPUT_FROM_FILE); streams_latin1_output("\n"); streams_latin1_output( " -if, --input-filename: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_FILENAME_TO_READ_COMMANDS_FROM); streams_latin1_output("\n"); streams_latin1_output( " -rf, --record-filename: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_FILENAME_TO_RECORD_INPUT_TO); streams_latin1_output("\n"); streams_latin1_output( " -f, --foreground-color: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_SET_FOREGROUND_COLOR); streams_latin1_output("\n"); streams_latin1_output( " -b, --background-color: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_SET_BACKGROUND_COLOR); streams_latin1_output("\n"); /* streams_latin1_output( " -bf, --bold-for-bright-foreground: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_USE_BOLD_FOR_BRIGHT_FOREGROUND_COLORS); streams_latin1_output("\n"); streams_latin1_output( " -bb, --blink-for-bright-background: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_USE_BLINK_FOR_BRIGHT_BACKGROUND_COLORS); streams_latin1_output("\n"); */ streams_latin1_output( " -nc, --dont-use-colors: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_DONT_USE_COLORS); streams_latin1_output("\n"); streams_latin1_output( " -ec, --enable-colors: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_ENABLE_COLORS); streams_latin1_output("\n"); streams_latin1_output( " -lm, --left-margin: " ); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_SET_LEFT_MARGIN_SIZE); streams_latin1_output("\n"); streams_latin1_output( " -rm, --right-margin: " ); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_SET_RIGHT_MARGIN_SIZE); streams_latin1_output("\n"); streams_latin1_output( " -um, --umem: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_USE_UMEM_FOR_SAVEGAMES); streams_latin1_output("\n"); streams_latin1_output( " -dh, --disable-hyphenation: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_DISABLE_HYPHENATION); streams_latin1_output("\n"); streams_latin1_output( " -mu, --maximum-undo-steps: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_SET_NUMBER_OF_MAXIMUM_UNDO_STEPS); streams_latin1_output("\n"); #ifdef ENABLE_X11_IMAGES streams_latin1_output( " -nx, --disable-x11-graphics: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_DISABLE_X11_GRAPHICS); streams_latin1_output("\n"); streams_latin1_output( " -xi, --enable-x11-inline-graphics: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_ENABLE_X11_INLINE_GRAPHICS); streams_latin1_output("\n"); streams_latin1_output( " -xt, --enable-xterm-title: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_USE_XTERM_TITLE); streams_latin1_output("\n"); #endif //ENABLE_X11_IMAGES streams_latin1_output( " -ds, --disable-sound: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_DISABLE_SOUND); streams_latin1_output("\n"); streams_latin1_output( " -t, --set-tandy-flag: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_SET_TANDY_FLAG); streams_latin1_output("\n"); streams_latin1_output( " -nu, --dont-update-story-list: " ); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_DONT_UPDATE_STORY_LIST_ON_START); streams_latin1_output("\n"); streams_latin1_output( " -u, --update-story-list: " ); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_UPDATE_STORY_LIST_ON_START); streams_latin1_output("\n"); streams_latin1_output( " -s, --search: " ); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_SEARCH_DIRECTORY); streams_latin1_output("\n"); streams_latin1_output( " -rs, --recursively-search: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_RECURSIVELY_SEARCH_DIRECTORY); streams_latin1_output("\n"); streams_latin1_output( " -sy, --sync-transcript: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_SYNC_TRANSCRIPT); streams_latin1_output("\n"); streams_latin1_output( " -h, --help: "); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_SHOW_HELP_MESSAGE_AND_EXIT); streams_latin1_output("\n"); //set_configuration_value("locale", fizmo_locale, "fizmo"); streams_latin1_output("\n"); } static int parse_config_parameter(char *key, char *value) { if (strcmp(key, "enable-xterm-title") == 0) { if ( (value == NULL) || (*value == 0) || (strcmp(value, config_true_value) == 0) ) use_xterm_title = true; else use_xterm_title = false; free(value); return 0; } else if (strcmp(key, "disable-x11-graphics") == 0) { #ifdef ENABLE_X11_IMAGES if ( (value == NULL) || (*value == 0) || (strcmp(value, config_true_value) == 0) ) enable_x11_graphics = false; else enable_x11_graphics = true; #endif // ENABLE_X11_IMAGES free(value); return 0; } else if (strcmp(key, "display-x11-inline-image") == 0) { #ifdef ENABLE_X11_IMAGES if ( (value == NULL) || (*value == 0) || (strcmp(value, config_true_value) == 0) ) enable_x11_inline_graphics = true; else enable_x11_inline_graphics = false; #endif // ENABLE_X11_IMAGES free(value); return 0; } else if (strcmp(key, "dont-update-story-list") == 0) { if ( (value == NULL) || (*value == 0) || (strcmp(value, config_true_value) == 0) ) dont_update_story_list_on_start = true; free(value); return 0; } else { return -2; } } static char *get_config_value(char *key) { if (strcmp(key, "enable-xterm-title") == 0) { return use_xterm_title == true ? config_true_value : config_false_value; } else if (strcmp(key, "disable-x11-graphics") == 0) { #ifdef ENABLE_X11_IMAGES return enable_x11_graphics == false ? config_true_value : config_false_value; #endif // ENABLE_X11_IMAGES return config_true_value; } else if (strcmp(key, "display-x11-inline-image") == 0) { #ifdef ENABLE_X11_IMAGES return enable_x11_inline_graphics == true ? config_true_value : config_false_value; #endif // ENABLE_X11_IMAGES return config_false_value; } else if (strcmp(key, "dont-update-story-list") == 0) { return dont_update_story_list_on_start == true ? config_true_value : config_false_value; } else { return NULL; } } static char **get_config_option_names() { return config_option_names; } static int z_to_curses_colour(z_colour z_colour_to_convert) { switch (z_colour_to_convert) { case Z_COLOUR_BLACK: return COLOR_BLACK; case Z_COLOUR_RED: return COLOR_RED; case Z_COLOUR_GREEN: return COLOR_GREEN; case Z_COLOUR_YELLOW: return COLOR_YELLOW; case Z_COLOUR_BLUE: return COLOR_BLUE; case Z_COLOUR_MAGENTA: return COLOR_MAGENTA; case Z_COLOUR_CYAN: return COLOR_CYAN; case Z_COLOUR_WHITE: return COLOR_WHITE; default: return -1; } } #ifdef ENABLE_TRACING static void dump_col_usage() { int j; int pair; short pair_foreground, pair_background; if (n_color_pairs_available < max_nof_color_pairs) for (j=0; j=0; j--) color_pair_usage[j] = color_pair_usage[j-1]; color_pair_usage[0] = i; } #ifdef ENABLE_TRACING dump_col_usage(); #endif // ENABLE_TRACING } return i; } } TRACE_LOG("No existing color pair found.\n"); // In case we arrive here we have not returned and thus the desired // color pair was not found. if (bool_equal(dont_allocate_new_colour_pair, true)) return -1; if (n_color_pairs_in_use < n_color_pairs_available) { new_color_pair_number = n_color_pairs_in_use + 1; TRACE_LOG("Allocating new color pair %d.\n", new_color_pair_number); n_color_pairs_in_use++; if (n_color_pairs_available != max_nof_color_pairs) { memmove(&(color_pair_usage[1]), color_pair_usage, (n_color_pairs_in_use-1) * sizeof(short)); color_pair_usage[0] = new_color_pair_number; } } else { new_color_pair_number = color_pair_usage[n_color_pairs_in_use-1]; memmove(&(color_pair_usage[1]), color_pair_usage, (n_color_pairs_in_use) * sizeof(short)); color_pair_usage[0] = new_color_pair_number; TRACE_LOG("Recycling oldest color pair %d.\n", new_color_pair_number); } TRACE_LOG("initpair: %d, %d, %d\n", new_color_pair_number, curses_foreground_color, curses_background_color); if (init_pair( new_color_pair_number, curses_foreground_color, curses_background_color) == ERR) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x2000, "init_pair"); TRACE_LOG("n_color pairs in use: %d.\n", n_color_pairs_in_use); #ifdef ENABLE_TRACING dump_col_usage(); #endif // ENABLE_TRACING return new_color_pair_number; } static void initialize_colors() { start_color(); // After implementing almost everything and assuming that the color pair // #0 always has the default colors (and running into strange problems) // I found the following note: "Note that color-pair 0 is reserved for // use by curses and should not be changed or used in application programs." // Thus, color pair 0 is not used here and the number of availiable colors // is set to COLOR_PAIRS - 1. //n_color_pairs_available = COLOR_PAIRS; n_color_pairs_available = COLOR_PAIRS - 1; // In case there has been no story initialization yet, max_nof_color_pairs // is still -1. if (max_nof_color_pairs == -1) max_nof_color_pairs = n_color_pairs_available; else if (n_color_pairs_available > max_nof_color_pairs) n_color_pairs_available = max_nof_color_pairs; TRACE_LOG("%d color pairs are availiable.\n", n_color_pairs_available); if (n_color_pairs_available < max_nof_color_pairs) { // In case not all color combinations are available, we'll have to // keep track when the colors were used last. color_pair_usage = (short*)fizmo_malloc(sizeof(short) * n_color_pairs_available); color_pair_usage[0] = 0; } n_color_pairs_in_use = 0; color_initialized = true; } static void set_colour(z_colour foreground, z_colour background) { short color_pair_number; //attr_t attrs; TRACE_LOG("new colors: %d, %d\n", foreground, background); if (color_initialized == false) initialize_colors(); if ((color_pair_number = get_color_pair(foreground, background)) == -1) { if (bool_equal(dont_allocate_new_colour_pair, true)) return; else i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -1, "curses_if_get_color_pair"); } TRACE_LOG("setting colour pair %d.\n", color_pair_number); if (color_set(color_pair_number, NULL) == ERR) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x2052, "color_set"); bkgdset(' ' | COLOR_PAIR(color_pair_number)); } #ifdef ENABLE_X11_IMAGES static void x11_callback_func(x11_image_window_id window_id, int event) { int ret_val; unsigned char write_buffer = 0; // No tracelogs from other thread: Might crash application. //TRACE_LOG("Got X11 callback event %d for image id %d.\n", event, window_id); if (drilbo_window_id == window_id) { if (event == DRILBO_IMAGE_WINDOW_CLOSED) { do { ret_val = write(x11_signalling_pipe[1], &write_buffer, 1); if ( (ret_val == -1) && (errno != EAGAIN) ) return; } while ( (ret_val == -1) && (errno == EAGAIN) ); } } } static void setup_x11_callback() { int flags; if (pipe(x11_signalling_pipe) != 0) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2016, "pipe", errno, strerror(errno)); if ((flags = fcntl(x11_signalling_pipe[0], F_GETFL, 0)) == -1) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2018, "fcntl / F_GETFL", errno, strerror(errno)); if ((fcntl(x11_signalling_pipe[0], F_SETFL, flags|O_NONBLOCK)) == -1) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2018, "fcntl / F_SETFL", errno, strerror(errno)); if ((flags = fcntl(STDIN_FILENO, F_GETFL, 0)) == -1) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2018, "fcntl / F_GETFL", errno, strerror(errno)); if ((fcntl(STDIN_FILENO, F_SETFL, flags|O_NONBLOCK)) == -1) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2018, "fcntl / F_SETFL", errno, strerror(errno)); } int wait_for_x11_callback() { int max_filedes_number_plus_1; int select_retval, ret_val; for (;;) { FD_ZERO(&x11_in_fds); FD_SET(STDIN_FILENO, &x11_in_fds); FD_SET(x11_signalling_pipe[0], &x11_in_fds); max_filedes_number_plus_1 = (STDIN_FILENO < x11_signalling_pipe[0] ? x11_signalling_pipe[0] : STDIN_FILENO) + 1; select_retval = select(max_filedes_number_plus_1, &x11_in_fds, NULL, NULL, NULL); if (select_retval > 0) { if (FD_ISSET(STDIN_FILENO, &x11_in_fds)) { do { ret_val = read(STDIN_FILENO, &x11_read_buf, 1); } while (ret_val > 0); break; } else if (FD_ISSET(x11_signalling_pipe[0], &x11_in_fds)) { do { ret_val = read(x11_signalling_pipe[0], &x11_read_buf, 1); if ( (ret_val == -1) && (errno != EAGAIN) ) { printf("ret_val:%d\n", ret_val); return -1; } } while ( (ret_val == -1) && (errno == EAGAIN) ); break; } } } return 0; } static int display_X11_image_window(int image_no) { //long image_blorb_index; char *env_window_id; XID window_id; if ((frontispiece = get_blorb_image(image_no)) == NULL) return -1; env_window_id = getenv("WINDOWID"); if ( (env_window_id != NULL) && (enable_x11_inline_graphics == true) ) { curs_set(0); window_id = atol(env_window_id); setup_x11_callback(); drilbo_window_id = display_zimage_on_X11( &window_id, frontispiece, &x11_callback_func); wait_for_x11_callback(); close_image_window(drilbo_window_id); drilbo_window_id = -1; curs_set(1); } else { drilbo_window_id = display_zimage_on_X11(NULL, frontispiece, NULL); } return 0; } #endif // ENABLE_X11_IMAGES static void link_interface_to_story(struct z_story *story) { int flags; int frontispiece_resource_number; initscr(); keypad(stdscr, TRUE); cbreak(); noecho(); // Create a new signalling pipe. This pipe is used by a select call to // detect an incoming time-signal for the input routine. if (pipe(ncursesw_if_signalling_pipe) != 0) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2016, "pipe", errno, strerror(errno)); // Get the current flags for the read-end of the pipe. if ((flags = fcntl(ncursesw_if_signalling_pipe[0], F_GETFL, 0)) == -1) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2017, "fcntl / F_GETFL", errno, strerror(errno)); // Add the nonblocking flag the read-end of the pipe, thus making incoming // input "visible" at once without having to wait for a newline. if ((fcntl(ncursesw_if_signalling_pipe[0], F_SETFL, flags|O_NONBLOCK)) == -1) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2018, "fcntl / F_SETFL", errno, strerror(errno)); max_nof_color_pairs = story->max_nof_color_pairs; color_initialized = false; ncursesw_interface_open = true; if ( (active_z_story->title != NULL) && (use_xterm_title == true) ) printf("%c]0;%s%c", 033, active_z_story->title, 007); #ifdef ENABLE_X11_IMAGES frontispiece_resource_number = active_blorb_interface->get_frontispiece_resource_number( active_z_story->blorb_map); if ( (frontispiece_resource_number >= 0) && (enable_x11_graphics != false) ) { TRACE_LOG("frontispiece resnum: %d.\n", frontispiece_resource_number) display_X11_image_window(frontispiece_resource_number); } #endif // ENABLE_X11_IMAGES } static void reset_interface() { } static int ncursw_close_interface(z_ucs *error_message) { z_ucs *ptr; #ifdef ENABLE_X11_IMAGES if (drilbo_window_id != -1) { close_image_window(drilbo_window_id); drilbo_window_id = -1; } if (frontispiece != NULL) { free_zimage(frontispiece); frontispiece = NULL; } #endif // ENABLE_X11_IMAGES TRACE_LOG("Closing signalling pipes.\n"); close(ncursesw_if_signalling_pipe[1]); close(ncursesw_if_signalling_pipe[0]); endwin(); ncursesw_interface_open = false; if (error_message != NULL) { ptr = error_message; while (ptr != NULL) { ptr = z_ucs_string_to_wchar_t( wchar_t_buf, ptr, NCURSESW_WCHAR_T_BUF_SIZE); ncursesw_fputws(wchar_t_buf, stderr); } } if (use_xterm_title == true) printf("%c]0;%c", 033, 007); return 0; } static attr_t ncursesw_z_style_to_attr_t(int16_t style_data) { attr_t result = A_NORMAL; if ((style_data & Z_STYLE_REVERSE_VIDEO) != 0) { result |= A_REVERSE; } if ((style_data & Z_STYLE_BOLD) != 0) { result |= A_BOLD; } if ((style_data & Z_STYLE_ITALIC) != 0) { result |= A_UNDERLINE; } return result; } static void set_text_style(z_style style_data) { attr_t attrs; TRACE_LOG("Output style, style_data %d.\n", style_data); attrs = ncursesw_z_style_to_attr_t(style_data); if ((int)attrset(attrs) == ERR) { i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x2fff, "wattrset"); } } static void set_font(z_font UNUSED(font_type)) { } static void output_interface_info() { (void)i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_FIZMO_NCURSESW_VERSION_P0S, FIZMO_NCURSESW_VERSION); (void)streams_latin1_output("\n"); #ifdef ENABLE_X11_IMAGES (void)i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_LIBDRILBO_VERSION_P0S, get_drilbo_version()); (void)streams_latin1_output("\n"); #endif //ENABLE_X11_IMAGES } static void refresh_screen_size() { getmaxyx( stdscr, ncursesw_interface_screen_height, ncursesw_interface_screen_width); } static int get_screen_width() { if (ncursesw_interface_screen_width == -1) refresh_screen_size(); return ncursesw_interface_screen_width; } static int get_screen_height() { if (ncursesw_interface_screen_height == -1) refresh_screen_size(); return ncursesw_interface_screen_height; } static void ncursesw_if_catch_signal(int sig_num) { int bytes_written = 0; int ret_val; int ncursesw_if_write_buffer; // Note: // I think TRACE_LOGs in this function may cause a deadlock in case // they're called while a fflush for the tracelog is already underway. ncursesw_if_write_buffer = sig_num; //TRACE_LOG("Caught signal %d.\n", sig_num); while ((size_t)bytes_written < sizeof(int)) { ret_val = write( ncursesw_if_signalling_pipe[1], &ncursesw_if_write_buffer, sizeof(int)); if (ret_val == -1) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2023, "write", errno, strerror(errno)); bytes_written += ret_val; } //TRACE_LOG("Catch finished.\n"); } static int get_next_event(z_ucs *z_ucs_input, int timeout_millis) { int max_filedes_number_plus_1; int select_retval; fd_set input_selectors; int result = -1; int input_return_code; bool input_should_terminate = false; int bytes_read; wint_t input; int read_retval; int new_signal; //int screen_height, screen_width; FD_ZERO(&input_selectors); FD_SET(STDIN_FILENO, &input_selectors); FD_SET(ncursesw_if_signalling_pipe[0], &input_selectors); max_filedes_number_plus_1 = (STDIN_FILENO < ncursesw_if_signalling_pipe[0] ? ncursesw_if_signalling_pipe[0] : STDIN_FILENO) + 1; if (timeout_millis > 0) { TRACE_LOG("input timeout: %d ms. (%d/%d)\n", timeout_millis, timeout_millis - (timeout_millis % 1000), (timeout_millis % 1000) * 1000); timerval.it_value.tv_sec = timeout_millis - (timeout_millis % 1000); timerval.it_value.tv_usec = (timeout_millis % 1000) * 1000; timer_active = true; setitimer(ITIMER_REAL, &timerval, NULL); } while (input_should_terminate == false) { TRACE_LOG("current errno: %d.\n", errno); TRACE_LOG("setting up selectors.\n"); FD_ZERO(&input_selectors); FD_SET(STDIN_FILENO, &input_selectors); FD_SET(ncursesw_if_signalling_pipe[0], &input_selectors); select_retval = select( max_filedes_number_plus_1, &input_selectors, NULL, NULL, NULL); if (select_retval > 0) { TRACE_LOG("select_retval > 0.\n"); TRACE_LOG("current errno: %d.\n", errno); // something has changed in one of out input pipes. if (FD_ISSET(STDIN_FILENO, &input_selectors)) { // some user input is waiting. we'll read until getch() returned // err, meaning "no more input availiable" in the nonblocking mode. input_return_code = get_wch(&input); if (input_return_code == ERR) { } else if (input_return_code == KEY_CODE_YES) { if (input == KEY_UP) result = EVENT_WAS_CODE_CURSOR_UP; else if (input == KEY_DOWN) result = EVENT_WAS_CODE_CURSOR_DOWN; else if (input == KEY_RIGHT) result = EVENT_WAS_CODE_CURSOR_RIGHT; else if (input == KEY_LEFT) result = EVENT_WAS_CODE_CURSOR_LEFT; else if (input == KEY_NPAGE) result = EVENT_WAS_CODE_PAGE_DOWN; else if (input == KEY_PPAGE) result = EVENT_WAS_CODE_PAGE_UP; else if (input == KEY_DC) result = EVENT_WAS_CODE_DELETE; else if (input == KEY_BACKSPACE) result = EVENT_WAS_CODE_BACKSPACE; } else if (input_return_code == OK) { if (input == 127) result = EVENT_WAS_CODE_BACKSPACE; else if (input == 1) result = EVENT_WAS_CODE_CTRL_A; else if (input == 5) result = EVENT_WAS_CODE_CTRL_E; else if (input == 27) result = EVENT_WAS_CODE_ESC; else { result = EVENT_WAS_INPUT; *z_ucs_input = (z_ucs)input; } } input_should_terminate = true; } else if (FD_ISSET(ncursesw_if_signalling_pipe[0], &input_selectors)) { TRACE_LOG("current errno: %d.\n", errno); // the signal handler has written to our curses_if_signalling_pipe. // ensure that errno is != 0 before reading from the pipe. this is // due to the fact that even a successful read may set errno. TRACE_LOG("pipe event.\n"); bytes_read = 0; while (bytes_read != sizeof(int)) { read_retval = read( ncursesw_if_signalling_pipe[0], &new_signal, sizeof(int)); if (read_retval == -1) { if (errno == EAGAIN) { errno = 0; continue; } else { i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2041, "read", errno, strerror(errno)); } } else { bytes_read += read_retval; } } TRACE_LOG("bytes read: %d,signal code: %d\n", bytes_read, new_signal); if (new_signal == SIGALRM) { if (timeout_millis > 0) { TRACE_LOG("Timeout.\n"); result = EVENT_WAS_TIMEOUT; input_should_terminate = true; } } else if (new_signal == SIGWINCH) { TRACE_LOG("interface got SIGWINCH.\n"); result = EVENT_WAS_WINCH; endwin(); refresh(); //getmaxyx(stdscr, screen_height, screen_width); refresh_screen_size(); //TRACE_LOG("New dimensions: %dx%d.\n", screen_width, screen_height); //new_cell_screen_size(screen_height, screen_width); input_should_terminate = true; } else { i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_UNKNOWN_ERROR_CASE, -0x2041); } } } else { if (errno == EINTR) errno = 0; else { TRACE_LOG("select returned <=0, current errno: %d.\n", errno); /* i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_ERROR_P0D_OCCURED_BEFORE_READ_P1S, -0x203d, errno, strerror(errno)); */ } } } sigaction(SIGWINCH, NULL, NULL); TRACE_LOG("result %d.\n", result); return result; } void update_screen() { TRACE_LOG("refresh errno: %d.\n", errno); refresh(); TRACE_LOG("refresh errno: %d.\n", errno); } void redraw_screen_from_scratch() { redrawwin(stdscr); update_screen(); } void copy_area(int dsty, int dstx, int srcy, int srcx, int height, int width) { //REVISIT: Maybe implement reading whole line? //int errorcode; int ystart, yend, yincrement; int xstart, xend, xincrement; int y, x; cchar_t wcval; TRACE_LOG("copyarea, dst:%d/%d, src:%d/%d, size:%d*%d\n", dsty, dstx, srcy, srcx, height, width); if ( (width < 0) || (height < 0) ) { i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -0x2000, "copy_area"); } // Simply using copywin does not work, in my ncurses implementation it only // does the correct thing when moving things up the screen. Once dst // is below the src area and overlaps, copywin does not work correct // anymore. /* if ((errorcode = copywin( stdscr, stdscr, srcy - 1, srcx - 1, dsty - 1, dstx - 1, dsty + height - 2, dstx + width - 2, false)) == ERR) { i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_fizmo_FUNCTION_CALL_P0S_RETURNED_ERROR_CODE_P1D, -0x202b, "copywin", (long)errorcode); } */ // To be safe, each line is copied separately in order to avoid // implementation-specific problems. if (dsty > srcy) { ystart = height - 1; yend = -1; yincrement = -1; } else { ystart = 0; yend = height; yincrement = 1; } if (dstx > srcx) { xstart = width - 1; xend = -1; xincrement = -1; } else { xstart = 0; xend = width; xincrement = 1; } for (y=ystart; y!=yend; y+=yincrement) { for (x=xstart; x!=xend; x+=xincrement) { /* TRACE_LOG("copychar: %d,%d -> %d,%d.\n", srcy + y - 1, srcx + x - 1, dsty + y - 1, dstx + x - 1); */ mvin_wch(srcy + y - 1, srcx + x - 1, &wcval); mvadd_wch(dsty + y - 1, dstx + x - 1, &wcval); } } } void clear_to_eol() { clrtoeol(); } void clear_area(int startx, int starty, int xsize, int ysize) { int x; TRACE_LOG("Clearing area %d,%d / %d,%d\n", startx, starty, xsize, ysize); while (ysize > 0) { x = xsize; while (x > 0) { mvaddch(starty + ysize - 2, startx + x - 2, ' '); x--; } ysize--; } } static void set_cursor_visibility(bool visible) { if (ncursesw_interface_open == true) { if (visible == true) curs_set(1); else curs_set(0); } } static z_colour get_default_foreground_colour() { return screen_default_foreground_color; } static z_colour get_default_background_colour() { return screen_default_background_color; } static int prompt_for_filename(char *UNUSED(filename_suggestion), z_file **UNUSED(result_file), char *UNUSED(directory), int UNUSED(filetype_or_mode), int UNUSED(fileaccess)) { return -3; } static struct z_screen_cell_interface ncursesw_interface = { &goto_yx, &z_ucs_output, &is_input_timeout_available, &turn_on_input, &turn_off_input, &get_next_event, &get_interface_name, &is_colour_available, &is_bold_face_available, &is_italic_available, &parse_config_parameter, &get_config_value, &get_config_option_names, &link_interface_to_story, &reset_interface, &ncursw_close_interface, &set_text_style, &set_colour, &set_font, &output_interface_info, &get_screen_width, &get_screen_height, &update_screen, &redraw_screen_from_scratch, ©_area, &clear_to_eol, &clear_area, &set_cursor_visibility, &get_default_foreground_colour, &get_default_background_colour, &prompt_for_filename }; static char *select_story_from_menu() { //z_colour foreground, background; int input; int storywin_height = -1; int storywin_width = -1; int storywin_y = 3; int infowin_y = 3; int storywin_x = 3; int story_title_length = -1; struct z_story_list *story_list; int i, j; int y, x; bool input_done = false; int selected = 0; int len; int scroll_index = 0; struct z_story_list_entry *entry; char *result; char *src; fd_set input_selectors; int max_filedes_number_plus_1; int select_retval; bool perform_init = true; int read_retval; int bytes_read; int new_signal; z_ucs *ptr; attr_t attrs; short menucolorpair = -1; char *config_disablecolor; #ifndef DISABLE_FILELIST story_list = dont_update_story_list_on_start != true ? update_fizmo_story_list() : get_z_story_list(); if ( (story_list == NULL) || (story_list->nof_entries < 1) ) { //set_configuration_value("locale", fizmo_locale, "ncursesw"); streams_latin1_output("\n"); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_NO_STORIES_REGISTERED_PLUS_HELP); streams_latin1_output("\n\n"); //set_configuration_value("locale", fizmo_locale, "fizmo"); return NULL; } #endif // DISABLE_FILELIST sigemptyset(&default_sigaction.sa_mask); default_sigaction.sa_flags = 0; default_sigaction.sa_handler = &ncursesw_if_catch_signal; sigaction(SIGWINCH, &default_sigaction, NULL); infowin_output_wordwrapper = wordwrap_new_wrapper( 80, &infowin_z_ucs_output_wordwrap_destination, (void*)NULL, false, 0, false, true); /* set_configuration_value( "locale", get_configuration_value("locale"), "ncursesw"); */ infowin_more = i18n_translate_to_string( fizmo_ncursesw_module_name, i18n_ncursesw_SPACE_FOR_NEXT_PAGE); infowin_back = i18n_translate_to_string( fizmo_ncursesw_module_name, i18n_ncursesw_B_FOR_LAST_PAGE); /* set_configuration_value( "locale", get_configuration_value("locale"), "fizmo"); */ while (input_done == false) { if (perform_init == true) { initscr(); cbreak(); noecho(); keypad(stdscr, true); config_disablecolor = get_configuration_value("disable-color"); if ( (has_colors() == true) && ( (config_disablecolor == NULL) || (strcmp(config_disablecolor, "true") != 0) ) ) { start_color(); set_colour(default_foreground_colour, default_background_colour); attr_get(&attrs, &menucolorpair, NULL); TRACE_LOG("Current color pair %d.\n", menucolorpair); bkgdset(' ' | COLOR_PAIR(menucolorpair)); bkgd(' ' | COLOR_PAIR(menucolorpair)); } else menucolorpair = -1; getmaxyx(stdscr, y, x); storywin_height = y - 5; storywin_width = x / 3; story_title_length = storywin_width - 9; infowin_height = storywin_height; TRACE_LOG("infowin_height: %d.\n", infowin_height); infowin_width = x - storywin_width - storywin_x - 9; infowin_topindex = 0; infowin = subwin( stdscr, infowin_height + 1, infowin_width + 1, infowin_y, storywin_width + storywin_x + 5); wordwrap_adjust_line_length( infowin_output_wordwrapper, x - storywin_width - storywin_x - 9); perform_init = false; } erase(); attrset(A_BOLD); mvprintw(1, storywin_x + 7, "fizmo-ncursesw Z-Machine interpreter, Version %s\n", FIZMO_NCURSESW_VERSION); attrset(A_NORMAL); i = 0; while ( (inof_entries)) { entry = story_list->entries[i + scroll_index]; if (i + scroll_index == selected) { attrset(A_REVERSE); mvaddstr(storywin_y + i, storywin_x, " "); printw("%3d ", scroll_index + i + 1); len = (long)strlen(entry->title) > story_title_length ? story_title_length - 3 : story_title_length; addnstr(entry->title, len); if ((long)strlen(entry->title) > story_title_length) addstr("..."); getyx(stdscr, y, x); j = storywin_x + storywin_width - x; while (j-- > 0) addstr(" "); attrset(A_NORMAL); } else { mvprintw(storywin_y + i, storywin_x + 2, "%3d ", scroll_index + i + 1); len = (long)strlen(entry->title) > story_title_length ? story_title_length - 3 : story_title_length; addnstr(entry->title, len); if ((long)strlen(entry->title) > story_title_length) addstr("..."); } i++; } if (menucolorpair != -1) wcolor_set(infowin, menucolorpair, NULL); werase(infowin); entry = story_list->entries[selected]; wattrset(infowin, A_BOLD); wprintw(infowin, "%s\n", entry->title); wattrset(infowin, A_NORMAL); wprintw(infowin, "By: %s\n", entry->author); wprintw(infowin, "v%d / S:%s / R:%d / C:%d.\n", entry->z_code_version, entry->serial, entry->release_number, entry->checksum); if (infowin_topindex == 0) wprintw(infowin, "\n"); else { waddstr(infowin, "["); ptr = infowin_back; while (ptr != NULL) { ptr = z_ucs_string_to_wchar_t( wchar_t_buf, ptr, NCURSESW_WCHAR_T_BUF_SIZE); if (waddwstr(infowin, wchar_t_buf) == ERR) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_ABORTED_DUE_TO_ERROR, -1, "waddwstr"); } waddstr(infowin, "]\n"); } infowin_lines_skipped = 0; infowin_skip_x = 0; infowin_full = false; //wordwrap_set_line_index(infowin_output_wordwrapper, 0); src = entry->description; do { src = utf8_string_to_zucs_string( z_ucs_t_buf, src, NCURSESW_Z_UCS_BUF_SIZE); wordwrap_wrap_z_ucs(infowin_output_wordwrapper, z_ucs_t_buf); } while (src != NULL); wordwrap_flush_output(infowin_output_wordwrapper); refresh(); //wrefresh(infowin); max_filedes_number_plus_1 = (STDIN_FILENO < ncursesw_if_signalling_pipe[0] ? ncursesw_if_signalling_pipe[0] : STDIN_FILENO) + 1; FD_ZERO(&input_selectors); FD_SET(STDIN_FILENO, &input_selectors); FD_SET(ncursesw_if_signalling_pipe[0], &input_selectors); select_retval = select( max_filedes_number_plus_1, &input_selectors, NULL, NULL, NULL); if (select_retval > 0) { TRACE_LOG("select_retval > 0.\n"); // something has changed in one of out input pipes. if (FD_ISSET(STDIN_FILENO, &input_selectors)) { input = getch(); if (input == '\n') { result = fizmo_strdup(story_list->entries[selected]->filename); input_done = true; } else if (input == KEY_UP) { if (selected > 0) selected--; if (selected < scroll_index) scroll_index--; infowin_topindex = 0; } else if (input == KEY_DOWN) { if (selected + 1 < story_list->nof_entries) selected++; if (selected == storywin_height + scroll_index) scroll_index++; infowin_topindex = 0; } else if (input == KEY_NPAGE) { scroll_index += storywin_height; selected += storywin_height; if (scroll_index >= story_list->nof_entries) { scroll_index = story_list->nof_entries - storywin_height; selected = story_list->nof_entries - 1; if (scroll_index < 0) scroll_index = 0; } infowin_topindex = 0; } else if (input == KEY_PPAGE) { scroll_index -= storywin_height; selected -= storywin_height; if (scroll_index < 0) { scroll_index = 0; selected = 0; } } else if (input == 27) { input_done = true; result = NULL; } else if ( (input == ' ') && (infowin_full == true) ) { infowin_topindex += (infowin_height - 5); TRACE_LOG("New infowin_topindex: %d.\n", infowin_topindex); } else if (input == 'b') { if ((infowin_topindex -= (infowin_height - 5)) < 0) infowin_topindex = 0; TRACE_LOG("New infowin_topindex: %d.\n", infowin_topindex); } } else { bytes_read = 0; while (bytes_read != sizeof(int)) { read_retval = read( ncursesw_if_signalling_pipe[0], &new_signal, sizeof(int)); if (read_retval == -1) { if (errno == EAGAIN) { errno = 0; continue; } else { i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2041, "read", errno, strerror(errno)); } } else { bytes_read += read_retval; } } if (new_signal == SIGWINCH) { //exit(1); perform_init = true; endwin(); } } } else if (select_retval < 0) { if (errno == EINTR) errno = 0; else i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_ERROR_P0D_OCCURED_BEFORE_READ_P1S, -0x203c, errno, strerror(errno)); } } #ifndef DISABLE_FILELIST free_z_story_list(story_list); #endif // DISABLE_FILELIST delwin(infowin); erase(); move(0,0); refresh(); sigaction(SIGWINCH, NULL, NULL); endwin(); wordwrap_destroy_wrapper(infowin_output_wordwrapper); free(infowin_more); free(infowin_back); return result; } void catch_signal(int sig_num) { int bytes_written = 0; int ret_val; int ncursesw_if_write_buffer; // Note: // Look like TRACE_LOGs in this function may cause a deadlock in case // they're called while a fflush for the tracelog is already underway. ncursesw_if_write_buffer = sig_num; //TRACE_LOG("Caught signal %d.\n", sig_num); while ((size_t)bytes_written < sizeof(int)) { ret_val = write( ncursesw_if_signalling_pipe[1], &ncursesw_if_write_buffer, sizeof(int)); if (ret_val == -1) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2023, "write", errno, strerror(errno)); bytes_written += ret_val; } //TRACE_LOG("Catch finished.\n"); } int main(int argc, char *argv[]) { int argi = 1; int story_filename_parameter_number = -1; int blorb_filename_parameter_number = -1; char *input_file; z_file *savegame_to_restore= NULL; z_file *story_stream = NULL, *blorb_stream = NULL; int flags; int int_value; char *cwd = NULL; char *absdirname = NULL; z_colour new_color; chtype default_bkgd; #ifndef DISABLE_FILELIST char *story_to_load_filename, *assumed_filename; struct z_story_list *story_list; size_t absdirname_len = 0; int i, default_pair; SCREEN *s; short pair_foreground, pair_background; z_colour default_fore, default_back; #endif // DISABLE_FILELIST #ifdef ENABLE_TRACING turn_on_trace(); #endif // ENABLE_TRACING setlocale(LC_ALL, "C"); setlocale(LC_CTYPE, ""); // newterm instead of initscr to init ncurses without clearing screen // so we can exit gracefully in case of errors. if ((s = newterm(NULL, stdin, stdout)) == NULL) return -1; if (has_colors() == true) { start_color(); default_bkgd = getbkgd(stdscr); default_pair = default_bkgd & A_COLOR; TRACE_LOG("Default pair: %d\n", default_pair); if (pair_content(default_pair, &pair_foreground, &pair_background) == ERR) { TRACE_LOG("pair_content returned ERR.\n"); screen_default_foreground_color = Z_COLOUR_WHITE; screen_default_background_color = Z_COLOUR_BLACK; } else { default_fore = curses_to_z_colour(pair_foreground); default_back = curses_to_z_colour(pair_background); if ((default_fore < 0) || (default_back < 0)) { TRACE_LOG("Illegal default color values, reverting to white/black.\n"); screen_default_foreground_color = Z_COLOUR_WHITE; screen_default_background_color = Z_COLOUR_BLACK; } else { TRACE_LOG("Default colors from ncurses: %d, %d.\n", default_fore, default_back); screen_default_foreground_color = default_fore; screen_default_background_color = default_back; } } } endwin(); fizmo_register_screen_cell_interface(&ncursesw_interface); #ifdef SOUND_INTERFACE_STRUCT_NAME fizmo_register_sound_interface(&SOUND_INTERFACE_STRUCT_NAME); #endif // SOUND_INTERFACE_STRUCT_NAME // Parsing must occur after "fizmo_register_screen_cell_interface" so // that fizmo knows where to forward "parse_config_parameter" parameters // to. #ifndef DISABLE_CONFIGFILES parse_fizmo_config_files(); #endif // DISABLE_CONFIGFILES ncursesw_argc = argc; ncursesw_argv = argv; while (argi < argc) { if ((strcmp(argv[argi], "-l") == 0) || (strcmp(argv[argi], "--set-locale") == 0)) { if (++argi == argc) { print_startup_syntax(); exit(EXIT_FAILURE); } if (set_current_locale_name(argv[argi]) != 0) { streams_latin1_output("\n"); i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_INVALID_CONFIGURATION_VALUE_P0S_FOR_P1S, argv[argi], "locale"); streams_latin1_output("\n"); print_startup_syntax(); exit(EXIT_FAILURE); } set_configuration_value("dont-set-locale-from-config", "true"); argi++; } else if ((strcmp(argv[argi], "-pr") == 0) || (strcmp(argv[argi], "--predictable") == 0)) { set_configuration_value("random-mode", "predictable"); argi += 1; } else if ((strcmp(argv[argi], "-ra") == 0) || (strcmp(argv[argi], "--random") == 0)) { set_configuration_value("random-mode", "random"); argi += 1; } else if ((strcmp(argv[argi], "-st") == 0) || (strcmp(argv[argi], "--start-transcript") == 0)) { set_configuration_value("start-script-when-story-starts", "true"); argi += 1; } else if ((strcmp(argv[argi], "-rc") == 0) || (strcmp(argv[argi], "--start-recording-commands") == 0)) { set_configuration_value( "start-command-recording-when-story-starts", "true"); argi += 1; } else if ((strcmp(argv[argi], "-fi") == 0) || (strcmp(argv[argi], "--start-file-input") == 0)) { set_configuration_value( "start-file-input-when-story-starts", "true"); argi += 1; } else if ((strcmp(argv[argi], "-if") == 0) || (strcmp(argv[argi], "--input-filename") == 0)) { if (++argi == argc) { print_startup_syntax(); exit(EXIT_FAILURE); } set_configuration_value( "input-command-filename", argv[argi]); argi += 1; } else if ((strcmp(argv[argi], "-rf") == 0) || (strcmp(argv[argi], "--record-filename") == 0)) { if (++argi == argc) { print_startup_syntax(); exit(EXIT_FAILURE); } set_configuration_value( "record-command-filename", argv[argi]); argi += 1; } else if ((strcmp(argv[argi], "-tf") == 0) || (strcmp(argv[argi], "--transcript-filename") == 0)) { if (++argi == argc) { print_startup_syntax(); exit(EXIT_FAILURE); } set_configuration_value( "transcript-filename", argv[argi]); argi += 1; } else if ( (strcmp(argv[argi], "-b") == 0) || (strcmp(argv[argi], "--background-color") == 0) ) { if (++argi == argc) { print_startup_syntax(); exit(EXIT_FAILURE); } if (set_configuration_value("background-color", (argv[argi])) < 0) { print_startup_syntax(); exit(EXIT_FAILURE); } if ((new_color = colorname_to_infocomcode(argv[argi])) == -1) { // Shouldn't happen since set-config said the value is okay. exit(EXIT_FAILURE); } screen_default_background_color = new_color; argi++; } else if ( (strcmp(argv[argi], "-f") == 0) || (strcmp(argv[argi], "--foreground-color") == 0) ) { if (++argi == argc) { print_startup_syntax(); exit(EXIT_FAILURE); } if (set_configuration_value("foreground-color", (argv[argi])) < 0) { print_startup_syntax(); exit(EXIT_FAILURE); } if ((new_color = colorname_to_infocomcode(argv[argi])) == -1) { // Shouldn't happen since set-config said the value is okay. exit(EXIT_FAILURE); } screen_default_foreground_color = new_color; argi++; } else if ( (strcmp(argv[argi], "-um") == 0) || (strcmp(argv[argi], "--umem") == 0) ) { set_configuration_value("quetzal-umem", "true"); argi ++; } else if ( (strcmp(argv[argi], "-dh") == 0) || (strcmp(argv[argi], "--disable-hyphenation") == 0) ) { set_configuration_value("disable-hyphenation", "true"); argi ++; } else if ( (strcmp(argv[argi], "-nc") == 0) || (strcmp(argv[argi], "--dont-use-colors: ") == 0) ) { set_configuration_value("disable-color", "true"); argi ++; } else if ( (strcmp(argv[argi], "-ec") == 0) || (strcmp(argv[argi], "--enable-colors: ") == 0) ) { set_configuration_value("enable-color", "true"); argi ++; } #ifdef ENABLE_X11_IMAGES else if ( (strcmp(argv[argi], "-nx") == 0) || (strcmp(argv[argi], "--disable-x11-graphics") == 0) ) { enable_x11_graphics = false; argi++; } else if ( (strcmp(argv[argi], "-xi") == 0) || (strcmp(argv[argi], "--enable-x11-inline-graphics") == 0) ) { enable_x11_inline_graphics = true; argi++; } else if ( (strcmp(argv[argi], "-xt") == 0) || (strcmp(argv[argi], "--enable-xterm-title") == 0) ) { use_xterm_title = true; argi++; } #endif /* else if ( (strcmp(argv[argi], "-s8") == 0) || (strcmp(argv[argi], "--force-8bit-sound") == 0)) { set_configuration_value("force-8bit-sound", "true"); argi += 1; } */ else if ( (strcmp(argv[argi], "-ds") == 0) || (strcmp(argv[argi], "--disable-sound") == 0)) { set_configuration_value("disable-sound", "true"); argi += 1; } else if ( (strcmp(argv[argi], "-t") == 0) || (strcmp(argv[argi], "--set-tandy-flag") == 0)) { set_configuration_value("set-tandy-flag", "true"); argi += 1; } else if ( (strcmp(argv[argi], "-lm") == 0) || (strcmp(argv[argi], "--left-margin") == 0) || (strcmp(argv[argi], "-rm") == 0) || (strcmp(argv[argi], "--right-margin") == 0) || (strcmp(argv[argi], "-mu") == 0) || (strcmp(argv[argi], "--maximum-undo-steps") == 0) ) { if (++argi == argc) { print_startup_syntax(); exit(EXIT_FAILURE); } int_value = atoi(argv[argi]); if ( ( (int_value == 0) && (strcmp(argv[argi], "0") != 0) ) || (int_value < 0) ) { i18n_translate( fizmo_ncursesw_module_name, i18n_ncursesw_INVALID_CONFIGURATION_VALUE_P0S_FOR_P1S, argv[argi], argv[argi - 1]); streams_latin1_output("\n"); print_startup_syntax(); exit(EXIT_FAILURE); } if ( (strcmp(argv[argi - 1], "-lm") == 0) || (strcmp(argv[argi - 1], "--left-margin") == 0) ) set_custom_left_cell_margin(int_value); else if ( (strcmp(argv[argi - 1], "-rm") == 0) || (strcmp(argv[argi - 1], "--right-margin") == 0) ) set_custom_right_cell_margin(int_value); else if ( (strcmp(argv[argi - 1], "-mu") == 0) || (strcmp(argv[argi - 1], "--maximum-undo-steps") == 0) ) set_configuration_value("max-undo-steps", argv[argi]); else { // Internal mismatch, must not happen since we've already verified // these values above. } argi += 1; } else if ( (strcmp(argv[argi], "-h") == 0) || (strcmp(argv[argi], "--help") == 0) ) { print_startup_syntax(); exit(0); } else if ( (strcmp(argv[argi], "-nu") == 0) || (strcmp(argv[argi], "--dont-update-story-list") == 0)) { dont_update_story_list_on_start = true; argi += 1; } #ifndef DISABLE_FILELIST else if ( (strcmp(argv[argi], "-u") == 0) || (strcmp(argv[argi], "--update-story-list") == 0)) { printf("\n"); story_list = update_fizmo_story_list(); // Only update functionality is relevant, so we can forget the // result right away. if (story_list != NULL) free_z_story_list(story_list); printf("\n"); directory_was_searched = true; argi += 1; } else if ( (strcmp(argv[argi], "-s") == 0) || (strcmp(argv[argi], "--search") == 0)) { if (++argi == argc) { print_startup_syntax(); exit(EXIT_FAILURE); } if (strlen(argv[argi]) > 0) { if (argv[argi][0] == '/') search_directory(argv[argi], false); else { if (cwd == NULL) cwd = fsi->get_cwd(); if (absdirname_len < strlen(cwd) + strlen(argv[argi]) + 2) { absdirname_len = strlen(cwd) + strlen(argv[argi]) + 2; absdirname = fizmo_realloc(absdirname, absdirname_len); } sprintf(absdirname ,"%s/%s", cwd, argv[argi]); search_directory(absdirname, false); } printf("\n"); directory_was_searched = true; } argi += 1; } else if ( (strcmp(argv[argi], "-rs") == 0) || (strcmp(argv[argi], "--recursively-search") == 0)) { if (++argi == argc) { print_startup_syntax(); exit(EXIT_FAILURE); } if (strlen(argv[argi]) > 0) { if (argv[argi][0] == '/') search_directory(argv[argi], true); else { if (cwd == NULL) cwd = fsi->get_cwd(); if (absdirname_len < strlen(cwd) + strlen(argv[argi]) + 2) { absdirname_len = strlen(cwd) + strlen(argv[argi]) + 2; absdirname = fizmo_realloc(absdirname, absdirname_len); } sprintf(absdirname ,"%s/%s", cwd, argv[argi]); search_directory(absdirname, true); } printf("\n"); directory_was_searched = true; } argi += 1; } #endif // DISABLE_FILELIST else if ( (strcmp(argv[argi], "-sy") == 0) || (strcmp(argv[argi], "--sync-transcript") == 0)) { set_configuration_value("sync-transcript", "true"); argi += 1; } else if (story_filename_parameter_number == -1) { story_filename_parameter_number = argi; argi++; } else if (blorb_filename_parameter_number == -1) { blorb_filename_parameter_number = argi; argi++; } else { // Unknown parameter: print_startup_syntax(); exit(EXIT_FAILURE); } } if (cwd != NULL) free(cwd); if (absdirname != NULL) free(absdirname); if (directory_was_searched == true) exit(EXIT_SUCCESS); if (story_filename_parameter_number == -1) { #ifndef DISABLE_FILELIST if ((input_file = select_story_from_menu()) == NULL) return 0; story_stream = fsi->openfile( input_file, FILETYPE_DATA, FILEACCESS_READ); #endif // DISABLE_FILELIST } else { // The user has given some filename or description name on the command line. input_file = argv[story_filename_parameter_number]; // First, test if this may be the filename for a savegame. #ifndef DISABLE_FILELIST // We can only restore saved games directly from the save file in // case the filelist functionality exists. if (detect_saved_game(input_file, &story_to_load_filename) == true) { // User provided a savegame name on the command line. savegame_to_restore = fsi->openfile( input_file, FILETYPE_DATA, FILEACCESS_READ); story_stream = fsi->openfile( story_to_load_filename, FILETYPE_DATA, FILEACCESS_READ); } else { #endif // DISABLE_FILELIST // Check if parameter is a valid filename. if ((story_stream = fsi->openfile( input_file, FILETYPE_DATA, FILEACCESS_READ)) == NULL) { #ifndef DISABLE_FILELIST // In case it's not a regular file, use the filelist to find // something similiar. story_list = get_z_story_list(); for (i=0; inof_entries; i++) { if (strcasecmp(story_list->entries[i]->title, input_file) == 0) { assumed_filename = fizmo_strdup(story_list->entries[i]->filename); story_stream = fsi->openfile( assumed_filename, FILETYPE_DATA, FILEACCESS_READ); break; } } free_z_story_list(story_list); #endif // DISABLE_FILELIST } #ifndef DISABLE_FILELIST } #endif // DISABLE_FILELIST } if (story_stream == NULL) { i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_COULD_NOT_OPEN_OR_FIND_P0S, -0x2016, input_file); exit(EXIT_FAILURE); } timerval.it_interval.tv_sec = 0; timerval.it_interval.tv_usec = 0; empty_timerval.it_interval.tv_sec = 0; empty_timerval.it_interval.tv_usec = 0; empty_timerval.it_value.tv_sec = 0; empty_timerval.it_value.tv_usec = 0; // Create a new signalling pipe. This pipe is used by a select call to // detect an incoming time-signal for the input routine. if (pipe(ncursesw_if_signalling_pipe) != 0) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2016, "pipe", errno, strerror(errno)); // Get the current flags for the read-end of the pipe. if ((flags = fcntl(ncursesw_if_signalling_pipe[0], F_GETFL, 0)) == -1) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2017, "fcntl / F_GETFL", errno, strerror(errno)); // Add the nonblocking flag the read-end of the pipe, thus making incoming // input "visible" at once without having to wait for a newline. if ((fcntl(ncursesw_if_signalling_pipe[0], F_SETFL, flags|O_NONBLOCK)) == -1) i18n_translate_and_exit( fizmo_ncursesw_module_name, i18n_ncursesw_FUNCTION_CALL_P0S_RETURNED_ERROR_P1D_P2S, -0x2018, "fcntl / F_SETFL", errno, strerror(errno)); sigemptyset(&default_sigaction.sa_mask); default_sigaction.sa_flags = 0; default_sigaction.sa_handler = &catch_signal; sigaction(SIGALRM, &default_sigaction, NULL); sigemptyset(&default_sigaction.sa_mask); default_sigaction.sa_flags = 0; default_sigaction.sa_handler = &ncursesw_if_catch_signal; sigaction(SIGWINCH, &default_sigaction, NULL); if (blorb_filename_parameter_number != -1) blorb_stream = fsi->openfile( argv[blorb_filename_parameter_number], FILETYPE_DATA, FILEACCESS_READ); fizmo_start( story_stream, blorb_stream, savegame_to_restore); sigaction(SIGWINCH, NULL, NULL); if (story_filename_parameter_number == -1) free(input_file); TRACE_LOG("Closing signalling pipes.\n"); close(ncursesw_if_signalling_pipe[1]); close(ncursesw_if_signalling_pipe[0]); #ifdef ENABLE_TRACING turn_off_trace(); #endif // ENABLE_TRACING return 0; } fizmo-0.7.10/fizmo-ncursesw/src/fizmo-ncursesw/Makefile.am000644 000765 000024 00000004530 12606024326 024474 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AUTOMAKE_OPTIONS = subdir-objects AM_CFLAGS = $(libfizmo_CFLAGS) $(libcellif_CFLAGS) $(ncursesw_CFLAGS) $(LIBNCURSESW_NONPKG_CFLAGS) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) $(libcellif_LIBS) $(ncursesw_LIBS) $(LIBNCURSESW_NONPKG_LIBS) bin_PROGRAMS = fizmo-ncursesw fizmo_ncursesw_SOURCES = ../locales/fizmo_ncursesw_locales.c fizmo-ncursesw.c if ENABLE_TRACING AM_CFLAGS += -DENABLE_TRACING= endif if ENABLE_X11_IMAGES AM_CFLAGS += $(libdrilbo_CFLAGS) $(x11_CFLAGS) -DENABLE_X11_IMAGES= LDADD += $(libdrilbo_LIBS) $(x11_LIBS) endif if ENABLE_SDL AM_CFLAGS += $(libsndifsdl2_CFLAGS) \ -DSOUND_INTERFACE_STRUCT_NAME="$(SOUND_INTERFACE_STRUCT_NAME)" \ -DSOUND_INTERFACE_INCLUDE_FILE="<$(SOUND_INTERFACE_INCLUDE_FILE)>" LDADD += $(libsndifsdl2_LIBS) endif if ENABLE_FILELIST else AM_CFLAGS += -DDISABLE_FILELIST= endif if ENABLE_CONFIG_FILES else AM_CFLAGS += -DDISABLE_CONFIGFILES= endif fizmo-0.7.10/fizmo-ncursesw/src/fizmo-ncursesw/Makefile.in000644 000765 000024 00000057072 12606024550 024515 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = fizmo-ncursesw$(EXEEXT) @ENABLE_TRACING_TRUE@am__append_1 = -DENABLE_TRACING= @ENABLE_X11_IMAGES_TRUE@am__append_2 = $(libdrilbo_CFLAGS) $(x11_CFLAGS) -DENABLE_X11_IMAGES= @ENABLE_X11_IMAGES_TRUE@am__append_3 = $(libdrilbo_LIBS) $(x11_LIBS) @ENABLE_SDL_TRUE@am__append_4 = $(libsndifsdl2_CFLAGS) \ @ENABLE_SDL_TRUE@ -DSOUND_INTERFACE_STRUCT_NAME="$(SOUND_INTERFACE_STRUCT_NAME)" \ @ENABLE_SDL_TRUE@ -DSOUND_INTERFACE_INCLUDE_FILE="<$(SOUND_INTERFACE_INCLUDE_FILE)>" @ENABLE_SDL_TRUE@am__append_5 = $(libsndifsdl2_LIBS) @ENABLE_FILELIST_FALSE@am__append_6 = -DDISABLE_FILELIST= @ENABLE_CONFIG_FILES_FALSE@am__append_7 = -DDISABLE_CONFIGFILES= subdir = fizmo-ncursesw/src/fizmo-ncursesw ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__dirstamp = $(am__leading_dot)dirstamp am_fizmo_ncursesw_OBJECTS = \ ../locales/fizmo_ncursesw_locales.$(OBJEXT) \ fizmo-ncursesw.$(OBJEXT) fizmo_ncursesw_OBJECTS = $(am_fizmo_ncursesw_OBJECTS) fizmo_ncursesw_LDADD = $(LDADD) am__DEPENDENCIES_1 = @ENABLE_X11_IMAGES_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \ @ENABLE_X11_IMAGES_TRUE@ $(am__DEPENDENCIES_1) @ENABLE_SDL_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) fizmo_ncursesw_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_3) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(fizmo_ncursesw_SOURCES) DIST_SOURCES = $(fizmo_ncursesw_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AUTOMAKE_OPTIONS = subdir-objects AM_CFLAGS = $(libfizmo_CFLAGS) $(libcellif_CFLAGS) $(ncursesw_CFLAGS) \ $(LIBNCURSESW_NONPKG_CFLAGS) $(am__append_1) $(am__append_2) \ $(am__append_4) $(am__append_6) $(am__append_7) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) $(libcellif_LIBS) $(ncursesw_LIBS) \ $(LIBNCURSESW_NONPKG_LIBS) $(am__append_3) $(am__append_5) fizmo_ncursesw_SOURCES = ../locales/fizmo_ncursesw_locales.c fizmo-ncursesw.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 fizmo-ncursesw/src/fizmo-ncursesw/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign fizmo-ncursesw/src/fizmo-ncursesw/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) ../locales/$(am__dirstamp): @$(MKDIR_P) ../locales @: > ../locales/$(am__dirstamp) ../locales/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) ../locales/$(DEPDIR) @: > ../locales/$(DEPDIR)/$(am__dirstamp) ../locales/fizmo_ncursesw_locales.$(OBJEXT): \ ../locales/$(am__dirstamp) \ ../locales/$(DEPDIR)/$(am__dirstamp) fizmo-ncursesw$(EXEEXT): $(fizmo_ncursesw_OBJECTS) $(fizmo_ncursesw_DEPENDENCIES) $(EXTRA_fizmo_ncursesw_DEPENDENCIES) @rm -f fizmo-ncursesw$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fizmo_ncursesw_OBJECTS) $(fizmo_ncursesw_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f ../locales/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@../locales/$(DEPDIR)/fizmo_ncursesw_locales.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fizmo-ncursesw.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)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@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)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@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f ../locales/$(DEPDIR)/$(am__dirstamp) -rm -f ../locales/$(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-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ../locales/$(DEPDIR) ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ../locales/$(DEPDIR) ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # 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: fizmo-0.7.10/fizmo-ncursesw/doc/changelog.xml000644 000765 000024 00000027624 12606024326 022105 0ustar00chrenderstaff000000 000000 No more strict dependency on libncursesw since libncurses works equally well. Added forgotten configuration options “with-ncurses-includedir”, “with-ncursesw-libdir” and “with-ncurses-libdir”. Minor autoconf-related changes for fizmo-dist-0.7.10-compatibility. Adapted to automake v1.14 “subdir-objects” option. Added missing license/copyright information. Adapted to new “fizmo_register_screen_interface” and “fizmo_start” functions. Fix build error for some systems due to missing wchar.h include – thanks to Nikos Chantziaras. Added default terminal color evluation. Adapted to new “install-data-local” build target. Improved configure-detection for libncursesw for systems without pkg-config's ncursesw.pc. Adapted to new “disable-x11” and “disable-sound” configuration. Fixed missing delete input. Fixed manpage typos, thanks to Johan Ljunglid. Implemented redraw via CTRL-R. Adapted to new autoconf/automake build system. Merged Andrew Plotkin's iOS-fizmo changes: Adapted to “prompt_for_filename” function in screen-cell-interface. Minor memory leak cleanups. Fixed missing $(DESTDIR) variable – should already have been present since version 0.7.1. Fixed missing “override” statments for CFLAGS in Makefiles. Fixed $(DESTDIR) evaluation in config.[default|macports].mk. Changed manpage install dir from “man” to “share/man”. Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. Respect LD_FLAGS for linking. The “fizmo-ncursesw” interface has been re-implemented for version 0.7. It now makes use of libcellif for output. It uses libfizmo's new word hyphenation and implements better X11-output through libdrilbo. X11 frontispiece display is now by default in a separate window, which, contrary to the older implementation that simply invoked a XCopyArea directly into the terminal's X window, should work reliably. For terminals which by chance support it, the old behaviour is still available by using the “display-x11-inline-image” config option. The inline display has been changed to no longer write directly into the terminal window, but instead to use a subwindow instead. Adapted to version 0.7 locale system and the new build process. Added NCURSESW_INCLUDE_FROM_W_DIRNAME to configs to allow usage of Apple's ncurses implementation, added GDKPIXBUF_INC_DIR configuration variable. Bugfix release: Definitely recommend for read_char fix. Fixed interface to supply default colors in case ncurses' “pair_content” returned invalid colors (thanks to Samuel Verschelde). Input from read_char is no longer re-echoed to the screen (thanks to Samnuel Verschelde). This marks the point for the first public beta release. Implemented conversion of font 3 (charachter font) to unicode. This appears to make Beyond Zork's map appear at least readable. Implemented recording and replaying of timed input. The filename input for save and restore may now be cancelled using the escape key. Pressing arrow up/down during filename input no longer displays the command history. Implemented wordwrapper / ncursesw margins. Implemented “no-update” command line flag and config option to avoid long startup scan times (for example on slow notebook drivers with many story files). Implemented “--search” and “--recursively-search” command line invocations. Fixed bug in scrollback parapgraph position cache. Fixed scroll-down display for scrolling to bottom. Fixed crash that occured when a read-instruction was recursively called from a timed input verification-routine. Fixed display error on refresh of preloaded input from history. Implemented forced predictable mode (ignores seeding random generator). Many, many other minor fixes and extensions. Re-wrote Makefile system. Releveant module defaults are now kept in separate .mk-files. Added support for extra-blorb files (these are specified on the command line directly after the story file name). Added “-Wextra” flag to CFLAGS and cleaned up new warnings caused by the new flag. Many minor fixes (option system, running X11-enabled fizmo in text-only console, etc). Implemented story selection menu in ncursesw interface. Implemented parsing of rc file. Added bold-for-bright-foreground and blink-for-bright-background terminal options. Implemented dont-use-color and force-color option. Fixed interface for > 121 colors. Added “help” command. Implemented text paragraph position cache to speed up scrollback for large amounts of text (not elegant, but works). Implemened “force-quetzal-umem” config option from the command line. Added manpage. Implemented basic blorb support (meaning that blorb files are detected, information about pictures and sound is parsed and the first found “ZCOD” chunk is executed). Stories may now be started from the command line using their “real name” in case they are stored in the story-list. Example: “fizmo sorcerer”. Many, many small fixes (scrollback, winch-redisplay, negative score, undo, crash on large scrollbacks, etc). Fixed scrollback and i18n-exit-translation. Fixed libfizmo to also use setitimer/sigaction (makes fizmo work better on linux). Implemented foreground/background color command line parameters for ncursesw interface. Fixed get-cursor-[column|row] for ncursesw (makes PRINT_TABLE and Sherlock work). Implemented restore from the command line: In case a quetzal-savegame containing the non-standard-chunk “FILE” is given on the command line, fizmo will try to restore the savegame using the story filename stored in this chunk. This version is now definitely usable to play all non-v6 games. Did extensive testing using Borderzone, “LostPig.z8”, “Zokoban.z5”, “crashme.z5”, “etude.z5”, “paint.z5”, “random.z5”, “reverzi.z5” and “unicode.z5”. Only two minor known bugs remain: Scrollback sometimes miscalculates the current row after a lot of scrolling back and forth (which is always “fixable” to pressing any-key which correctly rebuilds the current output page, and a display anomaly on the frontpage of “vampire.z8” which I intended to keep after a lot of code-inspection (since fizmo appears to be implementing the screen modell correctly and fixing this display problem breaks a lot of other games). This version has been tested on Linux, Darwin (Mac Os X) and a little bit on XP/Cygwin (using a self-built ncursesw). Fixed timed-input detection for “read” opcode. This fixes the crash in ZTUU when the lantern goes out. Ran fizmo through (sp)lint, fixed memory leaks, minor bugs, many typecasts, some double and inconsistent definitions, cleanup up code. Fixed Makefile dependencies. Implemened scrollback for ncursesw interface, added support method for scrollback in “history.c”. Added configuration system. Some split-window / set_window / set_cursor fixed for ncursesw-interface. Substitued ualarm/signal with setitimer/sigaction since the first one won't catch SIGALRM on linux and manpage says that ualarm is obsolete. Fixed color management so that ncurses color pair is avaiable for reading. Many, many minor bugfixes. Separated code in core, interface, c and cpp interfaces. Improved upper window handling (trinity sundial) and blockbuffer (zork1.z5). fizmo-0.7.10/fizmo-ncursesw/doc/copyright.xml000644 000765 000024 00000003041 12606024326 022151 0ustar00chrenderstaff000000 000000

Copyright (c) 2009-2015 Christoph Ender
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

fizmo-0.7.10/fizmo-ncursesw/doc/create-mds.sh000755 000765 000024 00000001532 12606024326 022005 0ustar00chrenderstaff000000 000000 #!/bin/sh function xslt { if [ "$5" == "true" -a "$2" != "configfile-example" -a "$2" != "libfizmo-initialization" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.md" else OUTPUTFILE="${1}/${2}.md" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-md.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/md.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/fizmo-ncursesw/doc/create-txts.sh000755 000765 000024 00000001542 12606024326 022225 0ustar00chrenderstaff000000 000000 #!/bin/sh function xslt { if [ "$5" == "true" -a "$2" != "configfile-example" -a "$2" != "libfizmo-initialization" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.txt" else OUTPUTFILE="${1}/${2}.txt" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-ascii.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/ascii.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/fizmo-ncursesw/doc/readme.xml000644 000765 000024 00000000335 12606024326 021401 0ustar00chrenderstaff000000 000000

Note for Mac OS X: It seems cursor visibility settings are not supported, meaning that the cursor will always be visible.

fizmo-0.7.10/fizmo-glktermw/CHANGELOG.txt000644 000765 000024 00000002570 12606024544 020675 0ustar00chrenderstaff000000 000000 Version 0.1.7 -- October 9, 2015 - Minor autoconf-related changes for fizmo-dist-0.7.10-compatibility. Version 0.1.6 -- March 19, 2014 - Added missing license/copyright information. Version 0.1.5 -- June 5, 2013 - Adapted to new libfizmo function calls. Version 0.1.4 -- September 17, 2012 - Adapted to new autoconf/automake build process. Version 0.1.3 -- August 1, 2012 - Merged with Andrew Plotkin's iOS-fizmo implementation: Moved functionality of "glk_ask_user_for_file" into libglkif. Version 0.1.2 -- March 9, 2012 - Fixed missing $(DESTDIR) variable -- should already have been present since version 0.1.1. Version 0.1.1 -- November 6, 2011 - Fixed missing "override" statments for CFLAGS in Makefiles. - Fixed $(DESTDIR) evaluation in config.[default|macports].mk. - Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. - Respect LD_FLAGS for linking. Version 0.1.0 -- September 18, 2011 - fizmo-glktermw is an example how to use the libglkif module to implement a GLK-based frontend, in this case using glktermw. Please note that version 0.1.0 should be still considered quite experimental. - This interface was built from code in Andrew Plotkin's github repository. Please note that bug reports should be sent to instead of sending them to Andrew Plotkin. fizmo-0.7.10/fizmo-glktermw/config-conds.m4000644 000765 000024 00000000000 12606024330 021433 0ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-glktermw/config-flags.m4000644 000765 000024 00000000000 12606024330 021421 0ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-glktermw/config-libs.m4000644 000765 000024 00000000054 12606024330 021267 0ustar00chrenderstaff000000 000000 PKG_CHECK_MODULES([ncursesw], [ncursesw]) fizmo-0.7.10/fizmo-glktermw/config-subst.m4000644 000765 000024 00000000453 12606024330 021501 0ustar00chrenderstaff000000 000000 # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. # (This file is intentionally empty) fizmo-0.7.10/fizmo-glktermw/configure.ac000644 000765 000024 00000004057 12606024330 021126 0ustar00chrenderstaff000000 000000 # configure.ac # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AC_ARG_ENABLE([tracing], [AS_HELP_STRING([--enable-tracing], [enable tracelog for debugging])], [], [enable_tracing=no]) AC_INIT( [fizmo-glktermw], [0.1.7], fizmo@spellbreaker.org, fizmo-glktermw) AC_CONFIG_AUX_DIR([.]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_PROG_CC AC_PROG_RANLIB PKG_CHECK_MODULES([libfizmo], [libfizmo >= 0.7.4]) PKG_CHECK_MODULES([libglkif], [libglkif >= 0.1.4]) m4_include(config-libs.m4) AM_CONDITIONAL([ENABLE_TRACING], [test "$enable_tracing" = "yes"]) AC_CONFIG_FILES([Makefile src/fizmo-glktermw/Makefile]) AC_OUTPUT fizmo-0.7.10/fizmo-glktermw/COPYRIGHT.txt000644 000765 000024 00000002725 12606024544 020760 0ustar00chrenderstaff000000 000000 Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. fizmo-0.7.10/fizmo-glktermw/doc/000755 000765 000024 00000000000 12606024330 017377 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-glktermw/Makefile.am000644 000765 000024 00000003354 12606024330 020673 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # AUTOMAKE_OPTIONS = -Wno-override localedir = $(datarootdir)/fizmo/locales # if FIZMO_BUILD_PREFIX_EMPTY # fizmo_build_prefix=$(DESTDIR)$(prefix) # endif # PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig # PKGFILE = $(PKG_DIR)/libfizmo.pc SUBDIRS = src/fizmo-glktermw fizmo-0.7.10/fizmo-glktermw/Makefile.in000644 000765 000024 00000053423 12606024550 020712 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # AUTOMAKE_OPTIONS = -Wno-override VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : subdir = fizmo-glktermw ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = $(datarootdir)/fizmo/locales localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ # if FIZMO_BUILD_PREFIX_EMPTY # fizmo_build_prefix=$(DESTDIR)$(prefix) # endif # PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig # PKGFILE = $(PKG_DIR)/libfizmo.pc SUBDIRS = src/fizmo-glktermw all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(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 fizmo-glktermw/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign fizmo-glktermw/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 @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 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: 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: 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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: 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 Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic 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-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # 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: fizmo-0.7.10/fizmo-glktermw/src/000755 000765 000024 00000000000 12606024330 017421 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-glktermw/src/fizmo-glktermw/000755 000765 000024 00000000000 12606024550 022403 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-glktermw/src/fizmo-glktermw/fizmo-glktermw.c000644 000765 000024 00000011265 12606024330 025526 0ustar00chrenderstaff000000 000000 /* fizmo-glktermw.c * * This file is part of fizmo. * * Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "glk.h" #include "glk_interface/glk_interface.h" #include "glk_interface/glk_screen_if.h" #include "glk_interface/glk_blorb_if.h" #include "glk_interface/glk_filesys_if.h" #include "glkstart.h" /* This comes with the Glk library. */ #include #include #include #include static char *init_err = NULL; /*### use this */ static char *init_err2 = NULL; /*### use this */ static strid_t gamefilestream = NULL; static char *gamefilename = NULL; glkunix_argumentlist_t glkunix_arguments[] = { { "", glkunix_arg_ValueFollows, "filename: The game file to load." }, { NULL, glkunix_arg_End, NULL } }; int glkunix_startup_code(glkunix_startup_t *data) { /* It turns out to be more convenient if we return TRUE from here, even when an error occurs, and display an error in glk_main(). */ int ix; char *filename = NULL; strid_t gamefile = NULL; fizmo_register_filesys_interface(&glkint_filesys_interface); #ifdef ENABLE_TRACING turn_on_trace(); #endif // ENABLE_TRACING /* Parse out the arguments. They've already been checked for validity, and the library-specific ones stripped out. As usual for Unix, the zeroth argument is the executable name. */ for (ix=1; ixargc; ix++) { if (filename) { init_err = "You must supply exactly one game file."; return TRUE; } filename = data->argv[ix]; } if (!filename) { init_err = "You must supply the name of a game file."; return TRUE; } gamefile = glkunix_stream_open_pathname(filename, FALSE, 1); if (!gamefile) { init_err = "The game file could not be opened."; init_err2 = filename; return TRUE; } gamefilestream = gamefile; gamefilename = filename; return TRUE; } /* This callback has the job of finding the Glk stream for the game file and embedding it into a z_file object. If you pass in a z_file object, it uses that rather than allocating a new one. This should only be called once, because once you close gamefilestream, you can't get it back. For fizmo-glktermw, it will only be called once. (For other strange platforms, the equivalent interface is more interesting. But that's not important right now.) */ static z_file *glkunix_open_game_stream(z_file *current_stream) { if (!current_stream) current_stream = zfile_from_glk_strid(gamefilestream, "Game", FILETYPE_DATA, FILEACCESS_READ); else zfile_replace_glk_strid(current_stream, gamefilestream); return current_stream; } void glk_main(void) { z_file *story_stream; if (init_err) { glkint_fatal_error_handler(init_err, NULL, init_err2, FALSE, 0); return; } set_configuration_value("savegame-path", NULL); /*set_configuration_value("transcript-filename", "transcript.txt");*/ set_configuration_value("savegame-default-filename", ""); fizmo_register_screen_interface(&glkint_screen_interface); fizmo_register_blorb_interface(&glkint_blorb_interface); story_stream = glkint_open_interface(&glkunix_open_game_stream); if (!story_stream) return; fizmo_start(story_stream, NULL, NULL); #ifdef ENABLE_TRACING turn_off_trace(); #endif // ENABLE_TRACING } fizmo-0.7.10/fizmo-glktermw/src/fizmo-glktermw/Makefile.am000644 000765 000024 00000003352 12606024330 024436 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AM_CFLAGS = $(libfizmo_CFLAGS) $(libglkif_CFLAGS) $(ncursesw_CFLAGS) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) $(libglkif_LIBS) $(ncursesw_LIBS) bin_PROGRAMS = fizmo-glktermw fizmo_glktermw_SOURCES = fizmo-glktermw.c if ENABLE_TRACING AM_CFLAGS += -DENABLE_TRACING= endif fizmo-0.7.10/fizmo-glktermw/src/fizmo-glktermw/Makefile.in000644 000765 000024 00000053416 12606024550 024461 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = fizmo-glktermw$(EXEEXT) @ENABLE_TRACING_TRUE@am__append_1 = -DENABLE_TRACING= subdir = fizmo-glktermw/src/fizmo-glktermw ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_fizmo_glktermw_OBJECTS = fizmo-glktermw.$(OBJEXT) fizmo_glktermw_OBJECTS = $(am_fizmo_glktermw_OBJECTS) fizmo_glktermw_LDADD = $(LDADD) am__DEPENDENCIES_1 = fizmo_glktermw_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(fizmo_glktermw_SOURCES) DIST_SOURCES = $(fizmo_glktermw_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AM_CFLAGS = $(libfizmo_CFLAGS) $(libglkif_CFLAGS) $(ncursesw_CFLAGS) \ $(am__append_1) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) $(libglkif_LIBS) $(ncursesw_LIBS) fizmo_glktermw_SOURCES = fizmo-glktermw.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 fizmo-glktermw/src/fizmo-glktermw/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign fizmo-glktermw/src/fizmo-glktermw/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) fizmo-glktermw$(EXEEXT): $(fizmo_glktermw_OBJECTS) $(fizmo_glktermw_DEPENDENCIES) $(EXTRA_fizmo_glktermw_DEPENDENCIES) @rm -f fizmo-glktermw$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fizmo_glktermw_OBJECTS) $(fizmo_glktermw_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fizmo-glktermw.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # 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: fizmo-0.7.10/fizmo-glktermw/doc/changelog.xml000644 000765 000024 00000005264 12606024330 022057 0ustar00chrenderstaff000000 000000 Minor autoconf-related changes for fizmo-dist-0.7.10-compatibility. Added missing license/copyright information. Adapted to new libfizmo function calls. Adapted to new autoconf/automake build process. Merged with Andrew Plotkin's iOS-fizmo implementation: Moved functionality of “glk_ask_user_for_file” into libglkif. Fixed missing $(DESTDIR) variable – should already have been present since version 0.1.1. Fixed missing “override” statments for CFLAGS in Makefiles. Fixed $(DESTDIR) evaluation in config.[default|macports].mk. Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. Respect LD_FLAGS for linking. fizmo-glktermw is an example how to use the libglkif module to implement a GLK-based frontend, in this case using glktermw. Please note that version 0.1.0 should be still considered quite experimental. This interface was built from code in Andrew Plotkin's github repository. Please note that bug reports should be sent to
instead of sending them to Andrew Plotkin. fizmo-0.7.10/fizmo-glktermw/doc/copyright.xml000644 000765 000024 00000003065 12606024330 022135 0ustar00chrenderstaff000000 000000

Copyright (c) 2011-2015 Andrew Plotkin and Christoph Ender.
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

fizmo-0.7.10/fizmo-glktermw/doc/create-mds.sh000755 000765 000024 00000001532 12606024330 021763 0ustar00chrenderstaff000000 000000 #!/bin/sh function xslt { if [ "$5" == "true" -a "$2" != "configfile-example" -a "$2" != "libfizmo-initialization" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.md" else OUTPUTFILE="${1}/${2}.md" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-md.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/md.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/fizmo-glktermw/doc/create-txts.sh000755 000765 000024 00000001542 12606024330 022203 0ustar00chrenderstaff000000 000000 #!/bin/sh function xslt { if [ "$5" == "true" -a "$2" != "configfile-example" -a "$2" != "libfizmo-initialization" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.txt" else OUTPUTFILE="${1}/${2}.txt" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-ascii.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/ascii.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/fizmo-console/CHANGELOG.txt000644 000765 000024 00000003723 12606024544 020504 0ustar00chrenderstaff000000 000000 Version 0.7.8 -- October 9, 2015 - Minor autoconf-related changes for fizmo-dist-0.7.10-compatibility. Version 0.7.7 -- March 19, 2014 - Added missing license/copyright information. Version 0.7.6 -- June 5, 2013 - Removed non-POSIX-flag ECHOPRT from tcsetattr for readchar opcode. - Adapted to libfizmo's new "fizmo_register_screen_interface" and "fizmo_start" functions. Version 0.7.5 -- November 30, 2012 - Fixed include statement in "configure.ac". - Updates for manpage, docs, comments. Version 0.7.4 -- September 17, 2012 - Adapted to new autoconf/automake build system. Version 0.7.3 -- August 1, 2012 - Adapted to new fizmo screen-interface. Version 0.7.2 -- March 9, 2012 - Fixed missing $(DESTDIR) variable -- should already have been present since version 0.7.1. Version 0.7.1 -- November 6, 2011 - Fixed missing "override" statments for CFLAGS in Makefiles. - Fixed $(DESTDIR) evaluation in config.[default|macports].mk. - Changed manpage install dir from "man" to "share/man". - Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. - Respect LD_FLAGS for linking. Version 0.7.0 -- September 18, 2011 - The "simple-c" interface has been renamed to "fizmo-console" and is now a stand-alone frontend. - Re-implemented the entire build process. Libraries may now be compiled and installed on their own, pkg-config is used whereever possible to ease compilation and installation. Version 0.6.3 -- April 26, 2009 - Added license information to every file. Version 0.6.1 -- March 30, 2009 - Added FIZMO_BIN_DIR variable to Makefile. Version 0.5.3 -- March 11, 2009 - Re-wrote Makefile system. Releveant module defaults are now kept in separate .mk-files. - Added "-Wextra" flag to CFLAGS and cleaned up new warnings caused by the new flag. Version 0.4.1 -- November 14, 2007 - Separated code in core, interface, c and cpp interfaces. fizmo-0.7.10/fizmo-console/config-conds.m4000644 000765 000024 00000000157 12606024324 021261 0ustar00chrenderstaff000000 000000 AM_CONDITIONAL([ENABLE_READCHAR_VIA_TERMIOS], [test "$enable_readchar_via_termios" != "no"]) fizmo-0.7.10/fizmo-console/config-flags.m4000644 000765 000024 00000000000 12606024324 021232 0ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-console/config-libs.m4000644 000765 000024 00000000000 12606024324 021067 0ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-console/config-subst.m4000644 000765 000024 00000000000 12606024324 021276 0ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-console/configure.ac000644 000765 000024 00000004264 12606024324 020737 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AC_ARG_ENABLE([tracing], [AS_HELP_STRING([--enable-tracing], [enable tracelog for debugging])], [], [enable_tracing=no]) AC_ARG_ENABLE([readchar-via-termios], [AS_HELP_STRING([--disable-readchar-via-termios], [Do not use termios for read-char])], [], [enable_readchar_via_termios=yes]) AC_INIT( [fizmo-console], [0.7.8], fizmo@spellbreaker.org, fizmo-console) AC_CONFIG_AUX_DIR([.]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AC_PROG_CC AC_PROG_RANLIB PKG_CHECK_MODULES([libfizmo], [libfizmo >= 0.7.7]) AM_CONDITIONAL([ENABLE_TRACING], [test "$enable_tracing" = "yes"]) m4_include(config-conds.m4) AC_CONFIG_FILES([Makefile src/fizmo-console/Makefile]) AC_OUTPUT fizmo-0.7.10/fizmo-console/COPYRIGHT.txt000644 000765 000024 00000002701 12606024544 020560 0ustar00chrenderstaff000000 000000 Copyright (c) 2009-2015 Christoph Ender All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. fizmo-0.7.10/fizmo-console/doc/000755 000765 000024 00000000000 12606024324 017210 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-console/Makefile.am000644 000765 000024 00000003417 12606024324 020504 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # AUTOMAKE_OPTIONS = -Wno-override localedir = $(datarootdir)/fizmo/locales # if FIZMO_BUILD_PREFIX_EMPTY # fizmo_build_prefix=$(DESTDIR)$(prefix) # endif # PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig # PKGFILE = $(PKG_DIR)/libfizmo.pc SUBDIRS = src/fizmo-console man6_MANS = src/man/fizmo-console.6 fizmo-0.7.10/fizmo-console/Makefile.in000644 000765 000024 00000061423 12606024550 020517 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # AUTOMAKE_OPTIONS = -Wno-override VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = : subdir = fizmo-console ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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 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; }; \ } man6dir = $(mandir)/man6 am__installdirs = "$(DESTDIR)$(man6dir)" NROFF = nroff MANS = $(man6_MANS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 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" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = $(datarootdir)/fizmo/locales localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ # if FIZMO_BUILD_PREFIX_EMPTY # fizmo_build_prefix=$(DESTDIR)$(prefix) # endif # PKG_DIR = $(fizmo_build_prefix)/lib/pkgconfig # PKGFILE = $(PKG_DIR)/libfizmo.pc SUBDIRS = src/fizmo-console man6_MANS = src/man/fizmo-console.6 all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(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 fizmo-console/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign fizmo-console/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-man6: $(man6_MANS) @$(NORMAL_INSTALL) @list1='$(man6_MANS)'; \ list2=''; \ test -n "$(man6dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man6dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man6dir)" || 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 '/\.6[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,^[^6][0-9a-z]*$$,6,;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)$(man6dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man6dir)/$$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)$(man6dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man6dir)" || exit $$?; }; \ done; } uninstall-man6: @$(NORMAL_UNINSTALL) @list='$(man6_MANS)'; test -n "$(man6dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^6][0-9a-z]*$$,6,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man6dir)'; $(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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 @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 check-am: all-am check: check-recursive all-am: Makefile $(MANS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man6dir)"; 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: 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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man6 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 Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man6 .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic 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-man6 install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-man uninstall-man6 .PRECIOUS: Makefile # 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: fizmo-0.7.10/fizmo-console/src/000755 000765 000024 00000000000 12606024324 017232 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-console/src/fizmo-console/000755 000765 000024 00000000000 12606024550 022017 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-console/src/man/000755 000765 000024 00000000000 12606024324 020005 5ustar00chrenderstaff000000 000000 fizmo-0.7.10/fizmo-console/src/man/fizmo-console.6000644 000765 000024 00000003761 12606024324 022667 0ustar00chrenderstaff000000 000000 .TH FIZMO-CONSOLE 6 "October 2, 2015" "0.7.10" .SH NAME fizmo-console - bare-bone console implementation of the fizmo Z-Maschine Interpreter. .SH SYNOPSIS .B fizmo-console [ options ] .I storyfile .SH DESCRIPTION .B fizmo-console is a frontend for the fizmo Z-Machine interpreter\[em]\[lq]\fBF\fPimzo \fBi\fPnterprets \fBZ\fP-\fBm\fPachine \fBo\fPpcodes\[rq]\[em]which uses only the basic console output and input methods. It will run most of the interactive fiction games aka text adventures written by Infocom or other games which are based on the Z-Machine\[em]currently all versions except version 6 are supported. .SH OPTIONS .TP .B -h, --help Show help message and exit. .TP .B -ll, --line-length Will set the line length for the current screen. This will enable word-wrapping using the defined screen size. .TP .B -dh, --disable-hyphenation Disable word hyphenation. Useful for languages other than the supported ones. .SH CREDITS .SS ITF \[em] The InfoTaskForce All the people who drew up the Z-Machine Specification, in alphabetical order: Chris Tham, David Beazley, George Janczuk, Graham Nelson, Mark Howell, Matthias Pfaller, Mike Threepoint, Paul David Doherty, Peter Lisle, Russell Hoare and Stefan Jokisch. See \fChttp://en.wikipedia.org/wiki/InfoTaskForce\fP for more information. .SS The Frotz authors When I really got stuck I peeked into the frotz source. Thanks to Stefan Jokisch, Galen Hazelwood and David Griffith. .SS People helping with bug fixes, extensions, packaging, translations and more in alphabetical order: Andrew Plotkin, David Leverton, Eric Forgeot, irb, Lewis Gentry, Michael Dunlap, Nikos Chantziaras, Patrick Matth\(:ai, Samuel Verschelde, Zachary Kline and the people at MacPorts. .SH SEE ALSO .BR fizmo-ncursesw(6), .BR frotz(6), .BR xzip(6), .BR jzip(6), .BR inform(1) .SH AUTHOR Fizmo was written in 2005\[en]2015 by Christoph Ender. .SH BUGS Fizmo is in beta stage and will probably still have some bugs. If you stumble upon one, please send an e-mail to fizmo@spellbreaker.org. fizmo-0.7.10/fizmo-console/src/fizmo-console/fizmo-console.c000644 000765 000024 00000025735 12606024324 024762 0ustar00chrenderstaff000000 000000 /* fizmo_console.c * * This file is part of fizmo. * * Copyright (c) 2009-2015 Christoph Ender. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifdef ENABLE_READCHAR_VIA_TERMIOS #include #include #include #endif // ENABLE_READCHAR_VIA_TERMIOS #include #include #include #include #include #include #include #include #include static char* interface_name = "fizmo-console"; static char* interface_version = "0.7.8"; int line_length = -1; bool disable_hyphenation = false; static WORDWRAP *output_wordwrapper = NULL; static char *simple_c_get_interface_name() { return interface_name; } static bool simple_c_return_false() { return false; } static bool simple_c_return_true() { return true; } static uint8_t simple_c_get_screen_height() { return 24; } static uint8_t simple_c_get_screen_width() { return 80; } static uint8_t simple_c_return_1() { return 1; } static z_colour simple_c_get_default_foreground_colour() { return Z_COLOUR_BLACK; } static z_colour simple_c_get_default_background_colour() { return Z_COLOUR_WHITE; } static uint8_t simple_c_return_0() { return 0; } static int simple_c_parse_config_parameter(char *UNUSED(key), char *UNUSED(value)) { return 1; } static char *simple_c_get_config_value(char *UNUSED(key)) { return NULL; } static char **simple_c_get_config_option_names() { return NULL; } static void simple_c_link_interface_to_story(struct z_story *UNUSED(story)) { putc('\n', stdout); } static void simple_c_reset_interface() { } static void simple_c_set_buffer_mode(uint8_t UNUSED(new_buffer_mode)) { } static void z_ucs_output_wordwrap_destination(z_ucs *z_ucs_output, void *UNUSED(dummyparameter)) { while (*z_ucs_output != 0) { if ((*z_ucs_output & 0xffffff80) != 0) putchar('?'); else putchar((char)*z_ucs_output); z_ucs_output++; } } static void simple_c_interface_output_z_ucs(z_ucs *z_ucs_output) { if (line_length == -1) z_ucs_output_wordwrap_destination(z_ucs_output, NULL); else wordwrap_wrap_z_ucs(output_wordwrapper, z_ucs_output); } static int simple_c_close_interface(z_ucs *error_message) { if (output_wordwrapper != NULL) { wordwrap_destroy_wrapper(output_wordwrapper); output_wordwrapper = NULL; } if (error_message != NULL) simple_c_interface_output_z_ucs(error_message); return 0; } static int16_t simple_c_interface_read_line(zscii *dest, uint16_t maximum_length, uint16_t UNUSED(tenth_seconds), uint32_t UNUSED(verification_routine), uint8_t UNUSED(preloaded_input), int *UNUSED(tenth_seconds_elapsed), bool UNUSED(disable_command_history), bool UNUSED(return_on_escape)) { int input; int current_length = 0; uint8_t input_size = 0; zscii input_zscii; if (line_length != -1) wordwrap_flush_output(output_wordwrapper); if ((input = fgetc(stdin)) == EOF) exit(-1); while ((input != 10) && (input != 13)) { if (current_length < maximum_length) { input_zscii = unicode_char_to_zscii_input_char(input & 0xff); if ((input_zscii == 0xff) || (input_zscii == 27)) input_zscii = '?'; *(dest++) = input_zscii; input_size++; } if ((input = fgetc(stdin)) == EOF) exit(-1); } return input_size; } static int simple_c_interface_read_char(uint16_t UNUSED(tenth_seconds), uint32_t UNUSED(verification_routine), int *UNUSED(tenth_seconds_elapsed)) { int result; #ifdef ENABLE_READCHAR_VIA_TERMIOS struct termios org_opts, new_opts; #endif // ENABLE_READCHAR_VIA_TERMIOS if (line_length != -1) wordwrap_flush_output(output_wordwrapper); #ifdef ENABLE_READCHAR_VIA_TERMIOS tcgetattr(STDIN_FILENO, &org_opts); memcpy(&new_opts, &org_opts, sizeof(new_opts)); new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOKE | ICRNL); tcsetattr(STDIN_FILENO, TCSANOW, &new_opts); result = getchar(); result = unicode_char_to_zscii_input_char(result & 0xff); if (result == 0xff) result = -1; tcsetattr(STDIN_FILENO, TCSANOW, &org_opts); return result; #else zscii input_zscii; int input; if ((input = fgetc(stdin)) == EOF) exit(-1); result = -1; while ((input != 10) && (input != 13)) { if (result == -1) { if ((input_zscii=unicode_char_to_zscii_input_char(input & 0xff)) != 0xff) result = input_zscii; } if ((input = fgetc(stdin)) == EOF) exit(-1); } if (result == -1) result = 10; #endif // ENABLE_READCHAR_VIA_TERMIOS return result; } static void simple_c_show_status(z_ucs *UNUSED(room_description), int UNUSED(status_line_mode), int16_t UNUSED(parameter1), int16_t UNUSED(parameter2)) { } static void simple_c_set_text_style(z_style UNUSED(text_style)) { } static void simple_c_set_colour(z_colour UNUSED(foreground), z_colour UNUSED(background), int16_t UNUSED(window)) { } static void simple_c_set_font(z_font UNUSED(font_type)) { } static void simple_c_split_window(int16_t UNUSED(nof_lines)) { } static void simple_c_set_window(int16_t UNUSED(window_number)) { } static void simple_c_erase_window(int16_t UNUSED(window_number)) { } static void simple_c_set_cursor(int16_t UNUSED(line), int16_t UNUSED(column), int16_t UNUSED(window)) { } static uint16_t simple_c_get_cursor_row() { return 0; } static uint16_t simple_c_get_cursor_column() { return 0;} static void simple_c_erase_line_value(uint16_t UNUSED(start_position)) { } static void simple_c_erase_line_pixels(uint16_t UNUSED(start_position)) { } static void simple_c_output_interface_info() { (void)streams_latin1_output(interface_name); (void)streams_latin1_output(" interface version "); (void)streams_latin1_output(interface_version); (void)streams_latin1_output("\n"); } static void simple_c_game_was_restored_and_history_modified() { } static int simple_c_prompt_for_filename(char *UNUSED(filename_suggestion), z_file **UNUSED(result_file), char *UNUSED(directory), int UNUSED(filetype_or_mode), int UNUSED(fileaccess)) { return -3; } struct z_screen_interface simple_c_interface = { &simple_c_get_interface_name, &simple_c_return_false, &simple_c_return_false, &simple_c_return_false, &simple_c_return_false, &simple_c_return_false, &simple_c_return_false, &simple_c_return_false, &simple_c_return_true, &simple_c_return_false, &simple_c_return_false, &simple_c_return_false, &simple_c_return_false, &simple_c_get_screen_height, &simple_c_get_screen_width, &simple_c_get_screen_height, &simple_c_get_screen_width, &simple_c_return_1, &simple_c_return_1, &simple_c_get_default_foreground_colour, &simple_c_get_default_background_colour, &simple_c_return_0, &simple_c_parse_config_parameter, &simple_c_get_config_value, &simple_c_get_config_option_names, &simple_c_link_interface_to_story, &simple_c_reset_interface, &simple_c_close_interface, &simple_c_set_buffer_mode, &simple_c_interface_output_z_ucs, &simple_c_interface_read_line, &simple_c_interface_read_char, &simple_c_show_status, &simple_c_set_text_style, &simple_c_set_colour, &simple_c_set_font, &simple_c_split_window, &simple_c_set_window, &simple_c_erase_window, &simple_c_set_cursor, &simple_c_get_cursor_row, &simple_c_get_cursor_column, &simple_c_erase_line_value, &simple_c_erase_line_pixels, &simple_c_output_interface_info, &simple_c_return_false, &simple_c_game_was_restored_and_history_modified, &simple_c_prompt_for_filename, NULL, /* do_autosave */ NULL, /* restore_autosave */ }; static void print_syntax() { puts("\nUsage: fizmo-console [options] \n"); printf("fizmo-console version %s.\n", interface_version); printf("libfizmo version %s.\n\n", FIZMO_VERSION); puts("Valid options are:"); puts(" -ll, --line-length: Wrap words into lines of given length."); puts(" -dh, --disable-hyphenation: Disable hyphenation."); puts(" -h, --help: Show help message and exit.\n"); } int main(int argc, char *argv[]) { z_file *story_stream; char *story_filename = NULL; int i; #ifdef ENABLE_TRACING turn_on_trace(); #endif // ENABLE_TRACING fizmo_register_screen_interface(&simple_c_interface); for (i=1; i 0) { output_wordwrapper = wordwrap_new_wrapper( line_length, &z_ucs_output_wordwrap_destination, (void*)NULL, #if defined (__WIN32__) false, #else true, #endif // defined (__WIN32__) 0, false, disable_hyphenation == false ? true : false); } if ((story_stream = fsi->openfile( story_filename, FILETYPE_DATA, FILEACCESS_READ)) == NULL) { printf("Could not open file \"%s\".\n", argv[1]); return -1; } else { fizmo_start(story_stream, NULL, NULL); } #ifdef ENABLE_TRACING turn_off_trace(); #endif // ENABLE_TRACING return 0; } fizmo-0.7.10/fizmo-console/src/fizmo-console/Makefile.am000644 000765 000024 00000003361 12606024324 024055 0ustar00chrenderstaff000000 000000 # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AM_CFLAGS = $(libfizmo_CFLAGS) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) bin_PROGRAMS = fizmo-console fizmo_console_SOURCES = fizmo-console.c if ENABLE_TRACING AM_CFLAGS += -DENABLE_TRACING= endif if ENABLE_READCHAR_VIA_TERMIOS AM_CFLAGS += -DENABLE_READCHAR_VIA_TERMIOS= endif fizmo-0.7.10/fizmo-console/src/fizmo-console/Makefile.in000644 000765 000024 00000053333 12606024550 024073 0ustar00chrenderstaff000000 000000 # Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # Makefile.am # # This file is part of fizmo. # # Copyright (c) 2009-2015 Christoph Ender. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = fizmo-console$(EXEEXT) @ENABLE_TRACING_TRUE@am__append_1 = -DENABLE_TRACING= @ENABLE_READCHAR_VIA_TERMIOS_TRUE@am__append_2 = -DENABLE_READCHAR_VIA_TERMIOS= subdir = fizmo-console/src/fizmo-console ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libfizmo/config-flags.m4 \ $(top_srcdir)/libcellif/config-flags.m4 \ $(top_srcdir)/libdrilbo/config-flags.m4 \ $(top_srcdir)/fizmo-console/config-flags.m4 \ $(top_srcdir)/fizmo-ncursesw/config-flags.m4 \ $(top_srcdir)/libglkif/config-flags.m4 \ $(top_srcdir)/fizmo-glktermw/config-flags.m4 \ $(top_srcdir)/libsndifsdl2/config-flags.m4 \ $(top_srcdir)/libfizmo/config-libs.m4 \ $(top_srcdir)/libcellif/config-libs.m4 \ $(top_srcdir)/libdrilbo/config-libs.m4 \ $(top_srcdir)/fizmo-console/config-libs.m4 \ $(top_srcdir)/fizmo-ncursesw/config-libs.m4 \ $(top_srcdir)/libglkif/config-libs.m4 \ $(top_srcdir)/fizmo-glktermw/config-libs.m4 \ $(top_srcdir)/libsndifsdl2/config-libs.m4 \ $(top_srcdir)/libfizmo/config-conds.m4 \ $(top_srcdir)/libcellif/config-conds.m4 \ $(top_srcdir)/libdrilbo/config-conds.m4 \ $(top_srcdir)/fizmo-ncursesw/config-conds.m4 \ $(top_srcdir)/fizmo-console/config-conds.m4 \ $(top_srcdir)/libglkif/config-conds.m4 \ $(top_srcdir)/fizmo-glktermw/config-conds.m4 \ $(top_srcdir)/libsndifsdl2/config-conds.m4 \ $(top_srcdir)/libfizmo/config-subst.m4 \ $(top_srcdir)/libcellif/config-subst.m4 \ $(top_srcdir)/libdrilbo/config-subst.m4 \ $(top_srcdir)/fizmo-console/config-subst.m4 \ $(top_srcdir)/fizmo-ncursesw/config-subst.m4 \ $(top_srcdir)/libglkif/config-subst.m4 \ $(top_srcdir)/fizmo-glktermw/config-subst.m4 \ $(top_srcdir)/libsndifsdl2/config-subst.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_fizmo_console_OBJECTS = fizmo-console.$(OBJEXT) fizmo_console_OBJECTS = $(am_fizmo_console_OBJECTS) fizmo_console_LDADD = $(LDADD) am__DEPENDENCIES_1 = fizmo_console_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(fizmo_console_SOURCES) DIST_SOURCES = $(fizmo_console_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ 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@ DEV_BUILD_PREFIX = @DEV_BUILD_PREFIX@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIZMO_DIST_VERSION = @FIZMO_DIST_VERSION@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBGLKIF_NONPKG_CFLAGS = @LIBGLKIF_NONPKG_CFLAGS@ LIBGLKIF_NONPKG_LIBS = @LIBGLKIF_NONPKG_LIBS@ LIBNCURSESW_NONPKG_CFLAGS = @LIBNCURSESW_NONPKG_CFLAGS@ LIBNCURSESW_NONPKG_LIBS = @LIBNCURSESW_NONPKG_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPTIONAL_FIZMO_BUILDS = @OPTIONAL_FIZMO_BUILDS@ OPTIONAL_FIZMO_CLEANS = @OPTIONAL_FIZMO_CLEANS@ OPTIONAL_FIZMO_DISTCLEANS = @OPTIONAL_FIZMO_DISTCLEANS@ OPTIONAL_FIZMO_INSTALLS = @OPTIONAL_FIZMO_INSTALLS@ OPTIONAL_SOUND_BUILD = @OPTIONAL_SOUND_BUILD@ OPTIONAL_SOUND_INSTALL = @OPTIONAL_SOUND_INSTALL@ OPTIONAL_SOUND_INSTALL_DATA_LOCAL = @OPTIONAL_SOUND_INSTALL_DATA_LOCAL@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOUND_INTERFACE_CONFIGNAME = @SOUND_INTERFACE_CONFIGNAME@ SOUND_INTERFACE_INCLUDE_FILE = @SOUND_INTERFACE_INCLUDE_FILE@ SOUND_INTERFACE_NAME = @SOUND_INTERFACE_NAME@ SOUND_INTERFACE_STRUCT_NAME = @SOUND_INTERFACE_STRUCT_NAME@ 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_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jpeg_CFLAGS = @jpeg_CFLAGS@ jpeg_LIBS = @jpeg_LIBS@ libcellif_CFLAGS = @libcellif_CFLAGS@ libcellif_LIBS = @libcellif_LIBS@ libdir = @libdir@ libdrilbo_CFLAGS = @libdrilbo_CFLAGS@ libdrilbo_LIBS = @libdrilbo_LIBS@ libexecdir = @libexecdir@ libfizmo_CFLAGS = @libfizmo_CFLAGS@ libfizmo_LIBS = @libfizmo_LIBS@ libglkif_CFLAGS = @libglkif_CFLAGS@ libglkif_LIBS = @libglkif_LIBS@ libsndifsdl2_CFLAGS = @libsndifsdl2_CFLAGS@ libsndifsdl2_LIBS = @libsndifsdl2_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncursesw_CFLAGS = @ncursesw_CFLAGS@ ncursesw_LIBS = @ncursesw_LIBS@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ png_CFLAGS = @png_CFLAGS@ png_LIBS = @png_LIBS@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sdl2_CFLAGS = @sdl2_CFLAGS@ sdl2_LIBS = @sdl2_LIBS@ sharedstatedir = @sharedstatedir@ sndfile_CFLAGS = @sndfile_CFLAGS@ sndfile_LIBS = @sndfile_LIBS@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11_CFLAGS = @x11_CFLAGS@ x11_LIBS = @x11_LIBS@ AM_CFLAGS = $(libfizmo_CFLAGS) $(am__append_1) $(am__append_2) AM_CPPFLAGS = LDADD = $(libfizmo_LIBS) fizmo_console_SOURCES = fizmo-console.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(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 fizmo-console/src/fizmo-console/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign fizmo-console/src/fizmo-console/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) fizmo-console$(EXEEXT): $(fizmo_console_OBJECTS) $(fizmo_console_DEPENDENCIES) $(EXTRA_fizmo_console_DEPENDENCIES) @rm -f fizmo-console$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fizmo_console_OBJECTS) $(fizmo_console_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fizmo-console.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # 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: fizmo-0.7.10/fizmo-console/doc/changelog.xml000644 000765 000024 00000010057 12606024324 021664 0ustar00chrenderstaff000000 000000 Minor autoconf-related changes for fizmo-dist-0.7.10-compatibility. Added missing license/copyright information. Removed non-POSIX-flag ECHOPRT from tcsetattr for readchar opcode. Adapted to libfizmo's new “fizmo_register_screen_interface” and “fizmo_start” functions. Fixed include statement in “configure.ac”. Updates for manpage, docs, comments. Adapted to new autoconf/automake build system. Adapted to new fizmo screen-interface. Fixed missing $(DESTDIR) variable – should already have been present since version 0.7.1. Fixed missing “override” statments for CFLAGS in Makefiles. Fixed $(DESTDIR) evaluation in config.[default|macports].mk. Changed manpage install dir from “man” to “share/man”. Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. Respect LD_FLAGS for linking. The “simple-c” interface has been renamed to “fizmo-console” and is now a stand-alone frontend. Re-implemented the entire build process. Libraries may now be compiled and installed on their own, pkg-config is used whereever possible to ease compilation and installation. Added license information to every file. Added FIZMO_BIN_DIR variable to Makefile. Re-wrote Makefile system. Releveant module defaults are now kept in separate .mk-files. Added “-Wextra” flag to CFLAGS and cleaned up new warnings caused by the new flag. Separated code in core, interface, c and cpp interfaces. fizmo-0.7.10/fizmo-console/doc/copyright.xml000644 000765 000024 00000003041 12606024324 021740 0ustar00chrenderstaff000000 000000

Copyright (c) 2009-2015 Christoph Ender
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

fizmo-0.7.10/fizmo-console/doc/create-mds.sh000755 000765 000024 00000001532 12606024324 021574 0ustar00chrenderstaff000000 000000 #!/bin/sh function xslt { if [ "$5" == "true" -a "$2" != "configfile-example" -a "$2" != "libfizmo-initialization" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.md" else OUTPUTFILE="${1}/${2}.md" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-md.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/md.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/fizmo-console/doc/create-txts.sh000755 000765 000024 00000001542 12606024324 022014 0ustar00chrenderstaff000000 000000 #!/bin/sh function xslt { if [ "$5" == "true" -a "$2" != "configfile-example" -a "$2" != "libfizmo-initialization" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.txt" else OUTPUTFILE="${1}/${2}.txt" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/../../doc/changelog-ascii.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/../../doc/ascii.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/doc/ascii.xslt000644 000765 000024 00000060345 12606024312 016435 0ustar00chrenderstaff000000 000000

    1. true true UNKNOWN NODE ENCOUNTERED. --- - . at fizmo-0.7.10/doc/changelog-ascii.xslt000644 000765 000024 00000017056 12606024312 020363 0ustar00chrenderstaff000000 000000 Version -- , - January Febuary March April May June July August September October November December fizmo-0.7.10/doc/changelog-md.xslt000644 000765 000024 00000007212 12606024312 017664 0ustar00chrenderstaff000000 000000 **Version , ** --- - January Febuary March April May June July August September October November December \* fizmo-0.7.10/doc/changelog.xml000644 000765 000024 00000210050 12606024312 017070 0ustar00chrenderstaff000000 000000 Adaptations for print_table opcode, which fixes output in “Sherlock”. Fix for Debian bug #795800: When the ncurses screen is resized when Inform's menu library displays hints or instructions fizmo will no longer exit and complain about an error in the “output_rewind_paragraph” function. Thanks to Lewis Gentry for reporting this problem. Fixed score/turns position in statusline for v≤3 games. Adapted sound interface to SDL2. Fixed possible garbled upper window after erase_window(-1) invocation. Minor fixes for lib detection, will remove some warnings and possible some build issues on linux. No more strict dependency on libncursesw since libncurses works equally well. Added forgotten configuration options “with-ncurses-includedir”, “with-ncursesw-libdir” and “with-ncurses-libdir”. Fix in history/remove_chars_from_history. Fix for missing prompt after interpreter commands. Many minor fixes to history, autoconf and lib detection. Fixed conflicting array sizes in libfizmo which could result in compile-time errors or invalid memory assumptions by the compiler. Thanks to Michael Tautschnig. Entire re-implementation of screen refresh and scrolling ncursesw/libcellif interface. Many thanks to Lewis gentry for bug-reporting and extensive beta-testing. Fixed missing lowering of input case for versions ≥ 5, thanks to irb. Fixed “encode_text” and tokenizing for cases in which the “unrecognized”-flag is set. This fixes a bug with the “name” spell in Beyond Zork, thanks to irb. Fixed wrapping of long lines without spaces as in ASCII art. Thanks to David Batchelder for pointing out the problem. Adapted to automake v1.14 and fixed compiler warning. Relocated “AC_CONFIG_AUX_DIR” invocation, fixing the missing-file warning during configure. Fixed incorrect backspace or delete behaviour which could cause in crash in case of small screen sizes combined with the use of preloaded input. Several small fixes for ncursesw input. Fixed wrong status line display style after restore in version ≤ 3 games. When breaking long lines, multiple spaces are now skipped at the linebreak point to avoid superfluous spaces at the start of the next line. Thanks to Lewis Gentry. Fixed UTF-8 for input from file. Thanks to Mikko Torvinen for reporting the bug. After a restore, the current screensize is now written into the header. This should correct upper windows display problems after loading of savegames. Fixed wordwrapper for cases in which text was written on the same line as read_char was invoked. This makes output of multiline-hints in PRIZM's Invisiclues work. Thanks to David Batchelder. Renamed getchar, getchars and ungetchars from the file system interface to readchar, readchars and unreadchars. This makes fizmo compile on systems where getchar() is implemented as a macro. Added missing evalation of fixed-pitch font flag in the flags2 header. Fix build error for some systems due to missing wchar.h include – thanks to Nikos Chantziaras. Altered close_interface function to allow z_mem access during shutdown. Fixed several compiler warnings. Invoking “/config” without setting color defaults will no longer crash the interpreter. Implemented terminal default color detetction for fizmo-ncursesw. Added z_rgb_colour datatype. Renamed “install-locales” into “install-data-local” build target. Fixed verification of libglktermw location for GLK-interface. Removed non-POSIX-flag from tcsetattr call in fizmo-console. Minor bugfixes. Reparied “math.h” name collision, fixing missing “rint” function declaration. Fixed universal builds on Mac OS X. Fixed warning in “cmd_hst” compilation. Searching for z-code files will now automatically create ~/.config/fizmo so that search results are no longer lost, thanks to B. Watson. Added “--disable-sound” configure option, fixed “--disable-x11” option. Improved configure-detection for libncursesw for systems without pkg-config's “ncursesw.pc”. Minor fixes for “clean” and “distclean” build targets and library build targets. Preloaded input will no longer apperar in transscripts. Thanks to Lewis Gentry. Fixed missing characters in transcripts. Implemented missing delete in read_line and read_char, corrected backspace key behaviour on read_char. Fixed typos in manpages, thanks to Johan Ljunglid. Fixed swallowing of dots, commas and quotation marks at line starts in case hyphenation is disabled – thanks to Lewis Gentry. Fixed crash which occurred when invoking fizmo-ncursesw with the “-fi” flag, also thanks to Lewis Gentry. Colors are now correctly set for all windows on screen in case no window is specified for @set_colour. CTRL-R will now redraw the screen. Contrary to CTRL-L, which refreshes the screen based on the current layout, CTRL-R will reconstruct the latest output based on the output history. This will help to display output which is hidden in case a game clears the screen, writes some text into the top line and then turns on the score line which then overlays the topmost line. Re-implemented line-wrapper, fixing several issues. Fix for memory corruption in command-history, thanks to Lewis Gentry. Adapted to new autoconf/automake build process. Merged Andrew Plotkin's iOS-fizmo changes: No more raw exit() calls, added screeninterface-specific filename prompt, new screeninterface-specific filename prompt replaces fizmo_register_ask_user_for_file_function, fixed autosave-functionality, added quote boxes for libglkif, added configuration option “disable-stream-2-wrap” and “max-undo-steps” config option and fix for an overlong property issue that made “Heist” crash. Implemented memory-cleanup and fixed variable states after story end to allow fizmo_start() to be called repeatedly. Fixed some minor memory leaks. Fixed segfault which would occur after storing 10240 undo steps. Added new option to set number of maximum stored undo steps. Changed blockbuffer initialization to allow for output at any time, made fizmo_new_screen_size adapt blockbuffer size correctly. Fixed a buffer overflow during tokenization, thanks for Andrew Plotkin. Implemented binary chop dictionary search. Fixed screen interface invocation in libcellif to not require timeouts from screen interface if not actually required by the game, saving a bit of CPU time. Made fizmo comply to “praxix.z5” test, merged zarf's DISABLE_PREFIX_COMMANDS functionality. Merged zarf's GLK changes into “glk_screen_if.c”. The new version 0.1.2 fixes screen size detection, timed input and adds lowering of the input line. Fixed missing $(DESTDIR) variable – should already have been present since version 0.7.1. Fixed an error which would occur for empty pathnames when starting up a game on 32-bit platforms, thanks to Samuel Verschelde. The transcription and fixed font bits will now correctly survive a restore, as defined in the Z-Maschine standard. Fixed missing “override” statments for CFLAGS in Makefiles. Fixed $(DESTDIR) evaluation in config.[default|macports].mk. Adapted Makefiles and configuration to use standard GNU Makefile variables instead of INSTALL_PATH and FIZMO_BIN_DIR. Fixed an error in the stack restoration in “opcode_restore_undo”. Thanks to Lewis Gentry for reporting this bug. Implemented first debugger stubs. The debugger is available via network socket and will currently only dump PC, locals and stack contents. Removed “drilbo-x11.c” requirement for “Xatom.h”. Respect LD_FLAGS for linking. From the user's perspective, version 0.7 adds hyphenation, saving of the latest screen output into savefiles, re-display of said output upon restore, a much improved X11-frontispiece display and improved localization. Thanks to Andrew Plotkin for the GLK-related code and Eric Forgeot for the french localization. Please see “README-0.7.txt” for more information. Restructured fizmo: The interpreter core, ncursesw- and console-interface, the sdl-sound interface and the X11-specific code have been moved into separate modules named “libfizmo”, “fizmo-ncursesw”, “fizmo-console”, “libsndifsdl” and “libdrilbo”. Basic GLK functionality may be implemented using “libglkif”, an example GLK implementation based on glktermw is available in module “fizmo-glktermw”. Implemented Frank Liangs TeX hy-phen-a-tion algorithm into the wordwrapper. Patterns were taken from the “hyph-utf8” project at http://www.ctan.org/tex-archive/language/hyph-utf8/. Re-implemented the word wrapper. Rebuilt locales system. So far, all available locales were directly compiled into the binary and stored using a rather inflexible method which wasted some memory. Version 0.7 now stores the locales on the disk, reading only those languages and modules which are currently required. All i18n-invocations do now directly accept a module identifier, make the old switch functionality obsolete. Adapted all i18n calls to new method. Rebuilt output history storage. This has been reimplemented using a single memory stream instead of storing text and metadata separately. Implemented a cell-screen meta-interface. This translates the output from fizmo's screen interface into simple goto-xy and print commands, allowing implementation of interfaces using fixed-width fonts with a minimum of work. This is also used by the new “fizmo-ncursesw” interface, which has also been entirely rewritten. libdrilbo (“drilbo represents an imaging library not only for blorb objects”) now handles all graphical related tasks. It also makes fizmo's version 0.6 requirement for GTK to load images obsolete, it directly uses libjpg and libpng to load images and provides its own Xlib implementation for X11 output. X11 frontispiece display is now by default in a separate window, which, contrary to the older implementation that simply invoked a XCopyArea directly into the terminal's X window, should work reliably. For terminals which by chance support it, the old behaviour is still available by using the “display-x11-inline-image” config option. The inline display has been changed to no longer write directly into the terminal window, but instead to use a subwindow instead. Implemented saving of text history using a non-standard chunk type “TxHs” in quetzal savegames. Added configuration variable “save-text-history-paragraphs” which defines the maximum number of paragraphs to store in a savegame. Added variable interpretation – so far, only $(HOME) is implemented – for config files. Re-implemented the entire build process. Libraries may now be compiled and installed on their own, pkg-config is used whereever possible to ease compilation and installation. Bugfix release: Fizmo did not stop tokenzing after the maximum number of allowed words, which would result in a parse buffer overflow. Thanks to Samuel Verschelde for discovering this problem. Bugfix release: Fixed negative count for unsorted dictionaries in the tokenise opcode. This fixed the crash in “Beyond Zork” which occurred while executing “i” after an item was name, thanks to irb. Fixed “get_utf8_code_length”. This fixes output of non-latin1 output codes in the transcript file, thanks to Lewis Gentry, closes debian issue #617714. Increased maximum allowed option size to 512 to allow for longer filenames. Added NCURSESW_INCLUDE_FROM_W_DIRNAME to configs to allow usage of Apple's ncurses implementation, added GDKPIXBUF_INC_DIR configuration variable. Bugfix release: Interpreter and interface information is now correctly written into the header after restarting, additionally the input length for transcript and command input/output-stream filenames has been fixed. Thanks to Samuel Verschelde. Added “sync-transcript” option: When enabled, it'll flush the wordwrapper and file output buffer as soon as possible. Fixed trunction of babel data input. So far, the last byte was cut off from the input, resulting in an error if the file was encoded using unix newlines, but no errors as long as DOS newlines were used. This fixes missing metadata issues in the story browser. Thanks again to Zachary Kline. Fixed story browser to remove “.zblorb” suffixes from story titles which are not backed by babel information and evaluated from the filename. This will only work for new stories which are added to the list, to re-index your current story-list the old file has to be removed and re-built. “rm $HOME/.config/fizmo/story-list.txt” should be run first, followed by the command “fizmo -u”. Thanks to Zachary Kline. Minimal changes to the seeding of math.c's “srand” and “init_by_array” in hopes of increasing input entropy. Bugfix release: Recommend for MacPorts, will make compiling work for parallel builds in MacPorts version 1.8.0+. Transcription will be kept active after restarts, thanks to Samuel Verschelde. Fixed Makefiles for parallel builds (make -j). Bugfix release: Definitely recommend for read_char fix. Fixed interface to supply default colors in case ncurses' “pair_content” returned invalid colors (thanks to Samuel Verschelde). Input from read_char is no longer re-echoed to the screen (thanks to Samnuel Verschelde). The top-level Makefile may now be invoked with “CONFIG_FILE=<filename>”. Adapted “config.macos.mk” to MacPorts portfiles and ports-filesystem so that fizmo is now easily MacPorts-buildable. Added license information to every file. Improved GNU coding compliance: install now goes to “($DESTDIR)/usr”. Bugfix release: Corrected save opcode and prepared for debianization. Adapted manpage to make lintian work. Corrected “src/c/interface.h”. Fixed typo in manpage. Fixed save opcode to not wrap data into IFF and to disable compression when only a table from memory is saved (operands 2 and 3 for address and length are set). This fixes “Comp96.z5”. Bugfix release: minor addition of several features (may now compile without libsndfile and libSDL alone, implemented XDG base directory specification). Removed unused references to SDL-mixer (which isn't used for anything anymore). Improved and documented default “config.*.mk” files and added config default for cygwin with sound support (to my own great surprise, sound really works under Cygwin). Added more information to “INSTALL.txt”. Implemented new ENABLE_AIFF_FOR_SOUND_SDL variable in config files. This allows the sound-sdl-interface to at least play Infocom .snd files when no libsndfile is available. Added config-file options to manpage. Changed location of fizmo config directory from fixed “$HOME/.fizmo” to XDG_CONFIG_HOME standard and implemented use of XDG_CONFIG_DIRS. Thanks for suggestions and debugging help from Eric Forgeot. Specifications and more information found at http://freedesktop.org/wiki/Software/xdg-user-dirs. Fixed broken space allocation, forgotten NULL-checks and fixed some issues to make frontispiece work better on GenToo. Thanks for these patches from David Leverton (see also line #50 in “src/ncursesw/Makefile”). This fixes possible startup crashes. Added FIZMO_BIN_DIR variable to Makefile. (find c cgi cpp fizmo ncursesw simple-c simple-cpp single-turn sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 29953 lines of output) This marks the point for the first public beta release. Killed all known bugs as far as I could find them and made fizmo work on Linux – tested with a 64-bit distribution of Debian/Lenny – and Mac OS X 10.5 with a 32-bit Intel machine and MacPorts for SDL. New features since version 0.5 include an SDL-based sound interface, support for charachter font via unicode translation, partial (z)blorb-support – runs code from blorbs, can display frontispiece images in XTerms and play AIFF-sounds, a story file navigator, interface margins, restore from command line, a much improved streams implementation, a manpage and many other small features as well as a large amount of bugfixes. Implemented conversion of font 3 (charachter font) to unicode. This appears to make Beyond Zork's map appear at least readable. All directories in the “ZCODE_ROOT_PATH” are now recursively searched for Z-machine games. Implemented recording and replaying of timed input. Implemented new “*.snd” search method: Generalized for all files, not only Lurking Horror and Sherlock, tries upper- and lowercase. Fixed scan_table opcode. This fixes Beyond Zork window output. The filename input for save and restore may now be cancelled using the escape key. Pressing arrow up/down during filename input no longer displays the command history. Implemented wordwrapper / ncursesw margins. Flags are now correctly restored during undo and restore opcodes. Added progress indicator for story-list update. Fixed a bug that would damage the story list in case a game had a release code with a length equal 5. Fixed an issue that would cause bits > 0xffff from routine address to be lost on timed-routine-calls. Implemented “no-update” command line flag and config option to avoid long startup scan times (for example on slow notebook drivers with many story files). Implemented “--search” and “--recursively-search” command line invocations. Fixed bug in scrollback parapgraph position cache. Fixed a memory leak from getcwd(NULL, 0) in “filelist.c”. Fixed scroll-down display for scrolling to bottom. Fixed crash that occured when a read-instruction was recursively called from a timed input verification-routine. Modified LOADB / LOADW opcodes to store 0 in target instead of doing nothing when trying to read from an illegal address. This appears to make the russian version of “All Roads” (“AllRoadsR.z5”) work. Fixed a bug in the story-title evaluation from filename when the story name did not contain any slashes. Fixed display error on refresh of preloaded input from history. Implemented IGNORE_TOO_LONG_PROPERTIES_ERROR config define which makes “property.c” ignore too long properties (fixes “HugeCave.z8”). Implemented forced predictable mode (ignores seeding random generator). Fixed story-list for directly invoked files with relative pathname. Many, many other minor fixes and extensions. (find c cgi cpp fizmo ncursesw simple-c simple-cpp single-turn sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 28499 lines of output) Re-built SDL-Sound system (implemented sound effect stack, better sound- has-finished-detection and many, many fixes). Re-wrote Makefile system. Releveant module defaults are now kept in separate .mk-files. Added support for AIFF-sounds in blorb files. Added support for extra-blorb files (these are specified on the command line directly after the story file name). Added “-Wextra” flag to CFLAGS and cleaned up new warnings caused by the new flag. Cleaned up config file, fixed a minor bug and made boolean vars work “more” correctly. Fixed “VERIFY” opcode. Several fixes: Patched “savegame.c” to re-enable use of “CMem” save method, removed a superfluous free in streams.c which tried to free a static string. Many minor fixes (option system, running X11-enabled fizmo in text-only console, etc). (find c cgi cpp fizmo ncursesw simple-c simple-cpp single-turn sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 27123 lines of output) Implemented filelist (which remembers all files invoked and files in searched directories). Added use of libxml2 to parse metadata from the babel XML file. Implemented story selection menu in ncursesw interface. Implemented parsing of rc file. Added bold-for-bright-foreground and blink-for-bright-background terminal options. Implemented dont-use-color and force-color option. Fixed interface for > 121 colors. Added “help” command. Implemented “savegame-path” configuration option which specifies the directory for savegames. Implemented text paragraph position cache to speed up scrollback for large amounts of text (not elegant, but works). Savegames are no longer restored in case serial, release or checksum don't match. Removed non-standard “FILE” chunk again, the storyfiles for directly invoked savegames (from the command line) are now located via the filelist. Implemened “force-quetzal-umem” config option from the command line. Added manpage. Fixed “verify” opcode. Basic implementation of input stream 1. Implemented basic blorb support (meaning that blorb files are detected, information about pictures and sound is parsed and the first found “ZCOD” chunk is executed). Fizmo now always keeps a FILE* to the story file open, eliminating the need for a lot of open / close calls (and simplyfing blorb handling). Stories may now be started from the command line using their “real name” in case they are stored in the story-list. Example: “fizmo sorcerer”. Many, many small fixes (scrollback, winch-redisplay, negative score, undo, crash on large scrollbacks, etc). find fizmo simple-c simple-cpp c cgi single-turn cpp ncursesw qzinspect snd2aiff sound-sdl -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 23265 lines of output) Implemented SDL-sound-interface. To make SDL work in Mac OS X I've used MacPorts to install SDL (“port install libsdl”), on Debian I've been using “apt-get install libsdl-sound1.2-dev” (maybe “apt-get install alsa-base alsa-utils” is also required). Fixed scrollback and i18n-exit-translation. Fixed libfizmo to also use setitimer/sigaction (makes fizmo work better on linux). Implemented foreground/background color command line parameters for ncursesw interface. Fixed get-cursor-[column|row] for ncursesw (makes PRINT_TABLE and Sherlock work). Added “UMem” support for quetzal. Added “snd2aiff” commandline utility (this was the basis for the first sound interface experiments). Added “qzinspect”, a simple commandlinetool which uses libfizmo to list the contents of a quetzal savegame. Added non-standard “FILE” chunk to savegames which contains the absolute file name of the story file which saved the game. Implemented restore from the command line: In case a quetzal-savegame containing the non-standard-chunk “FILE” is given on the command line, fizmo will try to restore the savegame using the story filename stored in this chunk. (find fizmo simple-c simple-cpp c cgi single-turn cpp ncursesw -type f -name '*.c' -or -name '*.cpp' -or -name '*.h' | xargs cat | wc -l resulted in 21963 lines of output) This version is now definitely usable to play all non-v6 games. Did extensive testing using Borderzone, “LostPig.z8”, “Zokoban.z5”, “crashme.z5”, “etude.z5”, “paint.z5”, “random.z5”, “reverzi.z5” and “unicode.z5”. Only two minor known bugs remain: Scrollback sometimes miscalculates the current row after a lot of scrolling back and forth (which is always “fixable” to pressing any-key which correctly rebuilds the current output page, and a display anomaly on the frontpage of “vampire.z8” which I intended to keep after a lot of code-inspection (since fizmo appears to be implementing the screen modell correctly and fixing this display problem breaks a lot of other games). This version has been tested on Linux, Darwin (Mac Os X) and a little bit on XP/Cygwin (using a self-built ncursesw). Added “z_ucs_rchar” to “z_ucs.c”. Re-implemented word-wrapper to not compress multiple spaces, keep spaces after newlines and buffer more than on line. The fixes the map display problem in “Enchanter”. Changed opcode_restore to read dynamic memory and stack of the restored game into a freshly allocated memory block instead of directly into the game data. This makes it possible to now continue the current game instead of dropping back to the command line. Fixed opcode_save to not exit in case an errors occurs during saving, but to merely give a warning (and correctly evaluate the branch). Now the currently active game isn't lost anymore in case a save goes wrong. Added a LOT of error checking in “iff.c” and “savegame.c”. There's possibly a better way, but checking every single return value also works. Added table-saving extensions to save- and restore-opcodes. Fixed tokenizing for version 5+. Fixed timed-input detection for “read” opcode. This fixes the crash in ZTUU when the lantern goes out. Ran fizmo through (sp)lint, fixed memory leaks, minor bugs, many typecasts, some double and inconsistent definitions, cleanup up code. Fixed Makefile dependencies. Fixed a possible SIGSEV when using fprintf with “%ls” output format. This tended to crash when used on wchar_t on darwin. Implemened scrollback for ncursesw interface, added support method for scrollback in “history.c”. Added last missing v5 opcodes. Fixed end-of-stack detection so that stack is now correctly enlarged when required. Added module-based localization, removed unused localization entries. Fixed space detection in wordwrapper. Fixed metadata-handling (memcpy) in history.c Added “single-turn” interface. Fixed operand handling in zpu. Added configuration system. Re-built save/restore, should be finally 100% quetzal compatible. Implemented output stream 4. Fixed output stream 2. Some split-window / set_window / set_cursor fixed for ncursesw-interface. Substitued ualarm/signal with setitimer/sigaction since the first one won't catch SIGALRM on linux and manpage says that ualarm is obsolete. Fixed color management so that ncurses color pair is avaiable for reading. Many, many minor bugfixes. 16373 lines in *.h and *.c files Fixed a bug in “parse_utf_8_char”, this fixes i18n-messages. Added C++ wrapper. Implemented demo C++ screen interface. Separated code in core, interface, c and cpp interfaces. Improved upper window handling (trinity sundial) and blockbuffer (zork1.z5). 13718 lines in *.h and *.c files Moved to this new version on March 3, 2007. The old version has been lying around untouched since November 15, 2006. Abandoned the internal use of UTF-8. It is just much too complicated to handle in the interface. I'm not even sure that with all the code necessary to handle UTF-8 handling that there is much space wasted. The important point for me is that using UCS-4 – fixed, 32-bit sized characters – is much more easier, and thus safer to use. Re-implemented everything using wchar_t. The barebones C-Interface is the first converted. Everything took only a few hours. Compacted code a little bit (tracelog.h, etc.). Re-implemented the history-buffer in “streams.c”. It is controlled by the Z_HISTORY_INCREMENT_SIZE and Z_HISTORY_MAXIMUM_SIZE constants in file “config.h”. The buffer is re-alloced until it reaches the given maximum size. At that time, wrap-around is used to keep the buffer up to date. A debug function named “log_history” exists. Converted the error handling to wchar_t. Implemented SIGWINCH-handler for interfaces and associated handling in “ncrws-if.c”. Implemented metadata (color and style) storage for the history. Implemented set_font opcode. Fixed two minor issues in the wordwrapper. Fixed a missing string-terminator in the zchar_to_ucs_4-function. Over two years that thing was working without it ... unbelievable. Fixed a token-length problem in parsing. Implemented correct UTF8-filename-handling for savefiles. Implemented CATCH and THROW opcodes, both untested. Re-built interpreter commands with new wchar-base, prompt-repetition from history and user-configurable prefix. Re-implemented scripting with UCS-4. Implemented buffering of metadata – colour, styles and font – in the history buffer. Windows may now be resized and keep their styles intact. Fixes in property-management for version 4 games. The sound-effect opcode is accepted now for effects 1 and 2, although it doesn't do anything yet. Improved split-screen in ncurses-interface: In case the upper window becomes smaller, its content is copied over into the lower window (making reading the sundial in trinity.z4 working). Fixed set_window to set cursor to (0,0) when selection upper window (this makes the sonarscope in Seastalker work). Fixed wordwrapper to accomodate for styles which are sent after normal text which is followed by a space – so far the style was activated before the space was output. Implemented command history. Fixed a bug that would cause screen resizes in versions before 5 try to set colours. Implemented specialized blockbuffer for upper window. Threw away wchar_t- and locale.h-usage. The problem is that they are not suported on older compilers, embedded systems or in emulations like cygwin. According to specifications, wchar_t may even only have 8 bits width and is compiler-implementation dependant, so it's practically not useable to store unicode-data. So i've implemented a z_ucs type which is always used for internal processing of characters. Thus every interface gets its output in z_ucs chars (which are simple int32_t types) and can happily typecast it into wchar_t if desired. Interfaces may still use wchar_t (in fact, ncursesw does), but the core is now completely autonomous. Fizmo now compiles fine without warning on Cygwin. Both the c- and the ncursesw-interfaces seem to work nicely. Fixed a bug in the wordwrapper which caused the zchar-converter-state and the linebuffer to overlay in a single byte. Added “z” parameter to i18n string, representing z_ucs-strings. Fixed stream-3-output: Current length is now always updated, not only when closing the stream. Fixed input to make it work all across the screen and not only on the last line. Fixed cursor movements and screen splits for version 4 and 5. Splitted files into fizmo-core and interfaces. The interpreter itself is now put into a static library and linked in from the interfaces. Moved “extern” statements into header files. 12276 lines in *.h and *.c files Added a few ZSCII/ASCII/ISO-8859-1/UTF-8 conversion functions in “text.c”. Improved the ncursesw-interface to handle US-ASCII and UTF-8 directly. Implemented detection if a character has a suitable ZSCII representation before adding it to the input line. Fixed a bug which prevented correct assembly of multi-Z-characters. Fixed a bug that caused multi-Z-character constructions to have a wrong word length. Extended ncurses interface to handle scrolling on the input line. Once input of a new line is finished, it is erase and then output again using the interface's output_utf8 function. This allows output which is longer than a single line to be word-wrapped. Implemented correct delete and insert in the ncurses interface. 13302 lines in *.h and *.c files Abandoned the concept to pack absolutely everything in UTF8f. Having to think though the fork-8f is simply more complicated than necessary. In the name of “Keep it simple, stupid” I'll revert to my old idea of having a function in the interface for every output function like color setting, changing font style and so on. Removed wordwrapper, pager, decoder, utf8conv, fork8f and fpipe. Reverted the system to the plain-style-C interface. I'll use the break in the development chain to clean up the code and take a second look at most things which has proven quite benefical in similar occasions. Cleaned up most of the code. I've now got a clean, simple version without any real interface around running again. Better yet, since my last tries with ncursesw I've finally found out how to reliably produce UTF-8 output: By simply calling the setlocale function from #include <locale.h> and setting LC_ALL to “”. Once the system locale is now set to something using UTF-8, ncurses delivers correct output. Implemented a new, much simpler wordwrapper that should now also wrap UTF-8 correctly. Fixed quetzal saving. The main FORM chunk has now the correct length so that both frotz and Zoom now correctly load savegame files. Implemented a whole new wordwrapper. This one correctly wraps UTF-8 and is capable of storing “metadata” – colors and styles – into the text. This allows color and style changes in the middle of a word without having to flush buffers. Implemented colors. Implemented text style. The etude.z5-test is running again. So far I've got everything working except the character output. Implemented v3 window handling. The random.z5 test is now running okay. Implemented [More] prompt. Improved command line parameter handling. Fixed a REAL nasty bug in the line-history resulting in buffer overflows in very rare cases. Fixed another minor bug that would let the word wrapper start a new line after input with a space (Wishbringer's “read message and move leaves”) by added the wordwrap_reset_wrapper method (which correctly reset the number of consecutive spaces). Fixed a bug that would cause a crash when games were saved in a restarted game (forgotten store_empty_stack_frame). (Successfully completed Wishbringer – 96/100 points, one wish used. I just have to find a way to unlock the chains down in the tower...) Fixed paging module, long lines causing wrap-arounds are now correctly accounted for. Modified the module to keep one more line than required on the screen to ease continued reading. Tested compatibility to Zork I, Z-Machine version 1, release 2, serial number AS000C. This version appears to have a bug at $585b. It occurs when the command “open mailbox and read leaflet” is executed right at the beginning. To circumvent this, a skip-underflow-check can be enabled in variable.c. I've posted a related newsgroup-message at http://groups.google.de/group/ rec.arts.int-fiction/browse_frm/thread/c77652b28be69f2d/ a52b9f652fc75928#a52b9f652fc75928 Added the “@info” command. Added automatic detection of “problem” games. This way, the “AS000C” hack is automatically activated at start-up. Activated hacks are displayed using the “@info” command. (0.20.1 finished) Enchanhed the pipe/filter system. Each filter will now receive the destination function (and “object-struct”) directly. Thus, no more extra forwarding functions are required. Rebulid the windowing system in the curses interface. No more flushes are sent from the fizmo “core” any longer. The interface will flush it's filters by itself if required (sending a flush into the first filter in case input is required or the interface is closed). ABSOLUTELY FASCINATING to discover how many can bugs can still reside in a program just to creep up occassionally ... or is that just a sign of a bad programming style? Now I begin to grasp even more the significance of Java's Array-out-of-bounds-exception. I found a bug in the utf8x-buffer (forgot a multiplation by factor 3, resulting in a much too small buffer. I must have had a lot of overflows without ever noticing them in the past). Found another bug in the UTF8x-Converter where I simply referenced the wrong variable. Fixed a forgotton “converter->utf8f_parameter_bytes_to_copy = 0” in utf8conv.c which SOMETIMES (grrr!) caused an error which caused the screen output to vanish. Reorganized piping in the curses interface. Every window now has its own combination of wordwrapper, converter, pager and decoder. General window commands like split_window or erase_window are caught by a enhanced type of decoder named fork8f and passed along to the correct window structure. The random.z5 seems to work fine and I hope it's sufficiently correct to finally try my luck with Seastalker. (0.20.2 finished) Fixed status line display. Fixed ncurses color recycling. 12794 lines in *.h and *.c files Version 0.2.0 adds an unix interface, allowing for timed intput, and an [n]curses interface including color, better wordwrapping and accented characters. Zinc now runs random.z5 and passes all of the etude tests. I completed Moonmist without encountering any strange behaviour. Put the conversion of UTF-8 to [ASCII|ISO-8859-1|UTF-8] in utf8conv.[c|h]. That way, c_if.c is now down to a minimum size, and all it's “outsourced” functions – wordwrapping and UTF-8-conversion – can now be used without any problems by other functions or interfaces. Cleaned up Makefile. Implemented call_vs2 and call_vn2 opcodes. Made PRINT_NUM output signed instead of unsigned numbers (found it thanks to etude.z5). Corrected OPCODE_MOD to correctly handle signed operand 0 values (etude again). Corrected a REAL nasty mistake: Replaced sizeof(<constant>) in a utf8conv.c malloc-call with a simple <constant>. This made the system crash under OS X PPC (though not on linux and some other unix-variant). Re-organised the makefile a bit. Interface dependencies are now correctly resolved and build dependencies are in order again. Renamed the interpreter from the project name “zint” – meaning Z-Machine-Interpreter – to “ZInC”, meaning Z-INterpreter-Code. Corrected the Makefile again. Implemented the Unix-Interface. This one assumes that it's running on a unix machine terminal without any specials (not even curses). It uses select and tc[g|s]etattr to implement timed and preloaded input and a get_char implementation. Fixed a bug in unix_if.c that would cause a segfault on startup. Some more i18n, cleaner tc[g|s]etattr in unix_if.c Implmented correct input line restoration after timed-input output. Modified text.c so that the streams_echo_input command is executed no matter whether the first word could be found in the vocabluary or not. Implemented preloaded input in the Unix-Interface. Implemented correct READ_CHAR in Unix-Interface. Fixed a LOT of tiny bugs and itches. Implemented [MORE] paging via additional pager module. Fixed german translation of i18n messages. Fixed ZSCII-to-UTF8 encoding, ZInC now passes etude's accented character test. Implemented a curses interface. At the moment raw constructs for the upper and lower window and a status line. Basic color management. Adapted wordwrap.c a little bit in order to achieve corrent linebreaks. Completely re-wrote wordwrapping in order to get rid of trailing spaces and other problems evident when using curses. Completely re-wrote the entire output stream system. It turned out that the usage of flags caused problems buffering text: In order for everything to work correctly the flags would have to be buffered along with the text output. Text-relevant formatting data like color is now passed directly along with the UTF-8 text: Internally I'm now using an encoding that can encode special formatting sequences into the UTF-8 stream – see UTF8X.txt for more information. These conversions added the utf8x.* and decoder.* files. Although quite a major change, the encoding helps to make the whole system a lot cleaner. Numerous fixes to the [n]curses interface, addition of status line, better color management with careful consideration of availiable color pairs. Using the ncurses interface, the interpreter now passes the etude.z5 test with the exception of the text styles and undo capability. Modified the i18n_translate_and_exit and close_streams functions to support a message-on-exit. This way, error messages are supported without regard for what's left in the UTF8x output pipe and error output can be seperated from the other valid stream output. This way, the ncurses interface can correctly endwin() and output the message to read on stderr. So far, multiple invocations of READ or READ_CHAR with timed input casued a “nested timed input not availiable” error. This is a problem for the random.z5 test which appears to use this feature. The nested behaviour has been altered to an overwrite behaviour. In case a second timed input is requested, the old timer and routine are erased from memory and replaced with the new data. Fixed interface commandline choice. The random.z5 tests now apperas to run correctly. Fixed a tiny bug in wordwrapping directly after read_line, fixed command line parsing, i18n-string-length and a few tiny localization issues. Added text styles to the curses interface. Finally added modifiable names for game saving and restoring. (Successfully completed the red storyline of Moonmist). Renamed ZinC (name already exists) to fizmo: Fizmo Interprets Z-Machine Opcodes. 8848 lines in *.h and *.c files The 0.1.4 complies to the strictz.z5 test, allows transcripting (even on startup via command line switch). A few minor bugs were fixed and a history of the last output is kept, allowing for a faithfully original prompt after an interpreter command has been finished. Compacted locate_dictionary_entry (so that the zscii_string_length function is no longer needed) and adapted it to version 4+ files. Implemented the object-number-unequal-zero-checks (in order to run strict.z5). Adapted read opcode to version 4+. Renamed c_iface.c to c_if.c in order to gain more space for other interface names. Fixed zchar_to_utf_8 so that multibyte-characters are handeled correctly between two zchar_to_utf_8 function calls (when continuing on the first call's source string due to output buffer shortage). Implemented basic transcipting in streams.c and moved the trace functions there. All output is now channeled from text.c through stream.c into the active interface. The input is seperately written to to the streams, in order to be able to distinguish it from regular output (and to write it only to the streams requested). Implemented “-s” / “--start-script” startup option to start scripting right away. This allows to capture really all input emitted by the game. Implemented input of file name (supplying a default filename) for transcripts. Fixed a bug in the parsed word position which would cause the following garbeled Moonmist-output:
      >get out of the cat
      [I don't know the word " cat."]
      >oops car [I assume you mean: get ou o th ca]
      You're not in it!
      Implemented CALL_VN opcode. Added STRICT_Z definition in config.h and implemented a lot of checks in object.c together with a warning mechanism in i18n.c in order to make this interpreter compliant to strictz.z5. Fixed a bug in the length-code-size determination in properties.c (replaced “& 80” with “& 0x80”). Added a lot of STRICT_Z tests to properties.c. Implemented READ_CHAR opcode (not very well, since in stanard C without any Operating-System-specific calls there's no single read of a char, thus you still have to press enter). Zinc now passes the strictz.z5 test and looks close enough to the frotz output stored at http://www.ifarchive.org/if-archive/infocom/interpreters/old/frotz/frotz_zstrict_result (with other warning messages, of course). Implemented wordwrapping as a seperate re-usable module in wordwrap.[c|h]. The C-interface and the function for output to stream 2 currently use it both. Implemented line_history_buffer, a circular buffer that will record the last output sent to the streams. It's supposed to be used for reconstruction of the current prompt in case an interpreter command is entered an the original prompt should be restored after executing it and later for easier handling of preloaded input. Interpreter commands will now prompt with the last line that was output by the Z-program after finishing command processing.
      6013 lines in *.h and *.c files This 0.1.3 version adds localization for error- and startup messages, corrects a few minor bugs abd adds UTF-8 support. Made mod (remainder-after-divison) signed (due to 2.2.1). Corrected opcode_div so that the divisor, not the dividend, is verified not to be 0. Added divisor-not-0-check to mod. A few paranoid sanity checks in opcode_read. Modified opcode_read so that the whole line of input is always read, no matter how much can actually be stored so that the next line of input does not begin with left-over-text. The non-used input is discarded. Removed use of input_to_zscii-function in text.c, since the input does not have to be converted. Extended store_ZSCII_as_zchar in text.c to accept not only characters in the current alphabet, but also to encode other chars as multi-z-chars, thus also allowing the '@' as input which I want to use to identify interpreter commands. Implemented the “@predictable” command to switch interpreter in or out of predicatable random mode as suggested in the spec. Made random generator more spec conforming by using negative values to seed the generator to this value. Implemented parsing of command line options. Currently only used to start up interpreter in predictable random mode. Implemented UTF-8 handling. The data traffic between the core interpreter and the interface(s) has been modified to use exclusively UTF-8. It is now also possible to output a whole string via the utf_8_output function. The C interface can now be put in three output modes – ASCII, ISO-8859-1 and UTF-8. Characters that cannot be printed in the ASCII and ISO-8859-1 modes are substituted by a '?'. Implemented UTF-8 output as defined by the Z-Machine specification v1. So far only implemented without testing. Implemented loclization. In order to avoid special cases in which it is not possible to tell the user that the localized files cannot be loaded since the files have not been loaded yet in his own language :-) I'm using the prepi18n binary to convert the locales/xx_XX.txt into the file locales.c which can be directly complied into the interpreter binary. The localization files are supposed to be encoded in UTF-8 so they can be easily output using the usual interface functions. Split the activate_interface function into activate_interface and link_active_interface_to_story. The first call actually initializes the interface which is used to make output possible (in case the story file can't be loaded), the second call performs the necessary initializations with the story file's header. Extended localization to use parameters the like “Could not open \{0}.”. So far, parameters are only allowed to contain ASCII values. Moved last remaining function in output.c, read_zscii_string, into text.c. Implemented forgotten lowering of case after reading input from the keyboard. Now it's possible to answer “YES” to Moonmist when it asks for “YES or NO”. Cleaned up stack.c a bit and fixed a bug that would have caused the stack not to enlarge in case it was supposed to. Extended localization to use type identifiers. In the beginning I decided to skip them, but to make error messages useful to the user and handier in the code I decided to give it a shot. Parameters are now specified by using \{0s} for a string and \{0d} for a decimal. Together with a few supporting wrapper functions, the main file already looks much cleaner. Due to the buffering of the Z-Machine output, messages are even correctly word-wrapped. Implemented switching between ASCII / ISO-8859-1 / UTF-8 into zinc.c. Logically it would have been better to put it in to c_iface, but since it will be required more often and don't want any copied code I decided to leave it this way. Implemented echo option in the C interface in order to be able to read the input from input piped into the interpreter. Converted all current 51 conditions-to-translate from FATAL_ERROR and [s|f|]printf to i18n_translate[and_exit]. The FATAL_ERROR macro has been removed. Compacted the zchar-storage-functions. Completely replaced read_zscii_string with zscii_to_utf_8. The new functions will output z-char-strings of an arbitrary length into an limited-size output buffer. Multiple calls to this function for the same source string will continue with the output where the last call of the functions had to stop. 5094 lines 0.1.2 fixes my currently last known problems with playing the 840726 Zork I revision. Word wrapping makes it look a little bit nicer and the barebones-C-interface is now probably as good as it can get. Did quite a lot of code-cleanup. Implemented NOT opcode. Implemented NOP opcode. Implemented RESTART opcode. Implemented POP opcode. Implemented SHOW_STATUS opcode. Allowed output of tab – ZSCII 9 – for version 3 (due to the guidebook in the Dam Lobby). Implemented VERIFY opcode. Implemented PIRACY opcode (we're all honest, so an evaluate_branch(1) sounds okay, right?). Fixed a bug in INC_CHK (wrong cast to unsigned value instead of signed). Totally forgot about the 8.3-filename-limits on DOS machines, files were renamed and merged together – /(.*)_opcodes.c/ joined /$1.c/. Fixed a bug in the random opcode which allowed 0 as a minimum result value to the random call (should have been 1). Fighting with the thief now results in much less garbled text output. Cleanly wrapped TRACE_LOG calls in curly braces, meaning disabling tracing now works correctly. The zinc binary now has a size of 82308 bytes with logging enabled, and 54700 bytes without logging. Created Makfile-dependency for zinc.h from iface.h (by using the touch command, is the okay?). Made all and clean .PHONY targets. Removed globals.c, moved globals into zinc.c and created “extern” references in other source files. Moved globals to corresponding source files (which eliminates a lot of non-needed “extern” references). The linux manpages tell me bzero is outdated. Faithfully replaced bzero with memset calls. Replaced memcpy call with a loop that assembles uint16_t values byte by byte. This will avoid problems on little-endian machines (i386 and the like), since the Z-machine uses a big-endian model. Used the Mersenne Twister as random generator. Only the genrand_int32 function is used, the rest of the functions, with exception of the two init calls, were deleted from the mt19937ar.c file. The generator is seeded by an init vector consisting of the number of seconds since 1970, a standard C random generator number, the number of milliseconds since 1970, followed by another standard C random generator number. Splitted zinc.h in a header file for each .c file. Adjusted Makefile and #includes accordingly. Changed **z_opcode_procedures into *z_opcode_functions and moved it from zinc.c to zpu.c (thus avoiding external reference and setup). Now z_opcode_functions is a one-dimenstional array indexed by the value instruction_form + instr_code. This allows saving the space for 32 pointers in the smaller opcode classes (with only 16 instead of 32 opcodes). Implemented buffering / word-wrapping in the C Interface. With this change, the C interface should be complete. Comparing to everything else it's still very raw, but hey, it works. Implemented BUFFER_MODE opcode. Moved all the configuration options from zinc.h to config.h. 0.1.1 was the first version that was able to save and restore games. Implemented OR opcode. Implemented MOD opcode. Changed get_prop_len so that get_prop_len(0) returns 0 (for 1.1 standard). Updated property.c, splitted up property search in three functions in order to allow easier implementation of the GET_NEXT_PROP opcode. Implemented GET_NEXT_PROP (you can now pick up the elven sword). Implemented CALL_2S. Implemented CALL_2N. Implemented SET_COLOUR (but does not have no effect in c_interface). Implemented all remaining 2OP-opcodes with the exception of THROW. Implemented DEC opcode. Implemented PRINT_ADDR opcode. Implemented CALL_1S opcode. Implemented REMOVE_OBJ opcode. Implemented LOAD opcode. Modified the tokenising routine to correctly return position and length of a word even if it was not found in the dictionary. Implemented dummy stack frame storage for quetzal compatibility. Implemented SAVE opcode. Implemented RESTORE opcode. 0.1.0 is the first version that allows basic playing of version 3 games. The only game used for testing so far is Zork 1 which was drawn from the well-known site of Peter Scheyen. Moving around the house, object movement (taking and dropping of the leaflet) all seems to work quite okay now. Implementing more missing opcodes. Fixing a few not-so-easy to find bugs (like the property addresses etc). Fixed a bug in the branch-address calculation. Fixed a bug in the object-unlinking mechanism that would not correctly remove the object-to-be-unlinked from an object further up the sibling line. Implemented the c_interface, which allows very bare-bone input / output provided by standard C facilities (meaning fprintf / fgets). Implementing of user input, tokenising and dictionary parsing. Major cleanup of the code. distribution of the old interpreter.c file into multiple .c files. First appearance of the interpreter.h interface. Further implementation of the basic capabilities, including property management etc. First basic implementation of memory, variables, stack and primary opcodes.
      fizmo-0.7.10/doc/copyright.xml000644 000765 000024 00000005634 12606024312 017163 0ustar00chrenderstaff000000 000000

      Copyright (c) 2009-2015 Christoph Ender
      All rights reserved.

      Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

      1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
      2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
      3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

      THIS SOFTWARE IS PROVIDED BY THE AUTHOR “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

      This package includes software written by other authors:

      libfizmo includes the Mersenne Twister random number generator, available at . This is available via a BSD license, which is stored in the source file “libfizmo/src/interpreter/mt19937ar.c”.

      libfizmo includes hyphenation patterns provided by the hyph-utf8 project at . For every file's detailed respective copyright information, please refer to the description stored at the top of the corresponding file:

      • “src/locales/en_US/patterns.txt” from hyph-utf8's “hyph-en-us.tex”.
      • “src/locales/de_DE/patterns.txt” from hyph-utf8's “hyph-de-1996.tex”.
      • “src/locales/fr_FR/patterns.txt” from hyph-utf8's “hyph-fr.tex”.

      libdrilbo includes code from the pix2gif utility by Mark Howell in ztools, which are available from . The copyright status of Mark Howell's work is unknown. Since he released the software for free and since it is also used by multiple other projects it can also be distributed or used freely, to the best of my knowledge.

      fizmo-0.7.10/doc/create-mds.sh000755 000765 000024 00000001403 12606024312 017002 0ustar00chrenderstaff000000 000000 #!/bin/bash function xslt { if [ "$5" == "true" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.md" else OUTPUTFILE="${1}/${2}.md" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/changelog-md.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/md.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/doc/create-txts.sh000755 000765 000024 00000001411 12606024312 017220 0ustar00chrenderstaff000000 000000 #!/bin/sh function xslt { if [ "$5" == "true" ] then OUTPUTFILE="${1}/`echo "$2" | tr '[:lower:]' '[:upper:]'`.txt" else OUTPUTFILE="${1}/${2}.txt" fi echo Processing \"${4}\". xsltproc -o "$OUTPUTFILE" "${3}" "${4}" } function print_syntax { echo Syntax: create-txts.sh \. exit 1 } SRCDIR=`dirname $0` if [ $# -lt 1 ] then print_syntax fi if [ $# -eq 2 ] then if [ "$1" != "-u" ] then print_syntax fi UPPERCASE="true" shift fi xslt "${1}" "changelog" "$SRCDIR/changelog-ascii.xslt" "$SRCDIR/changelog.xml" $UPPERCASE for srcfile in "$SRCDIR"/*.xml do BASENAME="`basename $srcfile .xml`" if [ "$BASENAME" != "changelog" ] then xslt "${1}" "$BASENAME" "$SRCDIR/ascii.xslt" "$srcfile" "$UPPERCASE" fi done fizmo-0.7.10/doc/install.xml000644 000765 000024 00000004141 12606024312 016611 0ustar00chrenderstaff000000 000000

      Installing should be as simple as running the following commands:

      ./configure
      make
      make install

      The “configure” script tries to guess the correct values for all the system settings and locations of all include files and libraries. If some files cannot be found, the script will ask for the required values.

      In addition to the standard parameters, “configure” provides the following options:

      --enable-tracing
      For debugging purposes, fizmo can write very extensive logging information into a file named “tracelog.txt”. The logging can be enabled using this option. See also the “--with-glktermw-includedir” and “--with-glktermw-libdir” parameters below.

      --enable-glktermw
      Fizmo provides experimental GLK support, which can be activated using this option.

      --disable-x11
      This option will disable X11 image display in fizmo-ncursesw.

      --disable-jpeg
      In case JPEG support is not available or not desired, this option will disable libdrilbo's JPEG capabilities.

      --disable-png
      In case PNG support is not available or not desired, this option will disable libdrilbo's PNG capabilities.

      --disable-sound
      In case SDL2 is not available or sound support is not desired, sound can be disabled using this option.

      --disable-aiff
      In case libsndfile1 is is not available or no AIFF support is required, this option will disable AIFF support.

      --with-jpeg-includedir
      If pkg-config cannot provide information about libjpeg, the location of the jpeglib.h can be given using this parameter.

      --with-jpeg-libdir
      If pkg-config cannot provide information about libjpeg, the location of the libjpeg can be given using this parameter.

      --with-glktermw-includedir
      In case glktermw should be build, the location of the include files must be given using this parameter.

      --with-glktermw-libdir
      In case glktermw should be build, the location of the library file must be given using this parameter.

      fizmo-0.7.10/doc/md.xslt000644 000765 000024 00000014720 12606024312 015741 0ustar00chrenderstaff000000 000000 ** ** _ _ ** ** --- - . _ _ [ ] ( ) ` ` \* fizmo-0.7.10/doc/readme-0.7.xml000644 000765 000024 00000005717 12606024312 016714 0ustar00chrenderstaff000000 000000
      • In order to be able to support language-specific hyphenation patterns, the file format for the story-list has been changed. Thus, after upgrading from fizmo 0.6 to 0.7 you'll have to remove the old file and make fizmo re-index your current list automatically from the $ZCODE_ROOT_PATH and $ZCODE_PATH or $INFOCOM_PATH:
        rm $HOME/.config/fizmo/story-list.txt ; fizmo-ncursesw --update-story-list
      • Since frontispiece display is now in a separate window instead of directly in the terminal and no longer experimental, the “enable-xterm-graphics” config option and “-x” are no longer required for X11-frontispiece display, the title image will now automatically be displayed on startup. Instead the “disable-x11-graphics” option may be used to disable frontispiece output.
      • By default, the frontispiece is now shown in it's own X-Window. To re-enable the old behaviour, you may use the option “enable-x11-inline-graphics”, which is however still not recommended as a default setting and may still crash your X-Terminal.
      • Boolean variables like “dont-use-colors” don't require an explicit “yes” value anymore, simply stating the variable name in the config file is sufficient.
      • Configuration files may now use the $(HOME) variable.
      • In case the “save-text-history-paragraphs” configuration option is set to an integer value larger zero, the specified number of paragraphs from the most recent output are written into the savefile. On restore, these are written to the screen, making it easier to get an overview of the saved situation.
      • The default language setting is now no longer derived from the current locale setting but instead always set to en_US since most games are provided in english. The default locale may still be set using the “locale” variable in the config file.
      • In case there's no locale available for a game you're playing (currently everything non-english, non-german and non-french), it might make sense to disable hyphenation using either “disable-hyphenation” in the config file or using the “-dh” or “--disable-hyphenation” switch when starting fizmo-ncursesw.
      • The “bold-for-bright-foreground” and “blink-for-bright-background” options are no longer supported. If someone would be still actually using them, please send an e-mail to fizmo@spellbreaker.org.
      • Transcripting got a bit more configurable: The new “stream-2-line-width”, “stream-2-left-margin” and “disable-stream-2-hyphenation” configuration variables control transcript behaviour and some command-line options were added to ease usage for command recording and replaying (see manpage for details).
      fizmo-0.7.10/doc/readme.xml000644 000765 000024 00000007357 12606024312 016414 0ustar00chrenderstaff000000 000000

      fizmo represents a generic a Z-Machine interpreter — “fizmo interprets z-machine opcodes” — supporting all Z-Machine kinds except version 6, allowing you to run Infocom-made and most other Z-Machine based interactive fiction, also called text adventures. It also provides a generalized, plain-C interpreter library, as well as interfaces / implementations for various display and sound output methods, providing an interpreter-engine for you own project, even for closed-source implementations due to it's BSD-style license.

      Currently three frontends are available:

      • fizmo-ncursesw
        The default frontend uses ncurses “wide” variant for story output. Ncurses is commonly used for output on fixed-width text displays. The wide extensions will ensure correct unicode display.
      • fizmo-console
        This frontend will simple read and write from the console / terminal. No fance functionality whatsoever, but may be useful for automization or voice output.
      • fizmo-glktermw
        An example Glk frontend. Requires glktermw — notice the trailing “w” — which may be downloaded from the GLK-Implementations at the Interactive Fiction archive.

      For developers, interfaces translate the Z-machine specific output — window management, output, scrolling and so on — into more display-specific commands, easing implementation considerably.

      • libcellif
        This interface will convert output into simple “goto-xy”- and “print”-commands, providing support for implementations on a fixed-width display. This interface is used by fizmo-ncursesw.
      • libglkif
        The GLK-interface translates Z-Machine output into GLK-specific instructions. This is used by Andrew Plotkin's iOS-fizmo.
      • libfizmo
        This provides the interpreter core. It is a plain-C implementation which requires no external libraries (libxml2 is used by default, but in case babel support is not needed even libxml2 is not required).
      • libdrilbo
        Provides support for jpeg, png and infocom's mg1 image reading as well as X11-based output.
      • libsndifsdl2
        Supplies a SDL2-based sound interface.

      Please see INSTALL.txt on how to bulid the packages.

      Please send bug reports (or other requests) to fizmo@spellbreaker.org.

      Fizmo was written by Christoph Ender in 2005 – 2014.

      Please note:
      Currently fizmo is in beta status, meaning it might do unexpected things such as stop with an error message, crash or cleesh your machine into a frog. There is no warranty of any kind whatsoever and you're entirely on your own when running it.

      fizmo-0.7.10/autom4te.cache/output.0000644 000765 000024 00000765715 12606024547 020140 0ustar00chrenderstaff000000 000000 @%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.69 for fizmo 0.7.10. @%:@ @%:@ Report bugs to . @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in @%:@( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} 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 test -x / || 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 : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: fizmo@spellbreaker.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: 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 @S|@? 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 "@S|@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_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' 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 as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='fizmo' PACKAGE_TARNAME='fizmo' PACKAGE_VERSION='0.7.10' PACKAGE_STRING='fizmo 0.7.10' PACKAGE_BUGREPORT='fizmo@spellbreaker.org' PACKAGE_URL='' # 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@&t@OBJS OPTIONAL_FIZMO_DISTCLEANS OPTIONAL_FIZMO_CLEANS OPTIONAL_FIZMO_INSTALLS OPTIONAL_FIZMO_BUILDS OPTIONAL_SOUND_INSTALL_DATA_LOCAL OPTIONAL_SOUND_INSTALL OPTIONAL_SOUND_BUILD libsndifsdl2_LIBS libsndifsdl2_CFLAGS SOUND_INTERFACE_INCLUDE_FILE SOUND_INTERFACE_CONFIGNAME SOUND_INTERFACE_STRUCT_NAME SOUND_INTERFACE_NAME libglkif_LIBS libglkif_CFLAGS LIBGLKIF_NONPKG_LIBS LIBGLKIF_NONPKG_CFLAGS LIBNCURSESW_NONPKG_LIBS LIBNCURSESW_NONPKG_CFLAGS libdrilbo_LIBS libdrilbo_CFLAGS libcellif_LIBS libcellif_CFLAGS libfizmo_LIBS libfizmo_CFLAGS FIZMO_DIST_VERSION DEV_BUILD_PREFIX ENABLE_AIFF_FALSE ENABLE_AIFF_TRUE ENABLE_READCHAR_VIA_TERMIOS_FALSE ENABLE_READCHAR_VIA_TERMIOS_TRUE ENABLE_X11_IMAGES_FALSE ENABLE_X11_IMAGES_TRUE ENABLE_PNG_FALSE ENABLE_PNG_TRUE ENABLE_JPEG_FALSE ENABLE_JPEG_TRUE ENABLE_X11_FALSE ENABLE_X11_TRUE FIZMO_DIST_VERSION_FALSE FIZMO_DIST_VERSION_TRUE ENABLE_DEBUGGER_FALSE ENABLE_DEBUGGER_TRUE ENABLE_PREFIX_COMMANDS_FALSE ENABLE_PREFIX_COMMANDS_TRUE ENABLE_CONFIG_FILES_FALSE ENABLE_CONFIG_FILES_TRUE ENABLE_OUTPUT_HISTORY_FALSE ENABLE_OUTPUT_HISTORY_TRUE ENABLE_COMMAND_HISTORY_FALSE ENABLE_COMMAND_HISTORY_TRUE ENABLE_BLOCKBUFFER_FALSE ENABLE_BLOCKBUFFER_TRUE ENABLE_FILELIST_FALSE ENABLE_FILELIST_TRUE ENABLE_SEGFAULT_ON_ERROR_FALSE ENABLE_SEGFAULT_ON_ERROR_TRUE ENABLE_STRICT_Z_FALSE ENABLE_STRICT_Z_TRUE ENABLE_BABEL_FALSE ENABLE_BABEL_TRUE ENABLE_SDL_FALSE ENABLE_SDL_TRUE ENABLE_TRACING_FALSE ENABLE_TRACING_TRUE ac_ct_AR AR RANLIB AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR 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 sndfile_LIBS sndfile_CFLAGS sdl2_LIBS sdl2_CFLAGS EGREP GREP CPP ncursesw_LIBS ncursesw_CFLAGS png_LIBS png_CFLAGS jpeg_LIBS jpeg_CFLAGS x11_LIBS x11_CFLAGS OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC libxml2_LIBS libxml2_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG 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_tracing enable_glktermw enable_sdl enable_x11 enable_jpeg with_jpeg_includedir with_jpeg_libdir enable_png enable_sound with_ncurses_includedir with_ncursesw_libdir with_ncurses_libdir with_glktermw_includedir with_glktermw_libdir enable_aiff enable_dependency_tracking enable_silent_rules ' ac_precious_vars='build_alias host_alias target_alias PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR libxml2_CFLAGS libxml2_LIBS CC CFLAGS LDFLAGS LIBS CPPFLAGS x11_CFLAGS x11_LIBS jpeg_CFLAGS jpeg_LIBS png_CFLAGS png_LIBS ncursesw_CFLAGS ncursesw_LIBS CPP sdl2_CFLAGS sdl2_LIBS sndfile_CFLAGS sndfile_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe 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 fizmo 0.7.10 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 @<:@@S|@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/fizmo@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of fizmo 0.7.10:";; 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-tracing enable tracelog for debugging --enable-glktermw enable experimental glktermw --disable-sdl SDL will not be required for building, this will however disable sound support --disable-x11 disable X11 support --disable-jpeg disable JPEG support --disable-png disable PNG support --disable-sound Disable sound support --disable-aiff disable AIFF compatibility in case libsndfile is not available --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-jpeg-includedir Specify include directory to use for libjpeg --with-jpeg-libdir Specify library directory for libjpeg --with-ncurses-includedir Specify include directory to use for ncurses.h --with-ncursesw-libdir Specify library directory for ncursesw --with-ncurses-libdir Specify library directory for ncurses --with-glktermw-includedir Specify include directory to use for glktermw --with-glktermw-libdir Specify library directory for glktermw Some influential environment variables: PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path libxml2_CFLAGS C compiler flags for libxml2, overriding pkg-config libxml2_LIBS linker flags for libxml2, overriding pkg-config 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 (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory x11_CFLAGS C compiler flags for x11, overriding pkg-config x11_LIBS linker flags for x11, overriding pkg-config jpeg_CFLAGS C compiler flags for jpeg, overriding pkg-config jpeg_LIBS linker flags for jpeg, overriding pkg-config png_CFLAGS C compiler flags for png, overriding pkg-config png_LIBS linker flags for png, overriding pkg-config ncursesw_CFLAGS C compiler flags for ncursesw, overriding pkg-config ncursesw_LIBS linker flags for ncursesw, overriding pkg-config CPP C preprocessor sdl2_CFLAGS C compiler flags for sdl2, overriding pkg-config sdl2_LIBS linker flags for sdl2, overriding pkg-config sndfile_CFLAGS C compiler flags for sndfile, overriding pkg-config sndfile_LIBS linker flags for sndfile, overriding pkg-config 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 . _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 fizmo configure 0.7.10 generated by GNU Autoconf 2.69 Copyright (C) 2012 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.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@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 || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link @%:@ ac_fn_c_try_cpp LINENO @%:@ ---------------------- @%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_cpp @%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using @%:@ the include files in INCLUDES and setting the cache variable VAR @%:@ accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------- ## ## Report this to fizmo@spellbreaker.org ## ## ------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_header_mongrel @%:@ ac_fn_c_try_run LINENO @%:@ ---------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes @%:@ that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_run @%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists and can be compiled using the include files in @%:@ INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_header_compile 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 fizmo $as_me 0.7.10, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in @%:@(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in . "$srcdir"/.; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in . \"$srcdir\"/." "$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. fizmo_dist_version=0.7.10 # Definition for configuration options @%:@ Check whether --enable-tracing was given. if test "${enable_tracing+set}" = set; then : enableval=$enable_tracing; else enable_tracing=no fi @%:@ Check whether --enable-glktermw was given. if test "${enable_glktermw+set}" = set; then : enableval=$enable_glktermw; else enable_glktermw=no fi @%:@ Check whether --enable-sdl was given. if test "${enable_sdl+set}" = set; then : enableval=$enable_sdl; else enable_sdl=yes fi # Import submodule-specific options from their respective directories @%:@ Check whether --enable-x11 was given. if test "${enable_x11+set}" = set; then : enableval=$enable_x11; else enable_x11=yes fi @%:@ Check whether --enable-jpeg was given. if test "${enable_jpeg+set}" = set; then : enableval=$enable_jpeg; else enable_jpeg=yes fi @%:@ Check whether --with-jpeg-includedir was given. if test "${with_jpeg_includedir+set}" = set; then : withval=$with_jpeg_includedir; else with_jpeg_includedir= fi @%:@ Check whether --with-jpeg-libdir was given. if test "${with_jpeg_libdir+set}" = set; then : withval=$with_jpeg_libdir; else with_jpeg_libdir= fi @%:@ Check whether --enable-png was given. if test "${enable_png+set}" = set; then : enableval=$enable_png; else enable_png=yes fi @%:@ Check whether --enable-x11 was given. if test "${enable_x11+set}" = set; then : enableval=$enable_x11; else enable_x11=yes fi @%:@ Check whether --enable-sound was given. if test "${enable_sound+set}" = set; then : enableval=$enable_sound; else enable_sound=yes fi @%:@ Check whether --with-ncurses-includedir was given. if test "${with_ncurses_includedir+set}" = set; then : withval=$with_ncurses_includedir; else ncurses_h_dir= fi @%:@ Check whether --with-ncursesw-libdir was given. if test "${with_ncursesw_libdir+set}" = set; then : withval=$with_ncursesw_libdir; else with_ncursesw_libdir= fi @%:@ Check whether --with-ncurses-libdir was given. if test "${with_ncurses_libdir+set}" = set; then : withval=$with_ncurses_libdir; else with_ncurses_libdir= fi if test "x$enable_glktermw" == "xyes"; then : @%:@ Check whether --with-glktermw-includedir was given. if test "${with_glktermw_includedir+set}" = set; then : withval=$with_glktermw_includedir; else with_glktermw_includedir= fi @%:@ Check whether --with-glktermw-libdir was given. if test "${with_glktermw_libdir+set}" = set; then : withval=$with_glktermw_libdir; else with_glktermw_libdir= fi fi if test "x$enable_sdl" == "xyes"; then : @%:@ Check whether --enable-aiff was given. if test "${enable_aiff+set}" = set; then : enableval=$enable_aiff; else enable_aiff=yes fi fi # Check for external, non-fizmo libs: if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-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 ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_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 ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-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 ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_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 ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" 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 PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; 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" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* 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 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 whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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 if test "x$enable_babel" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 $as_echo_n "checking for libxml2... " >&6; } if test -n "$libxml2_CFLAGS"; then pkg_cv_libxml2_CFLAGS="$libxml2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libxml2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$libxml2_LIBS"; then pkg_cv_libxml2_LIBS="$libxml2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libxml2_LIBS=`$PKG_CONFIG --libs "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then libxml2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0" 2>&1` else libxml2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$libxml2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0) were not met: $libxml2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables libxml2_CFLAGS and libxml2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables libxml2_CFLAGS and libxml2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else libxml2_CFLAGS=$pkg_cv_libxml2_CFLAGS libxml2_LIBS=$pkg_cv_libxml2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xmlParseFile in -lxml2" >&5 $as_echo_n "checking for xmlParseFile in -lxml2... " >&6; } if ${ac_cv_lib_xml2_xmlParseFile+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxml2 $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 xmlParseFile (); int main () { return xmlParseFile (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xml2_xmlParseFile=yes else ac_cv_lib_xml2_xmlParseFile=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_xml2_xmlParseFile" >&5 $as_echo "$ac_cv_lib_xml2_xmlParseFile" >&6; } if test "x$ac_cv_lib_xml2_xmlParseFile" = xyes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBXML2 1 _ACEOF LIBS="-lxml2 $LIBS" fi libfizmo_reqs="libxml-2.0" fi # Checking for the math library doesn't seem to make much sense since # it appears that the math functions are often automatically included # (which leads to something like "error: conflicting types for built-in # function 'cos'"). Since there's probably no C installation without libm # we'll include it by default. # AC_CHECK_LIB([m], [cos], m_LIBS="-lm") m_LIBS="-lm" if test "x$enable_x11" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x11" >&5 $as_echo_n "checking for x11... " >&6; } if test -n "$x11_CFLAGS"; then pkg_cv_x11_CFLAGS="$x11_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_x11_CFLAGS=`$PKG_CONFIG --cflags "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$x11_LIBS"; then pkg_cv_x11_LIBS="$x11_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_x11_LIBS=`$PKG_CONFIG --libs "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then x11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "x11" 2>&1` else x11_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "x11" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$x11_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (x11) were not met: $x11_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables x11_CFLAGS and x11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables x11_CFLAGS and x11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else x11_CFLAGS=$pkg_cv_x11_CFLAGS x11_LIBS=$pkg_cv_x11_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test "x$libdrilbo_reqs" != "x"; then : libdrilbo_reqs+=", " fi libdrilbo_reqs+="x11" fi if test "x$enable_jpeg" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg" >&5 $as_echo_n "checking for jpeg... " >&6; } if test -n "$jpeg_CFLAGS"; then pkg_cv_jpeg_CFLAGS="$jpeg_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jpeg\""; } >&5 ($PKG_CONFIG --exists --print-errors "jpeg") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_jpeg_CFLAGS=`$PKG_CONFIG --cflags "jpeg" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$jpeg_LIBS"; then pkg_cv_jpeg_LIBS="$jpeg_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jpeg\""; } >&5 ($PKG_CONFIG --exists --print-errors "jpeg") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_jpeg_LIBS=`$PKG_CONFIG --libs "jpeg" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then jpeg_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "jpeg" 2>&1` else jpeg_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "jpeg" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$jpeg_PKG_ERRORS" >&5 for dir in $with_jpeg_includedir /usr/include /usr/local/include /opt/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/jpeglib.h" >&5 $as_echo_n "checking for $dir/jpeglib.h... " >&6; } if test -e $dir/jpeglib.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } jpeglib_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$jpeglib_h_dir" == "x" ; then echo "Could not find libjpeg.h." echo "Try setting the location using --with-jpeg-libdir." exit fi libdrilbo_nonpkg_cflags+="-I$jpeglib_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-ljpeg" for dir in $with_jpeg_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libjpeg in $dir" >&5 $as_echo_n "checking for libjpeg in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "$jpeglib_h_dir/jpeglib.h" int main () { struct jpeg_decompress_struct cinfo; jpeg_create_decompress(&cinfo); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } jpeglib_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$jpeglib_l_dir" == "x" ; then echo "Could not find libjpeg." echo "Try setting the location using --with-jpeg-libdir." exit fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED libdrilbo_nonpkg_libs="-L$jpeglib_l_dir -ljpeg" elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } for dir in $with_jpeg_includedir /usr/include /usr/local/include /opt/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/jpeglib.h" >&5 $as_echo_n "checking for $dir/jpeglib.h... " >&6; } if test -e $dir/jpeglib.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } jpeglib_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$jpeglib_h_dir" == "x" ; then echo "Could not find libjpeg.h." echo "Try setting the location using --with-jpeg-libdir." exit fi libdrilbo_nonpkg_cflags+="-I$jpeglib_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-ljpeg" for dir in $with_jpeg_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libjpeg in $dir" >&5 $as_echo_n "checking for libjpeg in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "$jpeglib_h_dir/jpeglib.h" int main () { struct jpeg_decompress_struct cinfo; jpeg_create_decompress(&cinfo); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } jpeglib_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$jpeglib_l_dir" == "x" ; then echo "Could not find libjpeg." echo "Try setting the location using --with-jpeg-libdir." exit fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED libdrilbo_nonpkg_libs="-L$jpeglib_l_dir -ljpeg" else jpeg_CFLAGS=$pkg_cv_jpeg_CFLAGS jpeg_LIBS=$pkg_cv_jpeg_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test "x$libdrilbo_reqs" != "x"; then : libdrilbo_reqs+=", " fi libdrilbo_reqs+="jpeg" fi fi if test "x$enable_png" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png" >&5 $as_echo_n "checking for png... " >&6; } if test -n "$png_CFLAGS"; then pkg_cv_png_CFLAGS="$png_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng >= 1.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpng >= 1.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_png_CFLAGS=`$PKG_CONFIG --cflags "libpng >= 1.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$png_LIBS"; then pkg_cv_png_LIBS="$png_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng >= 1.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpng >= 1.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_png_LIBS=`$PKG_CONFIG --libs "libpng >= 1.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then png_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libpng >= 1.2" 2>&1` else png_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libpng >= 1.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$png_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libpng >= 1.2) were not met: $png_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables png_CFLAGS and png_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables png_CFLAGS and png_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else png_CFLAGS=$pkg_cv_png_CFLAGS png_LIBS=$pkg_cv_png_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test "x$libdrilbo_reqs" != "x"; then : libdrilbo_reqs+=", " fi libdrilbo_reqs+="libpng >= 1.2" fi libncursesw_nonpkg_cflags="" libncursesw_nonpkg_libs="" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncursesw" >&5 $as_echo_n "checking for ncursesw... " >&6; } if test -n "$ncursesw_CFLAGS"; then pkg_cv_ncursesw_CFLAGS="$ncursesw_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_CFLAGS=`$PKG_CONFIG --cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$ncursesw_LIBS"; then pkg_cv_ncursesw_LIBS="$ncursesw_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_LIBS=`$PKG_CONFIG --libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then ncursesw_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ncursesw" 2>&1` else ncursesw_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ncursesw" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$ncursesw_PKG_ERRORS" >&5 for dir in $with_ncurses_includedir /usr/include /usr/local/include /opt/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/ncurses.h" >&5 $as_echo_n "checking for $dir/ncurses.h... " >&6; } if test -e $dir/ncurses.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncurses_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$ncurses_h_dir" == "x" ; then echo "Could not find ncurses.h." echo "Try setting the location using --with-ncurses-includedir." exit fi libncursesw_nonpkg_cflags+="-I$ncurses_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-lncursesw" for dir in $with_ncursesw_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libncursesw in $dir" >&5 $as_echo_n "checking for libncursesw in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h" int main () { wchar_t buf[2]; addwstr(buf); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncursesw_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$ncursesw_l_dir" != "x" ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncursesw" else echo "Could not find libncursesw. Trying to use libcurses instead." LIBS="-lncurses" for dir in $with_ncurses_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libncurses in $dir" >&5 $as_echo_n "checking for libncurses in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h" int main () { wchar_t buf[2]; addwstr(buf); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncursesw_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$ncursesw_l_dir" != "x" ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncurses" else echo "Couldn't find libncursesw or libncurses. You can set the location manually using --with-ncurses-libdir or --with-ncursesw-libdir." exit fi fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } for dir in $with_ncurses_includedir /usr/include /usr/local/include /opt/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/ncurses.h" >&5 $as_echo_n "checking for $dir/ncurses.h... " >&6; } if test -e $dir/ncurses.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncurses_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$ncurses_h_dir" == "x" ; then echo "Could not find ncurses.h." echo "Try setting the location using --with-ncurses-includedir." exit fi libncursesw_nonpkg_cflags+="-I$ncurses_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-lncursesw" for dir in $with_ncursesw_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libncursesw in $dir" >&5 $as_echo_n "checking for libncursesw in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h" int main () { wchar_t buf[2]; addwstr(buf); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncursesw_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$ncursesw_l_dir" != "x" ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncursesw" else echo "Could not find libncursesw. Trying to use libcurses instead." LIBS="-lncurses" for dir in $with_ncurses_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libncurses in $dir" >&5 $as_echo_n "checking for libncurses in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h" int main () { wchar_t buf[2]; addwstr(buf); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncursesw_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$ncursesw_l_dir" != "x" ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncurses" else echo "Couldn't find libncursesw or libncurses. You can set the location manually using --with-ncurses-libdir or --with-ncursesw-libdir." exit fi fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED else ncursesw_CFLAGS=$pkg_cv_ncursesw_CFLAGS ncursesw_LIBS=$pkg_cv_ncursesw_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test "x$enable_x11" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x11" >&5 $as_echo_n "checking for x11... " >&6; } if test -n "$x11_CFLAGS"; then pkg_cv_x11_CFLAGS="$x11_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_x11_CFLAGS=`$PKG_CONFIG --cflags "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$x11_LIBS"; then pkg_cv_x11_LIBS="$x11_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_x11_LIBS=`$PKG_CONFIG --libs "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then x11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "x11" 2>&1` else x11_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "x11" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$x11_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (x11) were not met: $x11_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables x11_CFLAGS and x11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables x11_CFLAGS and x11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else x11_CFLAGS=$pkg_cv_x11_CFLAGS x11_LIBS=$pkg_cv_x11_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi 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 how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer 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.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer 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.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #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 " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF @%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "x$enable_glktermw" == "xyes"; then : libglkif_nonpkg_cflags="" libglkif_nonpkg_libs="" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncursesw" >&5 $as_echo_n "checking for ncursesw... " >&6; } if test -n "$ncursesw_CFLAGS"; then pkg_cv_ncursesw_CFLAGS="$ncursesw_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_CFLAGS=`$PKG_CONFIG --cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$ncursesw_LIBS"; then pkg_cv_ncursesw_LIBS="$ncursesw_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_LIBS=`$PKG_CONFIG --libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then ncursesw_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ncursesw" 2>&1` else ncursesw_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ncursesw" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$ncursesw_PKG_ERRORS" >&5 as_fn_error $? "Could not find ncursesw." "$LINENO" 5 as_fn_exit $? elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Could not find ncursesw." "$LINENO" 5 as_fn_exit $? else ncursesw_CFLAGS=$pkg_cv_ncursesw_CFLAGS ncursesw_LIBS=$pkg_cv_ncursesw_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test "x$libglkif_reqs" != "x"; then : libglkif_reqs+=", " fi libglkif_reqs+="ncursesw" fi ac_fn_c_check_header_mongrel "$LINENO" "glkterm.h" "ac_cv_header_glkterm_h" "$ac_includes_default" if test "x$ac_cv_header_glkterm_h" = xyes; then : else for dir in $with_glktermw_includedir /usr/include /usr/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/glkterm.h" >&5 $as_echo_n "checking for $dir/glkterm.h... " >&6; } if test -e $dir/glkterm.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } glk_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$glk_h_dir" == "x" ; then echo "Could not find glk.h." echo "Try setting the location using --with-glktermw-includedir." as_fn_exit $? fi libglkif_nonpkg_cflags+="-I$glk_h_dir" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lglktermw" >&5 $as_echo_n "checking for main in -lglktermw... " >&6; } if ${ac_cv_lib_glktermw_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lglktermw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_glktermw_main=yes else ac_cv_lib_glktermw_main=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_glktermw_main" >&5 $as_echo "$ac_cv_lib_glktermw_main" >&6; } if test "x$ac_cv_lib_glktermw_main" = xyes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBGLKTERMW 1 _ACEOF LIBS="-lglktermw $LIBS" else LIBS_OLD=$LIBS LIBS="-lglktermw $ncursesw_LIBS" for dir in $with_glktermw_libdir /usr/lib /usr/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libglktermw in $dir" >&5 $as_echo_n "checking for libglktermw in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "$glk_h_dir/glk.h" #include "$glk_h_dir/glkstart.h" glkunix_argumentlist_t glkunix_arguments[] = { }; int glkunix_startup_code(glkunix_startup_t *data) { } void glk_main(void) { glk_exit(); } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } glk_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$glk_l_dir" == "x" ; then echo "Could not find libglktermw." echo "Try setting the location using --with-glktermw-libdir." as_fn_error $? "Could not find libglktermw." "$LINENO" 5 as_fn_error $? "You need to specify libglktermw.a location using \"--with-glktermw-libdir=\"." "$LINENO" 5 as_fn_exit $? fi LIBS=$LIBS_OLD libglkif_nonpkg_libs="-L$glk_l_dir -lglktermw" fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncursesw" >&5 $as_echo_n "checking for ncursesw... " >&6; } if test -n "$ncursesw_CFLAGS"; then pkg_cv_ncursesw_CFLAGS="$ncursesw_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_CFLAGS=`$PKG_CONFIG --cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$ncursesw_LIBS"; then pkg_cv_ncursesw_LIBS="$ncursesw_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_LIBS=`$PKG_CONFIG --libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then ncursesw_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ncursesw" 2>&1` else ncursesw_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ncursesw" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$ncursesw_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (ncursesw) were not met: $ncursesw_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables ncursesw_CFLAGS and ncursesw_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables ncursesw_CFLAGS and ncursesw_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else ncursesw_CFLAGS=$pkg_cv_ncursesw_CFLAGS ncursesw_LIBS=$pkg_cv_ncursesw_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi if test "$enable_sdl" != "no"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sdl2" >&5 $as_echo_n "checking for sdl2... " >&6; } if test -n "$sdl2_CFLAGS"; then pkg_cv_sdl2_CFLAGS="$sdl2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl2\""; } >&5 ($PKG_CONFIG --exists --print-errors "sdl2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sdl2_CFLAGS=`$PKG_CONFIG --cflags "sdl2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$sdl2_LIBS"; then pkg_cv_sdl2_LIBS="$sdl2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl2\""; } >&5 ($PKG_CONFIG --exists --print-errors "sdl2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sdl2_LIBS=`$PKG_CONFIG --libs "sdl2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then sdl2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sdl2" 2>&1` else sdl2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sdl2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$sdl2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (sdl2) were not met: $sdl2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables sdl2_CFLAGS and sdl2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables sdl2_CFLAGS and sdl2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else sdl2_CFLAGS=$pkg_cv_sdl2_CFLAGS sdl2_LIBS=$pkg_cv_sdl2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test "x$enable_aiff" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sndfile" >&5 $as_echo_n "checking for sndfile... " >&6; } if test -n "$sndfile_CFLAGS"; then pkg_cv_sndfile_CFLAGS="$sndfile_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile\""; } >&5 ($PKG_CONFIG --exists --print-errors "sndfile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sndfile_CFLAGS=`$PKG_CONFIG --cflags "sndfile" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$sndfile_LIBS"; then pkg_cv_sndfile_LIBS="$sndfile_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile\""; } >&5 ($PKG_CONFIG --exists --print-errors "sndfile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sndfile_LIBS=`$PKG_CONFIG --libs "sndfile" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then sndfile_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sndfile" 2>&1` else sndfile_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sndfile" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$sndfile_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (sndfile) were not met: $sndfile_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables sndfile_CFLAGS and sndfile_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables sndfile_CFLAGS and sndfile_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else sndfile_CFLAGS=$pkg_cv_sndfile_CFLAGS sndfile_LIBS=$pkg_cv_sndfile_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi libsndif_reqs+=", sndfile" fi fi am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in @%:@(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$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; } # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file 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 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 if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done 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; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file 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"` 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 --is-lightweight"; then am_missing_run="$MISSING " 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+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null 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 @%:@ Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' 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='fizmo' VERSION='0.7.10' 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"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). 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}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > 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 # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* 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 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 whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$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 if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$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 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 test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$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_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 test -n "$ac_ct_AR" && break done 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 fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; 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 am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a 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: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac # Setup conditionals: # It appears that conditionals must always be defined, even if they are # never used. If not, it will result in a "configure: error: conditional # (name-of-conditional) was never defined". if test "$enable_tracing" = "yes"; then ENABLE_TRACING_TRUE= ENABLE_TRACING_FALSE='#' else ENABLE_TRACING_TRUE='#' ENABLE_TRACING_FALSE= fi if test "$enable_sdl" != "no"; then ENABLE_SDL_TRUE= ENABLE_SDL_FALSE='#' else ENABLE_SDL_TRUE='#' ENABLE_SDL_FALSE= fi if test "$enable_babel" != "no"; then ENABLE_BABEL_TRUE= ENABLE_BABEL_FALSE='#' else ENABLE_BABEL_TRUE='#' ENABLE_BABEL_FALSE= fi if test "$enable_strict_z" = "yes"; then ENABLE_STRICT_Z_TRUE= ENABLE_STRICT_Z_FALSE='#' else ENABLE_STRICT_Z_TRUE='#' ENABLE_STRICT_Z_FALSE= fi if test "$enable_segfault-on-error" = "yes"; then ENABLE_SEGFAULT_ON_ERROR_TRUE= ENABLE_SEGFAULT_ON_ERROR_FALSE='#' else ENABLE_SEGFAULT_ON_ERROR_TRUE='#' ENABLE_SEGFAULT_ON_ERROR_FALSE= fi if test "$enable_filelist" != "no"; then ENABLE_FILELIST_TRUE= ENABLE_FILELIST_FALSE='#' else ENABLE_FILELIST_TRUE='#' ENABLE_FILELIST_FALSE= fi if test "$enable_blockbuffer" != "no"; then ENABLE_BLOCKBUFFER_TRUE= ENABLE_BLOCKBUFFER_FALSE='#' else ENABLE_BLOCKBUFFER_TRUE='#' ENABLE_BLOCKBUFFER_FALSE= fi if test "$enable_command_history" != "no"; then ENABLE_COMMAND_HISTORY_TRUE= ENABLE_COMMAND_HISTORY_FALSE='#' else ENABLE_COMMAND_HISTORY_TRUE='#' ENABLE_COMMAND_HISTORY_FALSE= fi if test "$enable_output_history" != "no"; then ENABLE_OUTPUT_HISTORY_TRUE= ENABLE_OUTPUT_HISTORY_FALSE='#' else ENABLE_OUTPUT_HISTORY_TRUE='#' ENABLE_OUTPUT_HISTORY_FALSE= fi if test "$enable_config_files" != "no"; then ENABLE_CONFIG_FILES_TRUE= ENABLE_CONFIG_FILES_FALSE='#' else ENABLE_CONFIG_FILES_TRUE='#' ENABLE_CONFIG_FILES_FALSE= fi if test "$enable_prefix_commands" != "no"; then ENABLE_PREFIX_COMMANDS_TRUE= ENABLE_PREFIX_COMMANDS_FALSE='#' else ENABLE_PREFIX_COMMANDS_TRUE='#' ENABLE_PREFIX_COMMANDS_FALSE= fi if test "$enable_debugger" = "yes"; then ENABLE_DEBUGGER_TRUE= ENABLE_DEBUGGER_FALSE='#' else ENABLE_DEBUGGER_TRUE='#' ENABLE_DEBUGGER_FALSE= fi if test "x$fizmo_dist_version" != "x"; then FIZMO_DIST_VERSION_TRUE= FIZMO_DIST_VERSION_FALSE='#' else FIZMO_DIST_VERSION_TRUE='#' FIZMO_DIST_VERSION_FALSE= fi if test "$enable_x11" != "no"; then ENABLE_X11_TRUE= ENABLE_X11_FALSE='#' else ENABLE_X11_TRUE='#' ENABLE_X11_FALSE= fi if test "$enable_jpeg" != "no"; then ENABLE_JPEG_TRUE= ENABLE_JPEG_FALSE='#' else ENABLE_JPEG_TRUE='#' ENABLE_JPEG_FALSE= fi if test "$enable_png" != "no"; then ENABLE_PNG_TRUE= ENABLE_PNG_FALSE='#' else ENABLE_PNG_TRUE='#' ENABLE_PNG_FALSE= fi if test "$enable_x11" != "no"; then ENABLE_X11_IMAGES_TRUE= ENABLE_X11_IMAGES_FALSE='#' else ENABLE_X11_IMAGES_TRUE='#' ENABLE_X11_IMAGES_FALSE= fi if test "$enable_sdl" != "no"; then ENABLE_SDL_TRUE= ENABLE_SDL_FALSE='#' else ENABLE_SDL_TRUE='#' ENABLE_SDL_FALSE= fi if test "$enable_filelist" != "no"; then ENABLE_FILELIST_TRUE= ENABLE_FILELIST_FALSE='#' else ENABLE_FILELIST_TRUE='#' ENABLE_FILELIST_FALSE= fi if test "$enable_config_files" != "no"; then ENABLE_CONFIG_FILES_TRUE= ENABLE_CONFIG_FILES_FALSE='#' else ENABLE_CONFIG_FILES_TRUE='#' ENABLE_CONFIG_FILES_FALSE= fi if test "$enable_readchar_via_termios" != "no"; then ENABLE_READCHAR_VIA_TERMIOS_TRUE= ENABLE_READCHAR_VIA_TERMIOS_FALSE='#' else ENABLE_READCHAR_VIA_TERMIOS_TRUE='#' ENABLE_READCHAR_VIA_TERMIOS_FALSE= fi if test "$enable_aiff" != "no"; then ENABLE_AIFF_TRUE= ENABLE_AIFF_FALSE='#' else ENABLE_AIFF_TRUE='#' ENABLE_AIFF_FALSE= fi # Setup flags for fizmo-internal libs. This will allow us to build the # project after only one configuration iteration. build_prefix=`pwd`/build build_prefix_cflags=$build_prefix/include/fizmo build_prefix_libs=$build_prefix/lib/fizmo DEV_BUILD_PREFIX=$build_prefix FIZMO_DIST_VERSION=0.7.10 # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. #libfizmo_CFLAGS="-I$build_prefix_cflags $xml2_CFLAGS $m_CFLAGS" #libfizmo_LIBS="-L$build_prefix_libs -lfizmo $xml2_LIBS $m_LIBS" # #AC_SUBST([libfizmo_CFLAGS], $libfizmo_CFLAGS) #AC_SUBST([libfizmo_LIBS], $libfizmo_LIBS) libfizmo_CFLAGS="-I$build_prefix_cflags $xml2_CFLAGS $m_CFLAGS" libfizmo_LIBS="-L$build_prefix_libs -lfizmo $xml2_LIBS $m_LIBS" # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. libcellif_CFLAGS="-I$build_prefix_cflags" libcellif_LIBS="-L$build_prefix_libs -lcellif" # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. libdrilbo_CFLAGS="-I$build_prefix_cflags $x11_CFLAGS $jpeg_CFLAGS $libdrilbo_nonpkg_cflags $png_CFLAGS" libdrilbo_LIBS="-L$build_prefix_libs -ldrilbo -lpthread $x11_LIBS $jpeg_LIBS $libdrilbo_nonpkg_libs $png_LIBS" # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. LIBNCURSESW_NONPKG_CFLAGS="$libncursesw_nonpkg_cflags" LIBNCURSESW_NONPKG_LIBS="$libncursesw_nonpkg_libs" if test "x$enable_glktermw" == "xyes"; then : # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. LIBGLKIF_NONPKG_CFLAGS="$libglkif_nonpkg_cflags" LIBGLKIF_NONPKG_LIBS="$libglkif_nonpkg_libs" libglkif_CFLAGS="-I$build_prefix_cflags $libglkif_nonpkg_cflags" libglkif_LIBS="-L$build_prefix_libs -lglkif $libglkif_nonpkg_libs" # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. # (This file is intentionally empty) fi if test "$enable_sdl" != "no"; then : # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. # Changes in this file have to be mirrored in the corresponding frontend # "config-subst-libsndifsdl2.m4" files. SOUND_INTERFACE_NAME=libsndifsdl2 SOUND_INTERFACE_STRUCT_NAME=sound_interface_sdl2 SOUND_INTERFACE_CONFIGNAME=SOUNDSDL2 SOUND_INTERFACE_INCLUDE_FILE=sound_sdl2/sound_sdl2.h fi # Define optional build and installation targets if required by the # current flags if test "x$enable_glktermw" == "xyes"; then : optional_fizmo_builds=fizmo-glktermw optional_fizmo_installs=install-fizmo-glktermw optional_fizmo_cleans=clean-fizmo-glktermw optional_fizmo_dstcleans=distclean-fizmo-glktermw fi if test "$enable_sdl" != "no"; then : optional_sound_build=libsndifsdl2 optional_sound_install=install-libsndifsdl2 optional_sound_install_data_local=install-data-local-libsndifsdl2 optional_fizmo_cleans="$optional_fizmo_cleans clean-libsndifsdl2" optional_fizmo_distcleans="$optional_fizmo_distcleans distclean-libsndifsdl2" fi # Explicitely set cflags and libs for libsndifsdl2 for use by frontends since # we cannot use pkg-config for this. libsndifsdl2_CFLAGS="-I$build_prefix_cflags $sdl2_CFLAGS $sndfile_CFLAGS" libsndifsdl2_LIBS="-L$build_prefix_libs -lsndifsdl2 $sdl2_LIBS $sndfile_LIBS" OPTIONAL_SOUND_BUILD=$optional_sound_build OPTIONAL_SOUND_INSTALL=$optional_sound_install OPTIONAL_SOUND_INSTALL_DATA_LOCAL=$optional_sound_install_data_local OPTIONAL_FIZMO_BUILDS=$optional_fizmo_builds OPTIONAL_FIZMO_INSTALLS=$optional_fizmo_installs OPTIONAL_FIZMO_CLEANS=$optional_fizmo_cleans OPTIONAL_FIZMO_DISTCLEANS=$optional_fizmo_distcleans # Create Makefiles ac_config_files="$ac_config_files Makefile libfizmo/Makefile libfizmo/src/tools/Makefile libfizmo/src/interpreter/Makefile libcellif/Makefile libcellif/src/cell_interface/Makefile libdrilbo/Makefile libdrilbo/src/drilbo/Makefile fizmo-console/Makefile fizmo-console/src/fizmo-console/Makefile fizmo-ncursesw/Makefile fizmo-ncursesw/src/fizmo-ncursesw/Makefile" if test "x$enable_glktermw" == "xyes"; then : ac_config_files="$ac_config_files libglkif/Makefile libglkif/src/glk_interface/Makefile fizmo-glktermw/Makefile fizmo-glktermw/src/fizmo-glktermw/Makefile" fi if test "$enable_sdl" != "no"; then : ac_config_files="$ac_config_files libsndifsdl2/Makefile libsndifsdl2/src/sound_sdl2/Makefile" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; 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 LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } 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 if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${ENABLE_TRACING_TRUE}" && test -z "${ENABLE_TRACING_FALSE}"; then as_fn_error $? "conditional \"ENABLE_TRACING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SDL_TRUE}" && test -z "${ENABLE_SDL_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SDL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_BABEL_TRUE}" && test -z "${ENABLE_BABEL_FALSE}"; then as_fn_error $? "conditional \"ENABLE_BABEL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_STRICT_Z_TRUE}" && test -z "${ENABLE_STRICT_Z_FALSE}"; then as_fn_error $? "conditional \"ENABLE_STRICT_Z\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SEGFAULT_ON_ERROR_TRUE}" && test -z "${ENABLE_SEGFAULT_ON_ERROR_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SEGFAULT_ON_ERROR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_FILELIST_TRUE}" && test -z "${ENABLE_FILELIST_FALSE}"; then as_fn_error $? "conditional \"ENABLE_FILELIST\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_BLOCKBUFFER_TRUE}" && test -z "${ENABLE_BLOCKBUFFER_FALSE}"; then as_fn_error $? "conditional \"ENABLE_BLOCKBUFFER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_COMMAND_HISTORY_TRUE}" && test -z "${ENABLE_COMMAND_HISTORY_FALSE}"; then as_fn_error $? "conditional \"ENABLE_COMMAND_HISTORY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_OUTPUT_HISTORY_TRUE}" && test -z "${ENABLE_OUTPUT_HISTORY_FALSE}"; then as_fn_error $? "conditional \"ENABLE_OUTPUT_HISTORY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_CONFIG_FILES_TRUE}" && test -z "${ENABLE_CONFIG_FILES_FALSE}"; then as_fn_error $? "conditional \"ENABLE_CONFIG_FILES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PREFIX_COMMANDS_TRUE}" && test -z "${ENABLE_PREFIX_COMMANDS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PREFIX_COMMANDS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_DEBUGGER_TRUE}" && test -z "${ENABLE_DEBUGGER_FALSE}"; then as_fn_error $? "conditional \"ENABLE_DEBUGGER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FIZMO_DIST_VERSION_TRUE}" && test -z "${FIZMO_DIST_VERSION_FALSE}"; then as_fn_error $? "conditional \"FIZMO_DIST_VERSION\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_X11_TRUE}" && test -z "${ENABLE_X11_FALSE}"; then as_fn_error $? "conditional \"ENABLE_X11\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_JPEG_TRUE}" && test -z "${ENABLE_JPEG_FALSE}"; then as_fn_error $? "conditional \"ENABLE_JPEG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PNG_TRUE}" && test -z "${ENABLE_PNG_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PNG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_X11_IMAGES_TRUE}" && test -z "${ENABLE_X11_IMAGES_FALSE}"; then as_fn_error $? "conditional \"ENABLE_X11_IMAGES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SDL_TRUE}" && test -z "${ENABLE_SDL_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SDL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_FILELIST_TRUE}" && test -z "${ENABLE_FILELIST_FALSE}"; then as_fn_error $? "conditional \"ENABLE_FILELIST\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_CONFIG_FILES_TRUE}" && test -z "${ENABLE_CONFIG_FILES_FALSE}"; then as_fn_error $? "conditional \"ENABLE_CONFIG_FILES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_READCHAR_VIA_TERMIOS_TRUE}" && test -z "${ENABLE_READCHAR_VIA_TERMIOS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_READCHAR_VIA_TERMIOS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_AIFF_TRUE}" && test -z "${ENABLE_AIFF_FALSE}"; then as_fn_error $? "conditional \"ENABLE_AIFF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in @%:@( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? 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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@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 @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # 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 fizmo $as_me 0.7.10, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ fizmo config.status 0.7.10 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "libfizmo/Makefile") CONFIG_FILES="$CONFIG_FILES libfizmo/Makefile" ;; "libfizmo/src/tools/Makefile") CONFIG_FILES="$CONFIG_FILES libfizmo/src/tools/Makefile" ;; "libfizmo/src/interpreter/Makefile") CONFIG_FILES="$CONFIG_FILES libfizmo/src/interpreter/Makefile" ;; "libcellif/Makefile") CONFIG_FILES="$CONFIG_FILES libcellif/Makefile" ;; "libcellif/src/cell_interface/Makefile") CONFIG_FILES="$CONFIG_FILES libcellif/src/cell_interface/Makefile" ;; "libdrilbo/Makefile") CONFIG_FILES="$CONFIG_FILES libdrilbo/Makefile" ;; "libdrilbo/src/drilbo/Makefile") CONFIG_FILES="$CONFIG_FILES libdrilbo/src/drilbo/Makefile" ;; "fizmo-console/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-console/Makefile" ;; "fizmo-console/src/fizmo-console/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-console/src/fizmo-console/Makefile" ;; "fizmo-ncursesw/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-ncursesw/Makefile" ;; "fizmo-ncursesw/src/fizmo-ncursesw/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-ncursesw/src/fizmo-ncursesw/Makefile" ;; "libglkif/Makefile") CONFIG_FILES="$CONFIG_FILES libglkif/Makefile" ;; "libglkif/src/glk_interface/Makefile") CONFIG_FILES="$CONFIG_FILES libglkif/src/glk_interface/Makefile" ;; "fizmo-glktermw/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-glktermw/Makefile" ;; "fizmo-glktermw/src/fizmo-glktermw/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-glktermw/src/fizmo-glktermw/Makefile" ;; "libsndifsdl2/Makefile") CONFIG_FILES="$CONFIG_FILES libsndifsdl2/Makefile" ;; "libsndifsdl2/src/sound_sdl2/Makefile") CONFIG_FILES="$CONFIG_FILES libsndifsdl2/src/sound_sdl2/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf 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"` # 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'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi fizmo-0.7.10/autom4te.cache/output.1000644 000765 000024 00000765715 12606024550 020133 0ustar00chrenderstaff000000 000000 @%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.69 for fizmo 0.7.10. @%:@ @%:@ Report bugs to . @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in @%:@( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} 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 test -x / || 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 : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: fizmo@spellbreaker.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: 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 @S|@? 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 "@S|@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_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' 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 as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='fizmo' PACKAGE_TARNAME='fizmo' PACKAGE_VERSION='0.7.10' PACKAGE_STRING='fizmo 0.7.10' PACKAGE_BUGREPORT='fizmo@spellbreaker.org' PACKAGE_URL='' # 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@&t@OBJS OPTIONAL_FIZMO_DISTCLEANS OPTIONAL_FIZMO_CLEANS OPTIONAL_FIZMO_INSTALLS OPTIONAL_FIZMO_BUILDS OPTIONAL_SOUND_INSTALL_DATA_LOCAL OPTIONAL_SOUND_INSTALL OPTIONAL_SOUND_BUILD libsndifsdl2_LIBS libsndifsdl2_CFLAGS SOUND_INTERFACE_INCLUDE_FILE SOUND_INTERFACE_CONFIGNAME SOUND_INTERFACE_STRUCT_NAME SOUND_INTERFACE_NAME libglkif_LIBS libglkif_CFLAGS LIBGLKIF_NONPKG_LIBS LIBGLKIF_NONPKG_CFLAGS LIBNCURSESW_NONPKG_LIBS LIBNCURSESW_NONPKG_CFLAGS libdrilbo_LIBS libdrilbo_CFLAGS libcellif_LIBS libcellif_CFLAGS libfizmo_LIBS libfizmo_CFLAGS FIZMO_DIST_VERSION DEV_BUILD_PREFIX ENABLE_AIFF_FALSE ENABLE_AIFF_TRUE ENABLE_READCHAR_VIA_TERMIOS_FALSE ENABLE_READCHAR_VIA_TERMIOS_TRUE ENABLE_X11_IMAGES_FALSE ENABLE_X11_IMAGES_TRUE ENABLE_PNG_FALSE ENABLE_PNG_TRUE ENABLE_JPEG_FALSE ENABLE_JPEG_TRUE ENABLE_X11_FALSE ENABLE_X11_TRUE FIZMO_DIST_VERSION_FALSE FIZMO_DIST_VERSION_TRUE ENABLE_DEBUGGER_FALSE ENABLE_DEBUGGER_TRUE ENABLE_PREFIX_COMMANDS_FALSE ENABLE_PREFIX_COMMANDS_TRUE ENABLE_CONFIG_FILES_FALSE ENABLE_CONFIG_FILES_TRUE ENABLE_OUTPUT_HISTORY_FALSE ENABLE_OUTPUT_HISTORY_TRUE ENABLE_COMMAND_HISTORY_FALSE ENABLE_COMMAND_HISTORY_TRUE ENABLE_BLOCKBUFFER_FALSE ENABLE_BLOCKBUFFER_TRUE ENABLE_FILELIST_FALSE ENABLE_FILELIST_TRUE ENABLE_SEGFAULT_ON_ERROR_FALSE ENABLE_SEGFAULT_ON_ERROR_TRUE ENABLE_STRICT_Z_FALSE ENABLE_STRICT_Z_TRUE ENABLE_BABEL_FALSE ENABLE_BABEL_TRUE ENABLE_SDL_FALSE ENABLE_SDL_TRUE ENABLE_TRACING_FALSE ENABLE_TRACING_TRUE ac_ct_AR AR RANLIB AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR 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 sndfile_LIBS sndfile_CFLAGS sdl2_LIBS sdl2_CFLAGS EGREP GREP CPP ncursesw_LIBS ncursesw_CFLAGS png_LIBS png_CFLAGS jpeg_LIBS jpeg_CFLAGS x11_LIBS x11_CFLAGS OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC libxml2_LIBS libxml2_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG 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_tracing enable_glktermw enable_sdl enable_x11 enable_jpeg with_jpeg_includedir with_jpeg_libdir enable_png enable_sound with_ncurses_includedir with_ncursesw_libdir with_ncurses_libdir with_glktermw_includedir with_glktermw_libdir enable_aiff enable_dependency_tracking enable_silent_rules ' ac_precious_vars='build_alias host_alias target_alias PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR libxml2_CFLAGS libxml2_LIBS CC CFLAGS LDFLAGS LIBS CPPFLAGS x11_CFLAGS x11_LIBS jpeg_CFLAGS jpeg_LIBS png_CFLAGS png_LIBS ncursesw_CFLAGS ncursesw_LIBS CPP sdl2_CFLAGS sdl2_LIBS sndfile_CFLAGS sndfile_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe 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 fizmo 0.7.10 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 @<:@@S|@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/fizmo@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of fizmo 0.7.10:";; 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-tracing enable tracelog for debugging --enable-glktermw enable experimental glktermw --disable-sdl SDL will not be required for building, this will however disable sound support --disable-x11 disable X11 support --disable-jpeg disable JPEG support --disable-png disable PNG support --disable-sound Disable sound support --disable-aiff disable AIFF compatibility in case libsndfile is not available --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-jpeg-includedir Specify include directory to use for libjpeg --with-jpeg-libdir Specify library directory for libjpeg --with-ncurses-includedir Specify include directory to use for ncurses.h --with-ncursesw-libdir Specify library directory for ncursesw --with-ncurses-libdir Specify library directory for ncurses --with-glktermw-includedir Specify include directory to use for glktermw --with-glktermw-libdir Specify library directory for glktermw Some influential environment variables: PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path libxml2_CFLAGS C compiler flags for libxml2, overriding pkg-config libxml2_LIBS linker flags for libxml2, overriding pkg-config 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 (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory x11_CFLAGS C compiler flags for x11, overriding pkg-config x11_LIBS linker flags for x11, overriding pkg-config jpeg_CFLAGS C compiler flags for jpeg, overriding pkg-config jpeg_LIBS linker flags for jpeg, overriding pkg-config png_CFLAGS C compiler flags for png, overriding pkg-config png_LIBS linker flags for png, overriding pkg-config ncursesw_CFLAGS C compiler flags for ncursesw, overriding pkg-config ncursesw_LIBS linker flags for ncursesw, overriding pkg-config CPP C preprocessor sdl2_CFLAGS C compiler flags for sdl2, overriding pkg-config sdl2_LIBS linker flags for sdl2, overriding pkg-config sndfile_CFLAGS C compiler flags for sndfile, overriding pkg-config sndfile_LIBS linker flags for sndfile, overriding pkg-config 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 . _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 fizmo configure 0.7.10 generated by GNU Autoconf 2.69 Copyright (C) 2012 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.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@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 || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link @%:@ ac_fn_c_try_cpp LINENO @%:@ ---------------------- @%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_cpp @%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using @%:@ the include files in INCLUDES and setting the cache variable VAR @%:@ accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------- ## ## Report this to fizmo@spellbreaker.org ## ## ------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_header_mongrel @%:@ ac_fn_c_try_run LINENO @%:@ ---------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes @%:@ that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_run @%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists and can be compiled using the include files in @%:@ INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_header_compile 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 fizmo $as_me 0.7.10, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF @%:@define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in @%:@(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in . "$srcdir"/.; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in . \"$srcdir\"/." "$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. fizmo_dist_version=0.7.10 # Definition for configuration options @%:@ Check whether --enable-tracing was given. if test "${enable_tracing+set}" = set; then : enableval=$enable_tracing; else enable_tracing=no fi @%:@ Check whether --enable-glktermw was given. if test "${enable_glktermw+set}" = set; then : enableval=$enable_glktermw; else enable_glktermw=no fi @%:@ Check whether --enable-sdl was given. if test "${enable_sdl+set}" = set; then : enableval=$enable_sdl; else enable_sdl=yes fi # Import submodule-specific options from their respective directories @%:@ Check whether --enable-x11 was given. if test "${enable_x11+set}" = set; then : enableval=$enable_x11; else enable_x11=yes fi @%:@ Check whether --enable-jpeg was given. if test "${enable_jpeg+set}" = set; then : enableval=$enable_jpeg; else enable_jpeg=yes fi @%:@ Check whether --with-jpeg-includedir was given. if test "${with_jpeg_includedir+set}" = set; then : withval=$with_jpeg_includedir; else with_jpeg_includedir= fi @%:@ Check whether --with-jpeg-libdir was given. if test "${with_jpeg_libdir+set}" = set; then : withval=$with_jpeg_libdir; else with_jpeg_libdir= fi @%:@ Check whether --enable-png was given. if test "${enable_png+set}" = set; then : enableval=$enable_png; else enable_png=yes fi @%:@ Check whether --enable-x11 was given. if test "${enable_x11+set}" = set; then : enableval=$enable_x11; else enable_x11=yes fi @%:@ Check whether --enable-sound was given. if test "${enable_sound+set}" = set; then : enableval=$enable_sound; else enable_sound=yes fi @%:@ Check whether --with-ncurses-includedir was given. if test "${with_ncurses_includedir+set}" = set; then : withval=$with_ncurses_includedir; else ncurses_h_dir= fi @%:@ Check whether --with-ncursesw-libdir was given. if test "${with_ncursesw_libdir+set}" = set; then : withval=$with_ncursesw_libdir; else with_ncursesw_libdir= fi @%:@ Check whether --with-ncurses-libdir was given. if test "${with_ncurses_libdir+set}" = set; then : withval=$with_ncurses_libdir; else with_ncurses_libdir= fi if test "x$enable_glktermw" == "xyes"; then : @%:@ Check whether --with-glktermw-includedir was given. if test "${with_glktermw_includedir+set}" = set; then : withval=$with_glktermw_includedir; else with_glktermw_includedir= fi @%:@ Check whether --with-glktermw-libdir was given. if test "${with_glktermw_libdir+set}" = set; then : withval=$with_glktermw_libdir; else with_glktermw_libdir= fi fi if test "x$enable_sdl" == "xyes"; then : @%:@ Check whether --enable-aiff was given. if test "${enable_aiff+set}" = set; then : enableval=$enable_aiff; else enable_aiff=yes fi fi # Check for external, non-fizmo libs: if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-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 ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_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 ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-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 ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_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 ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" 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 PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; 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" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* 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 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 whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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 if test "x$enable_babel" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 $as_echo_n "checking for libxml2... " >&6; } if test -n "$libxml2_CFLAGS"; then pkg_cv_libxml2_CFLAGS="$libxml2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libxml2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$libxml2_LIBS"; then pkg_cv_libxml2_LIBS="$libxml2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libxml2_LIBS=`$PKG_CONFIG --libs "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then libxml2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0" 2>&1` else libxml2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$libxml2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0) were not met: $libxml2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables libxml2_CFLAGS and libxml2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables libxml2_CFLAGS and libxml2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else libxml2_CFLAGS=$pkg_cv_libxml2_CFLAGS libxml2_LIBS=$pkg_cv_libxml2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xmlParseFile in -lxml2" >&5 $as_echo_n "checking for xmlParseFile in -lxml2... " >&6; } if ${ac_cv_lib_xml2_xmlParseFile+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxml2 $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 xmlParseFile (); int main () { return xmlParseFile (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xml2_xmlParseFile=yes else ac_cv_lib_xml2_xmlParseFile=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_xml2_xmlParseFile" >&5 $as_echo "$ac_cv_lib_xml2_xmlParseFile" >&6; } if test "x$ac_cv_lib_xml2_xmlParseFile" = xyes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBXML2 1 _ACEOF LIBS="-lxml2 $LIBS" fi libfizmo_reqs="libxml-2.0" fi # Checking for the math library doesn't seem to make much sense since # it appears that the math functions are often automatically included # (which leads to something like "error: conflicting types for built-in # function 'cos'"). Since there's probably no C installation without libm # we'll include it by default. # AC_CHECK_LIB([m], [cos], m_LIBS="-lm") m_LIBS="-lm" if test "x$enable_x11" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x11" >&5 $as_echo_n "checking for x11... " >&6; } if test -n "$x11_CFLAGS"; then pkg_cv_x11_CFLAGS="$x11_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_x11_CFLAGS=`$PKG_CONFIG --cflags "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$x11_LIBS"; then pkg_cv_x11_LIBS="$x11_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_x11_LIBS=`$PKG_CONFIG --libs "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then x11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "x11" 2>&1` else x11_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "x11" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$x11_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (x11) were not met: $x11_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables x11_CFLAGS and x11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables x11_CFLAGS and x11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else x11_CFLAGS=$pkg_cv_x11_CFLAGS x11_LIBS=$pkg_cv_x11_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test "x$libdrilbo_reqs" != "x"; then : libdrilbo_reqs+=", " fi libdrilbo_reqs+="x11" fi if test "x$enable_jpeg" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg" >&5 $as_echo_n "checking for jpeg... " >&6; } if test -n "$jpeg_CFLAGS"; then pkg_cv_jpeg_CFLAGS="$jpeg_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jpeg\""; } >&5 ($PKG_CONFIG --exists --print-errors "jpeg") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_jpeg_CFLAGS=`$PKG_CONFIG --cflags "jpeg" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$jpeg_LIBS"; then pkg_cv_jpeg_LIBS="$jpeg_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"jpeg\""; } >&5 ($PKG_CONFIG --exists --print-errors "jpeg") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_jpeg_LIBS=`$PKG_CONFIG --libs "jpeg" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then jpeg_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "jpeg" 2>&1` else jpeg_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "jpeg" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$jpeg_PKG_ERRORS" >&5 for dir in $with_jpeg_includedir /usr/include /usr/local/include /opt/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/jpeglib.h" >&5 $as_echo_n "checking for $dir/jpeglib.h... " >&6; } if test -e $dir/jpeglib.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } jpeglib_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$jpeglib_h_dir" == "x" ; then echo "Could not find libjpeg.h." echo "Try setting the location using --with-jpeg-libdir." exit fi libdrilbo_nonpkg_cflags+="-I$jpeglib_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-ljpeg" for dir in $with_jpeg_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libjpeg in $dir" >&5 $as_echo_n "checking for libjpeg in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "$jpeglib_h_dir/jpeglib.h" int main () { struct jpeg_decompress_struct cinfo; jpeg_create_decompress(&cinfo); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } jpeglib_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$jpeglib_l_dir" == "x" ; then echo "Could not find libjpeg." echo "Try setting the location using --with-jpeg-libdir." exit fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED libdrilbo_nonpkg_libs="-L$jpeglib_l_dir -ljpeg" elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } for dir in $with_jpeg_includedir /usr/include /usr/local/include /opt/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/jpeglib.h" >&5 $as_echo_n "checking for $dir/jpeglib.h... " >&6; } if test -e $dir/jpeglib.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } jpeglib_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$jpeglib_h_dir" == "x" ; then echo "Could not find libjpeg.h." echo "Try setting the location using --with-jpeg-libdir." exit fi libdrilbo_nonpkg_cflags+="-I$jpeglib_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-ljpeg" for dir in $with_jpeg_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libjpeg in $dir" >&5 $as_echo_n "checking for libjpeg in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "$jpeglib_h_dir/jpeglib.h" int main () { struct jpeg_decompress_struct cinfo; jpeg_create_decompress(&cinfo); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } jpeglib_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$jpeglib_l_dir" == "x" ; then echo "Could not find libjpeg." echo "Try setting the location using --with-jpeg-libdir." exit fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED libdrilbo_nonpkg_libs="-L$jpeglib_l_dir -ljpeg" else jpeg_CFLAGS=$pkg_cv_jpeg_CFLAGS jpeg_LIBS=$pkg_cv_jpeg_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test "x$libdrilbo_reqs" != "x"; then : libdrilbo_reqs+=", " fi libdrilbo_reqs+="jpeg" fi fi if test "x$enable_png" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png" >&5 $as_echo_n "checking for png... " >&6; } if test -n "$png_CFLAGS"; then pkg_cv_png_CFLAGS="$png_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng >= 1.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpng >= 1.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_png_CFLAGS=`$PKG_CONFIG --cflags "libpng >= 1.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$png_LIBS"; then pkg_cv_png_LIBS="$png_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng >= 1.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpng >= 1.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_png_LIBS=`$PKG_CONFIG --libs "libpng >= 1.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then png_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libpng >= 1.2" 2>&1` else png_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libpng >= 1.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$png_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libpng >= 1.2) were not met: $png_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables png_CFLAGS and png_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables png_CFLAGS and png_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else png_CFLAGS=$pkg_cv_png_CFLAGS png_LIBS=$pkg_cv_png_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test "x$libdrilbo_reqs" != "x"; then : libdrilbo_reqs+=", " fi libdrilbo_reqs+="libpng >= 1.2" fi libncursesw_nonpkg_cflags="" libncursesw_nonpkg_libs="" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncursesw" >&5 $as_echo_n "checking for ncursesw... " >&6; } if test -n "$ncursesw_CFLAGS"; then pkg_cv_ncursesw_CFLAGS="$ncursesw_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_CFLAGS=`$PKG_CONFIG --cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$ncursesw_LIBS"; then pkg_cv_ncursesw_LIBS="$ncursesw_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_LIBS=`$PKG_CONFIG --libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then ncursesw_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ncursesw" 2>&1` else ncursesw_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ncursesw" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$ncursesw_PKG_ERRORS" >&5 for dir in $with_ncurses_includedir /usr/include /usr/local/include /opt/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/ncurses.h" >&5 $as_echo_n "checking for $dir/ncurses.h... " >&6; } if test -e $dir/ncurses.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncurses_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$ncurses_h_dir" == "x" ; then echo "Could not find ncurses.h." echo "Try setting the location using --with-ncurses-includedir." exit fi libncursesw_nonpkg_cflags+="-I$ncurses_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-lncursesw" for dir in $with_ncursesw_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libncursesw in $dir" >&5 $as_echo_n "checking for libncursesw in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h" int main () { wchar_t buf[2]; addwstr(buf); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncursesw_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$ncursesw_l_dir" != "x" ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncursesw" else echo "Could not find libncursesw. Trying to use libcurses instead." LIBS="-lncurses" for dir in $with_ncurses_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libncurses in $dir" >&5 $as_echo_n "checking for libncurses in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h" int main () { wchar_t buf[2]; addwstr(buf); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncursesw_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$ncursesw_l_dir" != "x" ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncurses" else echo "Couldn't find libncursesw or libncurses. You can set the location manually using --with-ncurses-libdir or --with-ncursesw-libdir." exit fi fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } for dir in $with_ncurses_includedir /usr/include /usr/local/include /opt/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/ncurses.h" >&5 $as_echo_n "checking for $dir/ncurses.h... " >&6; } if test -e $dir/ncurses.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncurses_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$ncurses_h_dir" == "x" ; then echo "Could not find ncurses.h." echo "Try setting the location using --with-ncurses-includedir." exit fi libncursesw_nonpkg_cflags+="-I$ncurses_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-lncursesw" for dir in $with_ncursesw_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libncursesw in $dir" >&5 $as_echo_n "checking for libncursesw in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h" int main () { wchar_t buf[2]; addwstr(buf); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncursesw_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$ncursesw_l_dir" != "x" ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncursesw" else echo "Could not find libncursesw. Trying to use libcurses instead." LIBS="-lncurses" for dir in $with_ncurses_libdir /usr/lib /usr/local/lib /opt/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libncurses in $dir" >&5 $as_echo_n "checking for libncurses in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h" int main () { wchar_t buf[2]; addwstr(buf); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ncursesw_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$ncursesw_l_dir" != "x" ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncurses" else echo "Couldn't find libncursesw or libncurses. You can set the location manually using --with-ncurses-libdir or --with-ncursesw-libdir." exit fi fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED else ncursesw_CFLAGS=$pkg_cv_ncursesw_CFLAGS ncursesw_LIBS=$pkg_cv_ncursesw_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test "x$enable_x11" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x11" >&5 $as_echo_n "checking for x11... " >&6; } if test -n "$x11_CFLAGS"; then pkg_cv_x11_CFLAGS="$x11_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_x11_CFLAGS=`$PKG_CONFIG --cflags "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$x11_LIBS"; then pkg_cv_x11_LIBS="$x11_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_x11_LIBS=`$PKG_CONFIG --libs "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then x11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "x11" 2>&1` else x11_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "x11" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$x11_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (x11) were not met: $x11_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables x11_CFLAGS and x11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables x11_CFLAGS and x11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else x11_CFLAGS=$pkg_cv_x11_CFLAGS x11_LIBS=$pkg_cv_x11_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi 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 how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer 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.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer 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.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #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 " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF @%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "x$enable_glktermw" == "xyes"; then : libglkif_nonpkg_cflags="" libglkif_nonpkg_libs="" pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncursesw" >&5 $as_echo_n "checking for ncursesw... " >&6; } if test -n "$ncursesw_CFLAGS"; then pkg_cv_ncursesw_CFLAGS="$ncursesw_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_CFLAGS=`$PKG_CONFIG --cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$ncursesw_LIBS"; then pkg_cv_ncursesw_LIBS="$ncursesw_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_LIBS=`$PKG_CONFIG --libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then ncursesw_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ncursesw" 2>&1` else ncursesw_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ncursesw" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$ncursesw_PKG_ERRORS" >&5 as_fn_error $? "Could not find ncursesw." "$LINENO" 5 as_fn_exit $? elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Could not find ncursesw." "$LINENO" 5 as_fn_exit $? else ncursesw_CFLAGS=$pkg_cv_ncursesw_CFLAGS ncursesw_LIBS=$pkg_cv_ncursesw_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test "x$libglkif_reqs" != "x"; then : libglkif_reqs+=", " fi libglkif_reqs+="ncursesw" fi ac_fn_c_check_header_mongrel "$LINENO" "glkterm.h" "ac_cv_header_glkterm_h" "$ac_includes_default" if test "x$ac_cv_header_glkterm_h" = xyes; then : else for dir in $with_glktermw_includedir /usr/include /usr/local/include ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dir/glkterm.h" >&5 $as_echo_n "checking for $dir/glkterm.h... " >&6; } if test -e $dir/glkterm.h ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } glk_h_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi done if test "x$glk_h_dir" == "x" ; then echo "Could not find glk.h." echo "Try setting the location using --with-glktermw-includedir." as_fn_exit $? fi libglkif_nonpkg_cflags+="-I$glk_h_dir" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lglktermw" >&5 $as_echo_n "checking for main in -lglktermw... " >&6; } if ${ac_cv_lib_glktermw_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lglktermw $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_glktermw_main=yes else ac_cv_lib_glktermw_main=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_glktermw_main" >&5 $as_echo "$ac_cv_lib_glktermw_main" >&6; } if test "x$ac_cv_lib_glktermw_main" = xyes; then : cat >>confdefs.h <<_ACEOF @%:@define HAVE_LIBGLKTERMW 1 _ACEOF LIBS="-lglktermw $LIBS" else LIBS_OLD=$LIBS LIBS="-lglktermw $ncursesw_LIBS" for dir in $with_glktermw_libdir /usr/lib /usr/local/lib ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libglktermw in $dir" >&5 $as_echo_n "checking for libglktermw in $dir... " >&6; } LDFLAGS="-L$dir" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "$glk_h_dir/glk.h" #include "$glk_h_dir/glkstart.h" glkunix_argumentlist_t glkunix_arguments[] = { }; int glkunix_startup_code(glkunix_startup_t *data) { } void glk_main(void) { glk_exit(); } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } glk_l_dir=$dir break else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "x$glk_l_dir" == "x" ; then echo "Could not find libglktermw." echo "Try setting the location using --with-glktermw-libdir." as_fn_error $? "Could not find libglktermw." "$LINENO" 5 as_fn_error $? "You need to specify libglktermw.a location using \"--with-glktermw-libdir=\"." "$LINENO" 5 as_fn_exit $? fi LIBS=$LIBS_OLD libglkif_nonpkg_libs="-L$glk_l_dir -lglktermw" fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncursesw" >&5 $as_echo_n "checking for ncursesw... " >&6; } if test -n "$ncursesw_CFLAGS"; then pkg_cv_ncursesw_CFLAGS="$ncursesw_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_CFLAGS=`$PKG_CONFIG --cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$ncursesw_LIBS"; then pkg_cv_ncursesw_LIBS="$ncursesw_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncursesw_LIBS=`$PKG_CONFIG --libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then ncursesw_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ncursesw" 2>&1` else ncursesw_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ncursesw" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$ncursesw_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (ncursesw) were not met: $ncursesw_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables ncursesw_CFLAGS and ncursesw_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables ncursesw_CFLAGS and ncursesw_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else ncursesw_CFLAGS=$pkg_cv_ncursesw_CFLAGS ncursesw_LIBS=$pkg_cv_ncursesw_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi if test "$enable_sdl" != "no"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sdl2" >&5 $as_echo_n "checking for sdl2... " >&6; } if test -n "$sdl2_CFLAGS"; then pkg_cv_sdl2_CFLAGS="$sdl2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl2\""; } >&5 ($PKG_CONFIG --exists --print-errors "sdl2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sdl2_CFLAGS=`$PKG_CONFIG --cflags "sdl2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$sdl2_LIBS"; then pkg_cv_sdl2_LIBS="$sdl2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl2\""; } >&5 ($PKG_CONFIG --exists --print-errors "sdl2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sdl2_LIBS=`$PKG_CONFIG --libs "sdl2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then sdl2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sdl2" 2>&1` else sdl2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sdl2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$sdl2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (sdl2) were not met: $sdl2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables sdl2_CFLAGS and sdl2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables sdl2_CFLAGS and sdl2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else sdl2_CFLAGS=$pkg_cv_sdl2_CFLAGS sdl2_LIBS=$pkg_cv_sdl2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test "x$enable_aiff" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sndfile" >&5 $as_echo_n "checking for sndfile... " >&6; } if test -n "$sndfile_CFLAGS"; then pkg_cv_sndfile_CFLAGS="$sndfile_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile\""; } >&5 ($PKG_CONFIG --exists --print-errors "sndfile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sndfile_CFLAGS=`$PKG_CONFIG --cflags "sndfile" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$sndfile_LIBS"; then pkg_cv_sndfile_LIBS="$sndfile_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile\""; } >&5 ($PKG_CONFIG --exists --print-errors "sndfile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sndfile_LIBS=`$PKG_CONFIG --libs "sndfile" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then sndfile_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sndfile" 2>&1` else sndfile_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sndfile" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$sndfile_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (sndfile) were not met: $sndfile_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables sndfile_CFLAGS and sndfile_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables sndfile_CFLAGS and sndfile_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else sndfile_CFLAGS=$pkg_cv_sndfile_CFLAGS sndfile_LIBS=$pkg_cv_sndfile_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi libsndif_reqs+=", sndfile" fi fi am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in @%:@(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$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; } # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file 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 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 if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done 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; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file 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"` 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 --is-lightweight"; then am_missing_run="$MISSING " 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+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null 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 @%:@ Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' 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='fizmo' VERSION='0.7.10' 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"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). 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}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > 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 # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* 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 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 whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$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 if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$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 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 test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$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_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 test -n "$ac_ct_AR" && break done 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 fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; 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 am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a 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: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac # Setup conditionals: # It appears that conditionals must always be defined, even if they are # never used. If not, it will result in a "configure: error: conditional # (name-of-conditional) was never defined". if test "$enable_tracing" = "yes"; then ENABLE_TRACING_TRUE= ENABLE_TRACING_FALSE='#' else ENABLE_TRACING_TRUE='#' ENABLE_TRACING_FALSE= fi if test "$enable_sdl" != "no"; then ENABLE_SDL_TRUE= ENABLE_SDL_FALSE='#' else ENABLE_SDL_TRUE='#' ENABLE_SDL_FALSE= fi if test "$enable_babel" != "no"; then ENABLE_BABEL_TRUE= ENABLE_BABEL_FALSE='#' else ENABLE_BABEL_TRUE='#' ENABLE_BABEL_FALSE= fi if test "$enable_strict_z" = "yes"; then ENABLE_STRICT_Z_TRUE= ENABLE_STRICT_Z_FALSE='#' else ENABLE_STRICT_Z_TRUE='#' ENABLE_STRICT_Z_FALSE= fi if test "$enable_segfault-on-error" = "yes"; then ENABLE_SEGFAULT_ON_ERROR_TRUE= ENABLE_SEGFAULT_ON_ERROR_FALSE='#' else ENABLE_SEGFAULT_ON_ERROR_TRUE='#' ENABLE_SEGFAULT_ON_ERROR_FALSE= fi if test "$enable_filelist" != "no"; then ENABLE_FILELIST_TRUE= ENABLE_FILELIST_FALSE='#' else ENABLE_FILELIST_TRUE='#' ENABLE_FILELIST_FALSE= fi if test "$enable_blockbuffer" != "no"; then ENABLE_BLOCKBUFFER_TRUE= ENABLE_BLOCKBUFFER_FALSE='#' else ENABLE_BLOCKBUFFER_TRUE='#' ENABLE_BLOCKBUFFER_FALSE= fi if test "$enable_command_history" != "no"; then ENABLE_COMMAND_HISTORY_TRUE= ENABLE_COMMAND_HISTORY_FALSE='#' else ENABLE_COMMAND_HISTORY_TRUE='#' ENABLE_COMMAND_HISTORY_FALSE= fi if test "$enable_output_history" != "no"; then ENABLE_OUTPUT_HISTORY_TRUE= ENABLE_OUTPUT_HISTORY_FALSE='#' else ENABLE_OUTPUT_HISTORY_TRUE='#' ENABLE_OUTPUT_HISTORY_FALSE= fi if test "$enable_config_files" != "no"; then ENABLE_CONFIG_FILES_TRUE= ENABLE_CONFIG_FILES_FALSE='#' else ENABLE_CONFIG_FILES_TRUE='#' ENABLE_CONFIG_FILES_FALSE= fi if test "$enable_prefix_commands" != "no"; then ENABLE_PREFIX_COMMANDS_TRUE= ENABLE_PREFIX_COMMANDS_FALSE='#' else ENABLE_PREFIX_COMMANDS_TRUE='#' ENABLE_PREFIX_COMMANDS_FALSE= fi if test "$enable_debugger" = "yes"; then ENABLE_DEBUGGER_TRUE= ENABLE_DEBUGGER_FALSE='#' else ENABLE_DEBUGGER_TRUE='#' ENABLE_DEBUGGER_FALSE= fi if test "x$fizmo_dist_version" != "x"; then FIZMO_DIST_VERSION_TRUE= FIZMO_DIST_VERSION_FALSE='#' else FIZMO_DIST_VERSION_TRUE='#' FIZMO_DIST_VERSION_FALSE= fi if test "$enable_x11" != "no"; then ENABLE_X11_TRUE= ENABLE_X11_FALSE='#' else ENABLE_X11_TRUE='#' ENABLE_X11_FALSE= fi if test "$enable_jpeg" != "no"; then ENABLE_JPEG_TRUE= ENABLE_JPEG_FALSE='#' else ENABLE_JPEG_TRUE='#' ENABLE_JPEG_FALSE= fi if test "$enable_png" != "no"; then ENABLE_PNG_TRUE= ENABLE_PNG_FALSE='#' else ENABLE_PNG_TRUE='#' ENABLE_PNG_FALSE= fi if test "$enable_x11" != "no"; then ENABLE_X11_IMAGES_TRUE= ENABLE_X11_IMAGES_FALSE='#' else ENABLE_X11_IMAGES_TRUE='#' ENABLE_X11_IMAGES_FALSE= fi if test "$enable_sdl" != "no"; then ENABLE_SDL_TRUE= ENABLE_SDL_FALSE='#' else ENABLE_SDL_TRUE='#' ENABLE_SDL_FALSE= fi if test "$enable_filelist" != "no"; then ENABLE_FILELIST_TRUE= ENABLE_FILELIST_FALSE='#' else ENABLE_FILELIST_TRUE='#' ENABLE_FILELIST_FALSE= fi if test "$enable_config_files" != "no"; then ENABLE_CONFIG_FILES_TRUE= ENABLE_CONFIG_FILES_FALSE='#' else ENABLE_CONFIG_FILES_TRUE='#' ENABLE_CONFIG_FILES_FALSE= fi if test "$enable_readchar_via_termios" != "no"; then ENABLE_READCHAR_VIA_TERMIOS_TRUE= ENABLE_READCHAR_VIA_TERMIOS_FALSE='#' else ENABLE_READCHAR_VIA_TERMIOS_TRUE='#' ENABLE_READCHAR_VIA_TERMIOS_FALSE= fi if test "$enable_aiff" != "no"; then ENABLE_AIFF_TRUE= ENABLE_AIFF_FALSE='#' else ENABLE_AIFF_TRUE='#' ENABLE_AIFF_FALSE= fi # Setup flags for fizmo-internal libs. This will allow us to build the # project after only one configuration iteration. build_prefix=`pwd`/build build_prefix_cflags=$build_prefix/include/fizmo build_prefix_libs=$build_prefix/lib/fizmo DEV_BUILD_PREFIX=$build_prefix FIZMO_DIST_VERSION=0.7.10 # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. #libfizmo_CFLAGS="-I$build_prefix_cflags $xml2_CFLAGS $m_CFLAGS" #libfizmo_LIBS="-L$build_prefix_libs -lfizmo $xml2_LIBS $m_LIBS" # #AC_SUBST([libfizmo_CFLAGS], $libfizmo_CFLAGS) #AC_SUBST([libfizmo_LIBS], $libfizmo_LIBS) libfizmo_CFLAGS="-I$build_prefix_cflags $xml2_CFLAGS $m_CFLAGS" libfizmo_LIBS="-L$build_prefix_libs -lfizmo $xml2_LIBS $m_LIBS" # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. libcellif_CFLAGS="-I$build_prefix_cflags" libcellif_LIBS="-L$build_prefix_libs -lcellif" # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. libdrilbo_CFLAGS="-I$build_prefix_cflags $x11_CFLAGS $jpeg_CFLAGS $libdrilbo_nonpkg_cflags $png_CFLAGS" libdrilbo_LIBS="-L$build_prefix_libs -ldrilbo -lpthread $x11_LIBS $jpeg_LIBS $libdrilbo_nonpkg_libs $png_LIBS" # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. LIBNCURSESW_NONPKG_CFLAGS="$libncursesw_nonpkg_cflags" LIBNCURSESW_NONPKG_LIBS="$libncursesw_nonpkg_libs" if test "x$enable_glktermw" == "xyes"; then : # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. LIBGLKIF_NONPKG_CFLAGS="$libglkif_nonpkg_cflags" LIBGLKIF_NONPKG_LIBS="$libglkif_nonpkg_libs" libglkif_CFLAGS="-I$build_prefix_cflags $libglkif_nonpkg_cflags" libglkif_LIBS="-L$build_prefix_libs -lglkif $libglkif_nonpkg_libs" # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. # (This file is intentionally empty) fi if test "$enable_sdl" != "no"; then : # This is included from fizmo-dist and not required by libfizmo's own # configuration. It nevertheless needs to be maintained so fizmo-dist # will still work. # # The $build_prefix, $build_prefix_cflags and $build_prefix_libs are # pre-defined by fizmo-dist. # Changes in this file have to be mirrored in the corresponding frontend # "config-subst-libsndifsdl2.m4" files. SOUND_INTERFACE_NAME=libsndifsdl2 SOUND_INTERFACE_STRUCT_NAME=sound_interface_sdl2 SOUND_INTERFACE_CONFIGNAME=SOUNDSDL2 SOUND_INTERFACE_INCLUDE_FILE=sound_sdl2/sound_sdl2.h fi # Define optional build and installation targets if required by the # current flags if test "x$enable_glktermw" == "xyes"; then : optional_fizmo_builds=fizmo-glktermw optional_fizmo_installs=install-fizmo-glktermw optional_fizmo_cleans=clean-fizmo-glktermw optional_fizmo_dstcleans=distclean-fizmo-glktermw fi if test "$enable_sdl" != "no"; then : optional_sound_build=libsndifsdl2 optional_sound_install=install-libsndifsdl2 optional_sound_install_data_local=install-data-local-libsndifsdl2 optional_fizmo_cleans="$optional_fizmo_cleans clean-libsndifsdl2" optional_fizmo_distcleans="$optional_fizmo_distcleans distclean-libsndifsdl2" fi # Explicitely set cflags and libs for libsndifsdl2 for use by frontends since # we cannot use pkg-config for this. libsndifsdl2_CFLAGS="-I$build_prefix_cflags $sdl2_CFLAGS $sndfile_CFLAGS" libsndifsdl2_LIBS="-L$build_prefix_libs -lsndifsdl2 $sdl2_LIBS $sndfile_LIBS" OPTIONAL_SOUND_BUILD=$optional_sound_build OPTIONAL_SOUND_INSTALL=$optional_sound_install OPTIONAL_SOUND_INSTALL_DATA_LOCAL=$optional_sound_install_data_local OPTIONAL_FIZMO_BUILDS=$optional_fizmo_builds OPTIONAL_FIZMO_INSTALLS=$optional_fizmo_installs OPTIONAL_FIZMO_CLEANS=$optional_fizmo_cleans OPTIONAL_FIZMO_DISTCLEANS=$optional_fizmo_distcleans # Create Makefiles ac_config_files="$ac_config_files Makefile libfizmo/Makefile libfizmo/src/tools/Makefile libfizmo/src/interpreter/Makefile libcellif/Makefile libcellif/src/cell_interface/Makefile libdrilbo/Makefile libdrilbo/src/drilbo/Makefile fizmo-console/Makefile fizmo-console/src/fizmo-console/Makefile fizmo-ncursesw/Makefile fizmo-ncursesw/src/fizmo-ncursesw/Makefile" if test "x$enable_glktermw" == "xyes"; then : ac_config_files="$ac_config_files libglkif/Makefile libglkif/src/glk_interface/Makefile fizmo-glktermw/Makefile fizmo-glktermw/src/fizmo-glktermw/Makefile" fi if test "$enable_sdl" != "no"; then : ac_config_files="$ac_config_files libsndifsdl2/Makefile libsndifsdl2/src/sound_sdl2/Makefile" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; 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 LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } 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 if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${ENABLE_TRACING_TRUE}" && test -z "${ENABLE_TRACING_FALSE}"; then as_fn_error $? "conditional \"ENABLE_TRACING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SDL_TRUE}" && test -z "${ENABLE_SDL_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SDL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_BABEL_TRUE}" && test -z "${ENABLE_BABEL_FALSE}"; then as_fn_error $? "conditional \"ENABLE_BABEL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_STRICT_Z_TRUE}" && test -z "${ENABLE_STRICT_Z_FALSE}"; then as_fn_error $? "conditional \"ENABLE_STRICT_Z\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SEGFAULT_ON_ERROR_TRUE}" && test -z "${ENABLE_SEGFAULT_ON_ERROR_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SEGFAULT_ON_ERROR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_FILELIST_TRUE}" && test -z "${ENABLE_FILELIST_FALSE}"; then as_fn_error $? "conditional \"ENABLE_FILELIST\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_BLOCKBUFFER_TRUE}" && test -z "${ENABLE_BLOCKBUFFER_FALSE}"; then as_fn_error $? "conditional \"ENABLE_BLOCKBUFFER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_COMMAND_HISTORY_TRUE}" && test -z "${ENABLE_COMMAND_HISTORY_FALSE}"; then as_fn_error $? "conditional \"ENABLE_COMMAND_HISTORY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_OUTPUT_HISTORY_TRUE}" && test -z "${ENABLE_OUTPUT_HISTORY_FALSE}"; then as_fn_error $? "conditional \"ENABLE_OUTPUT_HISTORY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_CONFIG_FILES_TRUE}" && test -z "${ENABLE_CONFIG_FILES_FALSE}"; then as_fn_error $? "conditional \"ENABLE_CONFIG_FILES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PREFIX_COMMANDS_TRUE}" && test -z "${ENABLE_PREFIX_COMMANDS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PREFIX_COMMANDS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_DEBUGGER_TRUE}" && test -z "${ENABLE_DEBUGGER_FALSE}"; then as_fn_error $? "conditional \"ENABLE_DEBUGGER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FIZMO_DIST_VERSION_TRUE}" && test -z "${FIZMO_DIST_VERSION_FALSE}"; then as_fn_error $? "conditional \"FIZMO_DIST_VERSION\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_X11_TRUE}" && test -z "${ENABLE_X11_FALSE}"; then as_fn_error $? "conditional \"ENABLE_X11\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_JPEG_TRUE}" && test -z "${ENABLE_JPEG_FALSE}"; then as_fn_error $? "conditional \"ENABLE_JPEG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_PNG_TRUE}" && test -z "${ENABLE_PNG_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PNG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_X11_IMAGES_TRUE}" && test -z "${ENABLE_X11_IMAGES_FALSE}"; then as_fn_error $? "conditional \"ENABLE_X11_IMAGES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SDL_TRUE}" && test -z "${ENABLE_SDL_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SDL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_FILELIST_TRUE}" && test -z "${ENABLE_FILELIST_FALSE}"; then as_fn_error $? "conditional \"ENABLE_FILELIST\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_CONFIG_FILES_TRUE}" && test -z "${ENABLE_CONFIG_FILES_FALSE}"; then as_fn_error $? "conditional \"ENABLE_CONFIG_FILES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_READCHAR_VIA_TERMIOS_TRUE}" && test -z "${ENABLE_READCHAR_VIA_TERMIOS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_READCHAR_VIA_TERMIOS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_AIFF_TRUE}" && test -z "${ENABLE_AIFF_FALSE}"; then as_fn_error $? "conditional \"ENABLE_AIFF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in @%:@( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? 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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@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 @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # 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 fizmo $as_me 0.7.10, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ fizmo config.status 0.7.10 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "libfizmo/Makefile") CONFIG_FILES="$CONFIG_FILES libfizmo/Makefile" ;; "libfizmo/src/tools/Makefile") CONFIG_FILES="$CONFIG_FILES libfizmo/src/tools/Makefile" ;; "libfizmo/src/interpreter/Makefile") CONFIG_FILES="$CONFIG_FILES libfizmo/src/interpreter/Makefile" ;; "libcellif/Makefile") CONFIG_FILES="$CONFIG_FILES libcellif/Makefile" ;; "libcellif/src/cell_interface/Makefile") CONFIG_FILES="$CONFIG_FILES libcellif/src/cell_interface/Makefile" ;; "libdrilbo/Makefile") CONFIG_FILES="$CONFIG_FILES libdrilbo/Makefile" ;; "libdrilbo/src/drilbo/Makefile") CONFIG_FILES="$CONFIG_FILES libdrilbo/src/drilbo/Makefile" ;; "fizmo-console/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-console/Makefile" ;; "fizmo-console/src/fizmo-console/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-console/src/fizmo-console/Makefile" ;; "fizmo-ncursesw/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-ncursesw/Makefile" ;; "fizmo-ncursesw/src/fizmo-ncursesw/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-ncursesw/src/fizmo-ncursesw/Makefile" ;; "libglkif/Makefile") CONFIG_FILES="$CONFIG_FILES libglkif/Makefile" ;; "libglkif/src/glk_interface/Makefile") CONFIG_FILES="$CONFIG_FILES libglkif/src/glk_interface/Makefile" ;; "fizmo-glktermw/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-glktermw/Makefile" ;; "fizmo-glktermw/src/fizmo-glktermw/Makefile") CONFIG_FILES="$CONFIG_FILES fizmo-glktermw/src/fizmo-glktermw/Makefile" ;; "libsndifsdl2/Makefile") CONFIG_FILES="$CONFIG_FILES libsndifsdl2/Makefile" ;; "libsndifsdl2/src/sound_sdl2/Makefile") CONFIG_FILES="$CONFIG_FILES libsndifsdl2/src/sound_sdl2/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf 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"` # 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'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi fizmo-0.7.10/autom4te.cache/requests000644 000765 000024 00000036524 12606024550 020274 0ustar00chrenderstaff000000 000000 # This file was generated. # It contains the lists of macros which have been traced. # It can be safely removed. @request = ( bless( [ '0', 1, [ '/usr/local/Cellar/autoconf/2.69/share/autoconf' ], [ '/usr/local/Cellar/autoconf/2.69/share/autoconf/autoconf/autoconf.m4f', '-', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/internal/ac-config-macro-dirs.m4', '/usr/local/share/aclocal/libtool.m4', '/usr/local/share/aclocal/ltargz.m4', '/usr/local/share/aclocal/ltdl.m4', '/usr/local/share/aclocal/ltoptions.m4', '/usr/local/share/aclocal/ltsugar.m4', '/usr/local/share/aclocal/ltversion.m4', '/usr/local/share/aclocal/lt~obsolete.m4', '/usr/local/share/aclocal/pkg.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/amversion.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/ar-lib.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/auxdir.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/cond.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/depend.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/depout.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/init.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/install-sh.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/lead-dot.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/make.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/missing.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/options.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/prog-cc-c-o.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/runlog.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/sanity.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/silent.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/strip.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/substnot.m4', '/usr/local/Cellar/automake/1.15/share/aclocal-1.15/tar.m4', 'configure.ac' ], { 'PKG_NOARCH_INSTALLDIR' => 1, 'AC_LIBTOOL_LANG_RC_CONFIG' => 1, 'AC_LIBLTDL_CONVENIENCE' => 1, 'LT_SYS_MODULE_EXT' => 1, '_AM_DEPENDENCIES' => 1, 'AC_LIBTOOL_CXX' => 1, '_LT_PROG_LTMAIN' => 1, 'AC_LIBTOOL_POSTDEP_PREDEP' => 1, 'PKG_PROG_PKG_CONFIG' => 1, '_AM_SET_OPTIONS' => 1, 'LT_PATH_LD' => 1, 'AM_CONDITIONAL' => 1, '_PKG_SHORT_ERRORS_SUPPORTED' => 1, 'LT_AC_PROG_SED' => 1, 'AC_DISABLE_STATIC' => 1, 'AC_DISABLE_SHARED' => 1, 'AC_LIBTOOL_DLOPEN_SELF' => 1, 'AM_RUN_LOG' => 1, 'LT_PATH_NM' => 1, '_LT_WITH_SYSROOT' => 1, 'LT_PROG_GCJ' => 1, 'AC_LTDL_SHLIBPATH' => 1, 'm4_pattern_forbid' => 1, '_AM_SUBST_NOTMAKE' => 1, 'AC_DISABLE_FAST_INSTALL' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'LT_FUNC_DLSYM_USCORE' => 1, 'LTOBSOLETE_VERSION' => 1, '_LT_COMPILER_BOILERPLATE' => 1, 'AC_PROG_LD' => 1, 'LTDL_INSTALLABLE' => 1, '_LT_AC_LANG_C_CONFIG' => 1, '_LT_AC_PROG_CXXCPP' => 1, '_AC_PROG_LIBTOOL' => 1, 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1, '_LT_PREPARE_SED_QUOTE_VARS' => 1, 'AC_LIBTOOL_COMPILER_OPTION' => 1, '_LT_DLL_DEF_P' => 1, 'AC_LIBTOOL_FC' => 1, 'LTSUGAR_VERSION' => 1, 'AM_SET_LEADING_DOT' => 1, 'AM_PROG_LD' => 1, '_LT_AC_LANG_CXX_CONFIG' => 1, 'AM_DISABLE_SHARED' => 1, 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, '_LT_AC_LANG_GCJ_CONFIG' => 1, 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1, '_LT_AC_FILE_LTDLL_C' => 1, 'AC_LTDL_SHLIBEXT' => 1, '_m4_warn' => 1, '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'LT_SYS_DLOPEN_SELF' => 1, 'AC_LIBTOOL_PROG_LD_SHLIBS' => 1, 'PKG_CHECK_VAR' => 1, 'AC_PROG_EGREP' => 1, 'AM_PROG_CC_C_O' => 1, 'AC_LIBTOOL_GCJ' => 1, 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1, 'AC_LIBTOOL_PICMODE' => 1, 'AC_LIBTOOL_CONFIG' => 1, '_AM_MANGLE_OPTION' => 1, '_LT_PATH_TOOL_PREFIX' => 1, '_LT_AC_TAGCONFIG' => 1, 'AC_LTDL_DLLIB' => 1, 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1, 'LT_AC_PROG_EGREP' => 1, 'AC_LIBTOOL_PROG_CC_C_O' => 1, 'LTOPTIONS_VERSION' => 1, '_LT_AC_SYS_COMPILER' => 1, 'AC_LIBTOOL_LANG_C_CONFIG' => 1, 'LTVERSION_VERSION' => 1, 'AM_PROG_AR' => 1, 'AC_PATH_TOOL_PREFIX' => 1, 'AC_ENABLE_STATIC' => 1, '_LT_AC_LANG_CXX' => 1, '_LT_AC_LANG_F77_CONFIG' => 1, 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1, 'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1, 'LT_LANG' => 1, 'LT_SYS_SYMBOL_USCORE' => 1, 'AM_PROG_NM' => 1, 'AC_LIBTOOL_WIN32_DLL' => 1, 'AM_MISSING_PROG' => 1, 'LT_INIT' => 1, '_LT_AC_TAGVAR' => 1, '_LT_AC_SYS_LIBPATH_AIX' => 1, 'LT_SUPPORTED_TAG' => 1, 'AU_DEFUN' => 1, 'AC_WITH_LTDL' => 1, 'PKG_CHECK_EXISTS' => 1, 'AC_CHECK_LIBM' => 1, '_AM_PROG_CC_C_O' => 1, 'AC_LTDL_SYMBOL_USCORE' => 1, 'AC_LIB_LTDL' => 1, '_AC_AM_CONFIG_HEADER_HOOK' => 1, 'PKG_INSTALLDIR' => 1, '_LT_AC_LOCK' => 1, 'AC_CONFIG_MACRO_DIR' => 1, '_LT_AC_SHELL_INIT' => 1, 'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1, '_LT_AC_TRY_DLOPEN_SELF' => 1, 'LT_SYS_DLOPEN_DEPLIBS' => 1, 'LT_SYS_DLSEARCH_PATH' => 1, 'AC_LIBTOOL_SYS_LIB_STRIP' => 1, 'include' => 1, 'AM_ENABLE_SHARED' => 1, '_LT_PROG_FC' => 1, '_LT_PROG_F77' => 1, 'AM_DEP_TRACK' => 1, 'AM_DISABLE_STATIC' => 1, 'LT_LIB_DLLOAD' => 1, 'AM_MISSING_HAS_RUN' => 1, 'AC_ENABLE_FAST_INSTALL' => 1, 'AC_LIBTOOL_LANG_F77_CONFIG' => 1, '_LT_COMPILER_OPTION' => 1, 'AM_INIT_AUTOMAKE' => 1, 'LT_SYS_MODULE_PATH' => 1, 'LT_WITH_LTDL' => 1, 'AC_LIBTOOL_SETUP' => 1, 'AC_PROG_LD_GNU' => 1, '_LT_LINKER_BOILERPLATE' => 1, 'm4_include' => 1, 'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1, 'AM_SILENT_RULES' => 1, '_LT_AC_LANG_RC_CONFIG' => 1, 'PKG_CHECK_MODULES' => 1, '_LT_REQUIRED_DARWIN_CHECKS' => 1, 'LT_PROG_RC' => 1, 'AC_LTDL_OBJDIR' => 1, 'AC_LTDL_PREOPEN' => 1, 'LT_OUTPUT' => 1, 'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1, '_LT_AC_LANG_F77' => 1, '_LTDL_SETUP' => 1, 'AC_DEPLIBS_CHECK_METHOD' => 1, 'AC_LIBLTDL_INSTALLABLE' => 1, 'AC_PROG_LIBTOOL' => 1, 'AC_PROG_NM' => 1, 'AC_LTDL_DLSYM_USCORE' => 1, '_AM_AUTOCONF_VERSION' => 1, 'AM_PROG_INSTALL_STRIP' => 1, 'AC_LIBTOOL_PROG_COMPILER_PIC' => 1, '_LT_AC_LANG_GCJ' => 1, '_LT_LIBOBJ' => 1, 'AC_PROG_LD_RELOAD_FLAG' => 1, 'AC_LTDL_SYSSEARCHPATH' => 1, 'AM_PROG_LIBTOOL' => 1, '_AM_SET_OPTION' => 1, 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'LT_LIB_M' => 1, 'AC_LIBTOOL_F77' => 1, 'AC_DEFUN' => 1, 'AM_MAKE_INCLUDE' => 1, '_AM_PROG_TAR' => 1, 'AC_PATH_MAGIC' => 1, '_AM_CONFIG_MACRO_DIRS' => 1, 'AM_SANITY_CHECK' => 1, '_LT_PROG_CXX' => 1, 'AM_PROG_INSTALL_SH' => 1, 'AC_LIBTOOL_OBJDIR' => 1, 'm4_pattern_allow' => 1, 'LT_AC_PROG_RC' => 1, 'LT_AC_PROG_GCJ' => 1, 'AC_LIBTOOL_LINKER_OPTION' => 1, 'AC_ENABLE_SHARED' => 1, 'AC_LTDL_ENABLE_INSTALL' => 1, 'AM_ENABLE_STATIC' => 1, 'AM_AUX_DIR_EXPAND' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'LTDL_INIT' => 1, 'AC_LIBTOOL_RC' => 1, '_LT_CC_BASENAME' => 1, 'LT_CMD_MAX_LEN' => 1, 'AM_SET_DEPDIR' => 1, '_LT_LINKER_OPTION' => 1, '_LT_AC_PROG_ECHO_BACKSLASH' => 1, '_LT_PROG_ECHO_BACKSLASH' => 1, '_LT_AC_CHECK_DLFCN' => 1, 'AC_DEFUN_ONCE' => 1, 'LT_PROG_GO' => 1, 'LT_FUNC_ARGZ' => 1, 'AC_LIBTOOL_LANG_CXX_CONFIG' => 1, 'AC_LIBTOOL_DLOPEN' => 1, '_AM_IF_OPTION' => 1, 'LTDL_CONVENIENCE' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AM_SUBST_NOTMAKE' => 1 } ], 'Autom4te::Request' ), bless( [ '1', 1, [ '/usr/local/Cellar/autoconf/2.69/share/autoconf' ], [ '/usr/local/Cellar/autoconf/2.69/share/autoconf/autoconf/autoconf.m4f', 'aclocal.m4', 'configure.ac' ], { 'AM_PROG_MOC' => 1, 'LT_INIT' => 1, 'AM_SILENT_RULES' => 1, 'm4_include' => 1, 'AH_OUTPUT' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, 'AC_CONFIG_AUX_DIR' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AC_FC_FREEFORM' => 1, '_AM_COND_ENDIF' => 1, 'AC_CONFIG_LINKS' => 1, 'AC_REQUIRE_AUX_FILE' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AC_SUBST' => 1, 'AM_NLS' => 1, 'AC_CONFIG_LIBOBJ_DIR' => 1, 'AC_PROG_LIBTOOL' => 1, 'AM_MAKEFILE_INCLUDE' => 1, 'AC_CANONICAL_SYSTEM' => 1, 'AC_FC_PP_DEFINE' => 1, 'AC_CONFIG_HEADERS' => 1, '_m4_warn' => 1, 'AM_PROG_MKDIR_P' => 1, 'AC_FC_PP_SRCEXT' => 1, 'm4_sinclude' => 1, 'AM_PROG_F77_C_O' => 1, 'AM_ENABLE_MULTILIB' => 1, '_AM_COND_IF' => 1, 'AC_LIBSOURCE' => 1, 'LT_SUPPORTED_TAG' => 1, 'AC_CANONICAL_TARGET' => 1, 'AM_CONDITIONAL' => 1, '_AM_MAKEFILE_INCLUDE' => 1, 'AM_PROG_FC_C_O' => 1, 'AM_PROG_CXX_C_O' => 1, 'AM_POT_TOOLS' => 1, 'AC_FC_SRCEXT' => 1, '_AM_COND_ELSE' => 1, '_LT_AC_TAGCONFIG' => 1, 'AC_CANONICAL_BUILD' => 1, 'AC_CONFIG_FILES' => 1, 'AM_PROG_CC_C_O' => 1, 'AC_SUBST_TRACE' => 1, 'AM_MAINTAINER_MODE' => 1, 'AM_EXTRA_RECURSIVE_TARGETS' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'LT_CONFIG_LTDL_DIR' => 1, '_AM_SUBST_NOTMAKE' => 1, 'm4_pattern_forbid' => 1, 'm4_pattern_allow' => 1, 'AC_CANONICAL_HOST' => 1, 'include' => 1, 'AM_PROG_AR' => 1, 'sinclude' => 1, 'AM_GNU_GETTEXT' => 1, 'AM_XGETTEXT_OPTION' => 1, 'AM_PATH_GUILE' => 1, 'AC_INIT' => 1 } ], 'Autom4te::Request' ) ); fizmo-0.7.10/autom4te.cache/traces.0000644 000765 000024 00000434664 12606024547 020055 0ustar00chrenderstaff000000 000000 m4trace:/usr/local/share/aclocal/libtool.m4:96: -1- AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl 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 _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) 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]) ]) m4trace:/usr/local/share/aclocal/libtool.m4:99: -1- AU_DEFUN([AC_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:99: -1- AC_DEFUN([AC_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:100: -1- AU_DEFUN([AM_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:100: -1- AC_DEFUN([AM_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:704: -1- AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false 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) 2011 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. lt_cl_success=: test yes = "$silent" && 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) ]) m4trace:/usr/local/share/aclocal/libtool.m4:812: -1- AC_DEFUN([LT_SUPPORTED_TAG], []) m4trace:/usr/local/share/aclocal/libtool.m4:836: -1- AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [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 ]) m4trace:/usr/local/share/aclocal/libtool.m4:915: -1- AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) m4trace:/usr/local/share/aclocal/libtool.m4:915: -1- AC_DEFUN([AC_LIBTOOL_CXX], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_CXX' is obsolete. You should run autoupdate.])dnl LT_LANG(C++)]) m4trace:/usr/local/share/aclocal/libtool.m4:916: -1- AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) m4trace:/usr/local/share/aclocal/libtool.m4:916: -1- AC_DEFUN([AC_LIBTOOL_F77], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_F77' is obsolete. You should run autoupdate.])dnl LT_LANG(Fortran 77)]) m4trace:/usr/local/share/aclocal/libtool.m4:917: -1- AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) m4trace:/usr/local/share/aclocal/libtool.m4:917: -1- AC_DEFUN([AC_LIBTOOL_FC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_FC' is obsolete. You should run autoupdate.])dnl LT_LANG(Fortran)]) m4trace:/usr/local/share/aclocal/libtool.m4:918: -1- AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) m4trace:/usr/local/share/aclocal/libtool.m4:918: -1- AC_DEFUN([AC_LIBTOOL_GCJ], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_GCJ' is obsolete. You should run autoupdate.])dnl LT_LANG(Java)]) m4trace:/usr/local/share/aclocal/libtool.m4:919: -1- AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) m4trace:/usr/local/share/aclocal/libtool.m4:919: -1- AC_DEFUN([AC_LIBTOOL_RC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_RC' is obsolete. You should run autoupdate.])dnl LT_LANG(Windows Resource)]) m4trace:/usr/local/share/aclocal/libtool.m4:1277: -1- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) m4trace:/usr/local/share/aclocal/libtool.m4:1617: -1- 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" ## exclude from sc_useless_quotes_in_assignment # 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:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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 yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ]) m4trace:/usr/local/share/aclocal/libtool.m4:1620: -1- AU_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:1620: -1- AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_COMPILER_OPTION' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:1661: -1- 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 "$_lt_linker_boilerplate" | $SED '/^$/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 yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ]) m4trace:/usr/local/share/aclocal/libtool.m4:1664: -1- AU_DEFUN([AC_LIBTOOL_LINKER_OPTION], [m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:1664: -1- AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_LINKER_OPTION' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:1807: -1- 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; ;; mint*) # On MiNT this can take a long time and run out of memory. 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; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # 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 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; 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" && \ test undefined != "$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`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 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?]) ]) m4trace:/usr/local/share/aclocal/libtool.m4:1810: -1- AU_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:1810: -1- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_SYS_MAX_CMD_LEN' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:2043: -1- AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; 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 ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) 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 no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && 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 yes = "$lt_cv_dlopen_self"; 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]) ]) m4trace:/usr/local/share/aclocal/libtool.m4:2046: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:2046: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN_SELF' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:3214: -1- 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 ]) m4trace:/usr/local/share/aclocal/libtool.m4:3217: -1- AU_DEFUN([AC_PATH_TOOL_PREFIX], [m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:3217: -1- AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_DIAGNOSE([obsolete], [The macro `AC_PATH_TOOL_PREFIX' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:3326: -1- 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 m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; 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 yes = "$with_gnu_ld"; 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 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) 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 no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi 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:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $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:$LINENO: 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*]) ]) m4trace:/usr/local/share/aclocal/libtool.m4:3754: -1- AU_DEFUN([AM_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:3754: -1- AC_DEFUN([AM_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_NM' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:3755: -1- AU_DEFUN([AC_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:3755: -1- AC_DEFUN([AC_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_NM' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:3834: -1- AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ]) m4trace:/usr/local/share/aclocal/libtool.m4:3856: -1- AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-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]) ]) m4trace:/usr/local/share/aclocal/libtool.m4:3859: -1- AU_DEFUN([AC_CHECK_LIBM], [m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:3859: -1- AC_DEFUN([AC_CHECK_LIBM], [AC_DIAGNOSE([obsolete], [The macro `AC_CHECK_LIBM' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:8128: -1- 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 set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) m4trace:/usr/local/share/aclocal/libtool.m4:8131: -1- AU_DEFUN([LT_AC_PROG_GCJ], [m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:8131: -1- AC_DEFUN([LT_AC_PROG_GCJ], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_GCJ' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:8140: -1- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) m4trace:/usr/local/share/aclocal/libtool.m4:8147: -1- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) m4trace:/usr/local/share/aclocal/libtool.m4:8150: -1- AU_DEFUN([LT_AC_PROG_RC], [m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:8150: -1- AC_DEFUN([LT_AC_PROG_RC], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_RC' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:8270: -1- AU_DEFUN([LT_AC_PROG_SED], [m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) m4trace:/usr/local/share/aclocal/libtool.m4:8270: -1- AC_DEFUN([LT_AC_PROG_SED], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_SED' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) m4trace:/usr/local/share/aclocal/ltargz.m4:74: -1- AC_DEFUN([LT_FUNC_ARGZ], [ AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT]) AC_CHECK_TYPES([error_t], [], [AC_DEFINE([error_t], [int], [Define to a type to use for 'error_t' if it is not otherwise available.]) AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h does not typedef error_t.])], [#if defined(HAVE_ARGZ_H) # include #endif]) LT_ARGZ_H= AC_CHECK_FUNCS([argz_add argz_append argz_count argz_create_sep argz_insert \ argz_next argz_stringify], [], [LT_ARGZ_H=lt__argz.h; AC_LIBOBJ([lt__argz])]) dnl if have system argz functions, allow forced use of dnl libltdl-supplied implementation (and default to do so dnl on "known bad" systems). Could use a runtime check, but dnl (a) detecting malloc issues is notoriously unreliable dnl (b) only known system that declares argz functions, dnl provides them, yet they are broken, is cygwin dnl releases prior to 16-Mar-2007 (1.5.24 and earlier) dnl So, it's more straightforward simply to special case dnl this for known bad systems. AS_IF([test -z "$LT_ARGZ_H"], [AC_CACHE_CHECK( [if argz actually works], [lt_cv_sys_argz_works], [[case $host_os in #( *cygwin*) lt_cv_sys_argz_works=no if test no != "$cross_compiling"; then lt_cv_sys_argz_works="guessing no" else lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/' save_IFS=$IFS IFS=-. set x `uname -r | sed -e "$lt_sed_extract_leading_digits"` IFS=$save_IFS lt_os_major=${2-0} lt_os_minor=${3-0} lt_os_micro=${4-0} if test 1 -lt "$lt_os_major" \ || { test 1 -eq "$lt_os_major" \ && { test 5 -lt "$lt_os_minor" \ || { test 5 -eq "$lt_os_minor" \ && test 24 -lt "$lt_os_micro"; }; }; }; then lt_cv_sys_argz_works=yes fi fi ;; #( *) lt_cv_sys_argz_works=yes ;; esac]]) AS_IF([test yes = "$lt_cv_sys_argz_works"], [AC_DEFINE([HAVE_WORKING_ARGZ], 1, [This value is set to 1 to indicate that the system argz facility works])], [LT_ARGZ_H=lt__argz.h AC_LIBOBJ([lt__argz])])]) AC_SUBST([LT_ARGZ_H]) ]) m4trace:/usr/local/share/aclocal/ltdl.m4:19: -1- AC_DEFUN([LT_CONFIG_LTDL_DIR], [AC_BEFORE([$0], [LTDL_INIT]) _$0($*) ]) m4trace:/usr/local/share/aclocal/ltdl.m4:77: -1- AC_DEFUN([LTDL_CONVENIENCE], [AC_BEFORE([$0], [LTDL_INIT])dnl dnl Although the argument is deprecated and no longer documented, dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one dnl here make sure it is the same as any other declaration of libltdl's dnl location! This also ensures lt_ltdl_dir is set when configure.ac is dnl not yet using an explicit LT_CONFIG_LTDL_DIR. m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl _$0() ]) m4trace:/usr/local/share/aclocal/ltdl.m4:83: -1- AU_DEFUN([AC_LIBLTDL_CONVENIENCE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) _LTDL_CONVENIENCE]) m4trace:/usr/local/share/aclocal/ltdl.m4:83: -1- AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_CONVENIENCE' is obsolete. You should run autoupdate.])dnl _LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) _LTDL_CONVENIENCE]) m4trace:/usr/local/share/aclocal/ltdl.m4:133: -1- AC_DEFUN([LTDL_INSTALLABLE], [AC_BEFORE([$0], [LTDL_INIT])dnl dnl Although the argument is deprecated and no longer documented, dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one dnl here make sure it is the same as any other declaration of libltdl's dnl location! This also ensures lt_ltdl_dir is set when configure.ac is dnl not yet using an explicit LT_CONFIG_LTDL_DIR. m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl _$0() ]) m4trace:/usr/local/share/aclocal/ltdl.m4:139: -1- AU_DEFUN([AC_LIBLTDL_INSTALLABLE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) _LTDL_INSTALLABLE]) m4trace:/usr/local/share/aclocal/ltdl.m4:139: -1- AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_INSTALLABLE' is obsolete. You should run autoupdate.])dnl _LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) _LTDL_INSTALLABLE]) m4trace:/usr/local/share/aclocal/ltdl.m4:216: -1- AC_DEFUN([_LT_LIBOBJ], [ m4_pattern_allow([^_LT_LIBOBJS$]) _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext" ]) m4trace:/usr/local/share/aclocal/ltdl.m4:349: -1- AC_DEFUN([LTDL_INIT], [dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) dnl We need to keep our own list of libobjs separate from our parent project, dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while dnl we look for our own LIBOBJs. m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ])) m4_pushdef([AC_LIBSOURCES]) dnl If not otherwise defined, default to the 1.5.x compatible subproject mode: m4_if(_LTDL_MODE, [], [m4_define([_LTDL_MODE], m4_default([$2], [subproject])) m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])], [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])]) AC_ARG_WITH([included_ltdl], [AS_HELP_STRING([--with-included-ltdl], [use the GNU ltdl sources included here])]) if test yes != "$with_included_ltdl"; then # We are not being forced to use the included libltdl sources, so # decide whether there is a useful installed version we can use. AC_CHECK_HEADER([ltdl.h], [AC_CHECK_DECL([lt_dlinterface_register], [AC_CHECK_LIB([ltdl], [lt_dladvise_preload], [with_included_ltdl=no], [with_included_ltdl=yes])], [with_included_ltdl=yes], [AC_INCLUDES_DEFAULT #include ])], [with_included_ltdl=yes], [AC_INCLUDES_DEFAULT] ) fi dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE dnl was called yet, then for old times' sake, we assume libltdl is in an dnl eponymous directory: AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])]) AC_ARG_WITH([ltdl_include], [AS_HELP_STRING([--with-ltdl-include=DIR], [use the ltdl headers installed in DIR])]) if test -n "$with_ltdl_include"; then if test -f "$with_ltdl_include/ltdl.h"; then : else AC_MSG_ERROR([invalid ltdl include directory: '$with_ltdl_include']) fi else with_ltdl_include=no fi AC_ARG_WITH([ltdl_lib], [AS_HELP_STRING([--with-ltdl-lib=DIR], [use the libltdl.la installed in DIR])]) if test -n "$with_ltdl_lib"; then if test -f "$with_ltdl_lib/libltdl.la"; then : else AC_MSG_ERROR([invalid ltdl library directory: '$with_ltdl_lib']) fi else with_ltdl_lib=no fi case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in ,yes,no,no,) m4_case(m4_default(_LTDL_TYPE, [convenience]), [convenience], [_LTDL_CONVENIENCE], [installable], [_LTDL_INSTALLABLE], [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)]) ;; ,no,no,no,) # If the included ltdl is not to be used, then use the # preinstalled libltdl we found. AC_DEFINE([HAVE_LTDL], [1], [Define this if a modern libltdl is already installed]) LIBLTDL=-lltdl LTDLDEPS= LTDLINCL= ;; ,no*,no,*) AC_MSG_ERROR(['--with-ltdl-include' and '--with-ltdl-lib' options must be used together]) ;; *) with_included_ltdl=no LIBLTDL="-L$with_ltdl_lib -lltdl" LTDLDEPS= LTDLINCL=-I$with_ltdl_include ;; esac INCLTDL=$LTDLINCL # Report our decision... AC_MSG_CHECKING([where to find libltdl headers]) AC_MSG_RESULT([$LTDLINCL]) AC_MSG_CHECKING([where to find libltdl library]) AC_MSG_RESULT([$LIBLTDL]) _LTDL_SETUP dnl restore autoconf definition. m4_popdef([AC_LIBOBJ]) m4_popdef([AC_LIBSOURCES]) AC_CONFIG_COMMANDS_PRE([ _ltdl_libobjs= _ltdl_ltlibobjs= if test -n "$_LT_LIBOBJS"; then # Remove the extension. _lt_sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext" _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo" done fi AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs]) AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs]) ]) # Only expand once: m4_define([LTDL_INIT]) ]) m4trace:/usr/local/share/aclocal/ltdl.m4:352: -1- AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)]) m4trace:/usr/local/share/aclocal/ltdl.m4:352: -1- AC_DEFUN([AC_LIB_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIB_LTDL' is obsolete. You should run autoupdate.])dnl LTDL_INIT($@)]) m4trace:/usr/local/share/aclocal/ltdl.m4:353: -1- AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)]) m4trace:/usr/local/share/aclocal/ltdl.m4:353: -1- AC_DEFUN([AC_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_WITH_LTDL' is obsolete. You should run autoupdate.])dnl LTDL_INIT($@)]) m4trace:/usr/local/share/aclocal/ltdl.m4:354: -1- AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)]) m4trace:/usr/local/share/aclocal/ltdl.m4:354: -1- AC_DEFUN([LT_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `LT_WITH_LTDL' is obsolete. You should run autoupdate.])dnl LTDL_INIT($@)]) m4trace:/usr/local/share/aclocal/ltdl.m4:421: -1- AC_DEFUN([_LTDL_SETUP], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_SYS_MODULE_EXT])dnl AC_REQUIRE([LT_SYS_MODULE_PATH])dnl AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl AC_REQUIRE([LT_LIB_DLLOAD])dnl AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl AC_REQUIRE([LT_FUNC_ARGZ])dnl m4_require([_LT_CHECK_OBJDIR])dnl m4_require([_LT_HEADER_DLFCN])dnl m4_require([_LT_CHECK_DLPREOPEN])dnl m4_require([_LT_DECL_SED])dnl dnl Don't require this, or it will be expanded earlier than the code dnl that sets the variables it relies on: _LT_ENABLE_INSTALL dnl _LTDL_MODE specific code must be called at least once: _LTDL_MODE_DISPATCH # In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS # the user used. This is so that ltdl.h can pick up the parent projects # config.h file, The first file in AC_CONFIG_HEADERS must contain the # definitions required by ltdl.c. # FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility). AC_CONFIG_COMMANDS_PRE([dnl m4_pattern_allow([^LT_CONFIG_H$])dnl m4_ifset([AH_HEADER], [LT_CONFIG_H=AH_HEADER], [m4_ifset([AC_LIST_HEADERS], [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's|^[[ ]]*||;s|[[ :]].*$||'`], [])])]) AC_SUBST([LT_CONFIG_H]) AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h], [], [], [AC_INCLUDES_DEFAULT]) AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])]) AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])]) m4_pattern_allow([LT_LIBEXT])dnl AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension]) name= eval "lt_libprefix=\"$libname_spec\"" m4_pattern_allow([LT_LIBPREFIX])dnl AC_DEFINE_UNQUOTED([LT_LIBPREFIX],["$lt_libprefix"],[The archive prefix]) name=ltdl eval "LTDLOPEN=\"$libname_spec\"" AC_SUBST([LTDLOPEN]) ]) m4trace:/usr/local/share/aclocal/ltdl.m4:542: -1- AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_CACHE_CHECK([whether deplibs are loaded by dlopen], [lt_cv_sys_dlopen_deplibs], [# PORTME does your system automatically load deplibs for dlopen? # or its logical equivalent (e.g. shl_load for HP-UX < 11) # For now, we just catch OSes we know something about -- in the # future, we'll try test this programmatically. lt_cv_sys_dlopen_deplibs=unknown case $host_os in aix3*|aix4.1.*|aix4.2.*) # Unknown whether this is true for these versions of AIX, but # we want this 'case' here to explicitly catch those versions. lt_cv_sys_dlopen_deplibs=unknown ;; aix[[4-9]]*) lt_cv_sys_dlopen_deplibs=yes ;; amigaos*) case $host_cpu in powerpc) lt_cv_sys_dlopen_deplibs=no ;; esac ;; bitrig*) lt_cv_sys_dlopen_deplibs=yes ;; darwin*) # Assuming the user has installed a libdl from somewhere, this is true # If you are looking for one http://www.opendarwin.org/projects/dlcompat lt_cv_sys_dlopen_deplibs=yes ;; freebsd* | dragonfly*) lt_cv_sys_dlopen_deplibs=yes ;; gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu) # GNU and its variants, using gnu ld.so (Glibc) lt_cv_sys_dlopen_deplibs=yes ;; hpux10*|hpux11*) lt_cv_sys_dlopen_deplibs=yes ;; interix*) lt_cv_sys_dlopen_deplibs=yes ;; irix[[12345]]*|irix6.[[01]]*) # Catch all versions of IRIX before 6.2, and indicate that we don't # know how it worked for any of those versions. lt_cv_sys_dlopen_deplibs=unknown ;; irix*) # The case above catches anything before 6.2, and it's known that # at 6.2 and later dlopen does load deplibs. lt_cv_sys_dlopen_deplibs=yes ;; netbsd*) lt_cv_sys_dlopen_deplibs=yes ;; openbsd*) lt_cv_sys_dlopen_deplibs=yes ;; osf[[1234]]*) # dlopen did load deplibs (at least at 4.x), but until the 5.x series, # it did *not* use an RPATH in a shared library to find objects the # library depends on, so we explicitly say 'no'. lt_cv_sys_dlopen_deplibs=no ;; osf5.0|osf5.0a|osf5.1) # dlopen *does* load deplibs and with the right loader patch applied # it even uses RPATH in a shared library to search for shared objects # that the library depends on, but there's no easy way to know if that # patch is installed. Since this is the case, all we can really # say is unknown -- it depends on the patch being installed. If # it is, this changes to 'yes'. Without it, it would be 'no'. lt_cv_sys_dlopen_deplibs=unknown ;; osf*) # the two cases above should catch all versions of osf <= 5.1. Read # the comments above for what we know about them. # At > 5.1, deplibs are loaded *and* any RPATH in a shared library # is used to find them so we can finally say 'yes'. lt_cv_sys_dlopen_deplibs=yes ;; qnx*) lt_cv_sys_dlopen_deplibs=yes ;; solaris*) lt_cv_sys_dlopen_deplibs=yes ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) libltdl_cv_sys_dlopen_deplibs=yes ;; esac ]) if test yes != "$lt_cv_sys_dlopen_deplibs"; then AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1], [Define if the OS needs help to load dependent libraries for dlopen().]) fi ]) m4trace:/usr/local/share/aclocal/ltdl.m4:545: -1- AU_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) m4trace:/usr/local/share/aclocal/ltdl.m4:545: -1- AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYS_DLOPEN_DEPLIBS' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) m4trace:/usr/local/share/aclocal/ltdl.m4:577: -1- AC_DEFUN([LT_SYS_MODULE_EXT], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl AC_CACHE_CHECK([what extension is used for runtime loadable modules], [libltdl_cv_shlibext], [ module=yes eval libltdl_cv_shlibext=$shrext_cmds module=no eval libltdl_cv_shrext=$shrext_cmds ]) if test -n "$libltdl_cv_shlibext"; then m4_pattern_allow([LT_MODULE_EXT])dnl AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"], [Define to the extension used for runtime loadable modules, say, ".so".]) fi if test "$libltdl_cv_shrext" != "$libltdl_cv_shlibext"; then m4_pattern_allow([LT_SHARED_EXT])dnl AC_DEFINE_UNQUOTED([LT_SHARED_EXT], ["$libltdl_cv_shrext"], [Define to the shared library suffix, say, ".dylib".]) fi if test -n "$shared_archive_member_spec"; then m4_pattern_allow([LT_SHARED_LIB_MEMBER])dnl AC_DEFINE_UNQUOTED([LT_SHARED_LIB_MEMBER], ["($shared_archive_member_spec.o)"], [Define to the shared archive member specification, say "(shr.o)".]) fi ]) m4trace:/usr/local/share/aclocal/ltdl.m4:580: -1- AU_DEFUN([AC_LTDL_SHLIBEXT], [m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) m4trace:/usr/local/share/aclocal/ltdl.m4:580: -1- AC_DEFUN([AC_LTDL_SHLIBEXT], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBEXT' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) m4trace:/usr/local/share/aclocal/ltdl.m4:596: -1- AC_DEFUN([LT_SYS_MODULE_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl AC_CACHE_CHECK([what variable specifies run-time module search path], [lt_cv_module_path_var], [lt_cv_module_path_var=$shlibpath_var]) if test -n "$lt_cv_module_path_var"; then m4_pattern_allow([LT_MODULE_PATH_VAR])dnl AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"], [Define to the name of the environment variable that determines the run-time module search path.]) fi ]) m4trace:/usr/local/share/aclocal/ltdl.m4:599: -1- AU_DEFUN([AC_LTDL_SHLIBPATH], [m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) m4trace:/usr/local/share/aclocal/ltdl.m4:599: -1- AC_DEFUN([AC_LTDL_SHLIBPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBPATH' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) m4trace:/usr/local/share/aclocal/ltdl.m4:624: -1- AC_DEFUN([LT_SYS_DLSEARCH_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl AC_CACHE_CHECK([for the default library search path], [lt_cv_sys_dlsearch_path], [lt_cv_sys_dlsearch_path=$sys_lib_dlsearch_path_spec]) if test -n "$lt_cv_sys_dlsearch_path"; then sys_dlsearch_path= for dir in $lt_cv_sys_dlsearch_path; do if test -z "$sys_dlsearch_path"; then sys_dlsearch_path=$dir else sys_dlsearch_path=$sys_dlsearch_path$PATH_SEPARATOR$dir fi done m4_pattern_allow([LT_DLSEARCH_PATH])dnl AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"], [Define to the system default library search path.]) fi ]) m4trace:/usr/local/share/aclocal/ltdl.m4:627: -1- AU_DEFUN([AC_LTDL_SYSSEARCHPATH], [m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) m4trace:/usr/local/share/aclocal/ltdl.m4:627: -1- AC_DEFUN([AC_LTDL_SYSSEARCHPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYSSEARCHPATH' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) m4trace:/usr/local/share/aclocal/ltdl.m4:745: -1- AC_DEFUN([LT_LIB_DLLOAD], [m4_pattern_allow([^LT_DLLOADERS$]) LT_DLLOADERS= AC_SUBST([LT_DLLOADERS]) AC_LANG_PUSH([C]) lt_dlload_save_LIBS=$LIBS LIBADD_DLOPEN= AC_SEARCH_LIBS([dlopen], [dl], [AC_DEFINE([HAVE_LIBDL], [1], [Define if you have the libdl library or equivalent.]) if test "$ac_cv_search_dlopen" != "none required"; then LIBADD_DLOPEN=-ldl fi libltdl_cv_lib_dl_dlopen=yes LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H # include #endif ]], [[dlopen(0, 0);]])], [AC_DEFINE([HAVE_LIBDL], [1], [Define if you have the libdl library or equivalent.]) libltdl_cv_func_dlopen=yes LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], [AC_CHECK_LIB([svld], [dlopen], [AC_DEFINE([HAVE_LIBDL], [1], [Define if you have the libdl library or equivalent.]) LIBADD_DLOPEN=-lsvld libltdl_cv_func_dlopen=yes LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])]) if test yes = "$libltdl_cv_func_dlopen" || test yes = "$libltdl_cv_lib_dl_dlopen" then lt_save_LIBS=$LIBS LIBS="$LIBS $LIBADD_DLOPEN" AC_CHECK_FUNCS([dlerror]) LIBS=$lt_save_LIBS fi AC_SUBST([LIBADD_DLOPEN]) LIBADD_SHL_LOAD= AC_CHECK_FUNC([shl_load], [AC_DEFINE([HAVE_SHL_LOAD], [1], [Define if you have the shl_load function.]) LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"], [AC_CHECK_LIB([dld], [shl_load], [AC_DEFINE([HAVE_SHL_LOAD], [1], [Define if you have the shl_load function.]) LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la" LIBADD_SHL_LOAD=-ldld])]) AC_SUBST([LIBADD_SHL_LOAD]) case $host_os in darwin[[1567]].*) # We only want this for pre-Mac OS X 10.4. AC_CHECK_FUNC([_dyld_func_lookup], [AC_DEFINE([HAVE_DYLD], [1], [Define if you have the _dyld_func_lookup function.]) LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"]) ;; beos*) LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la" ;; cygwin* | mingw* | pw32*) AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include ]]) LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la" ;; esac AC_CHECK_LIB([dld], [dld_link], [AC_DEFINE([HAVE_DLD], [1], [Define if you have the GNU dld library.]) LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"]) AC_SUBST([LIBADD_DLD_LINK]) m4_pattern_allow([^LT_DLPREOPEN$]) LT_DLPREOPEN= if test -n "$LT_DLLOADERS" then for lt_loader in $LT_DLLOADERS; do LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader " done AC_DEFINE([HAVE_LIBDLLOADER], [1], [Define if libdlloader will be built on this platform]) fi AC_SUBST([LT_DLPREOPEN]) dnl This isn't used anymore, but set it for backwards compatibility LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD" AC_SUBST([LIBADD_DL]) LIBS=$lt_dlload_save_LIBS AC_LANG_POP ]) m4trace:/usr/local/share/aclocal/ltdl.m4:748: -1- AU_DEFUN([AC_LTDL_DLLIB], [m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) m4trace:/usr/local/share/aclocal/ltdl.m4:748: -1- AC_DEFUN([AC_LTDL_DLLIB], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLLIB' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) m4trace:/usr/local/share/aclocal/ltdl.m4:790: -1- AC_DEFUN([LT_SYS_SYMBOL_USCORE], [m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl AC_CACHE_CHECK([for _ prefix in compiled symbols], [lt_cv_sys_symbol_underscore], [lt_cv_sys_symbol_underscore=no cat > conftest.$ac_ext <<_LT_EOF void nm_test_func(){} int main(){nm_test_func;return 0;} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. ac_nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then # See whether the symbols have a leading underscore. if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then lt_cv_sys_symbol_underscore=yes else if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then : else echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD fi fi else echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.c >&AS_MESSAGE_LOG_FD fi rm -rf conftest* ]) sys_symbol_underscore=$lt_cv_sys_symbol_underscore AC_SUBST([sys_symbol_underscore]) ]) m4trace:/usr/local/share/aclocal/ltdl.m4:793: -1- AU_DEFUN([AC_LTDL_SYMBOL_USCORE], [m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) m4trace:/usr/local/share/aclocal/ltdl.m4:793: -1- AC_DEFUN([AC_LTDL_SYMBOL_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYMBOL_USCORE' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) m4trace:/usr/local/share/aclocal/ltdl.m4:904: -1- AC_DEFUN([LT_FUNC_DLSYM_USCORE], [AC_REQUIRE([_LT_COMPILER_PIC])dnl for lt_prog_compiler_wl AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl for lt_cv_sys_symbol_underscore AC_REQUIRE([LT_SYS_MODULE_EXT])dnl for libltdl_cv_shlibext if test yes = "$lt_cv_sys_symbol_underscore"; then if test yes = "$libltdl_cv_func_dlopen" || test yes = "$libltdl_cv_lib_dl_dlopen"; then AC_CACHE_CHECK([whether we have to add an underscore for dlsym], [libltdl_cv_need_uscore], [libltdl_cv_need_uscore=unknown dlsym_uscore_save_LIBS=$LIBS LIBS="$LIBS $LIBADD_DLOPEN" libname=conftmod # stay within 8.3 filename limits! cat >$libname.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; }] _LT_EOF # ltfn_module_cmds module_cmds # Execute tilde-delimited MODULE_CMDS with environment primed for # $module_cmds or $archive_cmds type content. ltfn_module_cmds () {( # subshell avoids polluting parent global environment module_cmds_save_ifs=$IFS; IFS='~' for cmd in @S|@1; do IFS=$module_cmds_save_ifs libobjs=$libname.$ac_objext; lib=$libname$libltdl_cv_shlibext rpath=/not-exists; soname=$libname$libltdl_cv_shlibext; output_objdir=. major=; versuffix=; verstring=; deplibs= ECHO=echo; wl=$lt_prog_compiler_wl; allow_undefined_flag= eval $cmd done IFS=$module_cmds_save_ifs )} # Compile a loadable module using libtool macro expansion results. $CC $pic_flag -c $libname.$ac_ext ltfn_module_cmds "${module_cmds:-$archive_cmds}" # Try to fetch fnord with dlsym(). libltdl_dlunknown=0; libltdl_dlnouscore=1; libltdl_dluscore=2 cat >conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifndef RTLD_GLOBAL # ifdef DL_GLOBAL # define RTLD_GLOBAL DL_GLOBAL # else # define RTLD_GLOBAL 0 # endif #endif #ifndef RTLD_NOW # ifdef DL_NOW # define RTLD_NOW DL_NOW # else # define RTLD_NOW 0 # endif #endif int main () { void *handle = dlopen ("`pwd`/$libname$libltdl_cv_shlibext", RTLD_GLOBAL|RTLD_NOW); int status = $libltdl_dlunknown; if (handle) { if (dlsym (handle, "fnord")) status = $libltdl_dlnouscore; else { if (dlsym (handle, "_fnord")) status = $libltdl_dluscore; else puts (dlerror ()); } dlclose (handle); } 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 libltdl_status=$? case x$libltdl_status in x$libltdl_dlnouscore) libltdl_cv_need_uscore=no ;; x$libltdl_dluscore) libltdl_cv_need_uscore=yes ;; x*) libltdl_cv_need_uscore=unknown ;; esac fi rm -rf conftest* $libname* LIBS=$dlsym_uscore_save_LIBS ]) fi fi if test yes = "$libltdl_cv_need_uscore"; then AC_DEFINE([NEED_USCORE], [1], [Define if dlsym() requires a leading underscore in symbol names.]) fi ]) m4trace:/usr/local/share/aclocal/ltdl.m4:907: -1- AU_DEFUN([AC_LTDL_DLSYM_USCORE], [m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) m4trace:/usr/local/share/aclocal/ltdl.m4:907: -1- AC_DEFUN([AC_LTDL_DLSYM_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLSYM_USCORE' is obsolete. You should run autoupdate.])dnl m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) m4trace:/usr/local/share/aclocal/ltoptions.m4:14: -1- AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) m4trace:/usr/local/share/aclocal/ltoptions.m4:118: -1- 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.]) ]) m4trace:/usr/local/share/aclocal/ltoptions.m4:118: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete. You should run autoupdate.])dnl _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.]) ]) m4trace:/usr/local/share/aclocal/ltoptions.m4:154: -1- 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.]) ]) m4trace:/usr/local/share/aclocal/ltoptions.m4:154: -1- AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete. You should run autoupdate.])dnl 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.]) ]) m4trace:/usr/local/share/aclocal/ltoptions.m4:199: -1- AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) m4trace:/usr/local/share/aclocal/ltoptions.m4:203: -1- AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) m4trace:/usr/local/share/aclocal/ltoptions.m4:205: -1- AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) m4trace:/usr/local/share/aclocal/ltoptions.m4:205: -1- AC_DEFUN([AM_ENABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_SHARED' is obsolete. You should run autoupdate.])dnl AC_ENABLE_SHARED($@)]) m4trace:/usr/local/share/aclocal/ltoptions.m4:206: -1- AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) m4trace:/usr/local/share/aclocal/ltoptions.m4:206: -1- AC_DEFUN([AM_DISABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_SHARED' is obsolete. You should run autoupdate.])dnl AC_DISABLE_SHARED($@)]) m4trace:/usr/local/share/aclocal/ltoptions.m4:253: -1- AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) m4trace:/usr/local/share/aclocal/ltoptions.m4:257: -1- AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) m4trace:/usr/local/share/aclocal/ltoptions.m4:259: -1- AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) m4trace:/usr/local/share/aclocal/ltoptions.m4:259: -1- AC_DEFUN([AM_ENABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_STATIC' is obsolete. You should run autoupdate.])dnl AC_ENABLE_STATIC($@)]) m4trace:/usr/local/share/aclocal/ltoptions.m4:260: -1- AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) m4trace:/usr/local/share/aclocal/ltoptions.m4:260: -1- AC_DEFUN([AM_DISABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_STATIC' is obsolete. You should run autoupdate.])dnl AC_DISABLE_STATIC($@)]) m4trace:/usr/local/share/aclocal/ltoptions.m4:310: -1- 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.]) ]) m4trace:/usr/local/share/aclocal/ltoptions.m4:310: -1- AC_DEFUN([AC_ENABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_ENABLE_FAST_INSTALL' is obsolete. You should run autoupdate.])dnl _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.]) ]) m4trace:/usr/local/share/aclocal/ltoptions.m4:317: -1- 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.]) ]) m4trace:/usr/local/share/aclocal/ltoptions.m4:317: -1- AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_DISABLE_FAST_INSTALL' is obsolete. You should run autoupdate.])dnl _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.]) ]) m4trace:/usr/local/share/aclocal/ltoptions.m4:416: -1- 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.]) ]) m4trace:/usr/local/share/aclocal/ltoptions.m4:416: -1- AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_PICMODE' is obsolete. You should run autoupdate.])dnl _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.]) ]) m4trace:/usr/local/share/aclocal/ltsugar.m4:14: -1- AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) m4trace:/usr/local/share/aclocal/ltversion.m4:23: -1- AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6' macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:37: -1- AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:41: -1- AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:42: -1- AC_DEFUN([_LT_AC_SHELL_INIT]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:43: -1- AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:45: -1- AC_DEFUN([_LT_AC_TAGVAR]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:46: -1- AC_DEFUN([AC_LTDL_ENABLE_INSTALL]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:47: -1- AC_DEFUN([AC_LTDL_PREOPEN]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:48: -1- AC_DEFUN([_LT_AC_SYS_COMPILER]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:49: -1- AC_DEFUN([_LT_AC_LOCK]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:50: -1- AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:51: -1- AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:52: -1- AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:53: -1- AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:54: -1- AC_DEFUN([AC_LIBTOOL_OBJDIR]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:55: -1- AC_DEFUN([AC_LTDL_OBJDIR]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:56: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:57: -1- AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:58: -1- AC_DEFUN([AC_PATH_MAGIC]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:59: -1- AC_DEFUN([AC_PROG_LD_GNU]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:60: -1- AC_DEFUN([AC_PROG_LD_RELOAD_FLAG]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:61: -1- AC_DEFUN([AC_DEPLIBS_CHECK_METHOD]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:62: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:63: -1- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:64: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:65: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:66: -1- AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:67: -1- AC_DEFUN([LT_AC_PROG_EGREP]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:72: -1- AC_DEFUN([_AC_PROG_LIBTOOL]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:73: -1- AC_DEFUN([AC_LIBTOOL_SETUP]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:74: -1- AC_DEFUN([_LT_AC_CHECK_DLFCN]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:75: -1- AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:76: -1- AC_DEFUN([_LT_AC_TAGCONFIG]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:78: -1- AC_DEFUN([_LT_AC_LANG_CXX]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:79: -1- AC_DEFUN([_LT_AC_LANG_F77]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:80: -1- AC_DEFUN([_LT_AC_LANG_GCJ]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:81: -1- AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:82: -1- AC_DEFUN([_LT_AC_LANG_C_CONFIG]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:83: -1- AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:84: -1- AC_DEFUN([_LT_AC_LANG_CXX_CONFIG]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:85: -1- AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:86: -1- AC_DEFUN([_LT_AC_LANG_F77_CONFIG]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:87: -1- AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:88: -1- AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:89: -1- AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:90: -1- AC_DEFUN([_LT_AC_LANG_RC_CONFIG]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:91: -1- AC_DEFUN([AC_LIBTOOL_CONFIG]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:92: -1- AC_DEFUN([_LT_AC_FILE_LTDLL_C]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:94: -1- AC_DEFUN([_LT_AC_PROG_CXXCPP]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:97: -1- AC_DEFUN([_LT_PROG_F77]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:98: -1- AC_DEFUN([_LT_PROG_FC]) m4trace:/usr/local/share/aclocal/lt~obsolete.m4:99: -1- AC_DEFUN([_LT_PROG_CXX]) m4trace:/usr/local/share/aclocal/pkg.m4:48: -1- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ]) m4trace:/usr/local/share/aclocal/pkg.m4:67: -1- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) m4trace:/usr/local/share/aclocal/pkg.m4:93: -1- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ]) m4trace:/usr/local/share/aclocal/pkg.m4:159: -1- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ]) m4trace:/usr/local/share/aclocal/pkg.m4:179: -1- AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) m4trace:/usr/local/share/aclocal/pkg.m4:199: -1- AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) m4trace:/usr/local/share/aclocal/pkg.m4:214: -1- AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/amversion.m4:20: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' 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.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/amversion.m4:37: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/ar-lib.m4:60: -1- AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([ar-lib])dnl AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) : ${AR=ar} AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], [AC_LANG_PUSH([C]) am_cv_ar_interface=ar AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a ]) AC_LANG_POP([C])]) case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) m4_default([$1], [AC_MSG_ERROR([could not determine $AR interface])]) ;; esac AC_SUBST([AR])dnl ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/auxdir.m4:51: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/cond.m4:32: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$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])]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/depend.m4:156: -1- 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 m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" 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 10 /bin/sh. echo '/* dummy */' > 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]) ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/depend.m4:166: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/depend.m4:189: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) 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 ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/depout.m4:61: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf 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"` # 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'`; 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 } ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/depout.m4:75: -1- 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"]) ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/init.m4:171: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])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], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) 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], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [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([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). 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])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro 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 # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/init.m4:198: -1- 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]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/install-sh.m4:21: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != 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])]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/lead-dot.m4:19: -1- 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])]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/make.m4:49: -1- 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 ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/missing.m4:14: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/missing.m4:38: -1- 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 --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/options.m4:12: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/options.m4:18: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/options.m4:24: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/options.m4:30: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/prog-cc-c-o.m4:44: -1- AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/prog-cc-c-o.m4:47: -1- AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/runlog.m4:17: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/sanity.m4:82: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file 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 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 if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done 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]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/silent.m4:60: -1- AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/strip.m4:28: -1- 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])]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/substnot.m4:12: -1- AC_DEFUN([_AM_SUBST_NOTMAKE]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/substnot.m4:17: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) m4trace:/usr/local/Cellar/automake/1.15/share/aclocal-1.15/tar.m4:132: -1- 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}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} 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]) ]) m4trace:configure.ac:78: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:78: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:78: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:78: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:78: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:78: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:78: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:78: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:78: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:108: -1- m4_include([libfizmo/config-flags.m4]) m4trace:configure.ac:109: -1- m4_include([libcellif/config-flags.m4]) m4trace:configure.ac:110: -1- m4_include([libdrilbo/config-flags.m4]) m4trace:configure.ac:111: -1- m4_include([fizmo-console/config-flags.m4]) m4trace:configure.ac:112: -1- m4_include([fizmo-ncursesw/config-flags.m4]) m4trace:configure.ac:116: -1- m4_include([libglkif/config-flags.m4]) m4trace:configure.ac:116: -1- m4_include([fizmo-glktermw/config-flags.m4]) m4trace:configure.ac:119: -1- m4_include([libsndifsdl2/config-flags.m4]) m4trace:configure.ac:124: -1- m4_include([libfizmo/config-libs.m4]) m4trace:libfizmo/config-libs.m4:6: -1- PKG_CHECK_MODULES([libxml2], [libxml-2.0]) m4trace:libfizmo/config-libs.m4:6: -1- PKG_PROG_PKG_CONFIG m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^PKG_CONFIG_PATH$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^PKG_CONFIG_LIBDIR$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^libxml2_CFLAGS$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^libxml2_LIBS$]) m4trace:libfizmo/config-libs.m4:6: -1- PKG_CHECK_EXISTS([libxml-2.0], [pkg_cv_[]libxml2_CFLAGS=`$PKG_CONFIG --[]cflags "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libfizmo/config-libs.m4:6: -1- PKG_CHECK_EXISTS([libxml-2.0], [pkg_cv_[]libxml2_LIBS=`$PKG_CONFIG --[]libs "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libfizmo/config-libs.m4:6: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CC$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CFLAGS$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^LIBS$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CC$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CC$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CC$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CC$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^EXEEXT$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^OBJEXT$]) m4trace:libfizmo/config-libs.m4:6: -1- _AM_PROG_CC_C_O m4trace:libfizmo/config-libs.m4:6: -1- AM_AUX_DIR_EXPAND m4trace:libfizmo/config-libs.m4:6: -1- AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^HAVE_LIBXML2$]) m4trace:configure.ac:125: -1- m4_include([libcellif/config-libs.m4]) m4trace:configure.ac:126: -1- m4_include([libdrilbo/config-libs.m4]) m4trace:libdrilbo/config-libs.m4:8: -1- PKG_CHECK_MODULES([x11], [x11]) m4trace:libdrilbo/config-libs.m4:8: -1- m4_pattern_allow([^x11_CFLAGS$]) m4trace:libdrilbo/config-libs.m4:8: -1- m4_pattern_allow([^x11_LIBS$]) m4trace:libdrilbo/config-libs.m4:8: -1- PKG_CHECK_EXISTS([x11], [pkg_cv_[]x11_CFLAGS=`$PKG_CONFIG --[]cflags "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libdrilbo/config-libs.m4:8: -1- PKG_CHECK_EXISTS([x11], [pkg_cv_[]x11_LIBS=`$PKG_CONFIG --[]libs "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libdrilbo/config-libs.m4:8: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:libdrilbo/config-libs.m4:60: -1- PKG_CHECK_MODULES([jpeg], [jpeg], [AS_IF([test "x$libdrilbo_reqs" != "x"], [ libdrilbo_reqs+=", " ]) libdrilbo_reqs+="jpeg" ], [for dir in $with_jpeg_includedir /usr/include /usr/local/include /opt/local/include ; do AC_MSG_CHECKING(for $dir/jpeglib.h) if [ test -e $dir/jpeglib.h ]; then AC_MSG_RESULT(yes) jpeglib_h_dir=$dir break else AC_MSG_RESULT(no) fi done if [ test "x$jpeglib_h_dir" == "x"] ; then echo "Could not find libjpeg.h." echo "Try setting the location using --with-jpeg-libdir." exit fi libdrilbo_nonpkg_cflags+="-I$jpeglib_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-ljpeg" for dir in $with_jpeg_libdir /usr/lib /usr/local/lib /opt/local/lib ; do AC_MSG_CHECKING(for libjpeg in $dir) LDFLAGS="-L$dir" AC_TRY_LINK( [#include #include "$jpeglib_h_dir/jpeglib.h"], [struct jpeg_decompress_struct cinfo; jpeg_create_decompress(&cinfo);], [AC_MSG_RESULT(yes) jpeglib_l_dir=$dir break], [AC_MSG_RESULT(no)]) done if [ test "x$jpeglib_l_dir" == "x"] ; then echo "Could not find libjpeg." echo "Try setting the location using --with-jpeg-libdir." exit fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED libdrilbo_nonpkg_libs="-L$jpeglib_l_dir -ljpeg" ]) m4trace:libdrilbo/config-libs.m4:60: -1- m4_pattern_allow([^jpeg_CFLAGS$]) m4trace:libdrilbo/config-libs.m4:60: -1- m4_pattern_allow([^jpeg_LIBS$]) m4trace:libdrilbo/config-libs.m4:60: -1- PKG_CHECK_EXISTS([jpeg], [pkg_cv_[]jpeg_CFLAGS=`$PKG_CONFIG --[]cflags "jpeg" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libdrilbo/config-libs.m4:60: -1- PKG_CHECK_EXISTS([jpeg], [pkg_cv_[]jpeg_LIBS=`$PKG_CONFIG --[]libs "jpeg" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libdrilbo/config-libs.m4:60: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:libdrilbo/config-libs.m4:60: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... /usr/local/share/aclocal/pkg.m4:159: PKG_CHECK_MODULES is expanded from... ../../lib/m4sugar/m4sh.m4:643: AS_IF is expanded from... libdrilbo/config-libs.m4:60: the top level]) m4trace:libdrilbo/config-libs.m4:60: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... /usr/local/share/aclocal/pkg.m4:159: PKG_CHECK_MODULES is expanded from... ../../lib/m4sugar/m4sh.m4:643: AS_IF is expanded from... libdrilbo/config-libs.m4:60: the top level]) m4trace:libdrilbo/config-libs.m4:68: -1- PKG_CHECK_MODULES([png], [libpng >= 1.2]) m4trace:libdrilbo/config-libs.m4:68: -1- m4_pattern_allow([^png_CFLAGS$]) m4trace:libdrilbo/config-libs.m4:68: -1- m4_pattern_allow([^png_LIBS$]) m4trace:libdrilbo/config-libs.m4:68: -1- PKG_CHECK_EXISTS([libpng >= 1.2], [pkg_cv_[]png_CFLAGS=`$PKG_CONFIG --[]cflags "libpng >= 1.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libdrilbo/config-libs.m4:68: -1- PKG_CHECK_EXISTS([libpng >= 1.2], [pkg_cv_[]png_LIBS=`$PKG_CONFIG --[]libs "libpng >= 1.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libdrilbo/config-libs.m4:68: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:127: -1- m4_include([fizmo-console/config-libs.m4]) m4trace:configure.ac:128: -1- m4_include([fizmo-ncursesw/config-libs.m4]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- PKG_CHECK_MODULES([ncursesw], [ncursesw], [], [for dir in $with_ncurses_includedir /usr/include /usr/local/include /opt/local/include ; do AC_MSG_CHECKING(for $dir/ncurses.h) if [ test -e $dir/ncurses.h ]; then AC_MSG_RESULT(yes) ncurses_h_dir=$dir break else AC_MSG_RESULT(no) fi done if [ test "x$ncurses_h_dir" == "x"] ; then echo "Could not find ncurses.h." echo "Try setting the location using --with-ncurses-includedir." exit fi libncursesw_nonpkg_cflags+="-I$ncurses_h_dir" LIBS_SAVED=$LIBS LDFLAGS_SAVED=$LDFLAGS LIBS="-lncursesw" for dir in $with_ncursesw_libdir /usr/lib /usr/local/lib /opt/local/lib ; do AC_MSG_CHECKING(for libncursesw in $dir) LDFLAGS="-L$dir" AC_TRY_LINK( [ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h"], [ wchar_t buf[2]; addwstr(buf); ], [AC_MSG_RESULT(yes) ncursesw_l_dir=$dir break], [AC_MSG_RESULT(no)]) done if [ test "x$ncursesw_l_dir" != "x"] ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncursesw" else echo "Could not find libncursesw. Trying to use libcurses instead." LIBS="-lncurses" for dir in $with_ncurses_libdir /usr/lib /usr/local/lib /opt/local/lib ; do AC_MSG_CHECKING(for libncurses in $dir) LDFLAGS="-L$dir" AC_TRY_LINK( [ #define _XOPEN_SOURCE_EXTENDED 1 #include #include "$ncurses_h_dir/ncurses.h"], [ wchar_t buf[2]; addwstr(buf); ], [AC_MSG_RESULT(yes) ncursesw_l_dir=$dir break], [AC_MSG_RESULT(no)]) done if [ test "x$ncursesw_l_dir" != "x"] ; then libncursesw_nonpkg_libs="-L$ncursesw_l_dir -lncurses" else echo "Couldn't find libncursesw or libncurses. You can set the location manually using --with-ncurses-libdir or --with-ncursesw-libdir." exit fi fi LIBS=$LIBS_SAVED LDFLAGS=$LDFLAGS_SAVED ]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- m4_pattern_allow([^ncursesw_CFLAGS$]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- m4_pattern_allow([^ncursesw_LIBS$]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- PKG_CHECK_EXISTS([ncursesw], [pkg_cv_[]ncursesw_CFLAGS=`$PKG_CONFIG --[]cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- PKG_CHECK_EXISTS([ncursesw], [pkg_cv_[]ncursesw_LIBS=`$PKG_CONFIG --[]libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:fizmo-ncursesw/config-libs.m4:72: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... /usr/local/share/aclocal/pkg.m4:159: PKG_CHECK_MODULES is expanded from... fizmo-ncursesw/config-libs.m4:72: the top level]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... /usr/local/share/aclocal/pkg.m4:159: PKG_CHECK_MODULES is expanded from... fizmo-ncursesw/config-libs.m4:72: the top level]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... /usr/local/share/aclocal/pkg.m4:159: PKG_CHECK_MODULES is expanded from... fizmo-ncursesw/config-libs.m4:72: the top level]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... /usr/local/share/aclocal/pkg.m4:159: PKG_CHECK_MODULES is expanded from... fizmo-ncursesw/config-libs.m4:72: the top level]) m4trace:fizmo-ncursesw/config-libs.m4:76: -1- PKG_CHECK_MODULES([x11], [x11]) m4trace:fizmo-ncursesw/config-libs.m4:76: -1- m4_pattern_allow([^x11_CFLAGS$]) m4trace:fizmo-ncursesw/config-libs.m4:76: -1- m4_pattern_allow([^x11_LIBS$]) m4trace:fizmo-ncursesw/config-libs.m4:76: -1- PKG_CHECK_EXISTS([x11], [pkg_cv_[]x11_CFLAGS=`$PKG_CONFIG --[]cflags "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:fizmo-ncursesw/config-libs.m4:76: -1- PKG_CHECK_EXISTS([x11], [pkg_cv_[]x11_LIBS=`$PKG_CONFIG --[]libs "x11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:fizmo-ncursesw/config-libs.m4:76: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:132: -1- m4_include([libglkif/config-libs.m4]) m4trace:libglkif/config-libs.m4:13: -1- PKG_CHECK_MODULES([ncursesw], [ncursesw], [AS_IF([test "x$libglkif_reqs" != "x"], [ libglkif_reqs+=", " ]) libglkif_reqs+="ncursesw"], [AC_MSG_ERROR([Could not find ncursesw.]) AS_EXIT]) m4trace:libglkif/config-libs.m4:13: -1- m4_pattern_allow([^ncursesw_CFLAGS$]) m4trace:libglkif/config-libs.m4:13: -1- m4_pattern_allow([^ncursesw_LIBS$]) m4trace:libglkif/config-libs.m4:13: -1- PKG_CHECK_EXISTS([ncursesw], [pkg_cv_[]ncursesw_CFLAGS=`$PKG_CONFIG --[]cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libglkif/config-libs.m4:13: -1- PKG_CHECK_EXISTS([ncursesw], [pkg_cv_[]ncursesw_LIBS=`$PKG_CONFIG --[]libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libglkif/config-libs.m4:13: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:libglkif/config-libs.m4:32: -1- m4_pattern_allow([^CPP$]) m4trace:libglkif/config-libs.m4:32: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:libglkif/config-libs.m4:32: -1- m4_pattern_allow([^CPP$]) m4trace:libglkif/config-libs.m4:32: -1- AC_PROG_EGREP m4trace:libglkif/config-libs.m4:32: -1- m4_pattern_allow([^GREP$]) m4trace:libglkif/config-libs.m4:32: -1- m4_pattern_allow([^EGREP$]) m4trace:libglkif/config-libs.m4:32: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:libglkif/config-libs.m4:65: -1- m4_pattern_allow([^HAVE_LIBGLKTERMW$]) m4trace:configure.ac:132: -1- m4_include([fizmo-glktermw/config-libs.m4]) m4trace:fizmo-glktermw/config-libs.m4:2: -1- PKG_CHECK_MODULES([ncursesw], [ncursesw]) m4trace:fizmo-glktermw/config-libs.m4:2: -1- m4_pattern_allow([^ncursesw_CFLAGS$]) m4trace:fizmo-glktermw/config-libs.m4:2: -1- m4_pattern_allow([^ncursesw_LIBS$]) m4trace:fizmo-glktermw/config-libs.m4:2: -1- PKG_CHECK_EXISTS([ncursesw], [pkg_cv_[]ncursesw_CFLAGS=`$PKG_CONFIG --[]cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:fizmo-glktermw/config-libs.m4:2: -1- PKG_CHECK_EXISTS([ncursesw], [pkg_cv_[]ncursesw_LIBS=`$PKG_CONFIG --[]libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:fizmo-glktermw/config-libs.m4:2: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:135: -1- m4_include([libsndifsdl2/config-libs.m4]) m4trace:libsndifsdl2/config-libs.m4:2: -1- PKG_CHECK_MODULES([sdl2], [sdl2]) m4trace:libsndifsdl2/config-libs.m4:2: -1- m4_pattern_allow([^sdl2_CFLAGS$]) m4trace:libsndifsdl2/config-libs.m4:2: -1- m4_pattern_allow([^sdl2_LIBS$]) m4trace:libsndifsdl2/config-libs.m4:2: -1- PKG_CHECK_EXISTS([sdl2], [pkg_cv_[]sdl2_CFLAGS=`$PKG_CONFIG --[]cflags "sdl2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libsndifsdl2/config-libs.m4:2: -1- PKG_CHECK_EXISTS([sdl2], [pkg_cv_[]sdl2_LIBS=`$PKG_CONFIG --[]libs "sdl2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libsndifsdl2/config-libs.m4:2: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:libsndifsdl2/config-libs.m4:6: -1- PKG_CHECK_MODULES([sndfile], [sndfile]) m4trace:libsndifsdl2/config-libs.m4:6: -1- m4_pattern_allow([^sndfile_CFLAGS$]) m4trace:libsndifsdl2/config-libs.m4:6: -1- m4_pattern_allow([^sndfile_LIBS$]) m4trace:libsndifsdl2/config-libs.m4:6: -1- PKG_CHECK_EXISTS([sndfile], [pkg_cv_[]sndfile_CFLAGS=`$PKG_CONFIG --[]cflags "sndfile" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libsndifsdl2/config-libs.m4:6: -1- PKG_CHECK_EXISTS([sndfile], [pkg_cv_[]sndfile_LIBS=`$PKG_CONFIG --[]libs "sndfile" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:libsndifsdl2/config-libs.m4:6: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:137: -1- AM_INIT_AUTOMAKE([-Wall -Werror foreign]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.ac:137: -1- AM_SET_CURRENT_AUTOMAKE_VERSION m4trace:configure.ac:137: -1- AM_AUTOMAKE_VERSION([1.15]) m4trace:configure.ac:137: -1- _AM_AUTOCONF_VERSION([2.69]) m4trace:configure.ac:137: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__isrc$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([am__isrc]) m4trace:configure.ac:137: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.ac:137: -1- _AM_SET_OPTIONS([-Wall -Werror foreign]) m4trace:configure.ac:137: -1- _AM_SET_OPTION([-Wall]) m4trace:configure.ac:137: -2- _AM_MANGLE_OPTION([-Wall]) m4trace:configure.ac:137: -1- _AM_SET_OPTION([-Werror]) m4trace:configure.ac:137: -2- _AM_MANGLE_OPTION([-Werror]) m4trace:configure.ac:137: -1- _AM_SET_OPTION([foreign]) m4trace:configure.ac:137: -2- _AM_MANGLE_OPTION([foreign]) m4trace:configure.ac:137: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:137: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])]) m4trace:configure.ac:137: -2- _AM_MANGLE_OPTION([no-define]) m4trace:configure.ac:137: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:137: -1- AM_SANITY_CHECK m4trace:configure.ac:137: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) m4trace:configure.ac:137: -1- AM_MISSING_HAS_RUN m4trace:configure.ac:137: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.ac:137: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.ac:137: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.ac:137: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.ac:137: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) m4trace:configure.ac:137: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.ac:137: -1- AM_PROG_INSTALL_SH m4trace:configure.ac:137: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.ac:137: -1- AM_PROG_INSTALL_STRIP m4trace:configure.ac:137: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^MKDIR_P$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.ac:137: -1- AM_SET_LEADING_DOT m4trace:configure.ac:137: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.ac:137: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) m4trace:configure.ac:137: -2- _AM_MANGLE_OPTION([tar-ustar]) m4trace:configure.ac:137: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])]) m4trace:configure.ac:137: -2- _AM_MANGLE_OPTION([tar-pax]) m4trace:configure.ac:137: -1- _AM_PROG_TAR([v7]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__tar$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__untar$]) m4trace:configure.ac:137: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) m4trace:configure.ac:137: -2- _AM_MANGLE_OPTION([no-dependencies]) m4trace:configure.ac:137: -1- _AM_DEPENDENCIES([CC]) m4trace:configure.ac:137: -1- AM_SET_DEPDIR m4trace:configure.ac:137: -1- m4_pattern_allow([^DEPDIR$]) m4trace:configure.ac:137: -1- AM_OUTPUT_DEPENDENCY_COMMANDS m4trace:configure.ac:137: -1- AM_MAKE_INCLUDE m4trace:configure.ac:137: -1- m4_pattern_allow([^am__include$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__quote$]) m4trace:configure.ac:137: -1- AM_DEP_TRACK m4trace:configure.ac:137: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AMDEP_TRUE$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AMDEP_FALSE$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__nodep$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([am__nodep]) m4trace:configure.ac:137: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:137: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:137: -1- AM_SILENT_RULES m4trace:configure.ac:137: -1- m4_pattern_allow([^AM_V$]) m4trace:configure.ac:137: -1- AM_SUBST_NOTMAKE([AM_V]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([AM_V]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AM_DEFAULT_V$]) m4trace:configure.ac:137: -1- AM_SUBST_NOTMAKE([AM_DEFAULT_V]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AM_BACKSLASH$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:138: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:138: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:138: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:138: -1- _AM_PROG_CC_C_O m4trace:configure.ac:138: -1- AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) m4trace:configure.ac:139: -1- m4_pattern_allow([^RANLIB$]) m4trace:configure.ac:140: -1- AM_PROG_AR m4trace:configure.ac:140: -1- m4_pattern_allow([^AR$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^ac_ct_AR$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^AR$]) m4trace:configure.ac:147: -1- AM_CONDITIONAL([ENABLE_TRACING], [test "$enable_tracing" = "yes"]) m4trace:configure.ac:147: -1- m4_pattern_allow([^ENABLE_TRACING_TRUE$]) m4trace:configure.ac:147: -1- m4_pattern_allow([^ENABLE_TRACING_FALSE$]) m4trace:configure.ac:147: -1- _AM_SUBST_NOTMAKE([ENABLE_TRACING_TRUE]) m4trace:configure.ac:147: -1- _AM_SUBST_NOTMAKE([ENABLE_TRACING_FALSE]) m4trace:configure.ac:148: -1- AM_CONDITIONAL([ENABLE_SDL], [test "$enable_sdl" != "no"]) m4trace:configure.ac:148: -1- m4_pattern_allow([^ENABLE_SDL_TRUE$]) m4trace:configure.ac:148: -1- m4_pattern_allow([^ENABLE_SDL_FALSE$]) m4trace:configure.ac:148: -1- _AM_SUBST_NOTMAKE([ENABLE_SDL_TRUE]) m4trace:configure.ac:148: -1- _AM_SUBST_NOTMAKE([ENABLE_SDL_FALSE]) m4trace:configure.ac:149: -1- m4_include([libfizmo/config-conds.m4]) m4trace:libfizmo/config-conds.m4:3: -1- AM_CONDITIONAL([ENABLE_BABEL], [test "$enable_babel" != "no"]) m4trace:libfizmo/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_BABEL_TRUE$]) m4trace:libfizmo/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_BABEL_FALSE$]) m4trace:libfizmo/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_BABEL_TRUE]) m4trace:libfizmo/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_BABEL_FALSE]) m4trace:libfizmo/config-conds.m4:6: -1- AM_CONDITIONAL([ENABLE_STRICT_Z], [test "$enable_strict_z" = "yes"]) m4trace:libfizmo/config-conds.m4:6: -1- m4_pattern_allow([^ENABLE_STRICT_Z_TRUE$]) m4trace:libfizmo/config-conds.m4:6: -1- m4_pattern_allow([^ENABLE_STRICT_Z_FALSE$]) m4trace:libfizmo/config-conds.m4:6: -1- _AM_SUBST_NOTMAKE([ENABLE_STRICT_Z_TRUE]) m4trace:libfizmo/config-conds.m4:6: -1- _AM_SUBST_NOTMAKE([ENABLE_STRICT_Z_FALSE]) m4trace:libfizmo/config-conds.m4:9: -1- AM_CONDITIONAL([ENABLE_SEGFAULT_ON_ERROR], [test "$enable_segfault-on-error" = "yes"]) m4trace:libfizmo/config-conds.m4:9: -1- m4_pattern_allow([^ENABLE_SEGFAULT_ON_ERROR_TRUE$]) m4trace:libfizmo/config-conds.m4:9: -1- m4_pattern_allow([^ENABLE_SEGFAULT_ON_ERROR_FALSE$]) m4trace:libfizmo/config-conds.m4:9: -1- _AM_SUBST_NOTMAKE([ENABLE_SEGFAULT_ON_ERROR_TRUE]) m4trace:libfizmo/config-conds.m4:9: -1- _AM_SUBST_NOTMAKE([ENABLE_SEGFAULT_ON_ERROR_FALSE]) m4trace:libfizmo/config-conds.m4:12: -1- AM_CONDITIONAL([ENABLE_FILELIST], [test "$enable_filelist" != "no"]) m4trace:libfizmo/config-conds.m4:12: -1- m4_pattern_allow([^ENABLE_FILELIST_TRUE$]) m4trace:libfizmo/config-conds.m4:12: -1- m4_pattern_allow([^ENABLE_FILELIST_FALSE$]) m4trace:libfizmo/config-conds.m4:12: -1- _AM_SUBST_NOTMAKE([ENABLE_FILELIST_TRUE]) m4trace:libfizmo/config-conds.m4:12: -1- _AM_SUBST_NOTMAKE([ENABLE_FILELIST_FALSE]) m4trace:libfizmo/config-conds.m4:15: -1- AM_CONDITIONAL([ENABLE_BLOCKBUFFER], [test "$enable_blockbuffer" != "no"]) m4trace:libfizmo/config-conds.m4:15: -1- m4_pattern_allow([^ENABLE_BLOCKBUFFER_TRUE$]) m4trace:libfizmo/config-conds.m4:15: -1- m4_pattern_allow([^ENABLE_BLOCKBUFFER_FALSE$]) m4trace:libfizmo/config-conds.m4:15: -1- _AM_SUBST_NOTMAKE([ENABLE_BLOCKBUFFER_TRUE]) m4trace:libfizmo/config-conds.m4:15: -1- _AM_SUBST_NOTMAKE([ENABLE_BLOCKBUFFER_FALSE]) m4trace:libfizmo/config-conds.m4:18: -1- AM_CONDITIONAL([ENABLE_COMMAND_HISTORY], [test "$enable_command_history" != "no"]) m4trace:libfizmo/config-conds.m4:18: -1- m4_pattern_allow([^ENABLE_COMMAND_HISTORY_TRUE$]) m4trace:libfizmo/config-conds.m4:18: -1- m4_pattern_allow([^ENABLE_COMMAND_HISTORY_FALSE$]) m4trace:libfizmo/config-conds.m4:18: -1- _AM_SUBST_NOTMAKE([ENABLE_COMMAND_HISTORY_TRUE]) m4trace:libfizmo/config-conds.m4:18: -1- _AM_SUBST_NOTMAKE([ENABLE_COMMAND_HISTORY_FALSE]) m4trace:libfizmo/config-conds.m4:21: -1- AM_CONDITIONAL([ENABLE_OUTPUT_HISTORY], [test "$enable_output_history" != "no"]) m4trace:libfizmo/config-conds.m4:21: -1- m4_pattern_allow([^ENABLE_OUTPUT_HISTORY_TRUE$]) m4trace:libfizmo/config-conds.m4:21: -1- m4_pattern_allow([^ENABLE_OUTPUT_HISTORY_FALSE$]) m4trace:libfizmo/config-conds.m4:21: -1- _AM_SUBST_NOTMAKE([ENABLE_OUTPUT_HISTORY_TRUE]) m4trace:libfizmo/config-conds.m4:21: -1- _AM_SUBST_NOTMAKE([ENABLE_OUTPUT_HISTORY_FALSE]) m4trace:libfizmo/config-conds.m4:24: -1- AM_CONDITIONAL([ENABLE_CONFIG_FILES], [test "$enable_config_files" != "no"]) m4trace:libfizmo/config-conds.m4:24: -1- m4_pattern_allow([^ENABLE_CONFIG_FILES_TRUE$]) m4trace:libfizmo/config-conds.m4:24: -1- m4_pattern_allow([^ENABLE_CONFIG_FILES_FALSE$]) m4trace:libfizmo/config-conds.m4:24: -1- _AM_SUBST_NOTMAKE([ENABLE_CONFIG_FILES_TRUE]) m4trace:libfizmo/config-conds.m4:24: -1- _AM_SUBST_NOTMAKE([ENABLE_CONFIG_FILES_FALSE]) m4trace:libfizmo/config-conds.m4:27: -1- AM_CONDITIONAL([ENABLE_PREFIX_COMMANDS], [test "$enable_prefix_commands" != "no"]) m4trace:libfizmo/config-conds.m4:27: -1- m4_pattern_allow([^ENABLE_PREFIX_COMMANDS_TRUE$]) m4trace:libfizmo/config-conds.m4:27: -1- m4_pattern_allow([^ENABLE_PREFIX_COMMANDS_FALSE$]) m4trace:libfizmo/config-conds.m4:27: -1- _AM_SUBST_NOTMAKE([ENABLE_PREFIX_COMMANDS_TRUE]) m4trace:libfizmo/config-conds.m4:27: -1- _AM_SUBST_NOTMAKE([ENABLE_PREFIX_COMMANDS_FALSE]) m4trace:libfizmo/config-conds.m4:30: -1- AM_CONDITIONAL([ENABLE_DEBUGGER], [test "$enable_debugger" = "yes"]) m4trace:libfizmo/config-conds.m4:30: -1- m4_pattern_allow([^ENABLE_DEBUGGER_TRUE$]) m4trace:libfizmo/config-conds.m4:30: -1- m4_pattern_allow([^ENABLE_DEBUGGER_FALSE$]) m4trace:libfizmo/config-conds.m4:30: -1- _AM_SUBST_NOTMAKE([ENABLE_DEBUGGER_TRUE]) m4trace:libfizmo/config-conds.m4:30: -1- _AM_SUBST_NOTMAKE([ENABLE_DEBUGGER_FALSE]) m4trace:libfizmo/config-conds.m4:33: -1- AM_CONDITIONAL([FIZMO_DIST_VERSION], [test "x$fizmo_dist_version" != "x"]) m4trace:libfizmo/config-conds.m4:33: -1- m4_pattern_allow([^FIZMO_DIST_VERSION_TRUE$]) m4trace:libfizmo/config-conds.m4:33: -1- m4_pattern_allow([^FIZMO_DIST_VERSION_FALSE$]) m4trace:libfizmo/config-conds.m4:33: -1- _AM_SUBST_NOTMAKE([FIZMO_DIST_VERSION_TRUE]) m4trace:libfizmo/config-conds.m4:33: -1- _AM_SUBST_NOTMAKE([FIZMO_DIST_VERSION_FALSE]) m4trace:configure.ac:150: -1- m4_include([libcellif/config-conds.m4]) m4trace:configure.ac:151: -1- m4_include([libdrilbo/config-conds.m4]) m4trace:libdrilbo/config-conds.m4:3: -1- AM_CONDITIONAL([ENABLE_X11], [test "$enable_x11" != "no"]) m4trace:libdrilbo/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_X11_TRUE$]) m4trace:libdrilbo/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_X11_FALSE$]) m4trace:libdrilbo/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_X11_TRUE]) m4trace:libdrilbo/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_X11_FALSE]) m4trace:libdrilbo/config-conds.m4:6: -1- AM_CONDITIONAL([ENABLE_JPEG], [test "$enable_jpeg" != "no"]) m4trace:libdrilbo/config-conds.m4:6: -1- m4_pattern_allow([^ENABLE_JPEG_TRUE$]) m4trace:libdrilbo/config-conds.m4:6: -1- m4_pattern_allow([^ENABLE_JPEG_FALSE$]) m4trace:libdrilbo/config-conds.m4:6: -1- _AM_SUBST_NOTMAKE([ENABLE_JPEG_TRUE]) m4trace:libdrilbo/config-conds.m4:6: -1- _AM_SUBST_NOTMAKE([ENABLE_JPEG_FALSE]) m4trace:libdrilbo/config-conds.m4:9: -1- AM_CONDITIONAL([ENABLE_PNG], [test "$enable_png" != "no"]) m4trace:libdrilbo/config-conds.m4:9: -1- m4_pattern_allow([^ENABLE_PNG_TRUE$]) m4trace:libdrilbo/config-conds.m4:9: -1- m4_pattern_allow([^ENABLE_PNG_FALSE$]) m4trace:libdrilbo/config-conds.m4:9: -1- _AM_SUBST_NOTMAKE([ENABLE_PNG_TRUE]) m4trace:libdrilbo/config-conds.m4:9: -1- _AM_SUBST_NOTMAKE([ENABLE_PNG_FALSE]) m4trace:configure.ac:152: -1- m4_include([fizmo-ncursesw/config-conds.m4]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- AM_CONDITIONAL([ENABLE_X11_IMAGES], [test "$enable_x11" != "no"]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_X11_IMAGES_TRUE$]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_X11_IMAGES_FALSE$]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_X11_IMAGES_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_X11_IMAGES_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- AM_CONDITIONAL([ENABLE_SDL], [test "$enable_sdl" != "no"]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- m4_pattern_allow([^ENABLE_SDL_TRUE$]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- m4_pattern_allow([^ENABLE_SDL_FALSE$]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- _AM_SUBST_NOTMAKE([ENABLE_SDL_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- _AM_SUBST_NOTMAKE([ENABLE_SDL_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- AM_CONDITIONAL([ENABLE_FILELIST], [test "$enable_filelist" != "no"]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- m4_pattern_allow([^ENABLE_FILELIST_TRUE$]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- m4_pattern_allow([^ENABLE_FILELIST_FALSE$]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- _AM_SUBST_NOTMAKE([ENABLE_FILELIST_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- _AM_SUBST_NOTMAKE([ENABLE_FILELIST_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- AM_CONDITIONAL([ENABLE_CONFIG_FILES], [test "$enable_config_files" != "no"]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- m4_pattern_allow([^ENABLE_CONFIG_FILES_TRUE$]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- m4_pattern_allow([^ENABLE_CONFIG_FILES_FALSE$]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- _AM_SUBST_NOTMAKE([ENABLE_CONFIG_FILES_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- _AM_SUBST_NOTMAKE([ENABLE_CONFIG_FILES_FALSE]) m4trace:configure.ac:153: -1- m4_include([fizmo-console/config-conds.m4]) m4trace:fizmo-console/config-conds.m4:3: -1- AM_CONDITIONAL([ENABLE_READCHAR_VIA_TERMIOS], [test "$enable_readchar_via_termios" != "no"]) m4trace:fizmo-console/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_READCHAR_VIA_TERMIOS_TRUE$]) m4trace:fizmo-console/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_READCHAR_VIA_TERMIOS_FALSE$]) m4trace:fizmo-console/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_READCHAR_VIA_TERMIOS_TRUE]) m4trace:fizmo-console/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_READCHAR_VIA_TERMIOS_FALSE]) m4trace:configure.ac:154: -1- m4_include([libglkif/config-conds.m4]) m4trace:configure.ac:155: -1- m4_include([fizmo-glktermw/config-conds.m4]) m4trace:configure.ac:156: -1- m4_include([libsndifsdl2/config-conds.m4]) m4trace:libsndifsdl2/config-conds.m4:3: -1- AM_CONDITIONAL([ENABLE_AIFF], [test "$enable_aiff" != "no"]) m4trace:libsndifsdl2/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_AIFF_TRUE$]) m4trace:libsndifsdl2/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_AIFF_FALSE$]) m4trace:libsndifsdl2/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_AIFF_TRUE]) m4trace:libsndifsdl2/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_AIFF_FALSE]) m4trace:configure.ac:165: -1- m4_pattern_allow([^DEV_BUILD_PREFIX$]) m4trace:configure.ac:166: -1- m4_pattern_allow([^FIZMO_DIST_VERSION$]) m4trace:configure.ac:167: -1- m4_include([libfizmo/config-subst.m4]) m4trace:libfizmo/config-subst.m4:15: -1- m4_pattern_allow([^libfizmo_CFLAGS$]) m4trace:libfizmo/config-subst.m4:16: -1- m4_pattern_allow([^libfizmo_LIBS$]) m4trace:configure.ac:168: -1- m4_include([libcellif/config-subst.m4]) m4trace:libcellif/config-subst.m4:9: -1- m4_pattern_allow([^libcellif_CFLAGS$]) m4trace:libcellif/config-subst.m4:10: -1- m4_pattern_allow([^libcellif_LIBS$]) m4trace:configure.ac:169: -1- m4_include([libdrilbo/config-subst.m4]) m4trace:libdrilbo/config-subst.m4:9: -1- m4_pattern_allow([^libdrilbo_CFLAGS$]) m4trace:libdrilbo/config-subst.m4:10: -1- m4_pattern_allow([^libdrilbo_LIBS$]) m4trace:configure.ac:170: -1- m4_include([fizmo-console/config-subst.m4]) m4trace:configure.ac:171: -1- m4_include([fizmo-ncursesw/config-subst.m4]) m4trace:fizmo-ncursesw/config-subst.m4:9: -1- m4_pattern_allow([^LIBNCURSESW_NONPKG_CFLAGS$]) m4trace:fizmo-ncursesw/config-subst.m4:10: -1- m4_pattern_allow([^LIBNCURSESW_NONPKG_LIBS$]) m4trace:configure.ac:175: -1- m4_include([libglkif/config-subst.m4]) m4trace:libglkif/config-subst.m4:9: -1- m4_pattern_allow([^LIBGLKIF_NONPKG_CFLAGS$]) m4trace:libglkif/config-subst.m4:10: -1- m4_pattern_allow([^LIBGLKIF_NONPKG_LIBS$]) m4trace:libglkif/config-subst.m4:11: -1- m4_pattern_allow([^libglkif_CFLAGS$]) m4trace:libglkif/config-subst.m4:12: -1- m4_pattern_allow([^libglkif_LIBS$]) m4trace:configure.ac:175: -1- m4_include([fizmo-glktermw/config-subst.m4]) m4trace:configure.ac:178: -1- m4_include([libsndifsdl2/config-subst.m4]) m4trace:libsndifsdl2/config-subst.m4:12: -1- m4_pattern_allow([^SOUND_INTERFACE_NAME$]) m4trace:libsndifsdl2/config-subst.m4:13: -1- m4_pattern_allow([^SOUND_INTERFACE_STRUCT_NAME$]) m4trace:libsndifsdl2/config-subst.m4:14: -1- m4_pattern_allow([^SOUND_INTERFACE_CONFIGNAME$]) m4trace:libsndifsdl2/config-subst.m4:15: -1- m4_pattern_allow([^SOUND_INTERFACE_INCLUDE_FILE$]) m4trace:configure.ac:201: -1- m4_pattern_allow([^libsndifsdl2_CFLAGS$]) m4trace:configure.ac:202: -1- m4_pattern_allow([^libsndifsdl2_LIBS$]) m4trace:configure.ac:204: -1- m4_pattern_allow([^OPTIONAL_SOUND_BUILD$]) m4trace:configure.ac:205: -1- m4_pattern_allow([^OPTIONAL_SOUND_INSTALL$]) m4trace:configure.ac:206: -1- m4_pattern_allow([^OPTIONAL_SOUND_INSTALL_DATA_LOCAL$]) m4trace:configure.ac:208: -1- m4_pattern_allow([^OPTIONAL_FIZMO_BUILDS$]) m4trace:configure.ac:209: -1- m4_pattern_allow([^OPTIONAL_FIZMO_INSTALLS$]) m4trace:configure.ac:210: -1- m4_pattern_allow([^OPTIONAL_FIZMO_CLEANS$]) m4trace:configure.ac:211: -1- m4_pattern_allow([^OPTIONAL_FIZMO_DISTCLEANS$]) m4trace:configure.ac:247: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:247: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.ac:247: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) m4trace:configure.ac:247: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) m4trace:configure.ac:247: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) m4trace:configure.ac:247: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) m4trace:configure.ac:247: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) m4trace:configure.ac:247: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS fizmo-0.7.10/autom4te.cache/traces.1000644 000765 000024 00000171407 12606024550 020041 0ustar00chrenderstaff000000 000000 m4trace:configure.ac:78: -1- AC_INIT([fizmo], [0.7.10], [fizmo@spellbreaker.org], [fizmo]) m4trace:configure.ac:78: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:78: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:78: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:78: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:78: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:78: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:78: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:78: -1- AC_SUBST([SHELL]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([SHELL]) m4trace:configure.ac:78: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:78: -1- AC_SUBST([PATH_SEPARATOR]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:78: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([PACKAGE_NAME]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:78: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:78: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:78: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([PACKAGE_STRING]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:78: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:78: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([PACKAGE_URL]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:78: -1- AC_SUBST([exec_prefix], [NONE]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([exec_prefix]) m4trace:configure.ac:78: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:78: -1- AC_SUBST([prefix], [NONE]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([prefix]) m4trace:configure.ac:78: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:78: -1- AC_SUBST([program_transform_name], [s,x,x,]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([program_transform_name]) m4trace:configure.ac:78: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:78: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([bindir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:78: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([sbindir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:78: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([libexecdir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:78: -1- AC_SUBST([datarootdir], ['${prefix}/share']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([datarootdir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:78: -1- AC_SUBST([datadir], ['${datarootdir}']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([datadir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:78: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([sysconfdir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:78: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([sharedstatedir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:78: -1- AC_SUBST([localstatedir], ['${prefix}/var']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([localstatedir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:78: -1- AC_SUBST([includedir], ['${prefix}/include']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([includedir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:78: -1- AC_SUBST([oldincludedir], ['/usr/include']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([oldincludedir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:78: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([docdir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:78: -1- AC_SUBST([infodir], ['${datarootdir}/info']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([infodir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:78: -1- AC_SUBST([htmldir], ['${docdir}']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([htmldir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:78: -1- AC_SUBST([dvidir], ['${docdir}']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([dvidir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:78: -1- AC_SUBST([pdfdir], ['${docdir}']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([pdfdir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:78: -1- AC_SUBST([psdir], ['${docdir}']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([psdir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:78: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([libdir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:78: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([localedir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:78: -1- AC_SUBST([mandir], ['${datarootdir}/man']) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([mandir]) m4trace:configure.ac:78: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:78: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:78: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ @%:@undef PACKAGE_NAME]) m4trace:configure.ac:78: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:78: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ @%:@undef PACKAGE_TARNAME]) m4trace:configure.ac:78: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:78: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ @%:@undef PACKAGE_VERSION]) m4trace:configure.ac:78: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:78: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ @%:@undef PACKAGE_STRING]) m4trace:configure.ac:78: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:78: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ @%:@undef PACKAGE_BUGREPORT]) m4trace:configure.ac:78: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:78: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ @%:@undef PACKAGE_URL]) m4trace:configure.ac:78: -1- AC_SUBST([DEFS]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([DEFS]) m4trace:configure.ac:78: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:78: -1- AC_SUBST([ECHO_C]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([ECHO_C]) m4trace:configure.ac:78: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:78: -1- AC_SUBST([ECHO_N]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([ECHO_N]) m4trace:configure.ac:78: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:78: -1- AC_SUBST([ECHO_T]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([ECHO_T]) m4trace:configure.ac:78: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:78: -1- AC_SUBST([LIBS]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:78: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:78: -1- AC_SUBST([build_alias]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([build_alias]) m4trace:configure.ac:78: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:78: -1- AC_SUBST([host_alias]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([host_alias]) m4trace:configure.ac:78: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:78: -1- AC_SUBST([target_alias]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([target_alias]) m4trace:configure.ac:78: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:80: -1- AC_CONFIG_AUX_DIR([.]) m4trace:configure.ac:108: -1- m4_include([libfizmo/config-flags.m4]) m4trace:configure.ac:109: -1- m4_include([libcellif/config-flags.m4]) m4trace:configure.ac:110: -1- m4_include([libdrilbo/config-flags.m4]) m4trace:configure.ac:111: -1- m4_include([fizmo-console/config-flags.m4]) m4trace:configure.ac:112: -1- m4_include([fizmo-ncursesw/config-flags.m4]) m4trace:configure.ac:116: -1- m4_include([libglkif/config-flags.m4]) m4trace:configure.ac:116: -1- m4_include([fizmo-glktermw/config-flags.m4]) m4trace:configure.ac:119: -1- m4_include([libsndifsdl2/config-flags.m4]) m4trace:configure.ac:124: -1- m4_include([libfizmo/config-libs.m4]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([PKG_CONFIG]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([PKG_CONFIG_PATH]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([PKG_CONFIG_PATH]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^PKG_CONFIG_PATH$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([PKG_CONFIG_LIBDIR]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([PKG_CONFIG_LIBDIR]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^PKG_CONFIG_LIBDIR$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([PKG_CONFIG]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([libxml2_CFLAGS]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([libxml2_CFLAGS]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^libxml2_CFLAGS$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([libxml2_LIBS]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([libxml2_LIBS]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^libxml2_LIBS$]) m4trace:libfizmo/config-libs.m4:6: -1- AH_OUTPUT([HAVE_LIBXML2], [/* Define to 1 if you have the `xml2\' library (-lxml2). */ @%:@undef HAVE_LIBXML2]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([CC]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([CC]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CC$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([CFLAGS]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CFLAGS$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([LDFLAGS]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([LIBS]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([LIBS]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^LIBS$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([CPPFLAGS]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([CC]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([CC]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CC$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([CC]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([CC]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CC$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([CC]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([CC]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CC$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([CC]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([CC]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^CC$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([ac_ct_CC]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([EXEEXT]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^EXEEXT$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) m4trace:libfizmo/config-libs.m4:6: -1- AC_SUBST_TRACE([OBJEXT]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^OBJEXT$]) m4trace:libfizmo/config-libs.m4:6: -1- AC_REQUIRE_AUX_FILE([compile]) m4trace:libfizmo/config-libs.m4:6: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBXML2]) m4trace:libfizmo/config-libs.m4:6: -1- m4_pattern_allow([^HAVE_LIBXML2$]) m4trace:configure.ac:125: -1- m4_include([libcellif/config-libs.m4]) m4trace:configure.ac:126: -1- m4_include([libdrilbo/config-libs.m4]) m4trace:libdrilbo/config-libs.m4:8: -1- AC_SUBST([x11_CFLAGS]) m4trace:libdrilbo/config-libs.m4:8: -1- AC_SUBST_TRACE([x11_CFLAGS]) m4trace:libdrilbo/config-libs.m4:8: -1- m4_pattern_allow([^x11_CFLAGS$]) m4trace:libdrilbo/config-libs.m4:8: -1- AC_SUBST([x11_LIBS]) m4trace:libdrilbo/config-libs.m4:8: -1- AC_SUBST_TRACE([x11_LIBS]) m4trace:libdrilbo/config-libs.m4:8: -1- m4_pattern_allow([^x11_LIBS$]) m4trace:libdrilbo/config-libs.m4:60: -1- AC_SUBST([jpeg_CFLAGS]) m4trace:libdrilbo/config-libs.m4:60: -1- AC_SUBST_TRACE([jpeg_CFLAGS]) m4trace:libdrilbo/config-libs.m4:60: -1- m4_pattern_allow([^jpeg_CFLAGS$]) m4trace:libdrilbo/config-libs.m4:60: -1- AC_SUBST([jpeg_LIBS]) m4trace:libdrilbo/config-libs.m4:60: -1- AC_SUBST_TRACE([jpeg_LIBS]) m4trace:libdrilbo/config-libs.m4:60: -1- m4_pattern_allow([^jpeg_LIBS$]) m4trace:libdrilbo/config-libs.m4:60: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... aclocal.m4:181: PKG_CHECK_MODULES is expanded from... ../../lib/m4sugar/m4sh.m4:643: AS_IF is expanded from... libdrilbo/config-libs.m4:60: the top level]) m4trace:libdrilbo/config-libs.m4:60: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... aclocal.m4:181: PKG_CHECK_MODULES is expanded from... ../../lib/m4sugar/m4sh.m4:643: AS_IF is expanded from... libdrilbo/config-libs.m4:60: the top level]) m4trace:libdrilbo/config-libs.m4:68: -1- AC_SUBST([png_CFLAGS]) m4trace:libdrilbo/config-libs.m4:68: -1- AC_SUBST_TRACE([png_CFLAGS]) m4trace:libdrilbo/config-libs.m4:68: -1- m4_pattern_allow([^png_CFLAGS$]) m4trace:libdrilbo/config-libs.m4:68: -1- AC_SUBST([png_LIBS]) m4trace:libdrilbo/config-libs.m4:68: -1- AC_SUBST_TRACE([png_LIBS]) m4trace:libdrilbo/config-libs.m4:68: -1- m4_pattern_allow([^png_LIBS$]) m4trace:configure.ac:127: -1- m4_include([fizmo-console/config-libs.m4]) m4trace:configure.ac:128: -1- m4_include([fizmo-ncursesw/config-libs.m4]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- AC_SUBST([ncursesw_CFLAGS]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- AC_SUBST_TRACE([ncursesw_CFLAGS]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- m4_pattern_allow([^ncursesw_CFLAGS$]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- AC_SUBST([ncursesw_LIBS]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- AC_SUBST_TRACE([ncursesw_LIBS]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- m4_pattern_allow([^ncursesw_LIBS$]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... aclocal.m4:181: PKG_CHECK_MODULES is expanded from... fizmo-ncursesw/config-libs.m4:72: the top level]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... aclocal.m4:181: PKG_CHECK_MODULES is expanded from... fizmo-ncursesw/config-libs.m4:72: the top level]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... aclocal.m4:181: PKG_CHECK_MODULES is expanded from... fizmo-ncursesw/config-libs.m4:72: the top level]) m4trace:fizmo-ncursesw/config-libs.m4:72: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... aclocal.m4:181: PKG_CHECK_MODULES is expanded from... fizmo-ncursesw/config-libs.m4:72: the top level]) m4trace:fizmo-ncursesw/config-libs.m4:76: -1- AC_SUBST([x11_CFLAGS]) m4trace:fizmo-ncursesw/config-libs.m4:76: -1- AC_SUBST_TRACE([x11_CFLAGS]) m4trace:fizmo-ncursesw/config-libs.m4:76: -1- m4_pattern_allow([^x11_CFLAGS$]) m4trace:fizmo-ncursesw/config-libs.m4:76: -1- AC_SUBST([x11_LIBS]) m4trace:fizmo-ncursesw/config-libs.m4:76: -1- AC_SUBST_TRACE([x11_LIBS]) m4trace:fizmo-ncursesw/config-libs.m4:76: -1- m4_pattern_allow([^x11_LIBS$]) m4trace:configure.ac:132: -1- m4_include([libglkif/config-libs.m4]) m4trace:libglkif/config-libs.m4:13: -1- AC_SUBST([ncursesw_CFLAGS]) m4trace:libglkif/config-libs.m4:13: -1- AC_SUBST_TRACE([ncursesw_CFLAGS]) m4trace:libglkif/config-libs.m4:13: -1- m4_pattern_allow([^ncursesw_CFLAGS$]) m4trace:libglkif/config-libs.m4:13: -1- AC_SUBST([ncursesw_LIBS]) m4trace:libglkif/config-libs.m4:13: -1- AC_SUBST_TRACE([ncursesw_LIBS]) m4trace:libglkif/config-libs.m4:13: -1- m4_pattern_allow([^ncursesw_LIBS$]) m4trace:libglkif/config-libs.m4:32: -1- AC_SUBST([CPP]) m4trace:libglkif/config-libs.m4:32: -1- AC_SUBST_TRACE([CPP]) m4trace:libglkif/config-libs.m4:32: -1- m4_pattern_allow([^CPP$]) m4trace:libglkif/config-libs.m4:32: -1- AC_SUBST([CPPFLAGS]) m4trace:libglkif/config-libs.m4:32: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:libglkif/config-libs.m4:32: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:libglkif/config-libs.m4:32: -1- AC_SUBST([CPP]) m4trace:libglkif/config-libs.m4:32: -1- AC_SUBST_TRACE([CPP]) m4trace:libglkif/config-libs.m4:32: -1- m4_pattern_allow([^CPP$]) m4trace:libglkif/config-libs.m4:32: -1- AC_SUBST([GREP]) m4trace:libglkif/config-libs.m4:32: -1- AC_SUBST_TRACE([GREP]) m4trace:libglkif/config-libs.m4:32: -1- m4_pattern_allow([^GREP$]) m4trace:libglkif/config-libs.m4:32: -1- AC_SUBST([EGREP]) m4trace:libglkif/config-libs.m4:32: -1- AC_SUBST_TRACE([EGREP]) m4trace:libglkif/config-libs.m4:32: -1- m4_pattern_allow([^EGREP$]) m4trace:libglkif/config-libs.m4:32: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) m4trace:libglkif/config-libs.m4:32: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:libglkif/config-libs.m4:32: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ @%:@undef STDC_HEADERS]) m4trace:libglkif/config-libs.m4:32: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_TYPES_H]) m4trace:libglkif/config-libs.m4:32: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_STAT_H]) m4trace:libglkif/config-libs.m4:32: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDLIB_H]) m4trace:libglkif/config-libs.m4:32: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRING_H]) m4trace:libglkif/config-libs.m4:32: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_MEMORY_H]) m4trace:libglkif/config-libs.m4:32: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRINGS_H]) m4trace:libglkif/config-libs.m4:32: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_INTTYPES_H]) m4trace:libglkif/config-libs.m4:32: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDINT_H]) m4trace:libglkif/config-libs.m4:32: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_UNISTD_H]) m4trace:libglkif/config-libs.m4:65: -1- AH_OUTPUT([HAVE_LIBGLKTERMW], [/* Define to 1 if you have the `glktermw\' library (-lglktermw). */ @%:@undef HAVE_LIBGLKTERMW]) m4trace:libglkif/config-libs.m4:65: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBGLKTERMW]) m4trace:libglkif/config-libs.m4:65: -1- m4_pattern_allow([^HAVE_LIBGLKTERMW$]) m4trace:configure.ac:132: -1- m4_include([fizmo-glktermw/config-libs.m4]) m4trace:fizmo-glktermw/config-libs.m4:2: -1- AC_SUBST([ncursesw_CFLAGS]) m4trace:fizmo-glktermw/config-libs.m4:2: -1- AC_SUBST_TRACE([ncursesw_CFLAGS]) m4trace:fizmo-glktermw/config-libs.m4:2: -1- m4_pattern_allow([^ncursesw_CFLAGS$]) m4trace:fizmo-glktermw/config-libs.m4:2: -1- AC_SUBST([ncursesw_LIBS]) m4trace:fizmo-glktermw/config-libs.m4:2: -1- AC_SUBST_TRACE([ncursesw_LIBS]) m4trace:fizmo-glktermw/config-libs.m4:2: -1- m4_pattern_allow([^ncursesw_LIBS$]) m4trace:configure.ac:135: -1- m4_include([libsndifsdl2/config-libs.m4]) m4trace:libsndifsdl2/config-libs.m4:2: -1- AC_SUBST([sdl2_CFLAGS]) m4trace:libsndifsdl2/config-libs.m4:2: -1- AC_SUBST_TRACE([sdl2_CFLAGS]) m4trace:libsndifsdl2/config-libs.m4:2: -1- m4_pattern_allow([^sdl2_CFLAGS$]) m4trace:libsndifsdl2/config-libs.m4:2: -1- AC_SUBST([sdl2_LIBS]) m4trace:libsndifsdl2/config-libs.m4:2: -1- AC_SUBST_TRACE([sdl2_LIBS]) m4trace:libsndifsdl2/config-libs.m4:2: -1- m4_pattern_allow([^sdl2_LIBS$]) m4trace:libsndifsdl2/config-libs.m4:6: -1- AC_SUBST([sndfile_CFLAGS]) m4trace:libsndifsdl2/config-libs.m4:6: -1- AC_SUBST_TRACE([sndfile_CFLAGS]) m4trace:libsndifsdl2/config-libs.m4:6: -1- m4_pattern_allow([^sndfile_CFLAGS$]) m4trace:libsndifsdl2/config-libs.m4:6: -1- AC_SUBST([sndfile_LIBS]) m4trace:libsndifsdl2/config-libs.m4:6: -1- AC_SUBST_TRACE([sndfile_LIBS]) m4trace:libsndifsdl2/config-libs.m4:6: -1- m4_pattern_allow([^sndfile_LIBS$]) m4trace:configure.ac:137: -1- AM_INIT_AUTOMAKE([-Wall -Werror foreign]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.ac:137: -1- AM_AUTOMAKE_VERSION([1.15]) m4trace:configure.ac:137: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:137: -1- AC_SUBST([INSTALL_PROGRAM]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) m4trace:configure.ac:137: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:137: -1- AC_SUBST([INSTALL_SCRIPT]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) m4trace:configure.ac:137: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:137: -1- AC_SUBST([INSTALL_DATA]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([INSTALL_DATA]) m4trace:configure.ac:137: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:137: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([am__isrc]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__isrc$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([am__isrc]) m4trace:configure.ac:137: -1- AC_SUBST([CYGPATH_W]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([CYGPATH_W]) m4trace:configure.ac:137: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.ac:137: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME']) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([PACKAGE]) m4trace:configure.ac:137: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:137: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION']) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([VERSION]) m4trace:configure.ac:137: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:137: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) m4trace:configure.ac:137: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:137: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ @%:@undef PACKAGE]) m4trace:configure.ac:137: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) m4trace:configure.ac:137: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:137: -1- AH_OUTPUT([VERSION], [/* Version number of package */ @%:@undef VERSION]) m4trace:configure.ac:137: -1- AC_REQUIRE_AUX_FILE([missing]) m4trace:configure.ac:137: -1- AC_SUBST([ACLOCAL]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([ACLOCAL]) m4trace:configure.ac:137: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.ac:137: -1- AC_SUBST([AUTOCONF]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([AUTOCONF]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.ac:137: -1- AC_SUBST([AUTOMAKE]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([AUTOMAKE]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.ac:137: -1- AC_SUBST([AUTOHEADER]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([AUTOHEADER]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.ac:137: -1- AC_SUBST([MAKEINFO]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([MAKEINFO]) m4trace:configure.ac:137: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.ac:137: -1- AC_SUBST([install_sh]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([install_sh]) m4trace:configure.ac:137: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.ac:137: -1- AC_SUBST([STRIP]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([STRIP]) m4trace:configure.ac:137: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.ac:137: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:137: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.ac:137: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:137: -1- AC_SUBST([MKDIR_P]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([MKDIR_P]) m4trace:configure.ac:137: -1- m4_pattern_allow([^MKDIR_P$]) m4trace:configure.ac:137: -1- AC_SUBST([mkdir_p], ['$(MKDIR_P)']) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([mkdir_p]) m4trace:configure.ac:137: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.ac:137: -1- AC_SUBST([AWK]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([AWK]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:137: -1- AC_SUBST([SET_MAKE]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([SET_MAKE]) m4trace:configure.ac:137: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.ac:137: -1- AC_SUBST([am__leading_dot]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([am__leading_dot]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.ac:137: -1- AC_SUBST([AMTAR], ['$${TAR-tar}']) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([AMTAR]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.ac:137: -1- AC_SUBST([am__tar]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([am__tar]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__tar$]) m4trace:configure.ac:137: -1- AC_SUBST([am__untar]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([am__untar]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__untar$]) m4trace:configure.ac:137: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([DEPDIR]) m4trace:configure.ac:137: -1- m4_pattern_allow([^DEPDIR$]) m4trace:configure.ac:137: -1- AC_SUBST([am__include]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([am__include]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__include$]) m4trace:configure.ac:137: -1- AC_SUBST([am__quote]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([am__quote]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__quote$]) m4trace:configure.ac:137: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) m4trace:configure.ac:137: -1- AC_SUBST([AMDEP_TRUE]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([AMDEP_TRUE]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AMDEP_TRUE$]) m4trace:configure.ac:137: -1- AC_SUBST([AMDEP_FALSE]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([AMDEP_FALSE]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AMDEP_FALSE$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) m4trace:configure.ac:137: -1- AC_SUBST([AMDEPBACKSLASH]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) m4trace:configure.ac:137: -1- AC_SUBST([am__nodep]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([am__nodep]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__nodep$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([am__nodep]) m4trace:configure.ac:137: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.ac:137: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:137: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:137: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:137: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.ac:137: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:137: -1- AM_SILENT_RULES m4trace:configure.ac:137: -1- AC_SUBST([AM_V]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([AM_V]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AM_V$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([AM_V]) m4trace:configure.ac:137: -1- AC_SUBST([AM_DEFAULT_V]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([AM_DEFAULT_V]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AM_DEFAULT_V$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V]) m4trace:configure.ac:137: -1- AC_SUBST([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$]) m4trace:configure.ac:137: -1- AC_SUBST([AM_BACKSLASH]) m4trace:configure.ac:137: -1- AC_SUBST_TRACE([AM_BACKSLASH]) m4trace:configure.ac:137: -1- m4_pattern_allow([^AM_BACKSLASH$]) m4trace:configure.ac:137: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH]) m4trace:configure.ac:138: -1- AC_SUBST([CC]) m4trace:configure.ac:138: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:138: -1- AC_SUBST([CFLAGS]) m4trace:configure.ac:138: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:138: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:138: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:138: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:138: -1- AC_SUBST([LIBS]) m4trace:configure.ac:138: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:138: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:138: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:138: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:138: -1- AC_SUBST([CC]) m4trace:configure.ac:138: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:138: -1- AC_SUBST([CC]) m4trace:configure.ac:138: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:138: -1- AC_SUBST([CC]) m4trace:configure.ac:138: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:138: -1- AC_SUBST([CC]) m4trace:configure.ac:138: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:138: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:138: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.ac:138: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.ac:138: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:138: -1- AC_REQUIRE_AUX_FILE([compile]) m4trace:configure.ac:139: -1- AC_SUBST([RANLIB]) m4trace:configure.ac:139: -1- AC_SUBST_TRACE([RANLIB]) m4trace:configure.ac:139: -1- m4_pattern_allow([^RANLIB$]) m4trace:configure.ac:140: -1- AM_PROG_AR m4trace:configure.ac:140: -1- AC_REQUIRE_AUX_FILE([ar-lib]) m4trace:configure.ac:140: -1- AC_SUBST([AR]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([AR]) m4trace:configure.ac:140: -1- m4_pattern_allow([^AR$]) m4trace:configure.ac:140: -1- AC_SUBST([ac_ct_AR]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([ac_ct_AR]) m4trace:configure.ac:140: -1- m4_pattern_allow([^ac_ct_AR$]) m4trace:configure.ac:140: -1- AC_SUBST([AR]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([AR]) m4trace:configure.ac:140: -1- m4_pattern_allow([^AR$]) m4trace:configure.ac:147: -1- AM_CONDITIONAL([ENABLE_TRACING], [test "$enable_tracing" = "yes"]) m4trace:configure.ac:147: -1- AC_SUBST([ENABLE_TRACING_TRUE]) m4trace:configure.ac:147: -1- AC_SUBST_TRACE([ENABLE_TRACING_TRUE]) m4trace:configure.ac:147: -1- m4_pattern_allow([^ENABLE_TRACING_TRUE$]) m4trace:configure.ac:147: -1- AC_SUBST([ENABLE_TRACING_FALSE]) m4trace:configure.ac:147: -1- AC_SUBST_TRACE([ENABLE_TRACING_FALSE]) m4trace:configure.ac:147: -1- m4_pattern_allow([^ENABLE_TRACING_FALSE$]) m4trace:configure.ac:147: -1- _AM_SUBST_NOTMAKE([ENABLE_TRACING_TRUE]) m4trace:configure.ac:147: -1- _AM_SUBST_NOTMAKE([ENABLE_TRACING_FALSE]) m4trace:configure.ac:148: -1- AM_CONDITIONAL([ENABLE_SDL], [test "$enable_sdl" != "no"]) m4trace:configure.ac:148: -1- AC_SUBST([ENABLE_SDL_TRUE]) m4trace:configure.ac:148: -1- AC_SUBST_TRACE([ENABLE_SDL_TRUE]) m4trace:configure.ac:148: -1- m4_pattern_allow([^ENABLE_SDL_TRUE$]) m4trace:configure.ac:148: -1- AC_SUBST([ENABLE_SDL_FALSE]) m4trace:configure.ac:148: -1- AC_SUBST_TRACE([ENABLE_SDL_FALSE]) m4trace:configure.ac:148: -1- m4_pattern_allow([^ENABLE_SDL_FALSE$]) m4trace:configure.ac:148: -1- _AM_SUBST_NOTMAKE([ENABLE_SDL_TRUE]) m4trace:configure.ac:148: -1- _AM_SUBST_NOTMAKE([ENABLE_SDL_FALSE]) m4trace:configure.ac:149: -1- m4_include([libfizmo/config-conds.m4]) m4trace:libfizmo/config-conds.m4:3: -1- AM_CONDITIONAL([ENABLE_BABEL], [test "$enable_babel" != "no"]) m4trace:libfizmo/config-conds.m4:3: -1- AC_SUBST([ENABLE_BABEL_TRUE]) m4trace:libfizmo/config-conds.m4:3: -1- AC_SUBST_TRACE([ENABLE_BABEL_TRUE]) m4trace:libfizmo/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_BABEL_TRUE$]) m4trace:libfizmo/config-conds.m4:3: -1- AC_SUBST([ENABLE_BABEL_FALSE]) m4trace:libfizmo/config-conds.m4:3: -1- AC_SUBST_TRACE([ENABLE_BABEL_FALSE]) m4trace:libfizmo/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_BABEL_FALSE$]) m4trace:libfizmo/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_BABEL_TRUE]) m4trace:libfizmo/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_BABEL_FALSE]) m4trace:libfizmo/config-conds.m4:6: -1- AM_CONDITIONAL([ENABLE_STRICT_Z], [test "$enable_strict_z" = "yes"]) m4trace:libfizmo/config-conds.m4:6: -1- AC_SUBST([ENABLE_STRICT_Z_TRUE]) m4trace:libfizmo/config-conds.m4:6: -1- AC_SUBST_TRACE([ENABLE_STRICT_Z_TRUE]) m4trace:libfizmo/config-conds.m4:6: -1- m4_pattern_allow([^ENABLE_STRICT_Z_TRUE$]) m4trace:libfizmo/config-conds.m4:6: -1- AC_SUBST([ENABLE_STRICT_Z_FALSE]) m4trace:libfizmo/config-conds.m4:6: -1- AC_SUBST_TRACE([ENABLE_STRICT_Z_FALSE]) m4trace:libfizmo/config-conds.m4:6: -1- m4_pattern_allow([^ENABLE_STRICT_Z_FALSE$]) m4trace:libfizmo/config-conds.m4:6: -1- _AM_SUBST_NOTMAKE([ENABLE_STRICT_Z_TRUE]) m4trace:libfizmo/config-conds.m4:6: -1- _AM_SUBST_NOTMAKE([ENABLE_STRICT_Z_FALSE]) m4trace:libfizmo/config-conds.m4:9: -1- AM_CONDITIONAL([ENABLE_SEGFAULT_ON_ERROR], [test "$enable_segfault-on-error" = "yes"]) m4trace:libfizmo/config-conds.m4:9: -1- AC_SUBST([ENABLE_SEGFAULT_ON_ERROR_TRUE]) m4trace:libfizmo/config-conds.m4:9: -1- AC_SUBST_TRACE([ENABLE_SEGFAULT_ON_ERROR_TRUE]) m4trace:libfizmo/config-conds.m4:9: -1- m4_pattern_allow([^ENABLE_SEGFAULT_ON_ERROR_TRUE$]) m4trace:libfizmo/config-conds.m4:9: -1- AC_SUBST([ENABLE_SEGFAULT_ON_ERROR_FALSE]) m4trace:libfizmo/config-conds.m4:9: -1- AC_SUBST_TRACE([ENABLE_SEGFAULT_ON_ERROR_FALSE]) m4trace:libfizmo/config-conds.m4:9: -1- m4_pattern_allow([^ENABLE_SEGFAULT_ON_ERROR_FALSE$]) m4trace:libfizmo/config-conds.m4:9: -1- _AM_SUBST_NOTMAKE([ENABLE_SEGFAULT_ON_ERROR_TRUE]) m4trace:libfizmo/config-conds.m4:9: -1- _AM_SUBST_NOTMAKE([ENABLE_SEGFAULT_ON_ERROR_FALSE]) m4trace:libfizmo/config-conds.m4:12: -1- AM_CONDITIONAL([ENABLE_FILELIST], [test "$enable_filelist" != "no"]) m4trace:libfizmo/config-conds.m4:12: -1- AC_SUBST([ENABLE_FILELIST_TRUE]) m4trace:libfizmo/config-conds.m4:12: -1- AC_SUBST_TRACE([ENABLE_FILELIST_TRUE]) m4trace:libfizmo/config-conds.m4:12: -1- m4_pattern_allow([^ENABLE_FILELIST_TRUE$]) m4trace:libfizmo/config-conds.m4:12: -1- AC_SUBST([ENABLE_FILELIST_FALSE]) m4trace:libfizmo/config-conds.m4:12: -1- AC_SUBST_TRACE([ENABLE_FILELIST_FALSE]) m4trace:libfizmo/config-conds.m4:12: -1- m4_pattern_allow([^ENABLE_FILELIST_FALSE$]) m4trace:libfizmo/config-conds.m4:12: -1- _AM_SUBST_NOTMAKE([ENABLE_FILELIST_TRUE]) m4trace:libfizmo/config-conds.m4:12: -1- _AM_SUBST_NOTMAKE([ENABLE_FILELIST_FALSE]) m4trace:libfizmo/config-conds.m4:15: -1- AM_CONDITIONAL([ENABLE_BLOCKBUFFER], [test "$enable_blockbuffer" != "no"]) m4trace:libfizmo/config-conds.m4:15: -1- AC_SUBST([ENABLE_BLOCKBUFFER_TRUE]) m4trace:libfizmo/config-conds.m4:15: -1- AC_SUBST_TRACE([ENABLE_BLOCKBUFFER_TRUE]) m4trace:libfizmo/config-conds.m4:15: -1- m4_pattern_allow([^ENABLE_BLOCKBUFFER_TRUE$]) m4trace:libfizmo/config-conds.m4:15: -1- AC_SUBST([ENABLE_BLOCKBUFFER_FALSE]) m4trace:libfizmo/config-conds.m4:15: -1- AC_SUBST_TRACE([ENABLE_BLOCKBUFFER_FALSE]) m4trace:libfizmo/config-conds.m4:15: -1- m4_pattern_allow([^ENABLE_BLOCKBUFFER_FALSE$]) m4trace:libfizmo/config-conds.m4:15: -1- _AM_SUBST_NOTMAKE([ENABLE_BLOCKBUFFER_TRUE]) m4trace:libfizmo/config-conds.m4:15: -1- _AM_SUBST_NOTMAKE([ENABLE_BLOCKBUFFER_FALSE]) m4trace:libfizmo/config-conds.m4:18: -1- AM_CONDITIONAL([ENABLE_COMMAND_HISTORY], [test "$enable_command_history" != "no"]) m4trace:libfizmo/config-conds.m4:18: -1- AC_SUBST([ENABLE_COMMAND_HISTORY_TRUE]) m4trace:libfizmo/config-conds.m4:18: -1- AC_SUBST_TRACE([ENABLE_COMMAND_HISTORY_TRUE]) m4trace:libfizmo/config-conds.m4:18: -1- m4_pattern_allow([^ENABLE_COMMAND_HISTORY_TRUE$]) m4trace:libfizmo/config-conds.m4:18: -1- AC_SUBST([ENABLE_COMMAND_HISTORY_FALSE]) m4trace:libfizmo/config-conds.m4:18: -1- AC_SUBST_TRACE([ENABLE_COMMAND_HISTORY_FALSE]) m4trace:libfizmo/config-conds.m4:18: -1- m4_pattern_allow([^ENABLE_COMMAND_HISTORY_FALSE$]) m4trace:libfizmo/config-conds.m4:18: -1- _AM_SUBST_NOTMAKE([ENABLE_COMMAND_HISTORY_TRUE]) m4trace:libfizmo/config-conds.m4:18: -1- _AM_SUBST_NOTMAKE([ENABLE_COMMAND_HISTORY_FALSE]) m4trace:libfizmo/config-conds.m4:21: -1- AM_CONDITIONAL([ENABLE_OUTPUT_HISTORY], [test "$enable_output_history" != "no"]) m4trace:libfizmo/config-conds.m4:21: -1- AC_SUBST([ENABLE_OUTPUT_HISTORY_TRUE]) m4trace:libfizmo/config-conds.m4:21: -1- AC_SUBST_TRACE([ENABLE_OUTPUT_HISTORY_TRUE]) m4trace:libfizmo/config-conds.m4:21: -1- m4_pattern_allow([^ENABLE_OUTPUT_HISTORY_TRUE$]) m4trace:libfizmo/config-conds.m4:21: -1- AC_SUBST([ENABLE_OUTPUT_HISTORY_FALSE]) m4trace:libfizmo/config-conds.m4:21: -1- AC_SUBST_TRACE([ENABLE_OUTPUT_HISTORY_FALSE]) m4trace:libfizmo/config-conds.m4:21: -1- m4_pattern_allow([^ENABLE_OUTPUT_HISTORY_FALSE$]) m4trace:libfizmo/config-conds.m4:21: -1- _AM_SUBST_NOTMAKE([ENABLE_OUTPUT_HISTORY_TRUE]) m4trace:libfizmo/config-conds.m4:21: -1- _AM_SUBST_NOTMAKE([ENABLE_OUTPUT_HISTORY_FALSE]) m4trace:libfizmo/config-conds.m4:24: -1- AM_CONDITIONAL([ENABLE_CONFIG_FILES], [test "$enable_config_files" != "no"]) m4trace:libfizmo/config-conds.m4:24: -1- AC_SUBST([ENABLE_CONFIG_FILES_TRUE]) m4trace:libfizmo/config-conds.m4:24: -1- AC_SUBST_TRACE([ENABLE_CONFIG_FILES_TRUE]) m4trace:libfizmo/config-conds.m4:24: -1- m4_pattern_allow([^ENABLE_CONFIG_FILES_TRUE$]) m4trace:libfizmo/config-conds.m4:24: -1- AC_SUBST([ENABLE_CONFIG_FILES_FALSE]) m4trace:libfizmo/config-conds.m4:24: -1- AC_SUBST_TRACE([ENABLE_CONFIG_FILES_FALSE]) m4trace:libfizmo/config-conds.m4:24: -1- m4_pattern_allow([^ENABLE_CONFIG_FILES_FALSE$]) m4trace:libfizmo/config-conds.m4:24: -1- _AM_SUBST_NOTMAKE([ENABLE_CONFIG_FILES_TRUE]) m4trace:libfizmo/config-conds.m4:24: -1- _AM_SUBST_NOTMAKE([ENABLE_CONFIG_FILES_FALSE]) m4trace:libfizmo/config-conds.m4:27: -1- AM_CONDITIONAL([ENABLE_PREFIX_COMMANDS], [test "$enable_prefix_commands" != "no"]) m4trace:libfizmo/config-conds.m4:27: -1- AC_SUBST([ENABLE_PREFIX_COMMANDS_TRUE]) m4trace:libfizmo/config-conds.m4:27: -1- AC_SUBST_TRACE([ENABLE_PREFIX_COMMANDS_TRUE]) m4trace:libfizmo/config-conds.m4:27: -1- m4_pattern_allow([^ENABLE_PREFIX_COMMANDS_TRUE$]) m4trace:libfizmo/config-conds.m4:27: -1- AC_SUBST([ENABLE_PREFIX_COMMANDS_FALSE]) m4trace:libfizmo/config-conds.m4:27: -1- AC_SUBST_TRACE([ENABLE_PREFIX_COMMANDS_FALSE]) m4trace:libfizmo/config-conds.m4:27: -1- m4_pattern_allow([^ENABLE_PREFIX_COMMANDS_FALSE$]) m4trace:libfizmo/config-conds.m4:27: -1- _AM_SUBST_NOTMAKE([ENABLE_PREFIX_COMMANDS_TRUE]) m4trace:libfizmo/config-conds.m4:27: -1- _AM_SUBST_NOTMAKE([ENABLE_PREFIX_COMMANDS_FALSE]) m4trace:libfizmo/config-conds.m4:30: -1- AM_CONDITIONAL([ENABLE_DEBUGGER], [test "$enable_debugger" = "yes"]) m4trace:libfizmo/config-conds.m4:30: -1- AC_SUBST([ENABLE_DEBUGGER_TRUE]) m4trace:libfizmo/config-conds.m4:30: -1- AC_SUBST_TRACE([ENABLE_DEBUGGER_TRUE]) m4trace:libfizmo/config-conds.m4:30: -1- m4_pattern_allow([^ENABLE_DEBUGGER_TRUE$]) m4trace:libfizmo/config-conds.m4:30: -1- AC_SUBST([ENABLE_DEBUGGER_FALSE]) m4trace:libfizmo/config-conds.m4:30: -1- AC_SUBST_TRACE([ENABLE_DEBUGGER_FALSE]) m4trace:libfizmo/config-conds.m4:30: -1- m4_pattern_allow([^ENABLE_DEBUGGER_FALSE$]) m4trace:libfizmo/config-conds.m4:30: -1- _AM_SUBST_NOTMAKE([ENABLE_DEBUGGER_TRUE]) m4trace:libfizmo/config-conds.m4:30: -1- _AM_SUBST_NOTMAKE([ENABLE_DEBUGGER_FALSE]) m4trace:libfizmo/config-conds.m4:33: -1- AM_CONDITIONAL([FIZMO_DIST_VERSION], [test "x$fizmo_dist_version" != "x"]) m4trace:libfizmo/config-conds.m4:33: -1- AC_SUBST([FIZMO_DIST_VERSION_TRUE]) m4trace:libfizmo/config-conds.m4:33: -1- AC_SUBST_TRACE([FIZMO_DIST_VERSION_TRUE]) m4trace:libfizmo/config-conds.m4:33: -1- m4_pattern_allow([^FIZMO_DIST_VERSION_TRUE$]) m4trace:libfizmo/config-conds.m4:33: -1- AC_SUBST([FIZMO_DIST_VERSION_FALSE]) m4trace:libfizmo/config-conds.m4:33: -1- AC_SUBST_TRACE([FIZMO_DIST_VERSION_FALSE]) m4trace:libfizmo/config-conds.m4:33: -1- m4_pattern_allow([^FIZMO_DIST_VERSION_FALSE$]) m4trace:libfizmo/config-conds.m4:33: -1- _AM_SUBST_NOTMAKE([FIZMO_DIST_VERSION_TRUE]) m4trace:libfizmo/config-conds.m4:33: -1- _AM_SUBST_NOTMAKE([FIZMO_DIST_VERSION_FALSE]) m4trace:configure.ac:150: -1- m4_include([libcellif/config-conds.m4]) m4trace:configure.ac:151: -1- m4_include([libdrilbo/config-conds.m4]) m4trace:libdrilbo/config-conds.m4:3: -1- AM_CONDITIONAL([ENABLE_X11], [test "$enable_x11" != "no"]) m4trace:libdrilbo/config-conds.m4:3: -1- AC_SUBST([ENABLE_X11_TRUE]) m4trace:libdrilbo/config-conds.m4:3: -1- AC_SUBST_TRACE([ENABLE_X11_TRUE]) m4trace:libdrilbo/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_X11_TRUE$]) m4trace:libdrilbo/config-conds.m4:3: -1- AC_SUBST([ENABLE_X11_FALSE]) m4trace:libdrilbo/config-conds.m4:3: -1- AC_SUBST_TRACE([ENABLE_X11_FALSE]) m4trace:libdrilbo/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_X11_FALSE$]) m4trace:libdrilbo/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_X11_TRUE]) m4trace:libdrilbo/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_X11_FALSE]) m4trace:libdrilbo/config-conds.m4:6: -1- AM_CONDITIONAL([ENABLE_JPEG], [test "$enable_jpeg" != "no"]) m4trace:libdrilbo/config-conds.m4:6: -1- AC_SUBST([ENABLE_JPEG_TRUE]) m4trace:libdrilbo/config-conds.m4:6: -1- AC_SUBST_TRACE([ENABLE_JPEG_TRUE]) m4trace:libdrilbo/config-conds.m4:6: -1- m4_pattern_allow([^ENABLE_JPEG_TRUE$]) m4trace:libdrilbo/config-conds.m4:6: -1- AC_SUBST([ENABLE_JPEG_FALSE]) m4trace:libdrilbo/config-conds.m4:6: -1- AC_SUBST_TRACE([ENABLE_JPEG_FALSE]) m4trace:libdrilbo/config-conds.m4:6: -1- m4_pattern_allow([^ENABLE_JPEG_FALSE$]) m4trace:libdrilbo/config-conds.m4:6: -1- _AM_SUBST_NOTMAKE([ENABLE_JPEG_TRUE]) m4trace:libdrilbo/config-conds.m4:6: -1- _AM_SUBST_NOTMAKE([ENABLE_JPEG_FALSE]) m4trace:libdrilbo/config-conds.m4:9: -1- AM_CONDITIONAL([ENABLE_PNG], [test "$enable_png" != "no"]) m4trace:libdrilbo/config-conds.m4:9: -1- AC_SUBST([ENABLE_PNG_TRUE]) m4trace:libdrilbo/config-conds.m4:9: -1- AC_SUBST_TRACE([ENABLE_PNG_TRUE]) m4trace:libdrilbo/config-conds.m4:9: -1- m4_pattern_allow([^ENABLE_PNG_TRUE$]) m4trace:libdrilbo/config-conds.m4:9: -1- AC_SUBST([ENABLE_PNG_FALSE]) m4trace:libdrilbo/config-conds.m4:9: -1- AC_SUBST_TRACE([ENABLE_PNG_FALSE]) m4trace:libdrilbo/config-conds.m4:9: -1- m4_pattern_allow([^ENABLE_PNG_FALSE$]) m4trace:libdrilbo/config-conds.m4:9: -1- _AM_SUBST_NOTMAKE([ENABLE_PNG_TRUE]) m4trace:libdrilbo/config-conds.m4:9: -1- _AM_SUBST_NOTMAKE([ENABLE_PNG_FALSE]) m4trace:configure.ac:152: -1- m4_include([fizmo-ncursesw/config-conds.m4]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- AM_CONDITIONAL([ENABLE_X11_IMAGES], [test "$enable_x11" != "no"]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- AC_SUBST([ENABLE_X11_IMAGES_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- AC_SUBST_TRACE([ENABLE_X11_IMAGES_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_X11_IMAGES_TRUE$]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- AC_SUBST([ENABLE_X11_IMAGES_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- AC_SUBST_TRACE([ENABLE_X11_IMAGES_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_X11_IMAGES_FALSE$]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_X11_IMAGES_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_X11_IMAGES_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- AM_CONDITIONAL([ENABLE_SDL], [test "$enable_sdl" != "no"]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- AC_SUBST([ENABLE_SDL_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- AC_SUBST_TRACE([ENABLE_SDL_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- m4_pattern_allow([^ENABLE_SDL_TRUE$]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- AC_SUBST([ENABLE_SDL_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- AC_SUBST_TRACE([ENABLE_SDL_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- m4_pattern_allow([^ENABLE_SDL_FALSE$]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- _AM_SUBST_NOTMAKE([ENABLE_SDL_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:6: -1- _AM_SUBST_NOTMAKE([ENABLE_SDL_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- AM_CONDITIONAL([ENABLE_FILELIST], [test "$enable_filelist" != "no"]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- AC_SUBST([ENABLE_FILELIST_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- AC_SUBST_TRACE([ENABLE_FILELIST_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- m4_pattern_allow([^ENABLE_FILELIST_TRUE$]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- AC_SUBST([ENABLE_FILELIST_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- AC_SUBST_TRACE([ENABLE_FILELIST_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- m4_pattern_allow([^ENABLE_FILELIST_FALSE$]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- _AM_SUBST_NOTMAKE([ENABLE_FILELIST_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:9: -1- _AM_SUBST_NOTMAKE([ENABLE_FILELIST_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- AM_CONDITIONAL([ENABLE_CONFIG_FILES], [test "$enable_config_files" != "no"]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- AC_SUBST([ENABLE_CONFIG_FILES_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- AC_SUBST_TRACE([ENABLE_CONFIG_FILES_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- m4_pattern_allow([^ENABLE_CONFIG_FILES_TRUE$]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- AC_SUBST([ENABLE_CONFIG_FILES_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- AC_SUBST_TRACE([ENABLE_CONFIG_FILES_FALSE]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- m4_pattern_allow([^ENABLE_CONFIG_FILES_FALSE$]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- _AM_SUBST_NOTMAKE([ENABLE_CONFIG_FILES_TRUE]) m4trace:fizmo-ncursesw/config-conds.m4:12: -1- _AM_SUBST_NOTMAKE([ENABLE_CONFIG_FILES_FALSE]) m4trace:configure.ac:153: -1- m4_include([fizmo-console/config-conds.m4]) m4trace:fizmo-console/config-conds.m4:3: -1- AM_CONDITIONAL([ENABLE_READCHAR_VIA_TERMIOS], [test "$enable_readchar_via_termios" != "no"]) m4trace:fizmo-console/config-conds.m4:3: -1- AC_SUBST([ENABLE_READCHAR_VIA_TERMIOS_TRUE]) m4trace:fizmo-console/config-conds.m4:3: -1- AC_SUBST_TRACE([ENABLE_READCHAR_VIA_TERMIOS_TRUE]) m4trace:fizmo-console/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_READCHAR_VIA_TERMIOS_TRUE$]) m4trace:fizmo-console/config-conds.m4:3: -1- AC_SUBST([ENABLE_READCHAR_VIA_TERMIOS_FALSE]) m4trace:fizmo-console/config-conds.m4:3: -1- AC_SUBST_TRACE([ENABLE_READCHAR_VIA_TERMIOS_FALSE]) m4trace:fizmo-console/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_READCHAR_VIA_TERMIOS_FALSE$]) m4trace:fizmo-console/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_READCHAR_VIA_TERMIOS_TRUE]) m4trace:fizmo-console/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_READCHAR_VIA_TERMIOS_FALSE]) m4trace:configure.ac:154: -1- m4_include([libglkif/config-conds.m4]) m4trace:configure.ac:155: -1- m4_include([fizmo-glktermw/config-conds.m4]) m4trace:configure.ac:156: -1- m4_include([libsndifsdl2/config-conds.m4]) m4trace:libsndifsdl2/config-conds.m4:3: -1- AM_CONDITIONAL([ENABLE_AIFF], [test "$enable_aiff" != "no"]) m4trace:libsndifsdl2/config-conds.m4:3: -1- AC_SUBST([ENABLE_AIFF_TRUE]) m4trace:libsndifsdl2/config-conds.m4:3: -1- AC_SUBST_TRACE([ENABLE_AIFF_TRUE]) m4trace:libsndifsdl2/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_AIFF_TRUE$]) m4trace:libsndifsdl2/config-conds.m4:3: -1- AC_SUBST([ENABLE_AIFF_FALSE]) m4trace:libsndifsdl2/config-conds.m4:3: -1- AC_SUBST_TRACE([ENABLE_AIFF_FALSE]) m4trace:libsndifsdl2/config-conds.m4:3: -1- m4_pattern_allow([^ENABLE_AIFF_FALSE$]) m4trace:libsndifsdl2/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_AIFF_TRUE]) m4trace:libsndifsdl2/config-conds.m4:3: -1- _AM_SUBST_NOTMAKE([ENABLE_AIFF_FALSE]) m4trace:configure.ac:165: -1- AC_SUBST([DEV_BUILD_PREFIX], [$build_prefix]) m4trace:configure.ac:165: -1- AC_SUBST_TRACE([DEV_BUILD_PREFIX]) m4trace:configure.ac:165: -1- m4_pattern_allow([^DEV_BUILD_PREFIX$]) m4trace:configure.ac:166: -1- AC_SUBST([FIZMO_DIST_VERSION], [0.7.10]) m4trace:configure.ac:166: -1- AC_SUBST_TRACE([FIZMO_DIST_VERSION]) m4trace:configure.ac:166: -1- m4_pattern_allow([^FIZMO_DIST_VERSION$]) m4trace:configure.ac:167: -1- m4_include([libfizmo/config-subst.m4]) m4trace:libfizmo/config-subst.m4:15: -1- AC_SUBST([libfizmo_CFLAGS], ["-I$build_prefix_cflags $xml2_CFLAGS $m_CFLAGS"]) m4trace:libfizmo/config-subst.m4:15: -1- AC_SUBST_TRACE([libfizmo_CFLAGS]) m4trace:libfizmo/config-subst.m4:15: -1- m4_pattern_allow([^libfizmo_CFLAGS$]) m4trace:libfizmo/config-subst.m4:16: -1- AC_SUBST([libfizmo_LIBS], ["-L$build_prefix_libs -lfizmo $xml2_LIBS $m_LIBS"]) m4trace:libfizmo/config-subst.m4:16: -1- AC_SUBST_TRACE([libfizmo_LIBS]) m4trace:libfizmo/config-subst.m4:16: -1- m4_pattern_allow([^libfizmo_LIBS$]) m4trace:configure.ac:168: -1- m4_include([libcellif/config-subst.m4]) m4trace:libcellif/config-subst.m4:9: -1- AC_SUBST([libcellif_CFLAGS], ["-I$build_prefix_cflags"]) m4trace:libcellif/config-subst.m4:9: -1- AC_SUBST_TRACE([libcellif_CFLAGS]) m4trace:libcellif/config-subst.m4:9: -1- m4_pattern_allow([^libcellif_CFLAGS$]) m4trace:libcellif/config-subst.m4:10: -1- AC_SUBST([libcellif_LIBS], ["-L$build_prefix_libs -lcellif"]) m4trace:libcellif/config-subst.m4:10: -1- AC_SUBST_TRACE([libcellif_LIBS]) m4trace:libcellif/config-subst.m4:10: -1- m4_pattern_allow([^libcellif_LIBS$]) m4trace:configure.ac:169: -1- m4_include([libdrilbo/config-subst.m4]) m4trace:libdrilbo/config-subst.m4:9: -1- AC_SUBST([libdrilbo_CFLAGS], ["-I$build_prefix_cflags $x11_CFLAGS $jpeg_CFLAGS $libdrilbo_nonpkg_cflags $png_CFLAGS"]) m4trace:libdrilbo/config-subst.m4:9: -1- AC_SUBST_TRACE([libdrilbo_CFLAGS]) m4trace:libdrilbo/config-subst.m4:9: -1- m4_pattern_allow([^libdrilbo_CFLAGS$]) m4trace:libdrilbo/config-subst.m4:10: -1- AC_SUBST([libdrilbo_LIBS], ["-L$build_prefix_libs -ldrilbo -lpthread $x11_LIBS $jpeg_LIBS $libdrilbo_nonpkg_libs $png_LIBS"]) m4trace:libdrilbo/config-subst.m4:10: -1- AC_SUBST_TRACE([libdrilbo_LIBS]) m4trace:libdrilbo/config-subst.m4:10: -1- m4_pattern_allow([^libdrilbo_LIBS$]) m4trace:configure.ac:170: -1- m4_include([fizmo-console/config-subst.m4]) m4trace:configure.ac:171: -1- m4_include([fizmo-ncursesw/config-subst.m4]) m4trace:fizmo-ncursesw/config-subst.m4:9: -1- AC_SUBST([LIBNCURSESW_NONPKG_CFLAGS], ["$libncursesw_nonpkg_cflags"]) m4trace:fizmo-ncursesw/config-subst.m4:9: -1- AC_SUBST_TRACE([LIBNCURSESW_NONPKG_CFLAGS]) m4trace:fizmo-ncursesw/config-subst.m4:9: -1- m4_pattern_allow([^LIBNCURSESW_NONPKG_CFLAGS$]) m4trace:fizmo-ncursesw/config-subst.m4:10: -1- AC_SUBST([LIBNCURSESW_NONPKG_LIBS], ["$libncursesw_nonpkg_libs"]) m4trace:fizmo-ncursesw/config-subst.m4:10: -1- AC_SUBST_TRACE([LIBNCURSESW_NONPKG_LIBS]) m4trace:fizmo-ncursesw/config-subst.m4:10: -1- m4_pattern_allow([^LIBNCURSESW_NONPKG_LIBS$]) m4trace:configure.ac:175: -1- m4_include([libglkif/config-subst.m4]) m4trace:libglkif/config-subst.m4:9: -1- AC_SUBST([LIBGLKIF_NONPKG_CFLAGS], ["$libglkif_nonpkg_cflags"]) m4trace:libglkif/config-subst.m4:9: -1- AC_SUBST_TRACE([LIBGLKIF_NONPKG_CFLAGS]) m4trace:libglkif/config-subst.m4:9: -1- m4_pattern_allow([^LIBGLKIF_NONPKG_CFLAGS$]) m4trace:libglkif/config-subst.m4:10: -1- AC_SUBST([LIBGLKIF_NONPKG_LIBS], ["$libglkif_nonpkg_libs"]) m4trace:libglkif/config-subst.m4:10: -1- AC_SUBST_TRACE([LIBGLKIF_NONPKG_LIBS]) m4trace:libglkif/config-subst.m4:10: -1- m4_pattern_allow([^LIBGLKIF_NONPKG_LIBS$]) m4trace:libglkif/config-subst.m4:11: -1- AC_SUBST([libglkif_CFLAGS], ["-I$build_prefix_cflags $libglkif_nonpkg_cflags"]) m4trace:libglkif/config-subst.m4:11: -1- AC_SUBST_TRACE([libglkif_CFLAGS]) m4trace:libglkif/config-subst.m4:11: -1- m4_pattern_allow([^libglkif_CFLAGS$]) m4trace:libglkif/config-subst.m4:12: -1- AC_SUBST([libglkif_LIBS], ["-L$build_prefix_libs -lglkif $libglkif_nonpkg_libs"]) m4trace:libglkif/config-subst.m4:12: -1- AC_SUBST_TRACE([libglkif_LIBS]) m4trace:libglkif/config-subst.m4:12: -1- m4_pattern_allow([^libglkif_LIBS$]) m4trace:configure.ac:175: -1- m4_include([fizmo-glktermw/config-subst.m4]) m4trace:configure.ac:178: -1- m4_include([libsndifsdl2/config-subst.m4]) m4trace:libsndifsdl2/config-subst.m4:12: -1- AC_SUBST([SOUND_INTERFACE_NAME], [libsndifsdl2]) m4trace:libsndifsdl2/config-subst.m4:12: -1- AC_SUBST_TRACE([SOUND_INTERFACE_NAME]) m4trace:libsndifsdl2/config-subst.m4:12: -1- m4_pattern_allow([^SOUND_INTERFACE_NAME$]) m4trace:libsndifsdl2/config-subst.m4:13: -1- AC_SUBST([SOUND_INTERFACE_STRUCT_NAME], [sound_interface_sdl2]) m4trace:libsndifsdl2/config-subst.m4:13: -1- AC_SUBST_TRACE([SOUND_INTERFACE_STRUCT_NAME]) m4trace:libsndifsdl2/config-subst.m4:13: -1- m4_pattern_allow([^SOUND_INTERFACE_STRUCT_NAME$]) m4trace:libsndifsdl2/config-subst.m4:14: -1- AC_SUBST([SOUND_INTERFACE_CONFIGNAME], [SOUNDSDL2]) m4trace:libsndifsdl2/config-subst.m4:14: -1- AC_SUBST_TRACE([SOUND_INTERFACE_CONFIGNAME]) m4trace:libsndifsdl2/config-subst.m4:14: -1- m4_pattern_allow([^SOUND_INTERFACE_CONFIGNAME$]) m4trace:libsndifsdl2/config-subst.m4:15: -1- AC_SUBST([SOUND_INTERFACE_INCLUDE_FILE], [sound_sdl2/sound_sdl2.h]) m4trace:libsndifsdl2/config-subst.m4:15: -1- AC_SUBST_TRACE([SOUND_INTERFACE_INCLUDE_FILE]) m4trace:libsndifsdl2/config-subst.m4:15: -1- m4_pattern_allow([^SOUND_INTERFACE_INCLUDE_FILE$]) m4trace:configure.ac:201: -1- AC_SUBST([libsndifsdl2_CFLAGS], ["-I$build_prefix_cflags $sdl2_CFLAGS $sndfile_CFLAGS"]) m4trace:configure.ac:201: -1- AC_SUBST_TRACE([libsndifsdl2_CFLAGS]) m4trace:configure.ac:201: -1- m4_pattern_allow([^libsndifsdl2_CFLAGS$]) m4trace:configure.ac:202: -1- AC_SUBST([libsndifsdl2_LIBS], ["-L$build_prefix_libs -lsndifsdl2 $sdl2_LIBS $sndfile_LIBS"]) m4trace:configure.ac:202: -1- AC_SUBST_TRACE([libsndifsdl2_LIBS]) m4trace:configure.ac:202: -1- m4_pattern_allow([^libsndifsdl2_LIBS$]) m4trace:configure.ac:204: -1- AC_SUBST([OPTIONAL_SOUND_BUILD], [$optional_sound_build]) m4trace:configure.ac:204: -1- AC_SUBST_TRACE([OPTIONAL_SOUND_BUILD]) m4trace:configure.ac:204: -1- m4_pattern_allow([^OPTIONAL_SOUND_BUILD$]) m4trace:configure.ac:205: -1- AC_SUBST([OPTIONAL_SOUND_INSTALL], [$optional_sound_install]) m4trace:configure.ac:205: -1- AC_SUBST_TRACE([OPTIONAL_SOUND_INSTALL]) m4trace:configure.ac:205: -1- m4_pattern_allow([^OPTIONAL_SOUND_INSTALL$]) m4trace:configure.ac:206: -1- AC_SUBST([OPTIONAL_SOUND_INSTALL_DATA_LOCAL], [$optional_sound_install_data_local]) m4trace:configure.ac:206: -1- AC_SUBST_TRACE([OPTIONAL_SOUND_INSTALL_DATA_LOCAL]) m4trace:configure.ac:206: -1- m4_pattern_allow([^OPTIONAL_SOUND_INSTALL_DATA_LOCAL$]) m4trace:configure.ac:208: -1- AC_SUBST([OPTIONAL_FIZMO_BUILDS], [$optional_fizmo_builds]) m4trace:configure.ac:208: -1- AC_SUBST_TRACE([OPTIONAL_FIZMO_BUILDS]) m4trace:configure.ac:208: -1- m4_pattern_allow([^OPTIONAL_FIZMO_BUILDS$]) m4trace:configure.ac:209: -1- AC_SUBST([OPTIONAL_FIZMO_INSTALLS], [$optional_fizmo_installs]) m4trace:configure.ac:209: -1- AC_SUBST_TRACE([OPTIONAL_FIZMO_INSTALLS]) m4trace:configure.ac:209: -1- m4_pattern_allow([^OPTIONAL_FIZMO_INSTALLS$]) m4trace:configure.ac:210: -1- AC_SUBST([OPTIONAL_FIZMO_CLEANS], [$optional_fizmo_cleans]) m4trace:configure.ac:210: -1- AC_SUBST_TRACE([OPTIONAL_FIZMO_CLEANS]) m4trace:configure.ac:210: -1- m4_pattern_allow([^OPTIONAL_FIZMO_CLEANS$]) m4trace:configure.ac:211: -1- AC_SUBST([OPTIONAL_FIZMO_DISTCLEANS], [$optional_fizmo_distcleans]) m4trace:configure.ac:211: -1- AC_SUBST_TRACE([OPTIONAL_FIZMO_DISTCLEANS]) m4trace:configure.ac:211: -1- m4_pattern_allow([^OPTIONAL_FIZMO_DISTCLEANS$]) m4trace:configure.ac:229: -1- AC_CONFIG_FILES([ Makefile libfizmo/Makefile libfizmo/src/tools/Makefile libfizmo/src/interpreter/Makefile libcellif/Makefile libcellif/src/cell_interface/Makefile libdrilbo/Makefile libdrilbo/src/drilbo/Makefile fizmo-console/Makefile fizmo-console/src/fizmo-console/Makefile fizmo-ncursesw/Makefile fizmo-ncursesw/src/fizmo-ncursesw/Makefile ]) m4trace:configure.ac:238: -1- AC_CONFIG_FILES([ libglkif/Makefile libglkif/src/glk_interface/Makefile fizmo-glktermw/Makefile fizmo-glktermw/src/fizmo-glktermw/Makefile ]) m4trace:configure.ac:245: -1- AC_CONFIG_FILES([ libsndifsdl2/Makefile libsndifsdl2/src/sound_sdl2/Makefile ]) m4trace:configure.ac:247: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) m4trace:configure.ac:247: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:247: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([LTLIBOBJS]) m4trace:configure.ac:247: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.ac:247: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) m4trace:configure.ac:247: -1- AC_SUBST([am__EXEEXT_TRUE]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) m4trace:configure.ac:247: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) m4trace:configure.ac:247: -1- AC_SUBST([am__EXEEXT_FALSE]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) m4trace:configure.ac:247: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) m4trace:configure.ac:247: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) m4trace:configure.ac:247: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([top_builddir]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([top_build_prefix]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([srcdir]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([abs_srcdir]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([top_srcdir]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([abs_top_srcdir]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([builddir]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([abs_builddir]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([abs_top_builddir]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([INSTALL]) m4trace:configure.ac:247: -1- AC_SUBST_TRACE([MKDIR_P])

d{l:V$,!*}PjHo 3VEROõ^a3$2уr{ͯ##j֝nJR܉YĈY Z#Li[YEfBM&׆w=Γ7F)-]եҗ `6iC'h@P ڙq*QH>!͔`(aLd >`21ceyH^&VZ9s~H~tG|g8<䁭n7vEa,0~: Np BO$q#I/ nJmL `r:ijUȎ5̆ĩ !4/vcvp~,ń i\oËR{!D(eIimQ#8qr)'-:.&)NC,RRbu[[ћR9SG?H3 Բ'VBQPZ=A9ѽk-hf%6,GXի4'ҏeh\8.;u RH!*ƺKSSIN1 uE袛 t>I ZOK~+*,ѝ&m{km"m%*H۠'P=Λp:d˂ˑ gs0)?r嫻wH5$8 IT-7oG$z N?J9ڌvHޔO#0}11ůARRAaįS~(RҬg)z.߫uBQzmYדI l)($/24ۿ_+>e+mڦpZTN;@Rj饴B"i>`Y}:-ءU'ϐw:NqH~‹Q97"3(q*Ѝ 1K;[nEXU y9I o2ISŸ0Gu5554$:Q^Uԝm\q-+R֣I$ P;zuo!MA2r=jk%+J Hd^+b"2cƘcAٌ>Zei5xׅ%+.TI$st-BZm䎢Y&:pCvHB[ʼ8~4AIu榦e2cR %Cr`~ptHv%vB*SuNHVr$j{̺oh]SSPr3R@ 㶷U?(Sn\j%E#ߏ`eknl谠W[љMeѼw'Xg]^¦MTgê)Yn1#q m$q dfRQp7 RˋVp2x笗UZ@iQܖВI^tݗIk8W Aߞ=]D-e $%)Hzk&K Iv\mKKaN($(#'Ԓ[43jrJJVJ@9>P=@kVUB?Jb?He%Oc$ۃ^TRAUT#Ytxa)'Hl?In$&9N zS!O^=Ye uRpV}Kޣ3Z}:4:~)–)))G>Km|Sg. VBu2@ϩh&5VѨU$.]iLBP( Q@ ou.Ն4mSan$qN]'-r*YZP[`OЍҺmPg&eUy؄R9?9B,Gyݷrӝ4*Nrnj+cN#Q+$[t~fSyEYIu 'rp靈i n(%)t/|_<hy#=::uBWx ) zumiCNJKk) q'h 7dꩊu=.Eu#=%c~P@U#ɃN[_l"`s{Xӯ{ݨ9mmYM%O4/kT\Is׺FlOJi:0,? |29GSl ?UHc|;0fGdnr8IGNtfvLrUC-)R4D:]ּj}jw$6H'PbigςF֐H8uo~4سٞjYTbKH u)$mWB<=uի4'ҏeh&dJkgH`Zs{Z߿.[ڴ쬸SkqV>T Wn^q۴n"! %$c)'h<雪59y-Q379$z'#+*(- )i@ 8':`tʑb륿XrqobR2O'$scqYvMfĕ/ckX׷mQ3eQj(1oڷ6%:\JOx8E>H#Z79 -+v:H9 QM4^Sj-D<1@iabO 8r|njjk_bw|K_7s:Î!J@*RprO }FV SiіiAIWkkSSSSSSSSKΖ$%$+}Fm.kHZJT#A }Ǻu =('?d\HRR@ +rCŴ&3"!l'E+^w(U%qSFrF}Ҋ mt0229gF7őH-/aE~! AHq Ҋhntvpܳތ˭YyI xs~ݷ*WU]KHvZҥ q(HDڲ{7yoLMpn## lT 6Rx8]MMM[$em*(y-FG*~A5Z HǑ2,(Ҝ _P nH4-}ѭZ{54R;i6$ùb'Z)ۀ==N\)8"_:mNK25VT:%9RBJOuWU Ks-鬡+RV%mldcZVu.榳ElnuS^Sjy㓧ӊRr?I ~t-pҵMJˮl'8팜 Wq jۤyO`vBO=Ε45w*5)Ș!'lZzs\gKXlTARv)qSB6KJ!~ȝ,fWV:T i)GYBU*bIa؊T)!ĴKf7ɪWٲC_DqUApx8_vŞr;}taqҚ}9m65+s<3BM8QڏHJR=YԻ.T񢶵*T0[..eD>5Z.X%E ^=Jqƫ:.mԤg]ZƩSB(&DH.$(%[G 98K}i+#-#ל)@ߎ)tRYIa#=!5-ac6瀞m7.\[:֑$~$QkNtv[ʝ%Vv*pN))9$΋z0[b-6x7R^>ZPfUj7$- _)H#g'$=yV~F\)"O@."4dA6d};jskX-tsrqCx% qΙ: ֥A|a:-BR@>Z?蚞OLaF|$*,釩?PS[ 46[KXA9)ˉ mHPP }tk,rdFخ uXI mnSͮcK+BJWδر_JbqJY<骔45fpaƨCn\7) uZp>KQ4u[RbeineRua ][v~㪵-M~6Tq5 V>< wb) PƆ&u5meXvJ%dF@".EhuMcei(q{e'FGD:D^"puy0oQ-<cƚE "SE Olmy# _c[oRiPgك5 VQamI>vmxQYNmbmRtcȕvP |׻SSSSSSSSKn [dWXmC c? 'FVUa%%酪Kjb]EjN g\tjEtix-oFFFOBO=q:dHiVT} _eˍ+ 4R=I:ήY7R}3'sciHQ9#S7e Ijdv3-%{?*@MtJEL-  Ǩ픟|hHꐢ%׈ 5ClI.;I$|:l]Z[mkYHI4sNԗ)rX>M6OF=pqΖ]@n;2nyqUd587%8ic$ R@ޚBzSOz[R0Z H>um"Y2%+?OX}D2=Թ 'B6H wˣm_eyN[*Y1 A':΢LxNyyj>J0>Z%,ȏ;Q@[i @5K^me^~ H; |cJ7W},:dY*Cz9KM*^Rd'ǢH% *JN;hCCR}8Jڏ^PU˧$y|T({n{WO*0խ֓~";[\p=4Ӻ-gܤ7 k6I\BTԷ BO zM.PCeU}d j #NOm`S*hjʔTTYB'?F\䴤,6!*JH!GYPu-҂v3cՍU*)G9I;= GfeI5 ")߈Gu+}OƏ,*Va |=Aⴌ( q' 9s[Tmˉ=wc0$dn.l'![E$b\ MQ!ǏĐqV x`+=1s^h5v^*)$v=456A3U~5&ӡiJHmϮH ׍^9>!E;*> TOs뢎u^OOQQ52F<8+n밭-EeYN j,bhÙC/L',MjBS}RpRz֤ZF GB▝R>^=+Duv)j^W#T(q$Ȍ$puKڲ2{r9pTmzj]e’a!E@*IxDB2̨p6R~eh$S;WԺ۫9:O[RZ>^vԪ AƄJVI $Iӈv6~!}ta>7H5mU`p7(rnԹnXժMK\1Iem7)}lsW0zaUJ~|VSV0`=NեIW"IXq= 87g':6}Bō6M6.#UWDIb$i)S;v<Fcn%)8m_+JNџuLF2")SҀS$pz5X^97 },3>)F{S/že ?,%لCcqI>__ҭSKMDqX g c41FA $O̞jʓ Tt-b9!HRKg<̓Z&Xv{PiCeRG<'Wu*|hj3$DYqjbܥ$zwPܗ v:-}3\ZEFڣ$^j${*QkVlҜk/5EjTqgN~^۷V /ox2Sﺕ92  d[SM,K+\ⰕS$G}ajDeeET>BÎm>zޱƻ&4swdҜ| $aQ')*}W++K92+Ciqw2y2=;n]M)tpӨK#NY%ݴ)s]jW3uvGpG|\;6wLo>kT-*b۴:ׯ}*U 3)TcNڙE=HG>B6?P`ڕ5 z뮩b{1ryKVWosͬKܫ59n;,* - p;N<<>zJUvނ |4I60!#ږlneU\t-!*O>ǟGf̚"G= >\pFx7Zͬ{~4#oZ;t\ER >Q;! !JMk ;xέQ]KP 8g8NEB33He0L@khs 󔫷د?l(@DzUo-~<]S-lf\H$@'3=U~EVnsuTCA~뵻oM>N9[Z̥M/3!(wt\_My_Mz@P#F"\U5"'71)+vl綽ur&Vf=- 6,=NX[6`XZN;r4uՈ%N>)߆x͡K, 5Ds\JR69s󥤷>&c2#@l':ñ_MMSjlWWbC:DN7%ER9t`҃zǪeA`Ht<4ҐQ)Ig_د?)56+Ofizmo-0.7.10/libdrilbo/src/test/zork-poster-grayscale.png000644 000765 000024 00000701325 12606024321 024351 0ustar00chrenderstaff000000 000000 PNG  IHDR:pC CiCCPICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/9% IDATxux׻6|ϖ(D ! w)V )^CqRJ)Ŋ;(^%xHefs:G{f͒#zK/}0;i2S4o&' C(&,*X P  :YqfSh3'&UfP TdRX@@qҢD', :a6AfBf(T fj6 ENX쭻 T, &* U}T`6f-X?&?՚&Bٰ{?|)|b+j}5oRRo(oPLj%B%o);iVj^M"4qMLv={:|M;7WC ?=I44羻O.Gn0u$5|m{ZBlfk`j[ ý>A8[}#6[ZnJ lCj`jxzGsЩakW2(;!yhRY=C٫ D(mɽ{ ,7LD@aJ\?\𭯍Q=eV> P3zx[hPY s#ZNp/5qj6X'eAgϿ 2X&R?,;٢o.]de,&Q[a<2썗EGWm"hIde,N;U{:87ULjv7y\f(Wclky=nˤ6^l;Ey7y!~(~TJDx&o~{6x6ar1sJ<]0 C]{}Ć渵Z**h2"3֤kR;ti^V[.kʼn0b}6ɫz/qje>1w^3qD3N*E `E/0""as `FNcO:E`<}n^?of"gKѪd?-${T $Ji ЍKJh>S}JdDd^7.\p…[ǫ<k[`;zVR+ȫH s= ȸC0;.̞.]rgϾ}3/~ w:$5y My}3=dPr`֌5x,hCVz4+W> 7-bIƓL%II)VLO@==w(D 2[=2fCC^fKdt$d;d]/rǦ'|old|=<{Tv9BJ4+/jF%˿{$fJqc YF2뱏gAdfIos73_< yIu\I8 @(Tm6-6$_FCv&ܗ#w?ܑdQt=ǟ4忠C6eO$%|Dz4bFŠ tdTWY1?ug' &j-^Oɉt񥷶2)|Ңw|t#Ȥ߂TFs 3DU I[6'0ba:y]zI A!)(H!_ɏ/$;oї!1MvL?Ŀ>Sn/mI)J%6N7Z+$Q(w@ˤ m1-TO0mS RعxqPeD|kyOU]M #~R/?|݊ |IkN<zφ^T;w&w'ZrЃHmۙm PN /ORC }')$URe(dpdd|5XМ7Q]\^XG(+?Haj<1HzA!H:yhˏI䍮 RThȧx7`P/ӆ\t!ϫ 6ܨJ0KyW#U>ʠ;it~,DArIK{)KS$gNkodǠ͍3Bno?, fn4bD(:xARf.p$5^iȏDzXlY @c"{R9l^=ymIvLRZܕI@[MNKIw{?dLz S܂$W I2vd%EY"\GH&A:9I@ t#rcoiqԬu9\`^X"Izm1\tS}$oMwA>s+J3|Q_>ԩZdX AAS'r!{O׮I.% weߴRm ԛd׊j@&)I>-UP`Der^yrLvRޒNr>Ty_umS"s|bwt|I$$][9߻xⅮA*-|F6|Z?@C !/ɗ7U+Z߉H-|`{yeg @*_ G2/|I{OA(Q{ ;4$R7tJceR|ˏdt b o_N[" VB!T&d%yO\} uhz^R?F'3;wl\=`xͨAF%@rF\Bqt0I2{8!L fw06&߈ J!`d.Ĥ/#. CRe\$<_ȏ=5M(B*3ӿEC>8tdQrtyIxU N /{<U$#_Z"1Wn/Ⱥ3=cCy% nkT~3V\L8¦PxB&#Ñ/kU$83(Qx؂s.?{cc 0Cik_Ij؛9N&YK([ iTOv-ق[t4bdjn]p3JF": tE"y;L UڒCJk5;,C% A/7Tڹ3ϐ*Y0t86 ףHkP`\J]hwPOVLűZMkt#hH`ss;Or]Q 4Wv$'zJpT6k@g܎I lH')6~OTO %q$xߵ'&5@6p >禍-JiVE9ر A9?%%H~y!8f'!F\4^.O^Q yv6#g|5}Cd[4h@Ny.l$eZ QN2ZޢLc+)TS A@C⏁&un\c3;tMm2e bh22|Fg kXг#;wl=mTc]7rM\m%G sѠhsNL:u*&»6~xr9z]D~V|Fc\e*3) X%PL|/ +ɼ]=jdv6)W3Z51n5!Y~xDZKq.u0{};^&3ppdXaG'IN6l1ôU߇aX,P#P`PV&[ [uD"=dKI.Yɳf f9nШ[U nnힹ O @{tG7㓧۵@qkF%oy1)Tn(CiLH-;d#N|퍌~@|bg:ӻW@aٴ-.qLg xe l)U<`>#H&j*CKKnoL@WCڝNV6B;X D9#S6ȣ_w)>HrZmޱe˖-; zq=}Ocl INj< f!yQN sO; dʱ1]/MED.`ÿ;{+62jCí4Z #j_Co7/ƯpRWp&̋tKhk'WkNɯ) p[Q>L@^Hr7p6tH@A F+%mZSj MR *>@٭dil1_`45d!"Y <2r|Md]s@*51z_up5W%wjv- /Җ(Øf]m0c%9Iy~u40O hx >q(xVӁ0ZT5T`o dxQ_Α3ꦱl'Ì Xj`K90m}5\dO/ ʦcHAU!P$y4vӫhmHP :%m"UNNFS ܏;}"L?-I.QhD 6k+NߒgK I[i8XzZ `L@$~6Nlm~Tm`+`XC3R y#]9omUЛ2 @PN`9R oN~Lk}J Bڮ's4twx<&yt^0QR仳 cW.uLLwI8vρW,c xI}< [n-&K2C%lv $d#킼&r!0oj!!O#Z]dDd16 *sI٫?\(E9{ٝ"8- 􅓧O>tii9d3 k:Ox00t6Vث%~Q굋Tf+%Iڎ#֛-لQRo{h,FvP/,ۣ0Iⅾ IDAT㷋 -`!4 @wTbFgLWBX(@gtwWkQ@*906'>mKnt'//҇?f\u@ך<<qUҕ\ b.֬f}O\:"e=|U_U%鴓#Ųڐi:c1gEb d˗f`JokD!0gL@2\;=$NS򁂯*x)L=)xN4-l&VhLPCICO Z'/to(=䍧_D.\@:C#.'~#Hl*In͒27&_ћ7~x&Xh ~>™p$9KY î /@)hˋ<羢8HP wmL\Zf~DI]gU5BV_X\@6)8> D 㪾"> Hpj "LɭJ|19!Ռ_/佰'78$Ɏ InPUU8d$OǓlmhkRBJ+6Br#GaUa^ Ll .&mKwch G.O[eD xy?+ɸ@t-Ie?-|ejnzF!Ȯ~m47<ڤhYO2IAG%& 0#0cmY~R.3!g~ނy@ɘDІd|cRO" P/"wD$nɇ@yסF lo"YhP: # ie+ ÝG.Zccd0lxl Z<⪗q~HΒC eO4+!՘St;s벷L5ͻ D>%g0)T'o=!&{(ci~/3ؚl$3ǺIѓfR=Ǹ+bK(N GD=:=3!sOr ~x/d]J@hg{3$"D 06MQo(J%$&@dgy_LRcYQ/ V S0f~XG/ HǯlTʜr~܃_RluY5 V0E~iW=K ? Ԗ)8ʓ)ז#;]#巅v. $wZAL[Ey?ϦСO- 3{g9 RtԀ/xnXF&F+N I7x= S}4\$79)x&慢b1[92Z-~y6qxoPfzd0{9 PPe{r ~~.~|.ࣼ~D{i$   U5`:N5E9.@/{}zU@_9͸{t8Bߥ+%g5."6.{wKll2E VbOc2NDDl*.:dP j j_I__|[ OGdnzkgRE(Qcq~V =Hkdwޗɏ`j&-{\&H+ mnX ૊0A> 8ޒľ~X.s~.@GɊ PIW9s>"]!pl6hf#╷q9z@rab{ c^  돵3K;#gE:)W@o2Y@ԓ[.b?43FUyc2Kv bZ'{2|b d1cIr7?Zܑ9Bx-ޟȇ`_ _$B_ٝ;w;1c[[ |LnF2u+FQ0%3o?ͳj٦X!ߎn]AN{1xi (@ y΄j7OnHrXr@)eO.WA92NrG s3~c1]%j[kH'2="U2ő'쥚EaA|V|˂i8<& ?/пǸvpB P[Ք>?$TV7j^bI>7l=Z 55<,i6[>1tꐂ졻1bGJn'[cd X z$C2=D)C (-ֶ7|1'5nš2L?VBsv׌@~:7?ytpQϚJ;mTukM4]g)R>YqPa*|ma x<`trH  7#]mՂoG\ɀڶLJ`ʝ.L FiUaG@޳<:62uRIi~M:ҰϐpOv|:t@:*y#p?⽟ALAxC2$/OGZ%+BIA} ˉdsgb,qJQHMY I+wt#/$4'y%>sw0RgȒZb5C&]6dϞ={V̺/ؗVOa/İOhE?pL뾚PeV`ݱq?l 9 SW(H~(C (BxA$(V݊pKԥt֒FՁ5#< ֺRĈG ,=䮆R'RH7eb#`ie[CƜ^@v7KN)ZjGrKH5ղȲeZ0 JڹIR-AxE:~z)Ⱥv9,nµ*>a 60UR1tT5~ATe$5-=-{vɸC:)+a(<?ww{cCO)IN,~=/4X_=(x5gI: =zr3r{4|ױ*9ib)$)Ņ-@)|$ɇV[]>sP}oI>6"o)ߧչpl L@3Ǣ,eO7digߴa|v$N~}M) >)zizh"ť!* XܼC&hU`yֺs_0opPSKu2DTr$݅AQV|B{鄙av A$]IZ f4&Dd>KJϫS$w%䫟œ܌fIni}4eŪ)/+2gn9=o}+4 -sMM=;^|6ۀ\#bJcypdOhZ*q~uE} ߀@0~צ{C2ECItgOr`>MvSA/5x[qYefpѮ L$*eC Ε+/04C C.{ڳJ@:a䁎+H R-SVJ}D!gU˲ard²3 U(w6ˌҦ}%dqkJTY z &>#&u)qAoh/q|__c\9TICYwƑKD:XcZΕ/#f /M NQ݇لmReDUt,&b*xcߨg5xɕmL,R6)Y y@ϵ_3JwZLt!o@ /mt}X뫦e@s]ߕh3RP5:$x 9:lv'.9sٔgK5 ޤSf>}~$,r<7X k_E!86?zNd$_)ۓ'Wdz!K. {Bd<ΛӹCPA)>$t0KT,< >f H~f *}E0t횼E`FpʕbSp׾? R"Ӟ:Vȁ$صI*9Hh*[X;ޯԺǵGK5%CIKC,3JADKmg/IK@4  O&ܱiK=L-i Ei y"?2:\ :`_0ϸ(В # 뵼'h?a@5ƯŌ'l'a/ϼp)LL 9쑻0lKޒ{€: @-  8 sWs79{̉Mrjso7!K beum*̈́ߥW]JbJ&H[lc IDATIN= eCs]=C}[LR厔s[v⟩29Z84lpλqKomW gK/z92e r:,'G:=0چWMbY6O5Z4hp I>1!V-i 6ʓ:th׮]M1YH=U S |doQEpHp lti z &o;)`9IN0n(&gycnv/}K>+Q[ϝ[H"SXS)f* `?<"MtRHw3HӫeM(h@e^s)i{\:$c7 iUn-q+w8j B@&6U򭦒+@16`8L3{ve 9FǍLQtP_Qq6"ׅlG}QY9+fL~ODg)Mi3h #ުҫZtV=򓆪nm|3ymTֵ9:wTkvd{ЫxUʤla)  sr { B H"9s&&dwRŹ-t8jhLdC|WЏaO;j9*VU{=4{K X e1@ͣNsfx05qݯ?;{3Wn9壽e wf|Mr&М$IFxX\XI~ln0KMd>ʥ[BOىt>u gܿpz!`_5tl}77tz,G}ئBKy>'\K٦H;ˍN # JX(֖ƪ[C.qnZK=ӖOy! ^mxoQE{\$_D~y)nMuRYH]IZ]B{Q`< rS/xηvtDbKRNF_ΆPtH>Kr8:9 .,csK*ZxztC~ztMy;HUM|wW\IboPY)2Gv`ĔOnrja@5N9++tVٵ_EAR(άe's| -d/4]u_0 hOi~:j/B]do{E )@7s Oɉԑ//~UK4˴Yeټ X06}(I; c5ׂ(r'JOZ?fS?iHVjUY1$ WF6h0~ލ0}Pb+G;tȳ1>*SCBX;%ig"57? eMSwpӏ$ȇ0`u_f< e1z08Z&c%{HG eٔ'ioԨΠhGk(\d7$@<%iCtI~~,++KMS59^VEuTQnKu !?Z$x.AFC"Sٿ{+ . [ WE`8*+9=VI eu,dJ& ˝եUlWɧR5xRؖn?r|vmz)P؅dcǾ㲐L2z`_]@HA\jdR _~Q% әoza2党wiUq@n"'nO= d%21J7ϮE&w!(>T?^ɿ闒Tjes@^Qi"IE }ō:4{<+h8SW:.[B! z(XYA#T~M*T=_>mgGSgeE5lX ds+(ӫ5(Q ?9f,WE1( PoIkyZ2,+s 0݃ 0B#ʟZ  @4XBBykXd &mh?$c F&/<&u U=ez+ \OҚCUJ&i{GVQώfJ-;Tk-RV rLn 'B2j B4ʶ) DԆwZeC/¦$S=JjezU'%EU9)1"tߠ׊:Ǐ@.Ӓ% xcg0Pֈ gW\Z#)*!~JLW1Z.a;͊IFոIf[FCCSQkz:MӛY~M|} V)jzTM>D< T~,ѫ9Fz.$/pqlf+"jn=64>C1ݲWD' {h,%a JD|ȧ~r}H0i^b"g F&I2(Gx/0 I@ߢB7)ēKQl՞:uJ8). $e~*| ,TQ,l =fws;\7䯞-r76uY[zUhVX£ygE?|RU`(}tͲ8~\p*cT~x=钀pru+2,w]Y{t迿%.@I%P*UN6A(Bq_=<: *sJ\c%6) Oj: &-mqFÎfJG#vd]R G˞C"Jo:P ~`Jq@B/ӀX3v%UGǔ'mjܡ@%.bI @Wc_)s:p!(ff jƟ@% uQ$~lƖdtDs-RW4îƅ v`GwGDk U!iЮnm@آW6B?\XtR' 1p;jQ\S,h)SHVPݾxNYIB/.PiH^z1Ɂ s4[Ś?I.^q: ~$`GU_i,YRz>'>5wR`nj(%1(Эu0> S TVp{ OHhpMFU@e3y?.[kgNc|1ۺ-۶n%Nudx$!(KsVU1naPAb)1OshlaD$8Hto~6;{: G}tKꎼ378G"p5e'Kau`_8tb5ѫ5S\ƣo7/S$ Sm.mD9cO\1yfPRAOEB KVm+,oǧBQooJ%f% YIB8ysO2L6L# kPJWF́)`rO5v2޵KEoPԙ ea@ l xx;l&;;^u#-Z<ɫx#B_G nQ`(y"<-0fa>0{q.e&n pȣyT $@ jCȥw| JQiH `ъ.6_9slʓP%bq4f^(mf~J~ϭ]#0 ii`@L`SD$_A~aunǀ.P{tn~Gμ+Ko{"\lM=OIK޾O{. xHՇ$ꢇSQE t";Kx %y;x}6)lqlӭQs/w^,$y5|#}L [Q&*%qז{}0A|oPZB3μ^ǙE =@'*9" sl Wd+(`_u!Q*Tj(76. E/d "k*McdY/7 `uf"kT!>tk/_{Iu+OG=5W[=0LR`md/ $z7{U3 lF^Ʈ@7^n3u<4LFLLny) 9)&ju diyl|=O`c~ϓﯗ`)]ӹFj*=!XU 59YTr@X<4!ѱa>Qr$ LKrf`In@#`N%PqJ! ~C; V%F#W$'P6ïd0 H@ob-dbjU9! t0jXH;H1>لd'MjBFs?E }Gs ? m~$8 BNIt3vx]5r֊\FlH$e6m|qQI-$y nOF9kd05sHLi7!7o]} ] W@ ^#Eeb!:mfI@Fi?$oſ [,ii+ @?<&iU@2dj{> M &rCUM]!2-ߵsU~Z}$ ѷɛAѮ[ 49q`tµFi}Ei9 $`Lhd^P+sV9_畈 @p@1a]P-ri.\ )=ߖ$9Ss}*{eo'ci`t& @ EǙU]ǥv_;*@ h+o:߅g0Hmv}HN85v6+ɠG@X yyd9%9@71wU )SfR*f0!{| `9vzG(IOh(꫻gw.}>kB^4 zJ`m@2'c_SLiNܤФ4Ga/W^z} W6]@ʢԯvl&lW-OLՖB 3fIkQg7=ɽXx蠘`$4Al+ + 5{N!i9L`g)GeniF`R >xW Eٛc%]tPb~Q@.⠤+T]$7I[瑜@R䅋WO#"(:T]8yriV@kǜ:%`.ͷӵ /5iQyE LEp+iBG{O+?&|ngpB*׷w ئ*I䕘tFGjsy¢C. ɳYB>qr=z4ڹdҷP ,%@:| GGO_ ?d:Va7*\nLrG֙\ʈ{iN'DSxEjBExYȤ @08 G聦Z|i5e0P%01|Yr-f/gE< ·tOph O5NI%O:A|eې$/Wb>D'M`$t*Hh,qZUJvx^5rI5=zC'M2N7 ؿTWn?ڠqӄߑL0 UV  IDATߵ O%jrMQ=.ۜE ^85MNFNAX@2)W7Ox'|X~ڨ7聰*Muݷ`AmV7% 6s%<+d3j89-g;NZ,D xjrF^&98=#|ۭ y@ݷ܅4q zLl^+F{꜊ܔ)(3Lȫ@1  >So4pdJJpS>= CЃ{s/&ՇLr~ I4]|IYfJɿ"2BSnt'wіB*n>L5n'{W֓:f r(/;m ;:X4h!3& ED q]^Cy){pt"5/$_UVl]HM.ԡI&y9j,Z/ta4Fx)@P׎^{FC:4 <>\S_}|O} M}MrH}MZTR&xhMP53˧ UEH qEEbߨ)'΋(L?xTk>.(g ,ѬB$KQ>1DwH[$~.B]Sj_&dΚ0a,ӣ+>U+Ti*;@U,˼>ƞz0i~Mr6ۢ3q䧥]&'Ɵ?*Zhϡzt@oag@XXu:T|XA )<^R&ȡ |gٛfGdQrSra#M|U SʕEONڑ^/|~F,"cz@H۴nPMI_r]k|+fOdD7xoEjeE)"FhXM[~;tI$vbc*/h6n٭0n;{*{I~Ȇ-t"ɇOV^2_U;HEi+ʒ(OPdu L;(@p" @v5J)'$QVk/ t_?.~|/2VՃQi%j|ATK+TIM;^e.N3'#Cu:uϑԷBNX d5"!`#IQ@:|=+Rd d R Fx8\J?Rz e2ep$ybI;I'TXGŪ -^d|V:#z]jKD+C2k@\ i!mphj| ygו~Lr&Li5:=B&h3a`r fWw_(C`MV0VW;ϐ,Y8`q럽WP9"^]CU3Eu_0Yr:T3i2$`]X~ni m_qg̑V(w>dWz2yrifЭ{lG&>HKl &  :!F$Ӷ0i2LY>Ȍ^,&kS=*CN|\t50k#1ݻO{@V3ybf H('^HjEe[7y9ˈV2& Enx{+)Dmd59{hF+A tS.oECgsIqƍ`ySP-[t5i#m e+W$`G&lur9'Ua-4i27p+$Hm#mV$ko@t!,YiԖ % j%:ѣ@ (!^Ձn,@LL<4Fp0/Hgb:)u8H7;IM26e/FJ]* RH&=Q{Y`SE=*_U~ -w[Lo "DTJH3b߃prŗG0!@R< hV|FX2a- 1@D3(J0Nn[#f䊋FBIk)ѕۂN/H&Ufc"InZ jմ>C6ōu Zɹ|X?ۉeGO c"0sImgv$T.5vɌpm{n0drBƎ;`Ҩ zOIբ̫<ެvsmZyޮKYSyů/0V gSn@JI{7 *>|LI텂ǙR{ִ-~OfJ tVRo !Em TJ6@B4-mVN(>{CsZ줝_TmsdoPy Ј$6I8Tf03ήGӚ+w|E*9\EI&Gh?*Sgr ?0m|)sa K281Wͪ@MyD&SLk3I.Dmda(r*Z<[*+Ӛ(*I-i cn \K# qPd6np}P3_B6[$'7ewϟ)*̮bʤ$_Z`cYMA;29 D8O&+>^CV4ŧq:0B E~,1oB ?9s0{f![Yo6Cy|<x)NA2+w'K#|+aI=$O #^ b8L!C{&*"7;͎vA Pm7I+SUP<ujcB4<`-<J@o&|3Rm e)\(0V:^oPmVAݛ\ -侽 H2_WM$;~vIɝF|:aСz1 dŨ3beR]$) $Q`l@H/2lY\E$~c2GC|p",4-Iƍ%erPod_D]L~ TjIYQi1bZVnH+_PlVúEU7`(<q<`Ϣ AY ëS :ڳW1 u:!.<:ZYT18 [o$I$I9'p> y ʝ!ɇ/ne-XvΠoשv >'2Ci"ۋ'2t2ʎ߭vw:C ``Dc; CiΨu=#V @-08Gys\k/(֐B u>ׅBϯNp{,9ё' &EX&1<Dk&*K9kZi4I FoS37vYT%29m0wX_V5*s <x桋i =DR'2D> &6 *[%nr7YhZt/<>h0Dm2 H>OE[1"eKm_+Yd_90P~H\stK3n[qd>`Rˠ>>\pϼ {ӣL,P []ѓ4LysN|4 4NլCPhKN@|x=-b3Hl@"G#i! LKlCgKY"PxT2oFVi9)$a'EP&1нrK)v`anVEگWC( =ѓQ;^xӓN@Iգ[@s+݀^#]f/N3'ɒ-f$s>R&sHd>)  ƭ\;C2?BY? 7lEeĚ|.n;$,YeZDy~~8'FP8 -HʳA@/dn3fVw捴K ͛7o/?vb%iC%Bf-GhkI;s/Ҝ4KDG=&#,zI͜HMx8ZJ@5IxHDj-I! h"sE =(Jn Yv(Z@i\T)lN9fYfJkKߡIʧ4こOӾldw)DIfɼ 1S@&i, a;1ݽp|aԟdoExQGo]_FKהy"(T .m`ʤ*,Zh6zMGIuTT( Ω:I%]XS\5%+/@`i618Հ\XANᇢUFΨcI}1o!d]uOӝ[kDm6vvo7h:MKOI+r@Sd\}Q7@5$"6͜ l})͞IJ+nB: r=ʭV~lZQr:<>V^HrAM2[nrd/^|!i86La*~QIΝ\c<Hvg|uK-2У4ٔxDY!eη*@y_j2,rˣnV4d9x|El/2NEd' ѿn|>HIԇz5IOD}FH<}1]߫cq=y2g`T/tDiAŏ.,̓y#w:!\ AZрN-敜ͨ;g/k7|xaG*'*FU&>W}Z̈2e,3үwW2I2 IgN ꥮ%)+Eyr,raw; )]Eh!*'ЈI0fȴ9 Nj `M#*uKl69ӢLbϳjH?lwZ< @I4_?~rX2 SU% v'SW4nJҾG?+0%tHG3e2|~KfL&L kwt*Bֹ <68M&/,G6A0;DBvDIH[NzxlDf?=Wƿb%y7R:t?`(L>׉ZBsZ!p(@5xi`t?-D)"V /x*;:Wi75vSqkL fь^[@CљVG?Ehe#SPԿ_@Xr(FkMD{`Z$O5oNӧ*S"\/ܹs C`G0䭛 5â l.ޣ'{ =-Y;˼I7'=BrqIc⾴$)t%9&JPJPVUH @T I! BMf%;I/)`㐁OY @6\XGF>6V @EkT xϑY=w )J_ZQL ^K;XhS$,q.=N ;l !GXD@Zy1(('`97v)|hY@H@i@BY1ꌲ{ άrb0v X'rO$+3{s)GU'~ IDAT5jԨwd_DFS/Yo9g rL|P{32erW>B%V?5/./L=R!΄ Qô~wlN؟D6dk72S[U6v h$YG:΢/\d:hORf6jfۢC ݸ|ԩ%_c'ybo+b^>8<۽#cT賓кQ؏`[<Z{{RSF 8b%4-rAzKn(e@|d;z,#e>8t@(mˡI1`,MYn(r*Wo Rg(<ɑZgH0k5>38{F^~kۺr֭[n}vMAGtʵ~_ 9_&(r(hͺl_4`Lx9 L77%w\L>|~ϳR>e|fv ~JQ݁QTgfKz#@ ޛEAzSE" D@z*H]z%Hݙn6!? {}{9jEd=$}J]|r6O.]qwm ڪ~ "P}Hu39gΆ ŊH5fa{5<.$ Ntn$3q,:+(xSD>LN d̡5yY2!m9E쐌 |d\^0sD(W 0؟kd?far[*9R[ŹhΌ(*i@[*y On"G,mE ~Tj.G_j O-[.-[lrIl6-`5fIvs6(dS,NJƾ@IXsm UE5IpR0*I["{|)m[@7{56M |Fv_=^cbPL޾2}IMB WTQT}ЮML]Q+m*p2ƙw4\t\ egiz2IQvLHK g>6A2 C;E߿j7lSI~d֖F+|gw@l|oA>+iʵo191bn@{TYn#1g9=*9Gn3/Qg9QhK@1-G64>C gۂs_oH {w=#mFLXPƙqx',kۍ@Mi]VҀS0f4 N9# 7a<U3Ưc4Y,!Bž1hsȒݤwK@S[ 2*}hxx٦$h{\tjS tݾF[OO7׸ {~ XSesp4$ Ӫfvaz {w:[wEBEOb *bW3 XS跫?Ĝ'I\lgC ܸhҥKoߟ~1tlv@ 7 4]@]8+z@heIyد]9Z#y =*Y==˺싣5֗Xś!q*BTV|<Mxik>r@˟@Ѿ"X WT#eOY,ޮ]o='.2t+,`3>N Hhֶ2N@L#\U8_6u-}墥_U zE:]/ =~Fd;>z]A >3 [oOHU(w <::#|߹V"耇Pb</Ywz,j<(y>$TI"'H%(ְЯZVV% -.%'6)QTXpBG*Y#iW\ R\1XAՍc-lF;{< a>2_o0Q>jA *xF ҹ{̂ER =A'+aE)NsM}mQG( [Q9n:6簸a.Gs'm}qԙs>pZ,&Ǎ УnXvr!F#`0y[G^ 65j@ԝfB{9<ج$G*Y%sa>YMf[mӦͧM/PQEђnݰekW[Z~NAH089xA*Ł4 bT*aܳ.}In TXtWudI//{0Dz`U=:˗ -mh^& ȫ!Eu9I}U47wȻ53fخG2TO&y~rצBsVZ #t1,֙YF&jPߺ2K??-Ղn'z)&ڶm۶CYħ|2[_9$ݒ8ݍ'l-@8A5>/(x;>*\ᙺAÞ nU5dp:tƍ>۟K}/lVcTzd2ηl P3-FRYo ˵>;y8SzyPJSd7xܜHY),y'̙;OD E-:3$Hٰ<2g0d ֐|2<&s&8 ъͪaOj❅_? >Y"c8٧/'PN3NrTnqra|@n \O G;$UZEOVPӘ&~ >7z`-@΄.<=@I\ twV]I?hF8Wi,].#9 0,rV-CehR*ԩi`ߎMٲ.bHZ2Fl^dpի %5O\fx8{T^fAT@)fܹpηrg0SQK6TXS]& )9LmEޣtg$XKK*:_ۓXwzFX 2&>Nz;B:" |VFKh& WyN[MdnF*u,PV9FO:&[HRQPLd*??w>Fu92%Nsry5zEW}xFڹvj=c oq!"/Dyg 6UɼC~X : bϢ{jJvF jwB-0[ Е HG 6 @ @ͤzǼ_:R2(UԿUƱ_.ɇX3N5C)a@P\Ջ7K~-Y:WEqD WPu`Nf-fJhHΝl_4J;<Op^{ _r/iKUX&w !~ڋ_@~n>pp?;rGIJVm|IVN{P'EіB?W|7 sY\l.JBu;5z%U>1j[y.rM$i_*6@ IN$k gaè6M/&o ۵-śAw3Ps EIdg |@/ @1m 6/ ˫^(p:F4e+W D5F`d6ѷzA?~\pcy(2dAZA]cS+>$_l]"@ury [dTͮǹ)̂J#C3K&m ˑ5&&[z۴o=yɓ'4z>6{喦O&APc0Q =7Ț=5m9tr]QR9ohN=$y{DH!@=*_)]zY-wB[Z>WE:.B:v⥲$[W/$9e[4|k2gW I*sX 'CAP$6Ӱ9Tyf JW F^/($95ø ^%U;?5$?̈́ +?* Գ;\71v8 Deo;JLrsƜIOWeT=l=n}t+jƺ H# {;-sdHxHK!E Z?b yGDfk_`z.qKϞ?U vtnz|ÇJfgV{mJ25t&27063M{L${K_ZGr_7ڗߤʿ:?Օr`րt{ozJڧ4G]5-/f@ᶯ* cMA$ өÛj!e=o`bWo +ďO9nRUW0 ީsmFb::R5X>~ZP+ 7[ W@)f=p~ڏ|YoDgV@W~ %SNA@AIӖ@/]] söKq$ω.mڲH&w4_w֑ ;|YX<4:SL*|#/^dقݯ;22 @З}E|jTތYup?:I{d?_%޸ڴLJT;,#p& nR_ W{Xcס~Țm' cwiNzϙ.hk?-dT$8n[)uԪ<AW^ۼ)K77h,hgFR]cXuPbI}@D~ib- tt3LȻo \JLiּa,{3, ZxEThOvh<rͱ(.ψѬz?z+"{N͙~Jrx0fX|fz0/"TcI*3ic4}8>ΠxRX8UmCq{iFɺNb](0l Y/5pWʖt!~fHI+s%%>ɹS$O?xhYNxtStk]z8-9v; >:tɓW(G2Ŋ/^BGE͜i*WF6*oG]) la$'Þ˫b2!|ޯDLV8iP}e UZ+KOeqqM-dc(xw"sMbɻCN,@{D5StIfcPUDX:EzZ**2Y53a&ht0*m/SnӴZJgM4\K7@ŭ&R/ܟόf8>p&b)OrQ;VD$g/j lAsQ#ڔ ޘCqW\[ >"ˌ4x7y#uYǧfǘ6 $`D@+?c?b,~T"#6N;Yx)YqM@IH5jLm2ba:$L^xnz ftvs}ʶ/ $o\:7?>.("%Kۼɉ*V$?K[Ky:d-1!/E$J3/|W~3-_ avTFH:%>2a/vER|O^jU eXt68$u˩1 ]قhm*ŝFyT/yBnG#2fMrp+VʆBrZi}pK7_k*=>ԑ B]#w3~ 盖[~H=)&dSa9xkP񺒶kTUe'ߪa1IA.ѐv-yaH\v Ɍv5(Zۅn${$kɊ׍_QH{h $AshOV'j)Con\Xڳ]Sg]&V LU6%3a. hPP'ʻK-&'q?~lDLOx`5"B טGp{J)okJo|IEdUŧ2>;Nlv; !iAN6- 4y MMQu-ھ/2$tyρZo\tCyx-:qΙN:퇽 >Fϴ  [ RsoD{jy+U?LՏijC Ş{Kǁ?qxC}#yi;_ D >{tqFa/a$Il6BـkTbvݦ햆 i>_/ lIBQC[ڟh `-ō 49N6{2(#UMz<=쿺9ӡ\Ts]~\呵m( ppHft!>&6T6s H:2Q04O4JFx99vR,zP~y4 )YT-ɓ8G4й<Dňp|1"-9YI=ph?ҥ$-Je뮇1 ^vDCUY9OOP|2Rw NV dq `'hM:*%b%eh`肌lUd7MkC|r~Lf [@A&<<$ &/ׇ9'{[њTx<^~z wm6 XvCHrZW_t:nɋr$gim8RX }"APb_ b HHdxWv>F,k 'J]>*˶bG#ոy@5%,yj%GM䰬.r;(AB(Qi埢@ǾL4=@U #+yApx *x<׈P*x!hʟ+PcjbhN(&2I@ @"& ni~eHL9?g|m*I-Bv^%uWk懤o0ʦ0;5H\בּWVMmb(sT ,V X}jp/O9aJ^9F@uwnQM{>94G\vk;p.-8;"*0O2Um|ڇg{ {2*J^e@fR8/ ks = +P$LFp \Gv9HІ,:mF@C&JÒeZpRer29e$!o:ԈKy'ϭժv11Q,G"0S[ӡ{o_" \zn>tSƂwI2֜:k/C[%ICFOdm- *b[x[ MrڝNrPs7zU-Od t>'hW"<~nKN\҉ γftޒ'LA'By9CFlP9NM. ꧩn҉N@ )P @}K w]|!* {zA><=]XLPUW]Vơ8E"*I.ȑr$x co+֮[RFmd 2KgzryLHVM9V.'U$I"7 ׭TLD2;!+ڿ#2sF2{'+U\Poy?h@6ۿ D6~wdR$q2X,("[N | I2TmL{NTJr ~r0hJy! _*L$pqМ\-L&vѿCrT"MJLNO}wm 2nX7|: V+][iPbZI2n5S **Y^8_˫ `GPbG:{)ґP$6k?xxLk[I2e@hXVf9p  m޳ky!3L땑&;#HZ<2Ge+gkXf>@KoL&ge5(1>Ϊ^C3^~It S@P lJb$p{ۭOH2  ːEXv=qTsk} 3=w3'S=H>ěȘ٨7Ȏ/>%IGf"j:+.]|*">%D T 3<Ҫl!\q|8迿U=0`DMUq`ӘI[6ID+dIN @-W((K#X;7KҪdoUy_}mf~+oLOĻ Cˉ"\^;3тUGWݶZ ߣtT^kޮ]a昝$7Uw:^BlHg4zjiXBiN'H*XY,Eye dm (`ɪ:YLw7o@o, N$ fG;.h і9)n5!7^ J$oWDl2tF};$]VMBtH7\^twEnzNkCW=n|΢vx4"~mpn:?(B9T,fI8ګ#$JozrY+`%@L'>Es0+qS/t\/fLʘh^i?}Vo $U2z~(a(QtdwBҶ芻i )'֤|a~޽Q]=qq7` lhx,'5vdY`@ZU#Aw$"DB|/A@f+ywoujX5ذu>?oROjlߧN r'@hP~*,DgJ틕a^%r2>}S;uIoeSy>Eњ"t?wƼlEF?pr_~ j{)/} v2kQ:@;ꨥ&ɓkuA@Ϛi@vп_> EH%ׯ}3JqUC)JbhmA8L,Z""A@ Ii|~QZ&so N0hB2o@ dkTə;4_-8 Sk9&5c} :thAhÒY$^EV3ugf.牯v- _Mk0a}۷{r A=i+T ( Oh/'t4hР}4f5/mV %j38&ò[h]Lez}b !*B]{R<8 :4P 8ӠEwOG8˓w%ɳ;^8~Œ 0q̒'N蔷Lh~.r:mGkL]>O*נ2yvs(/BbpH %uND24 4e5>,`!U(00I2+_ShOj?P;6AQ:TUUUנ'ɺGXi) ˈbt@*.\u2k. A.kx2 h`͐t6:qکvS d/1a}H>;U"XxE$g>hOD{E ^Vd`1U'΍ω}d5dPdXwGU*> FSm#fZ,jFPPQW(\VuiKPI* v.b5*!S t7=z;1TxOn'%9)W eWh&+dJ49l%[f:+@ wsd)F#IT[X.M lDV }K,_֓q$9 [% ב7gIᠲ+ YN*deҮwЛ&!c~H^DUQ+ѹVMmLaƮ׳(HvɊ!c;Lx0M_i}UIM7=5Bs6ƞ ~A3_I gI, Md2nܧ+재Qv¸+s pX0qQ*~1[NlFOsrz:qURQELQ&;T%]PM{WRr]K7+dWڜ EinITIC֗9De~zvk@SuKYАw}r/LTVFCn1ВboCD!-(yNI?ֱRZ2DK.,CB[ySGl#PdDw3b)rt?@ *7CtЏo%o\y.&98|y6ŘORiM>FƏ?duw[s:_hlߊ/;0kE٫WIuP5J㶴q/r ֣,a{R:$Cw 6Hj?U| oȷ1s AZ/QF7e{NOi`tJ^ROs}q5t-:U(*;{Z-W\dTyeԯ =Hndmc}BmX\?~*9@HI2Ⱥυ@o f_s\C pĻ@ {{a>gAO1ȑQ!GuJM_f͊v,P);p-GV[|K[ 1^}=J~H95—u:ܹ .Traja(+L0nC UR+/ !3h0OD}Ӹ IDATO Iڷ- h@Ad*pa4&92:* !A`#r>]6$i+1|.If]eT~`I2 Rٹe3$43W-hX["}^xӻTUZڱFs~l*>[g,@@ dٌf'cN^ @7l'$l d;OxCIs(Y!ڧGdi?|j3. ˮ;/A!?Ϛ6Wa֑u`+Iڳ7׵C$ 8IEH/> 6;BΦjPl$I{"䫪)j2 Isr}+ҵ$~ ~hrz1#|VxAMfv@Mi\ymTUr>#NkInV# nW7fI +/d#+?7`}4Hz7 *H`3)9K6!!= ynwAՑ@9s^u>nNt'n]|-r:6kIQVTbypL?y!EI6(M{mjd ;ҧi;ɱ@[X@ 9/8WU% <sBntdCHVV2y< ePivk-p펧Ӂ6=TIvꩪvE<(犗yXb%,m$㮩l YJ.̤| }떝\ēW'4 H8k6@XAhDjdELa%M-y)oH|Q0;H($)6^[+§㪫nŖk31ӥiОzȼ=EdZ\7Yz/.o눍s ,h>*m䙔 3eq;ykcBs)i`o[o( 9sS`yhkro:leMcfC5%Q!AR эWFQrD"aT1)=-nWlrTP/5$.wo1T{J'P.ZYYy7R1!U>~PZ4Nl.voηB*yL[{ 41%'[Z>R:P;}a YmX(]mq#kpwwgpwgadda]wH[]I7WNu׭+{>{|xhMm?Q0Fӗ9$ò wb<(iޟSFEޝcw6.7l`Nw*R?1S1FkK#lfj)b)mCWe|ZԙO軐j%DgXl?qeb|w'fcIvlEY)udr`s{1j'k ҳ׆P = \T<Ky, S.N@_O߶;ABxe7\O5yUwNdn!(G(ݖ:'i\fCly_K7?(WQg$' דv2>|? hyUP/ B ,x,&i\X=Y"ɚ@\YW/LH^D6P[,>2dQ(:'SBɮ@8gseBqַetH:^#4:& dv`;j_f|[0MvN{{ځ  @2Pۗ5Ōמs#w![?h(e1+HVaߝ$7aP @v< x RV2(߉= ZM0B x^ԙVbbzX*l*C$"뜺=24ƌ7L4MyR:|2dIB6/;02A*mo>qUǒKC̠&j7=p^fU+ΫF5ps5DCv:}f5ID((FH[K0QfuKXY&@ŖM ȼ#P I"zW a|G5 n'Tddڻ76mڴiӦ8szj}c$]a1&G*4aYv,?'.IXr$W_#C)5Aݦ=6.#-)g@B!BA۫VqXZ#Ȧ8%^\$\v;zC]a6#'vMkklk}%VݨYхBA`6)[zNMBFnﰐ㉟J(BdzN^EI0r? !tI[+ ."V'"e1HPʛKBcD& Y$ TU%?:@F;V0`'v^wsA2&<tS꓍RX\&ŏNqX$CoH;FI:/LR76+ bfd2&A*[ EY!YU,"hV!ȷgu7`T-e_G 2"ocJ@/|]?3G+h0`l4ۄ<_]WDvtw*EJ ͞:5Pc 4]oCRGn2FImؤwSLǣ;ߒA͒b 8k@0/ V>P 1 HH ncRcAyNZkIg1lKTW(a?h{d Mq#ZMrgiL]ުq(=%Jn`@qЉ(ծɎy5I|ֈĝhۏkՖ(Au߯T)GZ'ښZlXM(XJ򉑱#:0W:@׶j.^=ijb7o| XdXv#H?{ݩʠzD*+`z]Q6|VN1F)9p0C(q=@EonsxO_>T%+t8 %e'UnsjTuC8љ1_N(t +Pnu|fm۷F9arzל4Ҋ!Q0KwZ&m $ 5"עzH^h'oJBbO;鯻Ø̛YԢ)EEHGrH!Vۦoκz5Tbʘ󤞬ө5.aү^B7겤ym_0qkC4gĸJTT{"u H`DGN8{^%9d2 < &d4P3TMgQPj-}1IlIV0Ϊݪ~׊BGO8}M:̠:b`ߐv&:H<<ǧ[^i圀V,C%"6)SZ x F[ur"㏞8qvwŋ|ĉ'.XvĉVDr潍&䴻0xMW n={Sĵ_"\̅d2\fpzÜBUNr0loH!t|dMK{$ ;*j.8 %$s@aǫ+WNժrgn/IGxy&y?QNN|2"o1M_j@q?G.&8k W!o2eʖz1$=|"`&`Bhu, @ٜ0rqO$Idփ;wc&XJM„ n6L f)X[r8Xqhi@hKd&ߊ#kS\4_o)[:'^/%2WWa"G LwI…3|ꏁG~z-'Yﳊ@ ,CU[}e(`2K y]:wZx:Hj/Ц,@$;7Wa&6ͱd#rv r}'ϩq BJsi),\.fNo 7cTe/䯢 ů]lIq0᫓(؄l !ً*Y\FYb=˗,w,\S#`wڵ FPdY'kBG^P7{9 ϛTȄ(ҿ^ݩu% l$4'*>- e@l s-O~\dW2)$(0GL_. ,(<:^YC iHLq0/;14(<0c ܐj. H>, 5je`2`5J)r>xѣؗnRƉjƂ@_0CYq|CfÇ:t'\;{DDt}Ո􎟘AE~bwRn8d/1*25i6pyt(UW287/ܶԃӝ4o>?JWlW( Xdr \!"&v[J@K>RIȀU$;`_ !-2z߯B]lX.h-q [CW^9 }P` eA B^/v7I Kf]"CslPW|wkJ!='<~I`Rw+D#zw0yB o1}x08;B1!kJnv/X<~~k>CvL%K,U3w*(#.c@իW^8Ֆ`7ķ$/R<#Ƭݴr7*~Ԙm@Y!ngv73T$  > P^q(ku;:vSbTH6xy-$1ŮWmڽ3)Hm>A'2|\x5mkV^pMvu^͕F $l\Jh%xZ04@* {bxJZf &ޭ!+T!Nڮ1rT*bäLG1j 'qz^%gSΩo[V#gotidd%v<{=&&&&&=RflvVGE櫟J +Id 0xVZ1 ĝsqj]5Ų$oHy6{4[Z!IA:d]jEb-]qSeP$) Nff]MWʺx墣n81o?آF\SIK5yG^~1M }'X+WI2wN_2:dJ-ng!I1%5~Ӭ[:JpωK=݈|9s YYIF ^dza*#9թZSѱ(m.qIFʜ(^I/,`rMJ#/D$%#^{v Y |+„r6nŚz 0IAk.BF VIT(E ɽ7YY{lk0Dǔ< ȝ'F)HW!TV(]Bã{d82I XMaG$" `@wD <&jZ)>=U!] Ydl| 8O nwEwR t4~`7[:Eu%P {KUn x."KcS0r)SGM| 6):%R۶Q+E'Ӽ|Gh؃ے\J?Kb{H#gC=5Cz<ϩ\Ǟ{H< HĊv9 'FJ0x{Wۨ8C2VKI34Wxq66lMkIk>8GUۦP>?/O*NJ-z?ϛ `kIk[Xu&Y@9*Kt;-MaKw!@B_>Kv;gz>dױ$١7N#@6ai@RA\wYXEW2.0,{xOR+TcT(kee/l!yYh4S%Qeaڹ^ `ڝ¥^!S}%ѩ1L{8Q?s%T ߐgQL7PRL/Ic,ǎ猙@V=YItPT/sЋLpWH#G9ro v Q6Űc$_G(a/;39Z֩0SܤȉϞϰ<1/F(O;lDP+Mbw1*?U]r>j.j&hDEMK;z^7Hg!9_hTU[Kǹ9T/(;R*@9 U/"s2?{]d UE+QDa;nڶ8|_]\L]`47gihr}~mˬ 216V}Leh9nB7$ɹ&mH; O:U|h{KʈQc# \8 =ʍTPS_rJǒEF F;E;9٘iʫ`@ nTVa+Id%u_'8Q_I_y[c )se0 O]G ˆf92&,|HJ̻`,w&}.5$m5 xknz+(gL}yKs=+V@rvcnD$3vP }d%ӧO>}^wxJ] VbrlX C 篿}Ot:ko>Y[ fSiLC?ޟhE 1dS_dQȈ-$Ka#yX.p007U I@\-`%Nj]Vx_$dLɕhuܪm[dIʼ, RQ``PQ̞s|Ci_0Ka,cHs1 cBb.|gq>)![9GID_^ F\n³1'ᰆ)Qdt՘xal z=U9[T`{wIv ^L8BT~z&߃,e%rȜ9Eׇ|8Lr"0! [5}^<y ʥU-h}N/@P*Fcy0l ! 3dlzpQOe ꪐ䝡2qT +@QR-Mu_e#ejy qzV-j0zeMXռ#PQqeʴ*ohO$9#i$?\oDωR l^;,?-MɹNϳ\zu\wA BTM"I#2T=X5_ @7"b>W/ǧ-Tk5ắ#{(6kuy|3 >LV2$x&r nS!s99noB}g\6:{ &L7  ,}(G?@ۥ.𜔔'I}a u5`#^TߞUd27 H/_|jv_4 4wut4,ҧD/eP}C 2dўtYQ=^nq/c0q[Z?"I @>UƠtpޟ6I4s$cf4S\V[!uFPamѥX|\L~yo\E&5Cj+md_ǑlAv^G%5d!.z}@Ѷob:\٣0% x-ڳUDIZmvYW1(reY"֯&@ލ?ׄ, $WUr+pM!8I[$*hLHGt91l/ *8uuV$ཎ2![xASeeN: #[b?dT!1 9 XRTOqg.^Gߎ%@VQ}F߳U-~5R%~! E+Ϛ @++O E2(7^kR#7dqO#˘[yX IV5$2|2Z؞E6܋ $K1YivYb`rNEBVx\#:&=w<\3clvD3!I@une7j0*YD.ZhѢsYkSlߠJvF {%ùJF55eꭊB@, 7^tkIH#.ƟHVG^t#k"?4"ɥܡmm*䜌(.yU;ߩ]r@Qt^n&eDF-h!UwhSQpp~}}$"۩]yC7ڕVdco"> 'H@vq'AYȾjIķ雠.oP]p $:=83D5I#7vAڨ{u58 p=$ ͸")-cƔ}ާU߄.qRTQcvHF$WB8U6NbN} 5P^OORl8#OZ߻fu@k#Q֒m&7]^Pn/IrN?:,UDl9 X@s(T@Ig%ycT/9GN27ƌ߰y8j3(3g^>IZ 0mɅ T}Hpÿ=$O5JHJ sG٣L_:[[Ia#/Z%0Bث(`(1r2٤./PU#:5I(efҥˆRk|8WJ"x4==uVc/¤ֵWFUuhA<33.SvFSj;$rL]<}Ɯ ӳR._AƥA2@_mi@?i2Gzm(4n]l{.S_Py|@+;l^lp4sYqPMr*ղCnb:= Ga.J/jo.:kNڷooKکJ+EIPr]* y$ 1`6#hw[g{cNl @ѾמˠGG 6z&|OPq,IVEWH7s|))§Y GPugrg&%bc.\-ʥn7`@Z3IW@nM|^plpʩ1" \"\澗KlvG^<5Q괒#sCc{3_-~/M8d|1+B{LGeV~'(/Ω+jv?nl J@+B WiG0>!R{W&R'S{OyL%i[֭ bddY<ѷ>=%{4K?1JY`U9QGK;^ V{Fp|I$;9"(Զiv;H$ =8𠔪ďjh``PEa|z( bk8{FS 'ޓŝ*utљ̔RI L&0}r^bF4 VFHzMKKiWK/~]dVeni#HK擜f S}O%X}K ɨҴuT@AR䧏՟ *жZ0-hD.rN *+v}S\0?#(O&dey/Tc:H-kqqc69".Δy+TDyji< 0?jUY/;^˯jI^T u^jN9 \%P#g<p יpLۗg>fP$?EUx<Mu IDAT'q@'1sxWH^HF$M=Kރ&w+^Qj c"m|T˺.9 >ɩ| |_0|UZzgS΀kXY 9ݍ:H A_@a8:9 z\=uk^!4&ibȊBI.9 ?k_}]idϵ@z'A {_*'w/ckiPZtOlj)j0Uv5\f=y *<#e2 yStӄ 0' "SaL`Ǐ_^_K^7/ SfcYU+4MjndGe{,yC) #=(@B[@ޟ~~|}ի[^,&W&4esvlH+gTS/ ,3΀н“0"wլT7'0PKXXx*Pze{dBܙfߝc`q'7=cMI["bBZ#;i UBqVQߕ& %vC ;զ@ 3@ @燤n0]LT  CʷXUx푗*n}ɀP^,)#V#-ޑͰ h/eGL6%sr^]#Q1'״~bYK,=\Z_]1̨+L~8]dZo__rBmfZa$]u:2iX.cX/p2^3F*8ؐWi{S(@nPܵrn2rsIp_wwNkQ@k3,}F2,`0? ,<ܭu(gTl'P7@[ޑdn.`89 BMI^,Y'@ ʛPl Jk:]Ú^_xRТׅ)y0P!jy7;]#e ղi+jr8M$4 K%H&=NDcEƪ+6UO[2OE2#{0uU/nSI{5ZAdӖFYoYGI1oBU#2~K# QeSA&"\59lHfZ͛sي~IX[[ v#Ը@?`. 'IdLMxsv'ೋVG^GQr+l;C(jqRen18ʋ/ y;e'Iؚzoڒ'ѳ"ߣn 9d3[5zn0¹oЯ[~ u@K9EOv"cG|$wL\6Rˮ=sm.PtMBs!6(F52M#vnCXВ\VߌfTzMrWyhdnPIUq(Է3W3[Lrr'$d?F@Kc]QG䟾JIS2&{88{7w;D}3,m˼М6J`B-r )F-`jLs${ (,c/;~J\cϷyb^O:vu˸ PEt}911[7WdDNi h+YKH`w`^d /\:gzw_p)(] Fj.N%Hv>J,UG-=~'y6f}?;y2^t)Q0PW$BrIjVڄs]\/s 눍aϝ~U'N#BXaiVl5! ae 5vѭ8=TufN63`nΡXY11>>Ѥyn`RC"8FWh"鼢~ zsX--@ő5Iitv.A&v>W>FrF[W5`}}1K6HA[Ҟ@_oڣrř+ՁQ\gVF ܵPbEk"ťKq(ܝ!$;s?n޷ewΝ{yQqX#rn(&Zt*dÌW*J.r`K|/vrzMޙ-:A>EuT&qiFRy-7T 9-hxR5r。b.\6_jwk:t]Txx?񳟪8!{dCqѨfq=TH?v"jI]Pfw5J(KRr+Кid[m\3" ƘL^a% Ʉ24Qj~gh{StY2LcV^]OD?1,JrL e<V_Jl 8*Ԏ+ `zU'-1fMh-j4t`eOļ>!`@_/yBE!׹xoFdatP De!H*0]]Y@o\6;9ƗTτjz*Gb^q{xЄV0 +M^W{NP:fD({Z2{.۸w@G<\GN֊ t_;]~^Q'Td8J/_9Ef83<խ\ȳ^yC5`y",m#uŊ޼MYh/ߐM6c$E9^cW ú<|e MTȫ-:.LĽE. g)2g2>^ F=%2ɼ:F$ŤA76Dg|!.S /`@BXdFJρv֋ǝ|6/ `0> (S"V zEakim$*XaIGsP @ijs\2.ZW!,.VBrgx;:L@ϟYXl'(oɀa_ #x *[1Ed %m`4 $n[OZ yqS5B 01o;'I $p#V.8U5h'Ce>hre BeP󝋏dxtԤdl%qK dL A&1IwI> aQ0LOEw͐MnKrmŮ3i;`A-&h_ ݅j{]s"njK:C @Mޭs=rGD4rv`Cukj wH.uH 2g;ll&pМ9%h_#E,no–-ܛd;'եMYWTE*|U *R0Jb;4 (pw݁ ZJxKr\/^k(=Th!wOc4c|1%/kgd|"i( ?KK;j"8 <@Nd,@[7@; N޼.c~&<*} ־S>s'4Df7ٳ2g{QQd>Z\*}Aȱ܎{Y_CK])J϶b8*𽜠EVl4k0<j:{^5Ȕhk嶘S&:\ |\E&z2]T< èʼ"TD&v$\M5!9 'F* D?EFi%*G6{6 (Cv YVds(VSymSJ{PY@o$Z*:?3H6n  W ‚N+EB&y"Rpɩu8) R~Q&O'@{wx+Q)Q)*rfipANVT@%3_KPow(5FZi/6~h".ѪќrOw5~s%<+ʽUGh;7O1~cu*na1S_?McWM/ ZD8J( / BMG\t'J3voK}ZRзB x=/ @Bٔ\.{@^0~}1 |xXK I椢rf >tP}_\ɏyIj$ 8 8ejÄ́29Wi=[HkK$GM)Y CIrd*ȷ2ݔ8W0Jn(L aZ IdT&{fO:%sfmh~Pv VFXO @2.2vMby?/.sZbA0O5 #wrdQiAOir| gK>S]E %$EB~`~:أ㇣|r^4wzO^Q$ma25˰nL*͡ڄ u!Uz$@ ]OuZ'.OiT5yhoiyJAZ?BߨJdSY%9CmOD{<1 lj+t4gB6=eH@a\"?U\@ ġ|l$7ɳ!Lf GNrR)@]t1^iBECQ&IK%4w;X{`5YNs1?$ѵ0a FLerh{BgMU&?*HY5qbFUen@ڠqҺiiG Ԅ(DFW<王sh  JU| .;hQ N~ @@$ @Njչ/")]se )8!3tcs1isRcê(.6PSbF 0`t]@D]fi,8LT\vSz/ RVvvWL{j.z|;ͺ )+%h~ݻsv0FOϮjV*ɹ/r6(I2^$ro-BnNX׫aQ@QH)|17H \ y2ĵVœIb6{tb/bB*S7Tѕ;y"N%p91.."GZ#a0jb? /m?3,2`qnT'1{'Y6v`@]V!$VJ8K+ ~Iyi2yO E*Gn ۉJpCmG%8$B$@EP  M!/*4zoڣf◆ߨz{]dUy7[Hx[嫓BU4}Pؔ*0`-)))_'<@+*8i52nm io?d ҄\]PF`ZN?Қ p9]/V{1in'i\R 1#L'J&R͡G( .}sJAu^kK\´!'h@/4_:=yh&OFNdZ㰸+2sCΐ:"@li\z@~&P_VaKr%7kfH&Xqo]!$ +)Hק&{`8N%TC)=VܟbnK;p.N9IA7$e È6`04b r?U@>~W5s0NfXz]P??Juv$! 켝t}ds8S)rH澮 WfGu]~6L~,wb]j䠊P(\vܸ{qJ-?sm|@Er BLE+2O)C1i0 y8tnMu!T5Z4S]7|Ɲ.X`ܮLH ErvE ӓbg̔#Sl_ųװbQ&0xj_=y ֈ2a^I*j%oɛ~mCZP=`Z6B2Ѿa 0>%ҘvwT)yw r<|8D~fXMq]Mrxvߙ/nOf7U+}%W2miwi-:ɋAIkonQ#Tx[,{y|[o$'\UsNϯ7o<;_Dtp l$%;:e[#+_R3¯Mwj6YCLLփ@k,VűRykp<2MSg?lW@sdJnWhۜ~*{EOn4O0Ft&T_#f+粢~!gKH4 \BNvM!{zn- གྷމWlT($*n  99 ݸ"r"|%#2R1H\T{tYHʢ"R_!-~-[e5;^P>Z@ 0!+ G%D #Dhm er]B&;foăy7';HjSIFIM58qW> תI!{u=kzAK\ e.٪RԙUlb1݀^K Q#g[È|9nu@hQU (ׇ#ɭ,3V,F#|q=]\&/^R d/v죐$;ͬXC+" 1TFn W3mA!0z @)}.&s^de8L#/͡cogEM*L2y8[C4pO:Ƕ[IV`WZL`+> :bGWV>Jk᳇kky޿=W-C\ f,ǵEUɄQ/2/b;EkKQ Et'PQ$fw=G^# DDA=bցgKMvC]l)yK@]LKO'BvwMP&$)IUȤ xvbPV g% < Qh/I -uGu*@ݏ#ieH^c#hJ 9 ,jqHtnvI77k VObO=2'FBO?oRR} m7x̨!WEPU+ƚAEt]t:) QaWE܏f x n8ϫ@zUQ?SB7PO>dyFEI}g.&7&Un=YUݮT ÿ-˓ pssssFiPʼw`X0mpUL6p1g‚kӽoHפI}sEL`=)q(d(?0q4a<c:P$]p%nMcFP@*F6(-g{\`8ki@`c3H.0o_(&]&0Hh'N%1{OBh\hGG+6JZhs%S'O~y/C6Lˤ@C Қ!RHbY 93@p e8B+wSSI~/UzzR"6MO803|%οLJdWK`pHTH՚T:5zr`8f 0ba{f'/`EF>{ܢ8(DR15Sxo j+KZ· F{( BցYSlTD}du juKpݳk29N]3{wi#>xO7Iy +j@2'hL&}2ZH ;AiOduw:ֱL@p h H9y\} ̪|.xg܁HO^ [2`&-NP;Zg&½*iP큀o궒TnޓiUsh& CE} 2-@J 읤sr(XU0-g-+gCճ5.4f$ 3r FNnzuյRb/6 i'o= KAu:LDx%6zg:iూ`+8Q}ܜV GOKTWR\Y `Ho8^πGo@Bt[/A;L<_sFO z:GN9G;P4L9v퇂2y776 "=E09U${sVoÁ|??GN&%SiKP<$m $٤eG+}d¯ToFKC{7!,}胾buNߺ @`RװIT\TVG#Kʜq< >$R3(@ &ӱ۳u15ah7įgg2LEIV`3@:(vbCW*W5(-v(S@Q &wK^4m,*T()$_ȓFax(ʬ^nrpQ#*nPN*(*]GKS/ˡ:ՀCFʃ<)y* ?AO7Poh(jt N?.Po5w&-:pT7QDO:?%FL4]xH2囹hc.UK%gS!GQL&<0CDǵcΑW+*ȃ;;|˝& =K~+oxP-E3?E..)H thE GÜ@4=@* sB7mZG;Qz9hoAM{AmWNE0L Cv uЎ.(JGT,ߙr{۴>@q| (I :bD}v?B^b#" Q % ܵJMKFsyPӑ{p$ѭewi xVzFLk@S6PW/u_qWl ~py'{?PKM1#fv+cdtQFyA} O0v)qϓxoܠB~|G 7aƊO\猞PVm4[P ?<#0pvB=C݊y SEd(V/D \e:fzMnD+> [8[:(6KM7Bu.7t`K';qF%0L\۱7ֳ8 nHrcC j%L.|Ұٛ~d; ?\B7jbOd4*~)~L[FFY'Emw"Z2/cfЖ_T"6<0Sp2' PזӶn:CܭE7W@9y|dqz@wV M{a;vhV@dneTۯmw+z\6}k/;=PȢ5n\.$o{:{pAæ܃6򢯍¦~2&T F^(~f*V<;+pv B=B*~H[^YtpR{*wQԑ@V큐]85Rm7~DuZ6H5;IS`h뤍}̣L#+}yCV/gtqBՉ"EKZ&V$)Yr<fSwSDVX򅎱+n33ѣɔ2(-rV $Ƶ9Sw2 _F>VՇ7BKF!m& ظϼ5'g0T,RYs*W3LLbQ@ K>Q1@[r~*ThgF>*4VgCTl6-8s1QBR9;֡bHK\w$U7CxR AHTRI9fbpo@7ФxV'Lr %pҭWmv;b^MìvթDb}[TB!\V]Is$N.}<]߾RR>uB SӦ >x2|ʡc~^|ϋD|6 (v xbn qR8Ț Иmet)xU&,YE&Xm',PYV^5 .ΏJ"y(sޞ`Wܴ K~m[FʼߤgX90BSI|>e͘g y- :Ê.P.kC KhZyeLjfTrƈB_z>3f3U歬u8qiG+Nk3^䔮Cz޳]PG2=ې 4Uף0и_MSɥ1ǍI ~1#? D_>S^%\ܷS.^ӜhЈXvW,B0󜸓Uŏ:?h>6oӏߪ;B̃^-c0$Iq0Ћ*(~|^8}?jqXa4维hG4LU=+&cq:_?9=qEMdyQC>g{`!SewE2z &`^V#94 34޵$9~{?|3ZE B=zL8 P~qBnDpH_XE9+ &c\TͰQ|+!^锺X  eLu:ӝxEFwuGUR;t]B UuL'M/ߠ?j[9С!gWvZH n)(ZK)^ݭ@Bwiqw IH2|ܙy$;;ss_9y]Z/\B/z~ȹV`-`FuA! [`PIHR(0td+卼gȖaB: oh9Fr*_GeI c(F2!)GEYd|`v?yt)P+gK*(fj&#ۓ([hMf݅kH 0e/֘OsHhq}hJD<^ FrEu}\IpW5J1;48tO~. uwdS>'Ҟ&g07*7|e(|33$}ڌdy4@ $+L tBW >kB"?tGLժH ߫r-jk<)4Qr*4Ny)9'9aB,>= ~v,?ӱ 5O]&'h`Տ{'O6ݑ@Yp0֒ obbb}X;D=ĩR+.샺oU8$'*eZ'4c\L"IRR3Zu^2? 0BҐxPW6߶`(vs+ ȋW& +fQ =%Pw~L#{&ghskpd%V)8'k^vM (Lz4C>s@3ZID-ծS ޒ ep?@3 %>nEHs\ t\ytBL0' Hk"f+߅,ws:,0!~RU|Vb |( cmI*tp%v| Tg)u^@@xCn@9>0!?L|xz1y]vYc@_, `7=-:W3w@xٜf`nگX}n'IFҧnf@`>kflgwƈ"-dWm`ʤ೅/T?}~Z }_~{r7:F)`3XWj">>&ؖaBM0\a-װYn|jV2hxO a_HiO5x)Tf"/&~r424oC:LN*\[NUyӎee QL4Dž%gNq8.."  x2ij:T3ޅI6pG@\\@* QbOl MިI ;Q?;Qm.< ۚ@F1>0!uu&XVjnuBm9w'I:md.F$* 4p4~'$/ 8;4 +,&-^BQ8.Sd/~&IPEQDM-?0 LjY໕7m-:* |uCU=Ke>l?m۴7  cIAWHt8Hs_р̕+P|E+ lN*s%v!ґ@l ^:{ԊRX!W,cPLv.AI\h)ujʢ#6HoL8A-_2-Ւ:]w@$yn;c$uB-C5E wk4O=_P4NBuvv0nRev2 l*@9 Y2:~Uy=mK*슊N*te'[GL³{0JI tHks' yN{3j5G{E fRR"bc%XdX Ny_`Y* +dX'>-r2n' „|yR( 0}E/u5?~ {(ENT|}`v?Ƕ[ h񺲿bh o3:XFf@{|\ SNGnRn' .nH*75@>WFnHkExj ʸ=k@Ng T 5`ȱ}ߢKKu*B;nV8[2;ә|-MO ZߴΑ4%y(ܢaH K@І`T)`iN*d<nj6#g3' 4 -C} wmٲujo܁kE秌L(Zɸ K ŭ&Yra( aE$:gSY[e[K0,,.sdbw>$?U #(vMy^}EvmV.&Zr׌ƲSlVޱ|JPF!4 Q"u$7rdbV=r+WrC{ぬk{Ep7;gh*eq\ $[ 4Iu<ƥ)bu"v994'~&&!T,3#V=* YoVh<Ê梞[:3=K3Z-dӜ0 q9@E gY|ߐ_NBrC}mnM~{X=v^TkS_1ܮ75!.AH=7 &dYc|||fN6sPTy&fYRvx R:qզBS (1@W!i Z whxjW$b0ꊩ/ dl/"@I|}ՔtZmH[ z}įǯT>><3^vΨ=I>, T`Ӟ=g]h,l/rNK᱋Lr]VzR(t:C(4P&.(L='N2W{eRh#Mv_K OI `ߞ+$?%&k ۞VB0}i+ʩUjctNFS>h3[a֛m˜ȲTlX,fdT@$\v\D4>t?\ɜֲC|n{ܹ#ãMԧح/wlXc^_ CcXK,5Ni@|M*4n%dFhrTfB܅ 9ۼW)ֈe2牥q6W$hgჷ~`"z!R孤,X_3q#>"j|HH IDATC) ;VR֥\ZPCM2W\m 3гvU w2:fOɄӆwS>dn[R)tSZǴ*.3;=6,Z?r\K?@ʅ>9u_pCVL&T}c &NH34BW!>}qXz|NAè,. 3;('E?r!%0w]l\ȥ`OKtnպ@03HߔqaZ or\-]n檮joB3LnΚ G?~oT pDg_:3e It-.Pދ5;~cF$XЎ|U)f7{9$:Wо! .cA༬*\8؍BiF֚$%x^f*&.Ek\Ai½4(E ><&Ҩ9$Wo!Կ8CA/PCMCt%U[L+eS=`*NA>y0@v/kSL `lcBJw:][V9@q|:PH>j7?Pͤmf˔Q>ІtQ!Q$#H 7%Ul &h8IwHa3A1$hF@Fb׊NdYO?DՠU@ea:=`bxt1o1KgPt1͐ItoaYNKO~'iᗃR~^$Ȳ<K2 1W_P8]m -r^չKEؼ54T1_^`-Mݠ*5N>=#eQbuo]DWK݆w ~Tȷ?=@T1H d?ԍ3o0\cB 8pe_ڀΈ 1+ 7x޲?e4c|.5l jI@F]%R]zV:IM_ @A!OϷV]jNr\j9yI1L@o\|[.#^5Ay?V%-ڨIr"D"]vN*;9pZD:rIx,ji9JE`Ƶ;$doXR4ۙW8EѮ9_r"Px̕|N&A<=B{ǁkΘ+/Wb1+@ ]>|xK7hw$_i#K/*g4$լOTX'De%gPno)'~er6 ˊ=|/uGiaCG[PVt1t.'ぼSPeTl6+R]+u,l"KD%8ݿof6IKQXV,#_FO|]bWm|<ƨMӷkߥt]VP 0c>dM `.!3|u$w rjEDhnT6J7LNL"&C:S=0 ^8` k)}wfFVɿ97r `p2 }OvSRZpW$oeP{"^\W;d ;i;AӻdKm!+nSs@hB#aEk~ +̘Lxs&umX0ԋ>>i2*)SRL Tȋ6ً_I |#^nXvQ]ҋ!P_y{M[%F6r~C&NњmX'9E?E()@]$|In>#H;{P5< 5*8i,?u@1X]CjimW5%Ӡ>DRGұ9Ƙ'5>TEr&5<3K(rkKtv,Ʌ@gUx{,`J%/?%Og_SQ>ԝc7!"S֕AX­'? 赞.#r~/7Kw|xlY[FQUhn9yer?sS1 nWo nVT#4K!?lCc\RX/z]d_v&Qm9 彁Ԯ0u%e_Z`S7 lf܃:$QD<ւQ\|ЫtēNeQVZE wf)CE+E1ԃ_n|LɅAs$3$<_w0wvtlyW]D%S2 (upQۈtp?'kOMIm%.~H@M:A@Pj2zɧFVRxY ɿ㝾 ֘CE.\ {t¿:(dWm0!+%KBWI'6 l̓7BvgHnLҙ>r0JɒG+bJycHxt fQo~H:e:rF, _itG$CO*:FrPyy2r8 T_]Z5cEO&}͛7o㮌- ;KLm,&ħW&\<)҃Qmj` =On%2缇OIF(Nܻ2#}#&M>!{jl3<: ]Fyx8(tz[ngf309!ܧ׻3#zIt'0|7_UY_4P^f8Pů&!5|G ~,u.tu̕:4\qI:*ʑh$wϷŸI>3,[LZNBW>T{\E!뚜KB!~=iҸ^ '"쾊407Q:+)e:"El g𭲂$ψ"fgL˩'Pj CU}-c=㳕uyq@rqX\O>$X=r'33iB۳=jPzɤ'°] `9G6ASңY@Gdp_\&YN]!U<^{]-iEM;B ]+gT->yKi@VH`Q;d E[l~Z= uk|sSwIf*t5Am DvPɊɊn `~usr?S;rLp78Ag@y \ ܌ H}O$ϖ4Lxij%QnZc\0#'hBA:=2'+ O [q{*p`tH:)2 U*!U{5d6hO*NQ3s|؟O|/%}^EٓYp'{P`̑ l)s7,,︹|GM9mc&P;d_52lK86z;yأaAwSomN5N}X(2HJܫ]MR(1}~^YܼH5 Ŏ+䩚0Yi.ƓQ35Q.FNR{|~c5]V:F蘤[o֦CmqL2rfORy^0 T-9$yi#M9jON8n䯞 FE|q 5sj FN"ɝžDi+M4#j!@m_#Y+kя]mcFalUX `BTbyОDJgy02U {֒JfF] gvmԉՓdH%Z^A)\>@-A* CT&s~T^7 )5f@x2-_ ]XۨU*>D&}k%F5tJ;W(W^~NM5Mb` GH&mI=6RV5mH@9(!tR\;jG$e@O& 7˜<n517(0ȝ0~Ām(*TQ3mAur6U\mXIIR9T гVAɘx اQ^yR| D޼xΑr N21龃I0+_hG_:TjF+yB ?JʥѴ@ ,VxeD5H: aڝNTiƝ#c^}z`P2ZPp`5Ӂ9`fEGlr*&Oٖ@;d4cW?p h|8т#P$ln7ع+xI)$[PaR9jlY_uR}$]8%)zo^HH? L+Qn|P9sHh -4,$O͎Id:, >ۤ6b *KA!t]F:(V"^d^(|S;dP!cn.F$V>90j\?C( ҿۅˤ{ކo mSl n.O,?G[m@1s$VI6[0^b',1@dF;<ዛ\ !>)c7 4"0Y3߭bN}݋2(_(c@SLd.XZT;ntTH`}I x.Q$ ZF\v|\rEn 8h4LcBPZkz/9(I&+dQ0vw1ሸlD5@L6+ٗܚ?HRGw>gY$P;bO[.?DA¾0%3ʿWו!$`^['[N{_9QlA`(E(w[_ڍR2N9rdO_'Q'ۓI.:?,f4*Ka1Ò?+'vQ>7 |Q!dSBU_K?x ֩0Ga~Nvu:2~qauVm/4aKy@oT^%5|$$/,{v'-鱞= )S7mb\F)//rV--%/P臷.rC35n ]o<ҙBWbۊ]'gՅoos 0dE*<AN7\@*L )d&I>J_1N+N+ vs*cHil4ѯfIRy?5Cy&]3T @+0~N>.`hy fKVdtsz]~ 0Z(?5UQTzF~05jU-B>( S ^PHV :$#e{ůPU3rv,F"߯~ A^+CI{=-8Bv눜3]K<𾤃loh}_H#n}n~Pyuu&#5c%=AAJ*ϔ  Ia@+-Py:T-{Е {*[V [BɈS xG .= >5t3 :UY^,:n$ɩ$5%\x* w T*4l^FQiN̷MJ@P}KGinH$CK)a I@:7*dr2yS=%Z:*>/C98Ȥ,A*rLT&KH}Q-rt˩ΕL.IL Y ( = K j2i'ymPo E&뒹+ɹ8c@Pv7t $sǪL0u0Am _h /k.Ri9쎃XtJ"[JpB С()KAP^ad' JjV2&=J$_ AYҞ{9zˍ+c:ȴEP5]<Z6jb sWeCV fާ"kOwn5~. td|AXLSt ^`H2D!R:vbXl^IιXjE|g0Meo(LĄP\oHNQn#d|f2ɊBoȍ@9dr}{`b%Bs3 Ge=];p@&4 IDAT jE>˷辄z i ۔O>zA6E3v-uS^n R > 7=VZxA$NDm\8#~rW1Tō/RP;6KTy~(G5JmDA6þNnnU,^-38 $^lPhSHx@?HҾ"ho$ *Gy6 ~* ;"cҡLӢrD]{b(~s{9896NGK >Arųd]Jdp!sX,mG$$[` %t'V]20Z^.CaJC[9- b<Եܾq񈀐i`kD Eq%۹wwk^_ߺu+J. 74P|CE\_6`AaYSyz?`Q}E$E]< dAX7& K]D+%tIEFrje&܄?ݢt='UctfoP`޲5D3cKog=6|vhk20@X O ['WeGBO/QDr> #Y=3$"?`ˆ Ҿ!kwKa7|dԐ>,N0ƌle&0Rn:Tq$_zH⍒Z4/Ty0H^dU(\ 5DrI9!QI&F P$bL$ [ +eZe˕dB vQ :^޺B>w=<` <4Pͅes6PVr߄'Xi'l#I>)P"Moz6l&@.ȵI JV3a[$JJ '4%8S$ye_G]B@z*3t%_nrc+DidE$* e2zj;̍P09[{@$ )%֒<ӿmKɮtgJ L>)J(G^y0宝Rxn}2桪&L:_"]:Za8dpqHͥk,\(J~e_(f2:̝匓ǯw6Nw=٣'|H8oXU@ sC#ʱM:wHM`/..|p ,Ceg`<`"// 2]8eiSmh?~\*ÇiĒ$kcPdZ|.bln?&n(< -K=|f eV|V|I2gjr}l+`z2ff;sM9zƽnDVʝ&h^u0yqg ue$$SJOxcIg.yH)+ۙu$ ]F}Zr{]DJ \bp{ǝ] 5| >2|4xm8ϝhGPk^bXМTYu)Oh T0A\JjJƋ^XBJHv4GV(0{e=ZaV_P2>Ynhsdb/esꤘ13/$HB`#7_Pp|N&h+LUohKJUy9KDtVcIg'/V6s{x}7+$)cNA: B8@ yUIvkw,~#agHB21 $s/S坼o4=1=a2A]|DC(ymy: Bֺ_kUnո2 IAŻn$ӓRR3`) ,;y]3$$$$$$GpvbtMgC+}b3 馦2vwdkQNUc o(A6ق^HְJ>2Vo^qxC=ϒtH6Vp#-f= QQ/RU7ٸbuP힇TVdAq;2$֥W& H{y  :rRCYC07c<[S\ ܳD?:]յY\ C1j; ҕGV ;j;I|EXɴ;dfQzA^~\;`cxQɼ]$$oo^@:tpЂ]q/Oi RXz_$P{I$Y0B2jjzWPT XJi˴|A[|U;F՘:j(Կ|NJP5 "?J)e\թA$Z wZjs$0[LIk5,j/_-7mGj9/H*'? Mi5 4n\\[+~9Tng FrX5w᷹:)Di#h!d92=Zt3/ðzõs44s`?/L!l A5 KRYsj3 wz!zc9Xӛ]%;)G/JXIB'W/sY;9Ix:%JcH&MHu< 8G'Q"o*N&Way&4&cH K{! jx* [4TI${ VrX0$G4'2#YC QG5Efօwސa*IiD'y9Zw֒^ydo= 聯oQ:K(m^Z7sZ6h=**xYY /ȴGtv=K/3'qoWǶb 96>{s >k!N*n֑(I6 _~1fmY =r( 悞1L%U c%HL~ 5ڔ8(XQNKGKhUw'\}~0! Y<w3/]RP*_,_ \eg* |FOM"obm\Rg6PQdN,sHCll[ h4$VÀAO 8[GwhnƍѼOIҷ&2&rTڝ\%za# (Np^8+93l9]Sv*J@Gp1g#IKf-?7L@RWhOQd>+byt[L`X]b_kϷ?~ˤ] rA\cHh C"7JoarE0OlH*rNgѿ#.ߑP캮K4 \&dUmkt Q2xi݌+hYkIFnF͸CU05ɔDz=>H: a|&Dتa:wh?)3PZ ,4zBh H^8߁inb@߆sk7jEHU#C}xTniٷ0a3N!T&ĵyF,fe<߸G T㒤(ѼR_N.f2 (Vl jT\0bS1 Խ1 (FQ!kIAn@~ T OL0Rh}n=2`v$Y}GSYdhSJ'~v(ɓL|H I@b8]%cfTY6עTfALWPBjb9G}0 Wv6@4W (X"*f_U'I&\(TO&_B2`fnȤ 9x7ғw~B'J5C%ӯSΌ|dys0 }x/6}ipj1l6/RUM !e9"Nr<|Qz9neevoq')hY Nxȃ`TUPh KURՈ!=pP&B`*)\vRQ+ 02;EUzYȪC 49Z%&'Ns.>k]"$~;Q߶4gc1 |2w܁Rt|%~>P|sn-`] @gkM)ѽ+b6ѻPB\@DAlGٹyo)xF 8MϾ|!~*<ѵ +̣Nц=(JoW\|4]O&ܟ=}+#h[xI7 }( »7kҴ9BN11-X5W} HPWD3{I>o1fK4P[-W|Q5(q!|2i%Fi)NTuܒ* 1$h-r,F&x@*SE&G}ԭOcwpCìdCn1`>a{CJfm),%ɛ+3帗Guf2Q"8Jr8H-I- 2c'A,Q=)x2731, G]_ѰTMd߹ol*0G.[ x2 ?oHL?+OWN4I&ȤDž_Sz߅a25GZ&? R'5 k$7D#Đ9϶>m,D4q;/:yg\ Uo} Q$N>ªOڊ z=VPC^]PҾwǡYLᲴ t^*Cw83@d.7ӆf\Sx2  ;Y > 9ye[J]n_'+IrK52\JtΤAZpDseRt8mڱT)dj,>P}0G תRnN_ y "+ؗ:]XI!7((PTeg\ߜ<4_ GÌ:@C:\ >KrIvPU@DMTj{9[ٴ4tPփj/`Yi5F:x-$z,y ü@Hƈ/Q44ߌrm)PU:Cq?(A> KKAK4k1\K8V]ԐʕI`  ƙ$B |]#Eշ:#%>`_o)4 xN?4Ӊx@{cEBZ@t4ԓ-oX_09^O8{GAxϱg-k AM hzz,"H4FkR$7h=@$'*["w(ȓ&-΢^&V`• IDAT̡it 0R0:H}E/ (`O79$|5›B U@B[c r Om1P7 @U-՗o(lF.s/&,],Dח =|7/2ύt3q5ߺoQ'x{*<7BXp%` >ig7"&a(FjbE}$^#m䎃Bټnq} %<JI OjVP8B>~ܱæZSrOzAJ @B[bxsowDm1k @2(P֭AAc A!fpNcIrJ\24;Y |N"ֵQsejje#"%wjV@僿(v?Smgq"[TÌ:ՃG^a&@r+L^fvCgj>rR!sD}äUP3 `0)oFtVar`!PQJn~ߥdM`; ? 3\/v}aLM,r]џdZWV'KLtO 5JE+^i=&]d䗎t?CH.) r~WQB QܿD j_Iڇ$imdb:1Rpc SHEsq0!l/_OoGTΙ4RYeZpDŽ9n@I£x|62S!P(Εti>ilP\E-lIF`e(z`SPYW[?@y={>OmZ3Yfݐ1KT̟ЫA`9GsRᯣV`Yם [xRfT'K-ќ-r"} rȭ/ii$U>+Hֲ#:g+!>m~A@q5Nɬ>r?1(2cHyl>&7)ohNq3JT@gW{s"695s»5$+蹒3 \$Kx-5p*6V6:P|MɶIrMΫRt|OІdx72L8󑪓q;X$-B L=Cٚpp1hx|auj K6qB'*5xɚPdRuP]~3WS9uasI3y5:\-B%ԍps+s[d)*sX2ɏF}pT" ݤ91١MqbRRRs΀=!"DVO29MI=Ɠ(xo"YR+ e|F2)@Ww#rs$\0eJT'.jW~.]$4拥f۹=a{V{n#3%wLΕ!:PzP/p>_M*h7C >ccYbϑ\?YNc,"YMn@*伨࢞ё[# hǔbe֚1{ B*S?hh)#t7,vSen@Eu; 3L&)xzd΂(F` F $^F.@?e"G6* .j + 'Ñw֒svҙ)?ڍx r.߇ Xﲞ_fK`B'WlJUaFʜnc75LыxnPPQE+q1'ɌDN@Rޣ鰫:6Iy&0>:<]9vh|'::`Drw-?lUQvëK%y6{(+>Rw`0CC,՘YޒNp>@ YV2k4j|g|P9+QtdL K:f_X,k+6sy0 `)״Ft;wtܟ Dnk&DcL\ߖ }EIr_XD^ wdSMeDd= -Lb8 ]c! Lds puWǽTmV4_i~L%c0F%ǜJ;/DӃd] 3K*Yq@#?`yznYYh*d(,t /j.^ ȯ)"/=)ɢSrv8l$ӷ<4|XBj&MQ> w0us+ǡTKd_ݣTm8b3Ia,7^^.CZoml%cdQNDfkǟ|4^]:%1 7 Pob/C/ rl?yO2@Q-ָcn=k!cw;uv\{tS U +ۗзL']Adb<]wH%:5U6CseM"5=7D0N@ʼnXܜ9_^Xb͒-@Gk ̒枈EonYd1 gylK~YٰY4(*ۃ@eOvb-p[^d ̾K2I'{@aHO=IUy6kܦ3sd|ؽ@Oz7I(Z,ɊEÿ:mXѠud`R{$ɒH N#K" G:.6}H{8RƟtγ>g *ѷtK8Fj,oJu \ m~F-RR_bnyk乧~#*t `HiB9Ve]tED7M+â^y]^zKPu%!y9 fwoE ]A@nf Ƽ \XPΏ#?NOvՄwɄ YKߐ0y-~ks |osP !H?ʜpyN^.yo3}wc*n ȪK'|SQLA^`(r^ۯqG!ȳǜsb%0$9օBHZysD!:t~@šM&zia+1 $I2q4@fH'vG ?UGV/)6" nw]OK'DCM Y^/ǰɸ:)i8jsηVp&2NމpޭW,piS xa:BUJ%E.wT5 KjfK̬&n{u^0ƌiڭ^Q0AfVRGڵSk@F}, o(ዊWAӕ ?S)WcpUT@PTیuNUg6߃9z=e/]NoZMQlq6JgJ C}K~y^6;\V;i8 ~ \8fT* i[b)p霳LY+bm{^CCQP8ZP\ G-`  O>)) e1i U3\OV/`0re̬}4z)Tl+׉lΧrnk-BX]棭Vndzff)6=Zp䷳Š $HZC>oNiO٬"c5-31&gg`UjUJ"#{)^o>Ll@uyBđ*Jn,|@#+Qp?\.P{-yBaYϕE&= :JLjC}a6~,f*"#Tg5v !600Q\PPI.@6V'$KOX![ȏߘo _d)+YfQbU2ˁE \-zEMe[lI;3crUuE<ߺC+޺rիw,o߼y[7ްjYEgTeL3`Pۆb@n4\=L>fW [=fyH!xE{ 3@L :r9$}r {:˅cUy Fɷ؆d] Tixi;"0=2YXIi}Bޗ.R:11% ǵk޼MjZe8_g-slrJ3WB >?~0)۾oՅs\*f.b)[\-JJǾGLw?L5nԼx"_8΀lF=)IQѮE鍠(&*k{Q'^@'# upD^"9(q@NaH0VsY?CTQ H(>AC9`9fS$DhhhhhЬ=K/Py{%AtJa![ڄ:GKp/4<Erb X[uCm'n>#3}K,u(ŵInuP^/R|6X^yم`] 2k9{ɤrBFaOrNMG@4ohQ7/Bw'G~s8/cЕ?%`2cF3h%5C/<_9HoqQ ݐ|w/}K v;=r#Ѩ-~'ɆC'9E [XCzFԄL6͑`$ |0?<<,'?my'CGL]I;P|\ves j20`ִn=F5oEQ[dWYFu ;g3?mpi|vNyD:4eek~z"jaz/6EDA:M{tӨSp4[VǭMN_*A;Kp|?4;b#E= F/@A ً Ī=Y| KV?@}φŌY@GNMֻ X=mBURrׅ]Awm3eߎLYW/8%*2Cy}_$o-XfH%bTl C-hCTk(TrykKr&3*6p}P`VYf> Wq *i;Kg$;vإE钥J*FvqPP4q"+}-&3_Za{1ElSuδi(<>3*#od\sΩ>4s(|+d$+oz)B+)ס}ehsɝA}5R9R^׎8/9޵:0 ~yl=[څ0W1r$#4~ !_n v8¾qjûCOVj9=u*KFH ,]!80!/#_"+,M GSkYf\Dy%Wj*+׬ڵ_{ 藅#ȋ_ОshC;$yXOR0>-.Ot3 ?E Q+w*1Vq$H,1'c)#TXFgarVS԰ kBg0K~VPϟn2ϟ}3|/ZK/B9K=,orP%xUxƼ8Z!:|ԥU~9 @]ɾ 4:ޫcPHxɤe~ ;b(5R΁ȹSitD2~@PEVbt:e೗dGᎻǞd5I#@6{9f$x!$\pتy$NљvZGy'W|r L05M6~'^O̦M~5H6Ln ^G]a6ctw(T>M@Bt~^vԓ ݺ~]XCsL )MSlW<CPda[+LȭsC%g.z>:pFRx>R4#`v~2}:7@ [b|P&:$&W&]A@NLhb8 G/Q0/F}Ko Ob IΫ4ȎAݎ0G]PbӷgZMx/yoYBj4ӯjm}]S~#*i+{v0Ywb:c~syІdB|XH![gdl_jvV@,NIMo!Zn]A@Վr6y%~5qʖgXɰ0!elu^SAO_ -Y0Ԗ IDAT DdP ~q ε93Nea E˩96׽"~Ʋsp_NeppRJ״|QaשoM]MKk ͷ0ǏWW YazÊs0C4WKɴ?礣,uP f|e_# 'O(}O:rՑ,Pf˔jV4`6 }2KHRZl;F6ژ0(錋FT#|oL ]TI+ |%OCA#('C&'H6byKnڱԫ,Z,Z~9sz?}yd-0or 5M +CbTf@3ԓRTv6jfi7^ 60њ|Z%lrB&5׮^bŊUKŞ֜9fjkԳg-fd6WnHI/r3vKj-{'O6E,J/tug[H锊N7@O03K{)[- SmaEf\+v ɝkGIbd܀vڄ'9VNJb鏝dOsG XM]| n1, ־tw˗K^i*I"/d=2 nU onk d&9ߐ$kz UYQDcƓL$M=*@"EP_@j@'S\43\?D%|Omq ˷fٲSwJNʁ,Mm9| &:` ܢ9fL_g9d 4ݗɋh~^K$C>]I {`Ce ?.YTo'-%P@ aN u'[gBP)W Y= *%$?m}~ tڷ/iƍ2 멉@@IFngכk++ Agm)d'V0= sr-սѤ`&"^H@ \{0)*Cdڄ A#WjX0&$5"{Vڏ~&yۂ]%>< 8ݚNUy\'c ,TeEHԈsֱg X^wfCHH{ޛH&M@B&K[B2qsg2Ax7/3wng]^ !w5T>cl(Rr*U#Y=IF^R6\^ N̼><>'xmL&HQP>. #Ck BNbA\~aΞ̒SzJ Ɵ;_pd[qD}*sy;,N0X kbc~'8vCphK9?mH !;yS+~@"c΀H ɟ#6nn_#`+yOŠS)fln;+]s@>/ $/HiJ.P9o Ii`#MeRr`#3?^tÀX̿|, #V TRr 1XC8IrP@\@t j'Q}0H/޸]7䷺ǷXfr1 ɤ,Er$y_޺}T+exC`a.#EڋkF0uHJ4hHվŊ6`+gB0q`wy5ڻ߻y'HFٵl6Ooґ !k{,冒d% ;_*Rf*~xieN;pj&f\^9eWX\e S|&HkR.ǟ?l>&7l'dڵn^x@Pպ;5l5 )(䑰vAez5/ELd1&=&#t2̮u4of<KOO'+cڢmP@@9KޚR.s ybc Lj.]v?\=\]"ѓHI' FYb nC2#CsLX*ճg3UO,c_:'{zmo4mjW=[c ) {[JNv@4Αk 5M7_OiS .-l$W|wOq _Eo WAY IJʚB.kq#I0.TC.g6䱂,>yl:}t#pm1l׻6TfwzG`H\u`Bi"[>-ČywO6YPK%Y3)$^ GSvi倱ﰡEn5vDyOw^+?@eМW"]>(>w6VG7j ,hC݄H 4|3gNͲA={뱆&!e <ڂðvAe{i>7=K;RE+ ?9l_׷ڀQVH̛=I!xVNA|h^EH[n *$FUyLSuΏKw{gBK@Irg>쮛rtdJt2!,P3W73yw<|nji #? jZ86(iPSt]_:#Si'&Rb3A_c5?@3{h*R@n3e+< ESB)$kq#G L;tJӔ$u[8ǖYTlsDM.+zY"JgI>)FL%"SѡMt"N5]>4,TY.)6w\N@ 髾y:a'{!*bls`t+v}f'A9S|*&}4f^P*Hu-=T7dEAaC!_BBrgJ?]义PotClXՅ@uAP$o̾ X=iݽ1˃EA@0* | P27q.G !7~0v!$qzBIM[7.i6(4vn I Ln $[Ot&A$:HӣH<1bT9p"H%Oʉ۾F 0trW:&*q rܲ+l7Ilcm(xw$7mm-$YMr 4}G y<:4`=C\gDJRWyGȪkQ~!oOI%N,YWeh7HǏk " BrO] XH5!11111͔ģoPBӣUJ^A#ҵMMy |M̱Krc@M נLo>rϵ N{3!, Ks!B .| m8r/؂H8l1ÅotI^~UUhtU7gjLT1WLHH^ɋ@xM@"t ;g(kg0|`E3te5.9.w-E@ɳ۫}8X[ S. AfW a2NU-(4L\WwB_ ̮: gbb:H:d"$y89%RE!Ky}~s  6;V|=|8n_eǑֳNvAz+# c PX D-o"GA,jo j ?ڀdZ_.yHqݸ`ܝsEE\_ uikRHn*uO2Rؗ׬ZzHxG3WV2* =p53䡴gp!ž2rrj$YJ r$yRקRҡS06,9o>r=hF<"p^&נ S>.؆_Vag>PbUMr),Xl ļN6kI>`oImh!O]'Cǎ. pC+J5P?d|ft˿dBp R|[[_ ICsjW-t;7a!^ⵣ%w8/<40X5W$UY :э73ԤeZZM @ڌc7ٿ)͚or_OO!Y҈La8 >{kܲ/T;D\\6휅ڂQP]^GPDwDbI..cZ) +0O}t|*IU_R%a絲#O*+@ @6ga7m^OE>7gX(Jrg=]3  @`yi:'8%'?)Uvnp<9K\?TrR^:0P*$Yn$|N>o`C 2;$oƁ I|˯G=[} xH%YM[n ^M<aw\5j6=DfśCɏ4͊dܸݷ3p\cd^$ɕC4"2=҈3|-ŚՂd5E7H Ty_)$0E !GI-HocO!)&D#Mk+'`rI$ZR}D!0W jMy1тT⟰oȝ<;v*eJh e ӧ\5zL,VdIT;N(G'?.5PWZhi޽MX=1SᇼuPpC |=ӟiSTAu!aC^ 7ԐByS)kӌ`"5+MCTU dvZZC}; fCf\37*k.jhM#Q\1Sc6()rl՗.:hU]* &T^ouo7+0\@;*Sm9BY?jio9~8,PP 'yqFin, Rˋ^O'L)1"|c](eP" 5nڼӈiSzA`nMIZ>P%,~>zܟCD͓x܀#KLRP`AYf~P:|zXvld;,+yuu_u\s`E!- /wyAʁ?2@@fֱ9֟?tZudmDr*yëH^ .iwBƏժK +*ɔ@mYjtQ ۳zЧ%o_M3 $c+ &vGOx\XU]-o$ NES:M7I|V.NN7 .2y!Lyf=i&.>!yLU׎mкc TjgF-[l((%;lټi-ji4 VS d G@H2}ӡ4:<B|>R{2F XYuqKA41v(cd^+~_ءy+9f:Ǹ7rb}zݻO߾}o;lB ,Uc$~*~YLor]Oz!kmJ@/Yj~=l[_|7,Jq*vBejDI5LL7O7MR']׼׀ Z2oLE_Hr6{W l;\LN:wnMk׮:L[>oʭK'Q,cm۾TtC`0FVn8@r-cf$kr |@ 'k7fU;cضmÖPQ9a|5+ y@0- w/u`W: wϚWo29d],ǰ[7#([\$8jr̘)YEL$j:#01„K wsζ9&XJb(o8WvsRukY@r~6/B(Ɛd,F%*)h2I2<jsI ;gŶ.D]}17bl"9 }}:=SeA'T]/osLSL\$96@9vzx.(IV *Z4ǭKeh_PYsH,< Ձ?.bKO5Ů2lAʗd! @Ӓ>+q@ a6&E`(1 @ZPэDgn) Wl` VϺן 5;jDaM6IQ]Z<] smhchԼjAs =dQQtp~wG~#P"/rҪ{5\>%x>igA] Nf3. XnbZzgkPT. h$df]HbiխkׯW!P ]n^R9 IRS0v1RqB&[u0_"Qb_@O4-n홲R뇩<J9hɢ Cj[$9KTfBk-~ xO(7gׯfbJ'Yd}d_&3 ,CxRE@dM=W ~4zB&A9 9#(Aoy 'HpB-}md{fgK%K2̦t9YjBZ}ˑҾzҽAgstedH:(r~NNOn(5"@gri?z!2\ % vߧ.)z7I>j:Aӻv3#FID!9=*ObZsE!U`S0 4 M]';<mwoԾc M_G9ABjq7 OqbP(f"oE:04AKG[an4DQbx/(_V($Ҹ\ذ3`B W `0+;] Tka nڏyN2uVTUX=EJfڊ-0ҡF Æ;L~he#X,z L[ˆTVu#]g@,揩mZ>ȶO_ u esqd'SY?σtR0:<(\R.Cb OwiMywȲ]ɦB IĘ^qX}`\!l6Ktigy@&ON2Kz5}4pNNX$oGfnx ㏊o 2*}4}^ Vǩ=aJrL3W)TVTB'xM+/nVco7[u+} h"C\=hh62'>\!M78 (JƞETPLH}% :[`Z@/i3jsz^~Zt<3-ԙIf-:?B M;b+8'egvvBDž ;w;,(JrUڮ}w7LB5\O/Ҿzr6^FmU:N@m\Cu`Kjg9=n1SLvTYvz c3 e ql/k O$Z;Ml6DDEZ:-A˶M~;NU={^۳bV;7ʕ+jZ$ fVPEHCsdj..N^qK%z AA𾓃`/X޳yI $p8Q{$/yG':4L s A"jGτ0@۷ZLI:R[yV@Ouls,%ձd;gdhBd&N9A>)#M|HYX}H˪ȝ;"Owj#Z{ WEdBȐ#9I>Xc+ǏHʏIOɇ:%F ʗP6:::::hHT"^ 늾X ;_nx#tYo;+{hjvLJh#$UD3QI(\UF;wg#Яxp-Xr8Vȟ , ` 5[ז<~R(O޼Tk PsV/3.=NWBq =:~̑77`PIN]rr#tp%fօr,9ȯQ^oXeLka6gd.jZ.I.3VIN;/ܚning (kHUW<蓔Wq?4*PROVZn[䕦ZfhGKc#y3^J(q:Hݧ_z2MV[˅?#yf]KHY{`B?z2*3ù/ ĒܗK4 R]*1}MVm;whպu͛hժUVZnݱT{ 'BK2Y#d^`N0l'oYe U^ͫ9/.KYR\;+UHekTPyqoCV}1)*(\tSױuժaۿ\2ovb& (R\@O(\'#9r?g͆s o!W~ce@Xr, j3rS^8 $Ox;Q=\?ˢER(Lq߸5 YWZVHfܷ-#K}x}^<u˻/Lȼ쎥,6a#䨃KcI\<[P"B$_i*MLw8E/Nrm@qG H~zKL"#ޕ_c߉mCǓ=zGtVLfpB",z FC|2jx8=l4L~$0G V.RM+d;,~la~r)Ͽf-X0~ܕ-Xէ/C_4 8r0"/UQt9`; (I~fDq 8n?.E#aXdkO^\Z3Yv?7qoΞ)/ ~"6р1&U>k<$. 7erq1 O&ÕhNc^N@0]D1 TG9QF{_pnkH^)=dJ9u;M !*evJ>cDcqdW(8I#͗ص偆{Ne ^ \%lR oBQL3@KIϯMCf f/0u "#8HA.;S-@F ]W%M1O>ІBO~ ~;XѬ٫w&')5N2{׬Esh>&(^]a'g,%wStIB*c:JQ##E443 e|@_r5~ "=% :9Of ŏ aS%1s`HLINM|Ss{UK9L1z΄D,_y>Em6۲v#n;yPB^~K|q "'a!foREU{+y8>-m oȖwDQgu1)A2yiϝ_c)Fތ@<(߰q 1㯯cӘpw׫a8Lr_Z{BЩ_.%䧡)~%g9I]# MrjZ*7kI9xD,2s_ާ7[$U -pw'].S4ҥ;dMr\.fL{SN<"Q :ߥ\?| ?zg A1?m|8,z (vrzq=Jzvt c˩' [eY墋wa)[=lNJ ּDbEJDV>G$?49CKTxxxxx(/)_I]{P ǓB0V"Ir_A /Zi@HґFL|9m,}fIJ7?`A.9'\_U'H!*[>P*^/ʴ_%H\AIrv%mF ;tҥ to[6lܸqƍo{͎دfh352*iA| Xkt !Ɂ,`)*.`lx:o|,4AՇWɁN'b^q*|fyoP[Wȓ ؂YxQ*CmW`yiZ`oR2fht{v-@E*}+,T^V5Y+ q(*(%5& jpdJmUB@Wtr;;gB͞LΕg,C' ~m@#7}-6Zk,`c=D{q/_]mj^Xido  ޢC$eزLeҤq>8,'bΖ=dFoNn0YiNB"̱w~9)SxOr> * @c0@U:!$zP-trPn▽$Gc+⿤/ 0/^d7g{ڀ[|8Q;- A!(5_n 'սHOPY`=Ut}{<$ؙ$` ye'g:rת> '؀>$-$iׂzlǎ;vu; IDAT~i3V  ȟ_ 5rkUЇWy,jE6fh/7 cz_2k ຂ?$h.J)&qfg`IH=_{4 Ԥ_O5f]iB:Sug`|سTuY5XN*\bN  :Sq9|/#] @#dƉoq ǒ#_=tKXM-d_ԸK!(Fw(2"Æ+Óqk DJ \cLu]?RJE,fŌx(h!˝Lc{ ;L:T 6_Pp5T[tRCB&f:!|BсvQ{0tO`8Kʛa@Y!MC=`d]OXtt39c}uT\{{|[&Z/EvS gwx3]]yg hJA^`FVlyOOKǽ#mŕCq hϧ|EN+ksy?C\@YLҿJ W`%.c*G`3@AC"<KC:~hFh$fľ10#u\ &`꿟ṪZćr~Vʴ:.ӛBw$qzӘ@ӿ{O>S>yg=_LcN^O|5BAARP4HIH(Ggq8[UpC $/Bb~vQ,tY}T5[# (X(%蕷Oi+KDJ /tB|kw aA lUvwPl8dP83\4( D$R<73KEJ2@lS/&  e_^yY vw]s k,?tؙBSl"B)sfXF{|ζ$7gHg3.PfhN_ I1w*̤6S/@V`moKL Vh$5gdح  ̾ 5W|`иF?ix:sswfkh.hɚv!wV1BޞTl)363>P{d"\?RֿxRy>Ѕt X$ppsIF'S$?}(()xb4G h*tWHAN^>d]Đ/s|$˷JwJ}A(QIHII@8\FO,Ӑ>?YQKB̎c{%,K%vhOa?U7j~[޼yuvJobv@L ȁpv.- n$F$3 fR~J0E@vr-Q 8,xnFR#ou:ՖIP+af JcI9;Zۻ"`g?~oݶZcva=;@NPPZbF?-/ ]nݨ r0&uS8o@a~F9$# )7^A 8S8-Lm%$TC|~kHA2*0@e.PG.PUϔ3>"TNYq=R Xt\NoYQ7P:J#,2ˣzo:EL>]<[jd FY6 *1Jjz䬂RRQƲy wOt r#@nt$|krU9H{*9=SS~|K_ޝ(@˜u:ј, K*Z-/0gmT'[yw}=:QS2Xm,@S6C;4LsIqx'j ~~,rOJq~֨UTۇgvmY:x]JnD ^(+JZPb.3=M 1 @p)8fwE|;P($fA2t]Mm^SzD'jixX55 t.ޣц?D['r&L+&k}Tͬ(hjŊi +`A\Ɗ6y=t\-|]q QW f8N|/JC5<-S.tOE.`ڜPXQ+ZwuA|Ƒ'!d7E @P!o$y}Q(rOn|nn6lmk&IxyjYR;[7Z״Z魆7IW%!7 -H֮Ar_vK9@}zWId`Z(K]5tҀr AP(rO PB%Pv?FWjej29nY1@N{7o޼iU+'I{+z1cbo "-[KM^JBf[g@Jc)V]P_<[.FוWr۽~P H^:\& \NTl<21ZbMQ(<hy&Yi CڤI` ]S4-hfTYyq ›9~M/o+=#VϛL#y;|Р91\' kS7'+bW.G dC.\AR| Kej\\ T?qy!r[&AFxٽj2]n~yeNTD$JIR UI}IA9L[JIL-$u8Lacr;2K퓱CهET@~M$hΐZo&$r קέp˚5i {ɞ@N9]urq Y5v)n*G3y]pr^GH@&v!ɇi O>MmmF9Mr/Z8s^aж]3w ٰ^^z <#( L3KXruoA0Eju,rկB\ y\Ϭ7INUE!%+k6$l'*a"{!ecCN E,Zke#n sakJ;@σMm\\^qŕ) Q.zwE*UHbM2!'BU`t Wx\%I j0u9#<SS!.z\7Ҫ&:dn3Dzӊ%c^簲o0J }*QHY@& 2;[V):VdDH&RpϪnҨ}6V(Q<P0n1/(+6@Ck$Yh{umZ5Ɠ}d+aK @A%-PVLؽ^zz daܢߑ{C:^4PA3,'03;BXGP=k*/ҿrJE/喡wu 3 4ivɽLG!/(^vhٕ˹.`FE.n[پaMKxrvLQxWӹ SD(BƕEF;i@$w#ܷdJ_2"w㖪1 p^/Cwc$]\'R3;uѕVeljdJ(5bwvCw3 HAO0[H#J:0kr_3T278MALm 4@{%RvU!ҫpwLWkQI>_Z ]E"9OP ף[ aP/cYiX~ 2m\tu3Y|1g.GPPd/Gh- P;wZ$ڨzp]* & 8xYOk = 8JSpӝ@$2foA}䣱@9fO^!(hu$|x+w Y'B̚-Q+@V=3ť({C9dcuJ k`:/]8M«$rKg7dGH2n@#'0f6,j}8^  dv0k~7y|ET^o̾Y{֬BxIXv-ezH "qjKS'\ l7w޺wF6YJxWϞo7/+m pX;I>-+(_IOd97Hnm8yc[j/^޳{ղy޲笅|c: jJmu%%0*VŞ[5,e@Kr=269kd9 @(# ` cp7X.Q>={ѣf | q}Y.8X'' CV\Cg.K!d0UHGZD o$؇.ݟ6"cǣSڊ@GʕǏ*/\ !_r@q)aŹ3fyĒPHpo=I xoP>]SMN+ ‘55dP4ȿHoAuviT]9]^!. g4Ǩn'#Ƈ\Պ&Y8ɲR7f0D?4)XiiWH (||7d7j=g.|\ BApedF# 9 !۾Ub iYRzp.g%Dž()͛}Fο;ѕ5[ϴvk~&UF.Hl6y;DH$-_p6z8pnT>D\.OkvqW@!xLUOp\IH)q=@>rT ˯[JaAQ^R *tu?7m+1$\SPdyY$ X+;.Hniy ;4?d=KB+mr!V/apI0/и=k@4 `ah%]H Ys }ePݍJ>cIS { ʁCKK.rft\>w`%?y)]8k>?>'qcomKޚi/_L$y(K5/p%J/' "4@fR(<,XxpkQF\'P%;iN:s@h@4p84fګKն!50*I5h zeD R6`YYC72>v\PXavcU,#ـM>d3 *'Й<2gC>x緶o!#p 0IJe{n=o4Yz:(uTu^]N_-ů(-}ȹǢ[ښ f`9J0 IDAT2-^0~@;hF>Sh= ֔|V}FIEV  sEJ+ACkbuH|ݮ8YR-G!k}kf@;N%/OLq;ԼIǍU0^Cl(ѽiR< 4mZ~Ց߬!`.@ųb!8"-[}Hy@fW4j\鷡+]GHt˜.rWzLW(WH{ɸ"",J =K ]"0Jv^ͻsP3,2ޑ130| 3 )MhbùQK5?uTm ť՗vU ~#f-`v}  wng3{:+CRgda/ArMծ^ \|Kr,ܗEDAƵbjcOGVGt[db"Ti0(ҵ-T g F91#e?|N,[1sv#x6E֞Nr 0s2 B 0; x'Ց -{ngt!(Ec$ՒH.X~>^ mA@}(}NOc5<ٙw>-.L(jIPP-.t-_/$?mo+IΗp|P%@у䄮7`PPwh|TiyB{ipu{~JD 9J~&Rk3#ۃ-"s>?9?#*\T&[@w`r @a0i|4Ϡ8QIE$֑dy4W דZk3\j)#juAhn.V@!nRR Șdv-!@>JS6!#/I@yTMr71LgQSvJxuS*_FJҼMZJ@VHvcB7`-7$Qqu~oN|ب> ^ jn)ןP3ߤ-|V$(q& '=2rkFv:.`A> cO3̆ Snkݠ`E4d [ݩ\k9O%{ڌ d^81EuxY"YWH  MyA@ }kJe@E&}B?h4u?z;Ffg7./%GDGIiYTE&?=;A[3I¯~>S7!Ϟ?D!xcҰ 1PUE // Ɗ8u%hMФus74B0.3Cҭ)P<>\_w/2n"_Lfr/-жHbQ)2Y[54jquNY5;D*%`Tl.-}}ۼ@Rz4s׿;unoYՕtFOq'R̋T[n׋%e:X@v>np}:D;v0wYsg4@e*ggvҀ X)\ Y!HO%>`,c2(q,vf31G X g(L Nr25_&*@p[+??s#xNEduլYfHww9jSdVz_2_`/l[-1@YoZez)"\Cqd"@ge&V5/AR 2 XA5\>^U G/4-/!.vY >Zf#,*tU UÓFJr*Ld_@[fVvJV[>ӯЌyb7EL/PZi%i ј"&d_⦗ld`<րdC泬'@ȍ-I ҅;z<@m T=pjӥdA\,wMue*ݸ+Y rYOo m>9c20d5t5c$)i6`9+VeUK-m{bm]Ll$l=y hkՋ*ݳWwI<ՀI3cB}P6u^0WY?A)LJf1 zF~+yaKgf23@LPUm# DĨ,({'kaTI20};w&yH&[;I)U q"*ܳM=5 uoPwz=nnA_^m_^rtJhQԻXىw/NZ_XuSjɫrg}ob9XBj/&6]?=oRe[3zr;Y HID\yTFz,pb4.N-SC97R_'FCykoCpdj5h:QLLLLNW9S"kλyE^!"ϛweAgt@z<#ɨ{?Z` Pl)jJ2ߥWp{ b'#&SX>Ϋ"Ca&o@A^ V=%((tχJRlp?V}hu2o$1*}M o҉.-^VG!):'+-;?: tkR)kn=fJ1:WB}Ry|2(vNn70#xEAW%9 3ʗRST㪒߿ʭ$={*Y=u>G)FF FQ٢>5l1Z@ej5,@ၫ0_`uԂA])؇r6( oc 6A2a+ .IN|Q@p:ufC0=4.끿I^ΟRldnG1&+5 ɍutb_tj|8Bb(;|x0hѯv9bl ja\c"U׀8/_N42+Yx.B;Ƣ9(sd^w$Tm >-BX&^$cC]$:a[@3,ӯY!j1a3~bRye?-xQϔ*5%-s:}lB*0 KAi쀂wƊUH^-QyК^Rw'eXCr`6y$ͤ98 {a̝OXqɟQ'[fL*U^O.^r_^Mt=|5+^a{s# ur,4dB"+*(OߒU Gpv)Aq09F.p^o#yHS 5N+TU@ FS!_*)\^R:#9>}'o*,@Cp,9B%=tڡc;!]5oGZ L%F!4$9s/$9.sbG>Њ‰̿zc wғ脐] c=wjVDpQͥ cKY /$$7"rT!+߰IW%d~.Uz1,}_R /޼ggƤV %y֎눊.mߕj(+!B' *A /=B2vJ=s=gA[cr ?O}{fAQ.zU:}M'QPSa9LK YQR׀GNήd^nG"(7-WT +^#o|yy'/T{Dn@PPٻ6/jHIX8N"CT$hCP@JyDIj"0SԲ :wd_% + xVp!mVx?>qrnݯyV5;4K*zIOWI:^@ v2cҚa@Hjo^ sBw254;˘x%S+flZta/ٺigkRðU(>kLCGq+kܗ+/XYR1\G hQJ`0RIN9is-!};f~MY3!8~Iw &(+2m s6m}-cH 'mW  BP!p?mVyFd"$dfie/RZ=`x r:r]'{.1F.DF_*(!7γ)8Ty믿fku) ePUSF[$''Q[g/{>m$ Ք C_̝.ľʢ~ dgWEnTURX `2Vn0T|'wEѦ/Ot#3!Mmh S"W߱h2^vk< F7y6* B=~,m-&Ӏ8PQE]0w8& [s|t!>+ G OgN!Pݒc;7IB JyT ]g2./k/{~GmR)V?)nO#ɧ^N˕f:4IQa5^6'BXNxRnBy$W2²fqJտV3KJ9#Y_#gbI2&$W6Hz]nݝ@<]>1N lJjx(س5(rt'r'ɮSRVYpޖ@3>-ur@gRuH{%cBW .7UuUm}R!BI@dܓ$u,-eǥ$/L)p} 7n#O{#|v^K͵=݊ IʬrUϟcqOF vK}~E!AaTɧ@}J|0_I[6pPYhZչm3}G_B0v h"5]1ur4d$W1]\djf3p cOh5l{9+ ~m|$&s&>9S05Im\ @k2CC'|+~> gЖ1쏑;~s2:BPtr޹!d[٪~&,~L}QP̀S޶^)xwi_>5>K|6-01i  ѓ%~;{#phf5񹕱hh{ϖ6Γ54,)?"h s $ϕF#cӜC8K6&&|3Ɖ8@yc*9IW ?ʹ<#qݚKHSRx%^ŏY4~`#țEG|T*Ǒ$#nÀ-ߙyIE|+g[$ZY_>uTY2^~|$y~#sv`7"\n6 9N@\F Qn(/B,ݡ& rOb".6ݱI|tv\om^"(-{z2Ӂv 2od{L"y2ϧ܏5S IDAT(/7Dm l:fA {^*ڽ8"޴j_njf&(il?| 4ޅfh5;#`_e2zTKe ޹>%z1,']oKۚQ}—^r&|Gl:P2Gsu.0B=%lg<`wΪG ݱҀ>卂X" +]K$O&ۦ`=\zՏG|A 9d_`Rk'2pRvDMd;k֟l҇V}ۦJ} Eor> Iϻ3'[?!Pڪ=NTZZ5˨Q6 q<>N3!!!邡i@9k٬{2,*Y2,H 0ˏF+ Ο)I&dDk!Yɷ'cEc dV t%#;3;ѯb8)|!5$ɘbGd`:Ժ3z[mE?`%hy"1F:z$uBp00Cj-_ӒHn\1^7iNb],YJժ,2w 9ŽS4twN7X, tYк'Ƞ$RLg$_ }WE/|]ɖ߫hnh`C8țfMFpwx$}rD$OM'i/Bߣz&?hw:I/Q,˰ƕHCw`sS'8gU z8g}@0?ژoJwY(9t- @pqwNÑXkyN`.9YGˀ Buˑ0ja4y=n#_EcbrdE/K3:I} V dsaw$vDQ۶^7`Eհ:Qu ]Ҿ烥eQ ^3^ң`Rs샦 0$r^^'uȋ+|M0VZL;;+f͘Eޭ,V2Ca2;Tm!ye0ӈ;>r=vJCePcOߦptB &B`< aGn*AA,CN9dF~s4~BC ^/_@"7_ y߿Oln)erΎ*5eLp'lp;>vYI[VdߎY-#2e#yL u!+jA @,B92O`e_MZ竃lZ7 lwFHpl# N|VX^6Oznى>0%KO `tSJWfSV *O_4$iK$cG䗚(vӕBwd޼Ln~ J' 1AS9KXIjִ= -SIś ]fPrOIVZ] /m lC[1UĪ HAnqrT?Sf-Qr;>rh, H?%)պM>sbǏU/JX):d2;{9yIv דC,Xo|-F5xB`^~nئ=p_pzKP8JgJ^ҟ;ʚ;q9f9@3P\=e|(OQ $Io $c8n"[J)@5sUIs @ҮmyT{a~5+눩!D"GlHjȒYB,۫wDdkeNYJGgٶI\ @Gև0%~Rs xXПKXɟԾrt!Nl rJi9^oo-HnA\=!k׾F /F{S6-:Jfq@ XV>-+,NG ɢI|j, y,PzCyܺ AXhL|LBU|Fr#^'9tHJ1r f :y. ]ud⃘%]{~!Pv iY[|L{BZS* cH>V`J KrNiۈP^y J$lws2/ե?E[ޏ1$ qWRIEZq},f!I] ny+M/ZΞV*LEde~ 2Q~S ȷ+%/- c߫`y%怽4Ms)E;!)Y(\ (+ ortP3bKO H@b$~7bÁn:Y\B;<'%T6Qb&茯._ N+0DvY-tIH)BfT._SWޣMmr=~Qʶ d[۶V 79)ˠ! p@N'tRLMB]IchLlDo6~^@xCTކVlÆ +Cշk@;?l)~ |\(C'A4c R _֕ʝEU=͜Qd~N9̦)ε0RtՕd4Tn"iƩfb܃c%$!zD A}_V5UGڢ:@* .au:Tv:"[a}r >.I]P ܒBSU9ڵptghD?uNb:v0@<[U> 4u֯2~ >4POCQ^Ӏ&:.5lÉ4旭2@~kl4BsFպ,1nmpu!"G ˯k`qj`̚%K#4j5TRO>@(Aϰ]1-4h)"۞d~5pC9w/kl7ϳB5 uvc+^~Q n;X9| [y h4hM 79PN =^p/A2ݜ>h8(Co[5 kicC*i*ϟ%|T^kڬI&MuVcԗBQ(:8?"_%u!Pzz;J7ep_v>y.oMA7Ir"ѥq\! >pTX#cGApUszۥ˻a9JO2 w=_ԿTs8m9=ss)eM2 ᇚ^*|Pve"d3d\-?7 {9ϑ0e1y4 tK|"TE$->.߿(2rw\r|( ʪ: l^,1 ڗL)Q%Wȑl {λ6zM6;^̒Q!dDȹ^P (ONީ+KgȌ .Ʒ'_ol(yiܰ$ɾJOZx0ҝXH.!x[>"am;aWh̿ѫV7$'Wт$SQݣ6 2͕TrjL !@8YH.,,Y^,{^{(OFxH=%< l7F"_cwu @4'v!ԓaE %9R'.yL%[Ba* ,XBB=?E"ǟbP"@#RA UwѰ+4WS1.ݽܱ~xuޮZAF9}Pyrʕ[*,gp=n:hc<<}X 98G\?JAh\]C}UD], d:SO p(vV yqS]wtTo&$z{DtH""4TA U7=@-Sɤ嬥+$3޽}OgO6b.$Ee&mrSus 9ey9(}zSt0PPѺr\ၾ(S #? ^{¤y Tg*SG7bzȥ؝ J#UʻDʹiאnqmAZ!h-C?@=QiTrbRl0Dfi2.mOHzM53&)1uqÇ>|}|yr7!hpʧVЅ$_(YߢTN'&h.a!~2>"E)R^Cw8;,Or+ :jh, E0NTFS,   &|X^xݯ } G~I ig~zT##ҭK)Kr\&6mi\vU-1B^b3 Uѣ;.TH2+ߧeyG+p FCDl| KaI.J΋:pBBY#rb=Bcog)\R/Kwr] mWnLI3d8)q \$mz9 (: Z m)cZ;>[E6X84K'ɋ&nm2;,y} r^5 0a)։T=M% 3r]=$@C% h{&Ufq,/ Gm?T5Vq|s1 `^)^fn ;piFw{׻YgH f7Lr딴Bvh+j:/JfmjS/(hk4gPPPq-3L=/E6 fz7x?@9r<]&V>z+6w8d+:)ܜTLvUK9TdO N ?^Z*xmoF `;l  J @%I@ /]NL(Ax }>DZ_RGd[=S[ރDH3;#Z?39HqHv^^Rݶُ=skv->.r\.kmRTrs@BFRd=QZDI6afyrÁf.ő進Qy8T8M/9q}Ɲ-3 t§qmci,J#co jR0\Bwk^.95qi{\ sֽ6X҈T*Vqy:PT*6 F0^7gD.< ̡_b6/O `SL8 KMq}$/]:… gg_@WR#$¨<:wI_צ R_k4H9nZ\P#B%PI>;mL0l2h~?Oy|ƏMѫN3 l:iv y4l`Љ%f y#)֒1z0dmwn޳#@HNU >~7FSm ̥Vl-Q$ՀCA<4s:N#zvRȤMj~1X=ut䡴@E o!!~`" `13 `Դ ]NʏvTUɏPnB1ZD6#ɓ -`eaQFC}lB%9EL9J>&155E[otb1S%V<{x:Eؼ*VO>-ne)c='j'Sr-ނ9)`zs(R9E9$okO/V I@ ͗m`J;B%KT*ueBΡ^K? 6̹}\{UI:Wb747@D̜P'XESA8= hzW6k 7W˒GI&Iꧾ1I+Wԋl$H›nk;*).ŏdY8MrEPYS#.JQg|:X@B򽌊?Hhh4 wgfa~Sխv7_FwJ|`oDᇣy;z@6@$(  no.%޷)P ˾kUk<"ߎ$;hףG+/}?[9\?\pIƣ{z;D:ǠiʹL0<dIx3ަ5j7vvѷ9n<5u Q:㧳󲼨1I~璓|a!щ[kZԓ?E$s\b?Z+%8tIUGW30(-#Zͪ-FWn1S>o]\{r ~䎽;w[TF2jcSAZ kHz0 k]2}\̢d {vv.}::4-L?"ȅׂ 207ua-" Cqט] <'>%{f ?T` U M@$_\͍@ojwdtN॒Lx|4({Cu `LȒm?O%4紀fL.R~OyjpY@YG|ںQT8΄rh+8q`HlPG?ɕh8=nH ߽!BCcmW=PI( TgyaαUp/m bw6n\,βiPy5= 5̼} dPO/S!^' ?MEO+9vՇX p/&\S`SųS}t p::aW#G J 9f:T܆hGƷh)e1Ow~e۹'@~0ԫlLbyA*lnqcȹ03g\z |#9?'VCZ??~E8+~!M󬃓?DIFU(YOj:j|rwv 5q?k 2:V2NHnDl9}N2u;!;k<3jq"bbȁf d43"jPS2 @UG[+-ޥ F9IҀWP[i&)O}ʕ[K( ʛħk *yέoyP+̕FTե@?]s^L|2Y?R|eZskf^ 6Bx 5R>z#wHh9 3 p %Oam@ gh%|++jpdM9KD^m>o.& i-;{:3 !8~O]o3+5ʔ7kQUr.PLBTu *9Fv&uLC{l?qn*T%CZn/>籺 ͘1sˏN2NUEBEɘʩ_CU!dZRۚn083(qbP'yêwX zdIL1-V*+~=ڥWgX妏ܛ@W9ӳl馞p`:k@/U͍uf_KU5t1(x([+q*?%"_+\ UB\ u_/<:9_|fQqӤD 耂 'آA.3vSw(! !Љ@qu^ixy 5w:g#R$ (vNbX׏]%;:Uݑ-&wyTzey{ζ> 1L9a|^-Mk~q$ HruzJ5Ok,I`2jٶT!D&-R"yjyOmTβ$c4؜YݒkjL1^/4WF/^ d764LvBA"/ώISm֭[C 'oL;y%ȝѼZ :A,K[1 #EAk[(^Yg;FGR9._SwOPZGd`Qra/VVwŨƍ35:q/7!"y1gUP|4e!ZZ& hc|S@+ -;T=u/FO17Dۖ~ ԪH3ۛ-7KD;ׂx2_;|\# xJ&wFnVt2JI-ܮb7÷̈́0+PϲhI_P{o&n7;r`@ԼG2aZOd^#e/:] N+N|@)A#:~'ͷfŅ|u1~o°`p=hԨa\_ !h|N|#;@AT+; =/Qd#Cڴi+vK/dD)Ite8(Q/s^ ,-Z OӅ${k?Ubs>`yTuDx*v:٪a4B%c>$zܵZEpe|ɾ<?2ӵ0­>]~ZD:[|Mzu?"'t Hτ7ӄr Vm/ + pg8锜lݩt&Z<1~y8Zotykܿ);w> dLK 4gu餞rco%),HU/ [7D@6]KbooXJpRds|0U>1Id]d8[IWQ /iwfI".>C} +Ҁdݶ_*|7{R |YaGq $Rvf ZqּpzDza8uw:9FyZ\qܹXB~3YB)ڬӯd 8+^-PrJPL a%Re}7۹OtCJFDsP ɂCC !! xeK4B& ;y*LkJ{]JYFI}oM,NKgr-RE#y6&)oi'opv%z|9M@bӀUBI2KѴg&]Gs9]jf@?öL .ֳ*wœZi)H.QˮMg\Vk٘$y{P;?0|GNU5Rn"0Wʻ%D\rH*d'ְdr-LιS A֞!=>}9;ZC@ ۓX Ҹʞwm a_p")+PU _]aۦ-{-;G?%9p)HpUۄR#Hb\}'RI 5~#>=<=<, l$_12Kn\Iz}>Iz}PFxA9f(jvv PP=۫/L/-vP3COf(@51Nm?-zF'$i]8O0.7I]MC.^>yC 䡬޾mNG{Y~%8F;N`$I`!rc}^ӸFF}dx͞SHMYJ;ne%&P&C'(չ4 Pz/'rķ}c-]5֬?KC5h\qdL4hz^(pds`% do %wB%BIOZЖ?/hFX/H@SNiPIꙷAy`i~A]]2lKy' riपY̔=^mto{~`48|tׄ(կ.ȿc)Blh2}_yMR?kyw*5:P-gSsG_HiVrZ钰?,S_Є0Sk.Z*"'cvrF3)u6FrUJ &K+_0j@WZ'I7FT \y/`=ikP6Bl*ŹߠW -.'A~2bBzA- ܜ*dI 1w!vk}fdN .pJ(۳4iXZ MSuL$i,~ 1o.m^(؃9&9am7Qe_:0ͯ%$4M RIpNŔK&I5G1@kmW8Lg0<U&~& _(P"yҗD_t!(%h=E~ls.(f/.6bP,.}I[jׁ7u'x#~T#9&YlOL6y*_Xk ?ʜB%OXXVB%LM cn`4_$`ʟ-~_^3o 0)}e& 9(٘b a>ݣGJ!.b3>~Di@Vry86NZ8l~?G&`c$ $ƄTrh4O+4ymeO4q% /c#8~beF&=h߯t3 ȭ z vY m>Aa\$. `rˠB)ݻfgj(IQTUNюS@ULrd@m+&ivjyMAʒ m߳>j=Ir^*q[t5& `6Y`@X5#pth&z-g͊zZthmNt^4˥Utp80Շ^ c/sk_VM8~%/Drl<V {)?c>r&P!lc_<w>2;nvLΞ+^rBcF]'_Cο-J~ 8QTE,T+m<=F| CuD5^#pW/F;NF ᮦk߰&!5U7y{kA2QPq%JV2&=oW+@;7?/gP-~f4t k7|2tpd<֐gO 5-!đ;FڤE|>4;K3` D=*& ]vъUE1Hw/l,nOm/ y/eYÃ@$d"Qg%3'N/iz8 ŞMC_},&c\6pT||Wy.潠y#Q䍌hN2\AzY(pxo (ڤV(,c>zPC 2Xu^$tH2He>o- O .e庤 )0DO k^h.5u /?hn ֗5`"O>~*Yhܺ:T/f#r^̉uc6%t# {q>Zޙz, aRO?_ 3F\o^e-@|[ ~.Z]`HH%Ͼ3[9&V#LPfBxogS{d;O)k6l/ˌ#Y97ƻkYiM73\XhS` Mj@$#Vh#O׈2ٱmŘJhc^L#7F{4lʿAH!?&4ɏ$y.t_:euMyGSI. 4p'}ћ ZWڢ~ P]!N r'w9,r1㜛0Z2&m(S4<) o{>)$T%˴i^_bT)&J,[0ǩʵ ȯïRvأ_Gyw!23cU\(HvG:KTT :6ɿvQ,XHOIL. W'"'KX(p@mIO0,Pm*M"Dau-e<WG{#)~0;&t#N%`H/zT*#:Ƒ=e?^mY-hh2+EJ?4V0ho$_ÐeIWʹuD5x@]sʃDHuE"`  #&v"?p ˣbCRLQP'2g _[NAw#Jר\,(MrfG!u18V ڹUs 8[LҴ?~♦&yh]k,%3Y25 0ˏ8g9&ZN2d@G IDATs"+:T͘K/NheP8Z7=t1,j[]92(`LLHQ}${i et7P"X߿,`L = կCѫEPû5.umsH@ r&YOTG@3gE $O nn^pռL՗܍2 ui\[o.z+4BZ` l]zDH])̽|;d/}@^"?Uxe^*)M>RpHz 8a>d`Cz JL0D/YOk:((y,EYr*RZ5'-+̘WZ8e2 =yR{*\7fr}}>#{nJyzY xAB@1}qn݁zq+ P5#6Z4kfʰ.W &8p> $#?!זH''@Jz6s"벿 T]JDAo8n(` =oI^).fNT~Us,߂9$y,}V-%Z%4G՟}= I_+f=Xc[$;7iP +bw6&1!ujM- T4V={睷W^l `)BH^H"/Vn6 +!+Bzzۙ2yȧw7\VDjC@kнǵ49\7Rc|sVV֍WBخri. ܠr?3CAߩe Mdl4/stDTM|utX:@0. *KZ` $c:P?.6`.E@UrP` h&T&wSs&I@Tek0Y|>$c6{ ٱ2f1{dDŽko~ [ó4]a򎮔@wwz+]I bE|yx7 Sɰ4l8Mx6[~24H?o [xl(@PV&׿Mȹxw&̜Z gEZ@ə!λLpsW5hL@!3 {hdmڕCW7wo42I@[cէlN`ߎI(ȨoC58]Q5ckAm vQKr~n/UmyrOO()߻n6i9a&|%d6El5/IAgFX2֕|Pȿ&^Wgޛ$݂v nHZ=ʑKZcUS;3p!WO/~'v\`\-AFf+=O Np^XOA#(A%w^P,^KK[L6#'2dSEG4N= !VIXR'yM'EgXB˥<3<Wыv"Pr`$kG?|{s'X4a(qPidU%#G<)=5QbW(]oXVҤL*yq$yԙ˝S#@?^z GhL+djS}{pZo e.yzPQ zFwqbc6.ذ p`ݫɏa-/RҘ49n)emd .'#"ư`3 (E#st!8@Q @4X7&bT}5(H%"Y` :PG+NG+{~b3髏/:a "φUG:87g$OWcX2G(1b+$e^'䦙ѕ\n5 bϒQ:(D }ds ȕi#V_]ȋYK5ia-(Í X~v8=֦ԁ Rm--+ojgG9Krlxҵ CQxmkmIS_B4w~m8;S΂FEP_FDےU:P13V1hVdu`OZK CD<wdt=ԮP$&O-Bx6SՖn?16uWv)ٿM۞9lTY@#C5dad[A^.nW!ao T<Q5 EAOJD<80pе?eύXwowIxTӀrܒW}C~_q&S%cPjSs?L/s^) ͲXID`UKK Lyv6CPX [ȾfK`).VRFVmxo6ŕ]D=^L *@@: MHm\.^ж3%⸑d'`. 2X 4m 1Oo 8$$D~ Pfo$~~Xw?|VXx^aM`x5HB'}RLlTO1GBjܚ`o#j Q9fbnflJƔ6ʁeN@[\ M۳!Ha'#aw6Z@ΨHO> 6qA;3erK)|1B "5ke4YzȾvKS ai˔Uph*19ɋ+2Jb1<% y)rZᩭmjȓ7 16 7׬Unf @!秇c"g*p>?aeS=AAF"7Q(KʜP8ɛ+@/7]؉. b h@T'_Rnp`4oݢͱ.\8jY)=РIK)!7+\Ox*I:T3͌ ~ʍ! ĞqO}+*2ɝvCOMܲN?iPfweLaEH V1S$+ɋN?AcptK$G/w\kw5[Rȣ_& ¶ti.@l .> _gC*GYYJnٱcmzQL\GWNJ@J&Reܒlpn$ҡNM )s lzc&S[#qzE@d1-0#YGd8֑LjI"}eTSP՞Qǵf6to~W>HrU{%]0FN YO(uh yct |Q yO?SPkaҸ!ob@MP̘4UhLpj3`]{S`0@rfIȢ͜ykj( ـq @V4 // ]F&#-rQ ;(x2M Yd:'+$?enpa *9S1U#wc̼('I^h$On$OFPٞL=8?sB(#\LXmã?96Ht"UXGuc-e2kO3, vdɆYvt!9Ge"̇pJk͎O6 `p3p&+N șƈ9ꤲ,Zi/y*gB QsFBz/@&@?GqүY 0T%O*yvz. iSYD`|$Oח Sx k/8.ex o>ƻ eaUnI"j0ՠA_8$G%&@< |%kh([GG&yS$$M#d@]K % $?kԻ'DBwJ!D>obo%,_ZX^Fĩ7{*|x@%-nNGA٭f@2st{zi6yƫل|1 kAoXUNJikػǥiMx%w0eZ-xN%KH0@1= (";YȨZ5R,XArOpc*_Ϭ) ˀbU;1iUKM \IE-dͱO@>z^FzWHew#dWTr+ W̚bѕ,Ӵb4콚sFQ p*n/\@]9am%=z^GQBsJ_D1N[Ej ((94uQ"ypHY Rt$RS!qd ͝3=D7)țD;}f8yI*dq-:^C(>FzCԩ*p}ZGWBy~ GCQEQNSQ.0Z@ߪ87 H2jbM9:@[oy7 0JndI%C mT:f40QH%qHUd@v^E+WXbH(Gk?>s.]&@[٣F < Вy;ܵs{6;?/m K"n&/5 \.vmt"!G"5Tmd;; %1*C1O~5U0XwB̀COx.+0 Br!mn̓lQ{G:U1pm[ʤ9(ר$;a r:"DaҸnH5L`/&IqvZ9֫X {aB_]%XU2[s|Efoqa^^VNVFF{gB' 9T A{߰0wڀw w R*OD C ?` UK!igvZ,E{I掅.=9xiSXP+<pk),Bhsz5w¯~/YU`Ӟ`Z 2yV%8xD3;UZi124+QbY'3@υ/kt0Rf1UJY2L B.Pl3ԠH ~g6JIUM`L#*Wpb7MCI^w,&pwYBekx[NJހ2]x,n+VX{$m6 yC&"u;l\P9s;[iE~AlP.s r> Y%vY Y#5 $(}~@GrVpj :4f6/5.Tn"6 IxX&M ;%ʱw$"#*)@ %,X9R>}sZي+7U+xE{VĢ]I'Xd)nj@ Vkei|󻌘cArLR ].ty)0eo'|H^oLt)6Pl~E arid.0ʗ'Oh@]$'{/~bXeP K/U*a )'n$pKqCNkPy`;*LF;)>M (-ri+3$cX~}[j {4[BȰoǢNNKE ㊠փ9^+` mT/ Ymsyo~a%9-?*7))FM5ul_x`Txbdy ?Fb 5F޻w;bZQ朏!8ӵyPI */`,mƖokT%_;mxEWD->e=*đQGWvc:Py4 ~Jt&q{\Lj ߖ{3cި9Kwܑn$Y255]I-m] (vJgT*ⶑ.(Tծ)On9ylG+,&$/Jb9v.PY:v>)Nkn̗;0P0y Q@z.a/p1dqHߠ쯥ZR qH SSvGM>D*~BsfI J sdR--HR//^EE{ݣfΗ+&˝t@2*@ZMnP`0WQAz? (f9 QPX| ' ]rѦ`08+ybG}> ~pEpN@nҞHH0|S ,  Lr 8LC3R}fDq^q8(̩'Vzb6Mr$ڭW^fͪݭhE>;/ '9/=z{j?LD* z0"i=ğzw ]vڑv}"o(jELN))GŤ(Yg){iПi'yi+,"fʼni>hS@ 6{<mPz(p Uo%U|ȋ9,G.-4SഫOgrnJr)U(+庶 !M҇(@ d20[`>𡰒F;I$KDŖD'XLb q|Z$㢧;.`%3TC]ۭ6fIK{,oOLmz&t,눧ތ H tu!kݙ$E *OՁUr5LI;C9N;??P 3MT&q { I*i0 h'P@b `o0\u5p$IUDeF?YF5O2]"ӝ2h*ic lDJ3m''WW$[quI${zS$ŷF'陰BS%!?$i|^c(U C+=VxgRߘm eH 笂'Ah6C"Ƃko[Z H?u] ۵kyڜͺo|߮=>!,î,@;JR“:p"ds'X2)4;7u qzw-h@Q9MSU_1gfQNJM/JNt9e+kw\ pws?HntԠJJ*8IUАO`8`뮽J#Sȿ婓ǁ|LJQ"p@V2BXʹɞ@!}6Mf^[[IjA+FrXQnr z8CB x~ Q:0ɨZS8p+2 g&2ׂI`W5ZÐurĊQMv,Hf:ㅧp+z/ HA[ۖwBԞIHwsYk$K%:kS_I ^i$Kuqt̓T$AWG=ra1J=Vl 8F.Ad ;-IZts,>+kqҌu0:kW&#2<:}#yhIn!HS 9:*m@ܜρ *lZib?[A3Tr\_Nƚ972!3,3q_4'y3 󛜌.7~15z5֭KUaęet^L` aŐy $yo}w˗+L>.X^bs^R*h]i0o d} 2}` KDEߙ2C|v%p'B0V.u@[ǿH pCCOPK2D {z*"bR3G-NAYG+MdˉZ.+y$c_0VfoK[$X/Ed ˔#=Pq-KtzRnTq@Hu6!Yst?aȫJ++}TkISh9oA((qXiy(mYTL)Z* r=墵Жߋ8KPAλť HMދݑ-㪀CL`԰ZJG*' sTBdbe//ɰ j}Ku#i˟B!m  Tc./*0+5l·3兩^jMlԡXN&o/׎kr+w;"Gq$:UN3>`P&ȧ~Ӓ^S9jtO"/ ߍ|~*錥`!xC+>zxH{Gr]:̤o_!]͒8B|'Ef٬͒nආԈX4L C!xlIǥDݜf g.;IYl @%B*TF͔!T^RB0~EdnPuKWdNUD>vY3̌|d` @SDqdAOY)ɡ˅قO=8/1UEd{Q04IAG  (K 2aUm=OW>jm*pZː=a@^7ʇVp#0C)ZNw̻p/ ( bLpeQ)̨q:k\Ɉ&a'OPiuL .|@NTK@a}(,덦H 3wyѩ>L,n$۹ה100$UPv]^+vݷ7M ZxZF8 ɳ7̪H:E?pb[<_^sF;Jv qP#?P0/QG=n Vئ|];MʽZ |7*7 5=X*E$Bk @`JH QcFeq$i+gV. NH]zx-'nЋI Ld4iIN_RQ|#vZ83h4M:@uDo5o;cȽ`Ӑ%V $nn.Z/A,x8D6w4$kUX SΊ6Eܡ ,vQzR%wPWֈn6 AE8 EGy6V)M8OH8ysOotM=tm#P)wƽj8> rMKl~Me "s*Ur62@!Tʪ΍B${X:ik!{&\mV%"3P:cr> [@O%ۇF$w'dD6ʧ2>o!sUխǵvyK#sK~t@W.7{ lʬG.)sj DA N6B}]DW@r tg hxj<Ʉ/-f`7_M4< y>cz%+{HG/g(cTNf:QGBOTp'`ycQ9GX]泧?j$cTֵ7n;xeJoL }뤗 \b5a2>0iu8T:/M.jfdj&mw֙F $wRPkId#F4]  `_pv;|cOlp[5(T8(5w?ݡF+ @!~B4e›OG/d۬M^QpLKV?*l@R%ök ~r JDuxk[ב2ehk.[ϯݫ~^Ho5Ђ {_ O3N& '{Ve<ڀy:"Bg s%;ɨK ÂmvBx{6t](\U&^!&S}dr3r&![.\_İTreS b W oM 03 Shp *S< : 4=ArJ" rBx&丵_ZRA*R;?GF3:( pV+lO4r=Tߐ>7tٸvn6!lng[VYl{{'?|x5خ4Ҷ& IDAT$_؏sxoԍ #"UwHy uJ@~v O>L6R^/7s~dPXt6&J. 3rXz@Ӏ 6~ǰz&*Tڽ`ZKAN=}Xۏʲmg,W6jgzT=x'74Y^%&d(X9|tB G/6QP ~ P2@~&Ac'[O"n|u>+ KYoZF8W㓟J0 Tj:!?#@T`帎 *.'@h?C}Q/-dmRo="݀gʪfu[n4PP2}|m%C17=|BG 2]+OyD/ W] ;H;M0 qZ`1kr*PL<~ގiBޕ!W}LNJI|_~7jwl\cﲷ3 zB[!LTl R@?;*Nۊ:\޿T)Ѹӎ0Ӭ }&h TQVMajT~ Ip20{zg[lWڭ} 璡LLR?oU]/ н_J @doLXC;M@WvvA-rL lJ2 $bxYB |V$m |@2 v^y\IZqE4Kef+_9hIu[* `^' [wrl7&m\%~0ZO8ǯ@KP%i玶Z%g*J:OұR]6y0@_ft-j"ڷ=S m%mz7NTl}.}啉~VR_5v%,6c;|ּ3o~l.}PAU>0000Mz8C>x|uuGq5zߗen fjlVfڌ~7_}I{P@WH@$|nɦ#y˚Lb2͊X/?pˁ63dR&$1V$Tj66W]R/UsUFFOz{l`re{~9s-rZgya#9g;$XN"Yh{tϦo ^o;4,Г}mq UrjCI5w i7ʘ7oj|)vSb| }25&vo[7gXscQޮU Sh/ kW}!ىUμn/_p F/xoͼ9ȷ{]以l$mV n߆ޚ(|E;cwG]85F/,yN_$"1Q„$^Xx?@W dƎI#_Ѽs+'M2`|C6L($ *c9 {`2& Lfۛ$Z&-L{.- :ـTI^nSob#iu516Z V2Y=g7֎?XreYY̸qwG5&Ǭx>?qGݬzqZ.`pS)T. ä$!0Vw*@wȚk p S{Xn AN&B[B0!?&E [Oհ`rG.S=VƝC+&u,y<~^HGIlUP7.HA* p d9'ʅi?#[(Q$Y!I޽yn?8u؉iDa{8r7=U`^ƒ-rli2`ºj =6V`;:X=AAWpDp-@sd5wݝ?n,YMhT" ^' jh$b=}v`^[1X;8 Tɾ4kxghkmgh#U[o|_w;%b X rN: *m];v5Bguv{ }vF@1GV2T^HO%n;PFz(7éN|!B%#R^|,À-~3= <-+~z…7R=uE}R%&|ɛI'M4i[.yƏ3냢=> n}uK̈́@(,A.6.KtQkf* 9k)o?Jjj*ޅgTj3.Yȯ$[g(GD*Ij6*[}^ɜJrA ",, `򯡅${s5#=>y LaVJ5OM5 UƎX_LJ-NV&}}ܺ/6߳*B v*.b0nžuy/V ILϢZ}.ր^UNh:'H lޢEMkPΉP?b]T2-I^%m^*ݖ68(((9l` Wސ;#I@o(ZzgiU~n,bQ$@g, } AT{{N!%\oF!s7gA7P51WYV6 @]{O!ų,s@/ﭳ ˭YPt#hI^0SfA*@چއY(\)E߳C"4^WwoQ6r P.՗W/(6p͚Q3GRG@,AZh@ջ"~ ;(菩tuU*?Y|nd־C36ϲkmG#"""n>YIfS@ 僊 ȹ R9-VH^lwIV W0VT셑)}d:&ExHd {isg'󐭠 =ɜZܩo4I~>Mzd|zO^7ɿF<dP°BPxGx*q-;֪4qlܕFtdR4] k̅ `*d*#5xߌŐ'mܳ>P$^rI0Ą _{/^Ԛ>{ 6ﴩUCYlWD;\[|gI;Rx.Vjkd^|B@A=M_=tرO^:m/8t^S_8}cǎ=}1=q豣'N;zBx%v!rOj&SmPJ|e0NqEZf@XlxT;x$IKMh\%eC D ll<`$$g*i1P0rDR 0sg *+ #P͂It8MƔ@Kv"Gduy yk=q8X'$k>>r&@<V^s$w{IK`8ZY~B{tq]6(@'qc-{ (29JdVŻuɯK(z'/O# UWYgt>?z3Q7&@`oubuCM;?;¬G^G9FpԆ if krxS!9vejrÞ>hl\lUr@j@@\aRTXTsy׶׿ />~עub' 1fX^gid__pA}tݖ޾ŚܡqY3LZFFUrk!yv_ !T$Q a By)EfRp \طeJRhRO`OM:tz$;wf]] r-ړ"S+2jPL8z!o6i@i0`_@ueWg#+?N+n"Ǥ0)/TgDI`AG'ZN34Ekx=M"ʨKt]#m5YXBͼ.7n1*/ho/:*]Og4\(>8sAI *K?&yc@2l 1crz$yFM(Aш*}=ShA(&kg{/~*o @{Ȳeѳ߃m*15*05_Da`N@'(I4y5'( pr&UX'Uꆷ,7N4wȱncn"ǙkCe$+_r?K`n|mЄTh0+ؒ ?*”J @Cj"g틀]-Nl]9y +Rᣖ))m9BO`#[c F\vPL& GUp> u~l0M:Qz c:3U('g݊> =xM6m{S)acrRh7 n?oo !8^PGH@"MGB!D7O=MP(tleۣ]x ӛ[߿^7WTE^X;Ź7yW* 5eFç #mq|o– qq;U!y&op}9A c1[~866F> ΉsQ+g"i2vx2IVOW8냁 We\?O$cKv_;*eMx{sQM l@Z`W3fMjcw OyɽOq_d?CƉ5ɛVmuRT\ 3LLq#aF@5phX45!}~1w/J>9e!tZ":UօsdqŋyO>bhW6.UJ 0 ={q#vχBClJ>_~HXNpݟPbOG[#@k ee7ZAmvbRCIIJu`47F]na'7SNkCYHhPh~/& _])0Wj \&wU nΥ!𖆎V_ϸ #eHVe'- t ;8B5s6oZNQ+ϋj^{^V,`_V^^ZWAlM88&%/38z#ʭ *WR+^_^Õx<ËjVu ߊ)e ͐14$$$$$44& . 2?ap ֑-.!IrPqo\˘9%d&gyA~cWh ]5sV%3~ / n;/v{WJXW),L#hERm-{e3)mxF Lk?T JZRXy@.N^~Q}26J{sG8`~g@ USh/OgLT,^+A$,t@msdt }4>̻\L@,bdܳӰ@t}ʯy69G";ݪ\oTQo[m[pXP!;I`lXP% Ba"GU\z*& [ P<]w:s\d{XwmyVf_}f2w%)&P8GH'aFvH)067 @kȀ2h^?g0"NO;la)^KENByEbЍD%WYLe֓aȇr(Ap٭(o4іet}3~%K';{.+n%x]x@3YN&BUmaAG//XF 3z:Lf=~3͵Ҏ,K&~ 9pT="|j32RC0 '~I\ .WQ Y ,rԘˍ&ۀN('qD)$ɭ<6D)%>M,tKV$$SS9)F$(4>*LZ)RH/D.^彁e+CF6/)2ԥt@NO,1#8 8Ɍj$7 n@} $IF^v(.8*gP //)mQ K[ r3&M^P@=rrmPv\i=J,pF[L: :x!j^<[Th_|#1-ok 0%2BO2F+dPP OHǯpZ 9$`h^>}rg|:y@ez_YJo:lh6B4; 9~g); sۀ|%(qO M4Q\e1~ 5HŪ7gnKje:q.0m@gN! ÙE/YU+~cG@wRךLrxer_&]hɣ8r(t\%?s:hd mIv5\yȧMj`#wLsZOsoͳG06:PcʰUʟg}7/,@3΃JSF;1l}m6Z0K(Ccta/l(O^E^)$gXBv_)6f{nk}mYQۜ-оc ˥7m5p!%[忘 StQ-OJߒ9;E~ꡨ0DWHղ,6n<c SVrtQ"OD@MLT"ÿYPȸ"x3Șmu5 Ϫ~M6귬_߰6|%G} oH' q9$i\VEU7[n@mpeDMP@ʽ< [Ak,ڒNcHr^YYVX==Vt y6zL~l^e7` jxGo5F'Eocz;@dʻK- GI.DX2E/fUlҍJoDs7DȿtJ}e/E&+仢pq0i48TȘZ9TޕHɦE,H*5 @@e7рdDR>q2),uHn.z^dxU))ajK#,/) Xo@IҪ<ˉ-= '*hK"'䝶A%e 2m7C4{@ 9P`S><=8̸Ϥ> F%[`ӶFNY)`/w"G0` +Dd4[Ž"L%{|6E :\{Di6](yZWRcV_"W$8tЇțQb (KS)Qw;q?,jS#7jG}Y uR)ֻnGc(>aMwi#%?mɵ*K)qS/?N4$c+;0U j&Rd6< 42[M` _&h$(mo#l4|:EҎ'}G]F^lISH yE!ȿgPe Ի Y$_zP/:B۶uOf!lNW&;|qgMV'id3؍_2l6g۶[MϴbODsHfL; I|4YwZ`ɨt,_=O| w fݯI9ZcJ>ܵ2i[^ ge¼>wwyB|95HA%kD+g€ȯJ6Cr0v|в$lSY"UZ9"WiDK!Envjbx0a_>|$7Qd,K2ug]YD$M=$C5ȄM$?=g7?#'nRk&)`P}NA{j @R"*ӹkG0w\5k*2zBs*.=^MAgwO1=Ʈ 4{|rtؓ3rf{+i$mj2J֟=^|8Fy}m`V Z]Tl忚5l9?o~Q^O$yZK7.v[l @=&mF$s2noREJO,eEfƷ˱hI)%$Ɇk+wc"OI n+>)񲜩 oR"c@0 Ts41'}=gO[MGQ(lx֧v0eP_Jf+bYuإΠ7 n}nPb,c-nk/_-ʆ+(Vӭ W>^BKYLky5<[-5'%>x[qK0Vj =jK<|\4 J&̜{к;+` p4வ"i3zaU5siz<͘@0uv ڹcgPkKk~YkGp.lјxC.&k:WQ *m<7pf[r&3eJ.}$8<TgH~Tw@hେ/Om +I2-U̼n[I/⢫U?y*Fjm)M @7xh~ӵ闖Y:EhZO S@&@,}Lzٵ?P o[|ZkيJ$GK)6ߘrmIg޲6RU#!H&QCt;>p=[ *Zb6ȐO}DЪIo)Qw\|^{TvHLhzQdB; pX9^[[grĴ;[+ gt0${R7DXH+ Vջl\/'VCvjx/-I[v$>'jNVN+Qf:ԎɢkCpoMI$FE~&<~o{ }T Ȧ$I捇?LzCh +r2ݙ:l^? [63H*ni]ZY#h+ OZc1dPi *$cd>fs|9?\[L:ݲ]dž Bͼ4P3IVy++0=XM h ~vTTo-PBߔ7XѼ.> uK~ dMk#~y^ @<䇭[yȵczx>6 (JِW.8%q$E Zc~,d 9pM|2 *Zn`*28)[ѡ؞fУn}h->AlZ#ZMħ3/1)5^YҚK`gLbor6r(yͦр烔0q^Hd#[o? j|/C~J,Tz8Wο)TJ6ǐ2zP_߻" mMG/<د.m%G'h$sx˘gՑʮcTZ(-~uڄ~ h׍CN Dʶu%ɦl _CeM3$Ss ㏋Of4\B%*K-OIr6g.l'y_3>*B, _g1S`ePVc('gg&jq"*O{r@rI'Ը岕bi :(`Q@\DkxSLٙD;deh;+}À|,{P6^C.7e2T3K*$:th߽dUkI6՚^#NDGiZ} d@Ϡ6:I΅K 꿲k @1a3,郀fktLA VLߦKU\ }wpU$塳OK 4|P{afX$@WQǶ,@݀*8JUUT>mA;J3_fG[PЍey ]͹o.߼~fqhAe:։Q_I& +RS)iTj:U*;5z`U,{V%`/e4e>WnHEd4&Id"9u,f7dtغc:< =I&mɯ j6ÁD%[t=Pl)bODX8 @Q#%3$&bt\[G8#׍_S$W"׉'xq!qX(IIN'a} S!+ @ȍBdiBHy*IbR>(z#Q]@hJsčߒFc:қ rsc/Y63'=%2-r ohelywI.M~" `<@ʼn N@h9Z O:i[`\e& {Da@B%@3U:;AY_BqmjƯet% $gO$=ɴ*]Cթj6|sxE#3D|L>81Cn[~5OՈb& @:M.@H(i2޲R^֣Kw lVw*[[*IRXg}(iR-hģOT50=4\RCS7IKwУ|k9w/^肖cbM3NP>)T,˖B4^vT4\Z@S$#;앝FWNirrZ}Q6&Ω~^xdЖDdAOn*EEqUV5P'gH`QZȘ2*Z$ @N)l4Aӝp @4Kp(@dY( 2ZGCqO`FV]~gv} ?Y'%X~`p G.