wcalc-2.5/0000775000175000017500000000000012451434214007454 500000000000000wcalc-2.5/AUTHORS0000644000175000017500000000012212216135006010431 00000000000000memoryhole:Kyle Wheeler kyle:Kyle Wheeler wcalc-2.5/wcalc.rc0000644000175000017500000000353512115670004011013 00000000000000# What precision should the numbers print in? # -1 : automatic # n : n decimal places precision = -1 # Should the numbers be printed in engineering notation? # true/false or yes/no engineering = false # Should undeclared variables be considered errors? # if no, the undeclared variables are considered 0. # true/false or yes/no flag_undeclared = yes # Whether trig functions use radians or not # true/false or yes/no use_radians = no # What format (base) should numbers be printed in # decimal : the number is printed "normally", in base 10 # octal : the number is printed like 031 # binary : the number is printed like 0b1101101 # hexadecimal : the number is printed like 0x3af913 output_format = decimal # octal, binary, hexadecimal # Should alternate-format numbers be printed with the indicative prefixes # true/false or yes/no print_prefixes = yes # Should there be any indication or warning that things have been rounded # no : there is no indication # simple : was there any rounding at all # sig_fig : only if a significant figure has been rounded rounding_indication = no # simple, sig_fig # Should errors be remembered in the history # true/false or yes/no save_errors = no # This specifies the thousands and decimal delimiters # for international numbers. This affects input and output. # For spaces, use ' ' - may only be one character. thousands_delimiter = , decimal_delimiter = . # Should numbers be rounded to the pre-defined precision limit of # the computer # true/false or yes/no precision_guard = no # Should the history be limited in length, and if so, how? # no : no limit # n : some number # eg. history_limit = 1000 history_limit = no # Should the equals sign be printed for results? # true/false or yes/no show_equals = true # Should integers be printed whole, or can long ones be compressed? # true/false or yes/no print_integers = yes wcalc-2.5/aclocal.m40000664000175000017500000012304012451433375011243 00000000000000# generated automatically by aclocal 1.14.1 -*- Autoconf -*- # Copyright (C) 1996-2013 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'.])]) # Copyright (C) 2002-2013 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.14' 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.14.1], [], [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.14.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 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], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 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-2013 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-2013 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-2013 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. 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 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-2013 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}" != 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-2013 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])]) # Copyright (C) 1998-2013 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_LEX # ----------- # Autoconf leaves LEX=: if lex or flex can't be found. Change that to a # "missing" invocation, for better error output. AC_DEFUN([AM_PROG_LEX], [AC_PREREQ([2.50])dnl AC_REQUIRE([AM_MISSING_HAS_RUN])dnl AC_REQUIRE([AC_PROG_LEX])dnl if test "$LEX" = :; then LEX=${am_missing_run}flex fi]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 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-2013 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-2013 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-2013 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-2013 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-2013 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-2013 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-2013 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-2013 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-2013 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 m4_include([config/readline.m4]) wcalc-2.5/ChangeLog0000664000175000017500000030477312451427246011173 000000000000002015-01-02 Kyle Wheeler * Makefile.am, test/Makefile.am: fix distcheck * COPYRIGHT, ChangeLog, NEWS, README, configure.ac: prep for 2.5 * wcalc.1: correct color command documentation * src/common/iscmd.c: document color command online 2015-01-01 Kyle Wheeler * configure.ac: update version to 2.5b, and update compile flags for newer systems * src/common/isfunc.c: uncrustify * src/common/isconst.c: uncrustify * src/common/scanner.l: add missing header * src/cli/main.c: fix warning about const cast * src/common/calculator.c: fix logic errors in variable expansion; and uncrustify * src/cli/main.c: remove unnecessary shadowed variable 2014-12-29 Kyle Wheeler * wcalc.1: document color configuration * test.errors, test.recursion, test.vars, test/Makefile.am, test/active_variable.test, test/vars.test: more tests * test/Makefile.am, test/err.assign.test, test/err.conv_category1.test, test/err.conv_category2.test, test/err.recursion1.test, test/err.recursion2.test, test/err.recursion3.test, test/err.recursion4.test, test/test.simple: expected failure test suite * src/cli/main.c: exit on error correctly * src/cli/main.c, src/common/calculator.c, src/common/includes/output.h, src/common/parser.y: better error output * Makefile.am, configure.ac, test, test.simple, test/Makefile.am, test/basic_float.test, test/basic_ints.test, test/basic_math.test, test/basic_vars.test, test/checktest.sh, test/compound_math.test, test/conversion.test, test/err.assert.test, test/err.question.test, test/factorial.test, test/formatting.test, test/implicit_mult.test, test/precision_guard.test, test/test.simple, test/website_math.test: beginning test framework * config: more build scripts * src/common/calculator.c: better debug output * src/common/number.c: better integer detection with MPFR * src/common/parser.y: print line in assert * src/cli/main.c: terminate scripts on failure * src/common/parser.y, src/common/scanner.l: Fix hex/dec parsing without eliminating zeros, and make precision guard specifiable * src/cli/main.c, src/common/explain.c, src/common/extract_vars.c, src/common/includes/explain.h, src/common/includes/isconst.h, src/common/includes/isfunc.h, src/common/isconst.c, src/common/isfunc.c, src/common/scanner.l: rework the explanatory data structures, to reduce list duplication (duplication potentially leads to missing documentation) * src/common/includes/add_commas.h, src/common/includes/calculator.h, src/common/includes/conversion.h, src/common/includes/evalvar.h, src/common/includes/explain.h, src/common/includes/extract_vars.h, src/common/includes/files.h, src/common/includes/iscmd.h, src/common/includes/isconst.h, src/common/includes/isfunc.h, src/common/includes/list.h, src/common/includes/number.h, src/common/includes/number_formatting.h, src/common/includes/output.h, src/common/includes/string_manip.h, src/common/includes/variables.h: update uncrustification * src/common/parser.y, src/common/scanner.l: implement \assert command * src/cli/main.c, src/common/explain.c, src/common/includes/explain.h, src/common/includes/iscmd.h, src/common/iscmd.c: revamped explanation/command structure; less duplication of command lists * config: ignore new build script "compile" 2014-05-14 Kyle Wheeler * src/common/number_formatting.c: fix double-free bug * src/common/conversion.c: add METRIC_C handling 2014-05-01 Kyle Wheeler * src/common/conversion.c, src/common/includes/conversion.h: Add generic SI-unit conversion (without a real unit) * src/cli/main.c: tell readline to ignore color escapes 2014-04-18 Kyle Wheeler * src/common/parser.y: allow big integers * src/cli/main.c: swap the hard reset with a soft reset (avoid weird characters when color=no), and add special characters for the readline prompt to tell readline to ignore the non-printing characters when calculating prompt length 2014-01-16 Kyle Wheeler * src/cli/main.c: symmetry with the readline behavior 2014-01-15 Kyle Wheeler * src/cli/main.c, src/common/calculator.c, src/common/evalvar.c, src/common/extract_vars.c, src/common/list.c, src/common/variables.c: misc minor improvements suggested by cppcheck * src/common/calculator.c, src/common/number_formatting.c: fix warnings produced by clang --analyze 2014-01-13 Kyle Wheeler * wcalc.1: shorten long lines of contants * configure.ac, configure.in: autoconf will be dropping support for the old filename 2013-12-27 Kyle Wheeler * src/common/scanner.l: These prototypes avoid warnings on old versions of flex, but are incompatible with new versions of flex; so we remove them. Still get warnings with old versions, but that's better than incompatibility with new versions. 2013-12-20 Kyle Wheeler * src/cli/main.c: avoid snprintf; gain readability * src/common/scanner.l: add prototypes to suppress warnings on old versions of MacOS X * src/common/list.c: remove stdio from list module * src/common/parser.y: fix r907 * src/common/parser.y: use strncpy instead of snprintf * src/common/conversion.c: remove dependence on stdio * src/common/isconst.c: remove dependence on stdio * src/common/includes/variables.h: remove dependence on stdio * src/common/files.c: remove dependence on stdio * src/common/explain.c: correct boundary condition for strncat * src/common/explain.c: remove dependency on stdio * src/cli/main.c: readline-only error check 2013-12-19 Kyle Wheeler * config/readline.m4: detect the rl_filename_completion_function rather than the more simplistic readline function 2013-12-13 Kyle Wheeler * src/cli/main.c: make the rest of the colorable objects configurable * src/cli/main.c, src/common/explain.c, src/common/files.c, src/common/includes/output.h, src/common/isconst.c: remove the last printfs and replace them with output functions * src/common/number.c: remove debugging output * src/cli/main.c, src/common/explain.c, src/common/includes/output.h, src/common/parser.y: explanations use proper output functions now * src/Makefile.am, src/cli/help.c, src/cli/main.c, src/common/Makefile.am, src/common/help.c, src/common/includes/output.h, src/common/variables.c: variable lists and variable assignments now display in color properly * src/cli/main.c, src/common/calculator.c, src/common/explain.c, src/common/files.c, src/common/help.c, src/common/historyManager.c, src/common/includes/Makefile.am, src/common/includes/calculator.h, src/common/includes/help.h, src/common/includes/output.h, src/common/parser.y, src/common/variables.c: reworking output ("display") to make color more flexible; not done yet, but should also make a GUI frontend (or ncurses) easier to plug in 2013-11-15 Kyle Wheeler * src/common/number_formatting.c: avoid leaking memory in output formatting * src/cli/main.c: the prompt must be bigger to accommodate color strings * configure.in: denote development in the version * configure.in: update for modern versions of autoconf/automake 2013-11-12 Kyle Wheeler * src/common/calculator.c, src/common/includes/Makefile.am, src/common/includes/calculator.h, src/common/includes/output.h: more color UI stuff; creating a better UI separation layer * src/cli/main.c: refactored prefs parsing to be easier to read and more hierarchical; also added the beginning of a color UI 2013-10-04 Kyle Wheeler * src/common/includes/definitions.h: even more precision for W_E * src/common/includes/definitions.h: more precision for W_E * src/common/number.c: fix num_const_euler 2013-09-25 Kyle Wheeler * wcalc.1: fix old typo * src/common/evalvar.c: avoid memory leak 2013-09-24 Kyle Wheeler * src/common/evalvar.c, src/common/explain.c, src/common/includes/evalvar.h: fix explain segfault for hierarchical expressions * wcalc.1: document verbose and defaults options * wcalc.1: be more descriptive about \save 2013-09-23 Kyle Wheeler * src/common/variables.c: prettier output of variable list * src/common/explain.c: prettify dependent variable output 2013-09-20 Kyle Wheeler * wcalc.1: missing space 2013-09-18 Kyle Wheeler * ChangeLog, NEWS, README: 2.4.1 (for real this time) * src/cli/main.c: add "all" option to -u arg * src/cli/main.c, src/common/help.c, wcalc.1: change -u behavior slightly, and document it * src/common/variables.c: prettier variable list * src/common/variables.c: missing newline in some cases * src/common/files.c: fix minor memory leak in opening dot-files 2013-09-17 Kyle Wheeler * src/common/help.c, wcalc.1: argument formatting * src/common/help.c: fix typo - thanks Roger! * AUTHORS, ChangeLog, NEWS, README, configure.in: backtrack - not releasing 2.4.1 JUST YET * wcalc.1: document new options (-u and -U), ditch unit list for online unit list * src/cli/main.c: require 2 letters * src/cli/main.c, src/common/help.c: -U and -u (--units) for printing out the currently supported conversions and their aliases. * src/common/conversion.c, src/common/includes/conversion.h: Make the text conversion categories universally accessible * wcalc.1: list all the units in the man-page (thanks Roger!) * src/common/conversion.c: typo - thanks Roger! 2013-09-16 Kyle Wheeler * NEWS, README, configure.in: post-release commit * ChangeLog: 2.4.1 * AUTHORS, NEWS, README: prep for 2.4.1 release * Makefile.am, src/Makefile.am, src/common/Makefile.am, src/common/includes/Makefile.am: make distcheck work * src/common/scanner.l: fix output reinterpretation for octal and binary when delimiters are turned on * src/common/variables.c: print description in the variable list 2013-03-06 Kyle Wheeler * NewWcalc.icns, TheW.icns, Wred.png, configure.in, graphics, graphics/NewWcalc.icns, graphics/TheW.icns, graphics/Wred.png, graphics/w.png, src/common/includes, w.png: more reorganizing * memwatch.c, memwatch.h, src/cli/main.c, src/common/add_commas.c, src/common/calculator.c, src/common/conversion.c, src/common/evalvar.c, src/common/explain.c, src/common/extract_vars.c, src/common/files.c, src/common/help.c, src/common/historyManager.c, src/common/iscmd.c, src/common/isconst.c, src/common/isfunc.c, src/common/list.c, src/common/number_formatting.c, src/common/parser.y, src/common/scanner.l, src/common/string_manip.c, src/common/variables.c, src/gui/AboutBoxController.m, src/gui/ConversionList.m, src/gui/ErrorController.m, src/gui/HistoryList.m, src/gui/InspectorController.m, src/gui/MyTextField.m, src/gui/OldVariableList.m, src/gui/PersVarList.m, src/gui/VariableList.m, src/gui/WcalcController.m, src/gui/main.m, src/gui/simpleCalc.c, src/gui/theDelegate.m: remove memwatch * .: ignore cscope * src/common/includes/add_commas.h, src/common/includes/calculator.h, src/common/includes/conversion.h, src/common/includes/definitions.h, src/common/includes/evalvar.h, src/common/includes/explain.h, src/common/includes/extract_vars.h, src/common/includes/files.h, src/common/includes/help.h, src/common/includes/historyManager.h, src/common/includes/iscmd.h, src/common/includes/isconst.h, src/common/includes/isfunc.h, src/common/includes/list.h, src/common/includes/number.h, src/common/includes/number_formatting.h, src/common/includes/string_manip.h, src/common/includes/uint32_max.h, src/common/includes/variables.h: uncrustified * src/cli/main.c, src/common/add_commas.c, src/common/calculator.c, src/common/conversion.c, src/common/evalvar.c, src/common/explain.c, src/common/extract_vars.c, src/common/files.c, src/common/help.c, src/common/historyManager.c, src/common/includes/variables.h, src/common/iscmd.c, src/common/isconst.c, src/common/isfunc.c, src/common/list.c, src/common/number.c, src/common/number_formatting.c, src/common/string_manip.c, src/common/variables.c: uncrustified * src/cli/main.c, src/common/calculator.c, src/common/evalvar.c, src/common/files.c, src/common/includes/isconst.h, src/common/includes/variables.h, src/common/isconst.c, src/common/number.c, src/common/parser.y, src/common/string_manip.c: removing compiler warnings * configure.in: more flags * Makefile.am, configure.in, simpleCalc.c, simpleCalc.h, src/Makefile.am, src/gui, src/gui/Makefile.am, src/gui/includes/simpleCalc.h, src/gui/simpleCalc.c: gui files needed a Makefile * configure.in: restore flags * autogen.sh: fix executable state * Makefile.am: fix config directory handling * configure.in: outdated comment * config, src, src/cli, src/common, src/common/Makefile.am, src/common/includes: ignores and such * AboutBoxController.h, AboutBoxController.m, ConversionList.h, ConversionList.m, ErrorController.h, ErrorController.m, HistoryList.h, HistoryList.m, InspectorController.h, InspectorController.m, Makefile.am, MyTextField.h, MyTextField.m, OldVariableList.h, OldVariableList.m, PersVarList.h, PersVarList.m, VariableList.h, VariableList.m, WcalcController.h, WcalcController.m, WcalcService.h, WcalcService.m, acinclude.m4, add_commas.c, add_commas.h, autogen.sh, calculator.c, calculator.h, config, config/readline.m4, configure.in, conversion.c, conversion.h, definitions.h, evalvar.c, evalvar.h, explain.c, explain.h, extract_vars.c, extract_vars.h, files.c, files.h, help.c, help.h, historyManager.c, historyManager.h, iscmd.c, iscmd.h, isconst.c, isconst.h, isfunc.c, isfunc.h, list.c, list.h, main.c, main.m, number.c, number.h, number_formatting.c, number_formatting.h, parser.y, scanner.l, src, src/Makefile.am, src/cli, src/cli/main.c, src/common, src/common/add_commas.c, src/common/calculator.c, src/common/conversion.c, src/common/evalvar.c, src/common/explain.c, src/common/extract_vars.c, src/common/files.c, src/common/help.c, src/common/historyManager.c, src/common/includes, src/common/includes/Makefile.am, src/common/includes/add_commas.h, src/common/includes/calculator.h, src/common/includes/conversion.h, src/common/includes/definitions.h, src/common/includes/evalvar.h, src/common/includes/explain.h, src/common/includes/extract_vars.h, src/common/includes/files.h, src/common/includes/help.h, src/common/includes/historyManager.h, src/common/includes/iscmd.h, src/common/includes/isconst.h, src/common/includes/isfunc.h, src/common/includes/list.h, src/common/includes/number.h, src/common/includes/number_formatting.h, src/common/includes/string_manip.h, src/common/includes/uint32_max.h, src/common/includes/variables.h, src/common/iscmd.c, src/common/isconst.c, src/common/isfunc.c, src/common/list.c, src/common/number.c, src/common/number_formatting.c, src/common/parser.y, src/common/scanner.l, src/common/string_manip.c, src/common/variables.c, src/gui, src/gui/AboutBoxController.m, src/gui/ConversionList.m, src/gui/ErrorController.m, src/gui/HistoryList.m, src/gui/InspectorController.m, src/gui/MyTextField.m, src/gui/OldVariableList.m, src/gui/PersVarList.m, src/gui/VariableList.m, src/gui/WcalcController.m, src/gui/WcalcService.m, src/gui/includes, src/gui/includes/AboutBoxController.h, src/gui/includes/ConversionList.h, src/gui/includes/ErrorController.h, src/gui/includes/HistoryList.h, src/gui/includes/InspectorController.h, src/gui/includes/MyTextField.h, src/gui/includes/OldVariableList.h, src/gui/includes/PersVarList.h, src/gui/includes/VariableList.h, src/gui/includes/WcalcController.h, src/gui/includes/WcalcService.h, src/gui/includes/theDelegate.h, src/gui/main.m, src/gui/theDelegate.m, string_manip.c, string_manip.h, theDelegate.h, theDelegate.m, uint32_max.h, variables.c, variables.h: modernize the layout 2013-02-10 Kyle Wheeler * parser.y: fix handling of the \bits command 2012-09-29 Kyle Wheeler * wcalc.1: Josue's patch to fix Debian bug 600255 2012-09-10 Kyle Wheeler * wcalc.1: update for gtgroff 2012-08-22 Kyle Wheeler * explain.c: patch from JosuĂ© Ortega 2012-07-13 Kyle Wheeler * main.c: fix history filename issue 2012-06-10 Kyle Wheeler * main.c: Excised leftover PATH_MAX uses. 2012-06-05 Kyle Wheeler * files.h: prototype openDotFile() * files.c, files.h, main.c: update to use PATH_MAX only if available * configure.in: check for PATH_MAX (some OSs, like GNU Hurd, do not have it) 2012-04-04 Kyle Wheeler * configure.in: avoid taking sides on rpath debate * configure.in: since AC_SEARCH_LIBS and AC_CHECK_LIB build up LIBS, we need to leave the CPPFLAGS and LDFLAGS modified * configure.in: mpfr requires gmp, so use gmp flags when detecting mpfr * number_formatting.c: minimum of 2 digits from mpfr_get_str, also, always reserve space for the null-termination * Makefile.am, configure.in: allow for specifying GMP and MPFR paths * main.c: improve handling of -P argument 2012-03-14 Kyle Wheeler * explain.c, iscmd.c: online help for \delim 2012-03-10 Kyle Wheeler * help.c, main.c: get the version string right * scanner.l: scientific notation can have a zero exponent 2011-04-18 Kyle Wheeler * number_formatting.c: comment about upping the cutoff * number_formatting.c: up the cutoff * number_formatting.c: make it possible to display small things like Eh * conversion.c: fix yard conversion to meters (and thus, to everything else) 2010-12-29 Kyle Wheeler * configure.in, help.c, main.c: update to new autotools & version number * ., calculator.c, number_formatting.c: better way to respect print_ints... still seem to have a problem with really really huge decimals, such as 100!+0.1 * number_formatting.c: not always respecting print_ints setting 2010-06-07 Kyle Wheeler * number_formatting.c: better handling of very big/small numbers when doing automatic engineering decisions * main.c: initialize rounding indication and add error reporting for unrecognized config values * number_formatting.c: required to get the right exponent (why???); test against muB * number_formatting.c: required to get the right exponent (why???); test against muB * number_formatting.c: correct the display of long exponents * ., English.lproj: ignores * historyManager.c: not sure what this is for... * WcalcController.m: fix handling of alternate input prefs - they were not saved to the preferences correctly * number_formatting.c: use indexes rather than pointers, and be more careful about running off the end of "length", to avoid a segfault; initialize d_index; fix exponent calculation for 0-precision display * main.c: avoid unexpected behavior if HOME is too long * calculator.c: print_equal should turn off the tilde too; and remove attribution URL (points to a porn site now) * test.simple: test for radian correctness * help.c: fix typo (thanks Reuben Thomas!) * parser.y: fix potential printf issue * scanner.l: attempting to handle missing lex/flex more gracefully; avoid segfaults by initializing the return value, even though it wont be used; not all versions of lex support curly-brace repetition definitions * configure.in: attempting to handle missing lex/flex more gracefully; and without yywrap, we dont need to link to libl * files.c: avoid unexpected behavior if HOME is too long, and use O_EXCL on saveState to avoid unintentional overwrites * wcalc.1: avoid the word "precision" when possible, because it, itself, is imprecise. And also try to be more clear (thanks Reuben Thomas!) * calculator.c: some more debug output 2010-05-27 Kyle Wheeler * autogen.sh: this is really trivial, but... avoids confusion 2008-10-31 Kyle Wheeler * Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj: reworked Xcode build settings (consider: different settings for Wcalc.app and wcalc, but most of the settings are pulled from the project settings) * NewWcalc.icns, Wcalc.xcodeproj/kyle.pbxuser: Adding new icon (via Xcode svn frontend) * wcalc.spec: Testing... * Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj: xcode 3.1 only * ChangeLog, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj: tidying 2008-10-26 Kyle Wheeler * Wcalc.pmdoc/01wcalc.xml, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, historyManager.c: fixing compilation in xcode * ChangeLog, English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, NEWS, README, Wcalc-nonFHS.pmproj, Wcalc.pmdoc, Wcalc.pmdoc/01wcalc-contents.xml, Wcalc.pmdoc/01wcalc.xml, Wcalc.pmdoc/index.xml, Wcalc.pmproj, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj: collective version bump * wcalc.1: documenting the new options for input * test.simple: test for crashers and correct binary ops * English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, calculator.c, calculator.h, main.c, parser.y, scanner.l, simpleCalc.c: alternate input decimal and thousand separators... this is to handle the pathological case where input needs to be from one nationality and output needs to be in another * Info.plist, definitions.h, help.c: simpler versioning cooperation with Xcode * AboutBoxController.m: depend on definitions.h * WcalcController.h, WcalcController.m: alternate input decimal and thousand separators... this is to handle the pathological case where input needs to be from one nationality and output needs to be in another; also fixed display size adjusting 2008-10-25 Kyle Wheeler * WcalcController.m: use 10.4+ method of fetching thousands separator and dec separator * number.h: make binary operations (bor, band, bxor) use a less surprising rounding mode when operating on non-integers * number.c: make is_int simpler and stop relying on string manipulation * calculator.c: truncate right-shifts only if we were working with an integer to begin with * number_formatting.c: fix typo * add_commas.c: behave correctly if separator is nil 2008-10-12 Kyle Wheeler * ., .cvsignore: remove generated files from .cvsignore * English.lproj/.DS_Store: DS_Store * calculator.c: simplifying previous rshift solution with trunc * aclocal.m4, config.h.in, configure, ylwrap: removing generated files from cvs * ., .cvsignore, English.lproj, English.lproj/.cvsignore: tidying * number.c, number.h: less complicated solution to the problem: just use trunccalculator.c * English.lproj/Makefile.am, Makefile.am, Makefile.in, configure.in, ylwrap: better build system 2008-10-10 Kyle Wheeler * calculator.c: use num_rshift instead of hand work, because we need the numbers to be truncated correctly * number.c, number.h: num_rshift to truncate bits correctly * number_formatting.c: avoid a stupid segfault 2008-08-24 Kyle Wheeler * explain.c, isconst.c: minor fix, and added a warning to remind myself of an idea * explain.c: revamped isconst makes it easier to handle this symbolically, and allows the compiler to notice missing explanations... added a few missing explanations * extract_vars.c, scanner.l: deal with new isconst correctly * isconst.c, isconst.h, main.c: fix the engineering flag (oops) and expand the power of isconst() 2008-06-17 Kyle Wheeler * calculator.c: localizing the output was getting skipped in some circumstances 2008-05-13 Kyle Wheeler * list.h: declaring inline in a header file is pointless, and with SunStudio's compiler, harmful * configure.in: remove solaris bodge (have generic isinf/isnan workaround), but add AC_C_INLINE * calculator.c: isinf/isnan nonexistence fixes 2008-03-31 Kyle Wheeler * Makefile.am: enable "make dist" * main.c: pref reading shouldn't require a space between the key and the equals sign 2008-02-20 Kyle Wheeler * main.c, scanner.l: add tab-completion of new engineering modes * explain.c: make explanations of commands tolerant of missing backslash 2008-02-18 Kyle Wheeler * ChangeLog, NEWS, README, Wcalc-nonFHS.pmproj, Wcalc.pmproj, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, aclocal.m4, configure: 2.3.1 * acinclude.m4: better readline history detection * number_formatting.c: fix a compiler warning * WcalcController.h, WcalcController.m: straightening out the eng pref 2008-02-12 Kyle Wheeler * WcalcController.m: fixed the backwards compatability logic 2008-02-08 Kyle Wheeler * main.c, wcalc.1: accept input from wcalc_input envariable * wcalc.1: correct engineering mode documentation * number_formatting.c: make engineering output truncate results if the precision is auto * main.c, parser.y, scanner.l, wcalc.1: make the engineering configuration consistent (and DOCUMENTED) * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, WcalcController.h, WcalcController.m, calculator.c, calculator.h, main.c, number_formatting.c, number_formatting.h, parser.y: Make engineering mode a three-way toggle between "always", "never", and "auto" * conversion.h: ssize_t headers 2008-02-04 Kyle Wheeler * scanner.l: be more careful about running off the end of yytext * README: stupid typo 2007-12-05 Kyle Wheeler * scanner.l: accept @NaN@ and @Inf@ * number.h: inf 2007-08-27 Kyle Wheeler * number.c, number.h: vastly expanded non-mpfr functions... dont quite work right yet, but its almost there * number_formatting.c, number_formatting.h: another stab at mpfr-independence * string_manip.c: making splint happy * list.c, list.h, main.c: attempting to make splint happy * explain.c, extract_vars.c, extract_vars.h, iscmd.c, isconst.c, isconst.h, isfunc.c: make splint happy * files.c, help.c: remove pointless mpfr dependency * conversion.c, conversion.h: use ssize_t instead of smaller ints * calculator.h: fix signs and remove gratuitous randstate * add_commas.c, add_commas.h: correct conversions and handle out of memory, add splint notation 2007-08-24 Kyle Wheeler * ChangeLog: *** empty log message *** * English.lproj/MainMenu.nib/keyedobjects.nib, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, WcalcController.m: comp, fact, exp, and sinc were missing from the GUI * explain.c: sinc and exp were missing documentation * English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, Info.plist, Makefile.in, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, aclocal.m4, configure, configure.in, definitions.h: version bump to 2.3.1, and some minor changes to make compiling easier 2007-08-23 Kyle Wheeler * WcalcController.h, WcalcController.m: make prefs behave themselves (sync on quit and on closing the prefs window) and restore the maxPrecisionValue from the saved pref on awakeFromNib * MyTextField.m: handle maliciousness and weirdness a bit better. delete and backspace are now synonyms for CLEAR * simpleCalc.c: handle input number formatting properly (commas, periods, internationalization, etc.) 2007-08-22 Kyle Wheeler * test.simple: correct the test for FORTRAN-style ** * MyTextField.m, WcalcController.m, simpleCalc.c, simpleCalc.h: major overhaul of the simpleCalc subsystem, to make it more robust. still needs work to handle quasi-malicious users, but it already works better than it used to (no crashing!) * WcalcController.m: correct interface glitch when resizing windows that have already been resized * WcalcController.m: correct interface glitch when setting bit precision * WcalcController.m: removed debugging printouts * scanner.l: converting ** back into FORTRAN-style exponent notation * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, WcalcController.h, WcalcController.m: Fix display when going back from extreme sizes. Also, added slider-max preference 2007-08-14 Kyle Wheeler * parser.y, test.simple: fix squaring syntax errors (e.g. 2**3 = 12) 2007-08-03 Kyle Wheeler * README, wcalc.1: update for GPLv2+ compatability * COPYRIGHT: update for GPLv2+ compatability 2007-07-21 Kyle Wheeler * ChangeLog, NEWS, README: version 2.3 commit * Wcalc-nonFHS.pmproj, Wcalc.pmproj, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser: *** empty log message *** * Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj: *** empty log message *** * parser.y: removed compiler warning * number_formatting.c: whitespace changes and some signedness tidiness * number.h: might not be necessary, but added mp_prec_t * number.c: fixed a compiler warning about signedness * historyManager.c, historyManager.h: why go unsigned long when you can go size_t? * conversion.c, files.c: fixed a signed/unsigned issue * extract_vars.c: minor cleanup for readability (str -> peekstr) * explain.c: minor cleanup for readability (str -> curstr) 2007-07-20 Kyle Wheeler * calculator.c: use the strswap function instead of duplicating code * WcalcController.m: removed symbol conflict (exp -> expr), and removed signed/unsigned comparisons * HistoryList.m, VariableList.m: removed symbol conflict (index -> theIndex) * MyTextField.m, PersVarList.m: removed symbol conflict (exp -> expr) * English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, Info.plist, WcalcService.h, WcalcService.m, main.m: WcalcService * WcalcController.h, WcalcController.m: change the menu display when the keyboard appears and disappears 2007-07-17 Kyle Wheeler * calculator.c, calculator.h, conversion.c, conversion.h, evalvar.c, evalvar.h, explain.c, explain.h, files.c, files.h, iscmd.c, iscmd.h, isconst.c, isconst.h, isfunc.c, isfunc.h, number.c, number.h, variables.c, variables.h: made the inputs const * main.c: added --dec, --hex, --bin, and --oct, because I keep trying to use them anyway * add_commas.c, add_commas.h, string_manip.c, string_manip.h: made the inputs const, and switched to using offsets rather than pointer arithmetic * number_formatting.c: testing against both 0 and length because length is unsigned * test.simple: 100! now has an answer too * number_formatting.c: avoid using pointers when possible in zero_strip, for tighter code * number.c: made is_int() more reliable in the face of excess precision (e.g. 100!) * main.c: increased buffer sizes and removed overflow in config file * scanner.l: allow initial zero on exponent in hex * scanner.l: allow initial zero on exponent in big ugly * test.simple: add test for variable expansion precision bug * calculator.c: use full-precision for estimating simple rounding (more likely to warn of rounding in all relevant cases) * number_formatting.c: fix variable expansion by adding a full-precision formatter * calculator.c: comment documenting last change * calculator.c: request a full-precision number 2007-07-16 Kyle Wheeler * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib: misc minor tweaks * conversion.c: correcting and expanding, refactoring unit list, added pressure and angle. * conversion.h: correcting and expanding unit list, added pressure and angle. * InspectorController.m: whitespace * ConversionList.m: angle and pressure * WcalcController.m: fixed the inspector-window-quits-program bug * scanner.l: minor cleanup * number_formatting.c: remove a debug warning * main.m: fewer dependencies 2007-07-11 Kyle Wheeler * calculator.c, explain.c, main.c, number.c, number.h, scanner.l: fixing a few warnings * WcalcController.m, scanner.l: the bohr radius notation is a0, not ao * calculator.c: pad "output_string" output with spaces to make formatting of prefs listing more predictable * wcalc.1: missing a few commands * definitions.h: fixing the units on the bohr radius * parser.y: improved formatting of prefs listing * parser.y: moved number.h include, made prefs listing more useful 2007-07-10 Kyle Wheeler * number_formatting.c: fixed the assumption that the output of mpfr_get_string is greater than exp * number.c: strlen() include * number.c: fixed some really sloppy code (avoiding a buffer overrun) 2007-04-06 Kyle Wheeler * explain.c, isconst.c, wcalc.1: bohr 2007-04-05 Kyle Wheeler * conversion.c: more kph synonyms 2007-02-26 Kyle Wheeler * Makefile.am, Makefile.in, MyTextField.h, VariableList.m, WcalcController.m, calculator.c, conversion.c, conversion.h, evalvar.c, historyManager.c, historyManager.h, isfunc.c, main.c, number.c, number.h, parser.y, scanner.l, simpleCalc.c, variables.c, variables.h: abstracted mpfr out... mostly 2007-02-25 Kyle Wheeler * main.c, parser.y, variables.c, variables.h: efficiency on listvars, and varname completion * explain.c: fix explain to handle whitespace * parser.y: removed error-verbose because its now unnecessary 2007-01-17 Kyle Wheeler * main.c: completion-speed 2007-01-05 Kyle Wheeler * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, Info.plist, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, configure, configure.in, definitions.h, parser.y, scanner.l: fix a bug introduced with the better error reporting, and tidy up a little in scanner.l * calculator.c, calculator.h, main.c, parser.y, scanner.l: better error reporting 2006-12-29 Kyle Wheeler * scanner.l: fixed error reporting on malformed numbers * parser.y: verbose errors (kinda cool) * main.c: formatting 2006-12-26 Kyle Wheeler * main.c: minor tidying, added "to" to the conversion completion * main.c: quietly conform a little more closely to command-line syntax in the rc file * isconst.c, isfunc.c: optimized (this stuff is const) * NEWS, main.c: TAB COMPLETION!!! * explain.c: be more helpful when called alone * Makefile.am, Makefile.in, conversion.c, conversion.h, iscmd.c, iscmd.h: preparing for tab-completion * scanner.l: more forgiving about whitespace 2006-09-13 Kyle Wheeler * Makefile.am: no gcc-specific flags 2006-08-01 Kyle Wheeler * parser.y: better error messages * scanner.l: more tolerant (and convenient) parsing for commands that take digits as arguments 2006-07-17 Kyle Wheeler * list.c: fixed a problem removing things from the List datastructure 2006-07-11 Kyle Wheeler * WcalcController.m: observe only the main window with the quit: selector, not ALL windows (Marco Thill) 2006-07-10 Kyle Wheeler * ChangeLog: *** empty log message *** * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, README, Wcalc-nonFHS.pmproj, Wcalc.pmproj, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser: just a touch * WcalcController.m: more memory tidying * WcalcController.m: declaring the mutex * ConversionList.m, ErrorController.m, HistoryList.m, InspectorController.m, MyTextField.m, OldVariableList.m, PersVarList.m, VariableList.m, add_commas.c, conversion.c, evalvar.c, explain.c, extract_vars.c, historyManager.c, isconst.c, isfunc.c, list.c, main.m, memwatch.c, memwatch.h, parser.y, scanner.l, simpleCalc.c, string_manip.c, theDelegate.m, variables.c: MEMWATCH * WcalcController.h: added quit function * WcalcController.m: memory cleanup, mutex-protecting the change-precision slider, MEMWATCH * calculator.c: memory cleanup, MEMWATCH * explain.c: explain cmod * files.c, main.c: memory cleanup, MEMWATCH * number_formatting.c, number_formatting.h: some consts, MEMWATCH * test.simple: 0.9e-9 test cases * help.c: better details * AboutBoxController.m: MEMWATCH * English.lproj/InfoPlist.strings, Info.plist, README, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj: version, prerelease commit 2.2.2 * ChangeLog: *** empty log message *** * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, test.simple: *** empty log message *** * configure, configure.in, definitions.h: new version * wcalc.1: added c_style_mod pref keyword * parser.y, scanner.l: added \cmod command * main.c: added live precision toggle, % style prefs, and the c_style_mod pref keyword * number_formatting.c: eliminate the negative zeros * calculator.c, calculator.h: added live precision toggle, % style prefs * WcalcController.h, WcalcController.m: added live precision toggle, % style prefs, improved the prefs versioning, and fixed some whitespace 2006-07-09 Kyle Wheeler * Makefile.am, Makefile.in: dont need optimization by default 2006-04-21 Kyle Wheeler * acinclude.m4, aclocal.m4, configure: better history detection 2006-04-12 Kyle Wheeler * parser.y: this was backwards * calculator.c: probably faster 2006-03-21 Kyle Wheeler * calculator.c: make mod (%) efficient 2006-03-10 Kyle Wheeler * scanner.l: fixes the 0.9e-9 bug, and enables exponents and decimals and such on the other bases * add_commas.c: fixes the exponent brokenness * string_manip.c: now handles of hex exponents 2006-03-03 Kyle Wheeler * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib: no printing, and standardize the appearance of some windows 2006-03-02 Kyle Wheeler * WcalcController.m: keyboard is now a one-click affair * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib: Preloaded Variables buttons, renamed the menu item, added more auto-save names 2006-03-01 Kyle Wheeler * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, HistoryList.h, HistoryList.m, VariableList.h, VariableList.m, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser: can copy from history/variable list. * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, InspectorController.h, InspectorController.m, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser: Inspector is now a panel * English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, Info.plist, NEWS, README, Wcalc-nonFHS.pmproj, Wcalc.pmproj, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, configure: post-release commit * Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, configure.in, definitions.h: incrementing version * ChangeLog: *** empty log message *** * PersVarList.m, list.c: fix crash when theres an empty list * ChangeLog: post-release commit * README, Wcalc-nonFHS.pmproj, Wcalc.pmproj, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser: Releasing 2.2 * wcalc.1: sinc * parser.y: sinc * calculator.c, calculator.h, definitions.h, explain.c, isfunc.c, parser.y, scanner.l: sinc * explain.c: explanations of Gamma, lnGamma, zeta, and K * explain.c: added a \n 2006-02-28 Kyle Wheeler * definitions.h, isconst.c, isfunc.c, wcalc.1: new symbols * ChangeLog: *** empty log message *** * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser: Preload Variables * string_manip.c: avoiding string functions * list.c: correct getListElement * WcalcController.m: preload the preloaded variables * VariableList.m: unused variable * PersVarList.m: all the rest of the implementation * calculator.c: rely on count_digits to do it right * number_formatting.c: better truncation decisions * scanner.l: more accurate sig-fig calculation * string_manip.c: make count_digits aware of base (I think) 2006-02-27 Kyle Wheeler * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, HistoryList.m, InspectorController.h, InspectorController.m, PersVarList.h, PersVarList.m, README, VariableList.m, Wcalc.pmproj, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, WcalcController.h, WcalcController.m, w.png: added the new functions, and a way to change the internal bitcount. partially through the preload stuff * calculator.c: rounding needs more work * variables.c: getrealnvar was totally broken * scanner.l: forgiving capitalization of lnGamma * list.c: getListElement was broken... dunno about this aliasing stuff * evalvar.c, parser.y: num_to_str changed * add_commas.c: debug printf twiddle * number_formatting.c, number_formatting.h: some truncation hinting 2006-02-26 Kyle Wheeler * Makefile.in, aclocal.m4, config.h.in, configure: osx utils * calculator.c, configure.in: better uj detect (use mpfr!) * calculator.c: uj * config.h.in, configure: new version * configure.in: stupid library * configure.in: GMPs broken MPFR library really irritates me sometimes 2006-02-23 Kyle Wheeler * calculator.c: wbnot was missing 2006-02-21 Kyle Wheeler * Makefile.in, aclocal.m4, configure: OSX tools * historyManager.c: unnecessary function * acinclude.m4: new URL * configure.in: that extra dollar sign was making OpenBSD confused * configure: new configure.in * configure: new configure.in * parser.y: typo * conversion.c, conversion.h: plurals and non-plurals * scanner.l: some units have periods 2006-02-20 Kyle Wheeler * conversion.c: more accurate foot-inches conversion * list.c, list.h: unused-but-possibly-useful-someday function * parser.y: whitespace * parser.y: shift/reduce errors and more explanation of memory leak in error condition 2006-02-15 Kyle Wheeler * configure.in: better error message, more accurate requirements (for the moment) * Makefile.in, aclocal.m4, config.h.in, configure: MacOS X 10.4.5 * calculator.c, scanner.l: work with older mpfr versions * definitions.h: catalan constant if its missing from mpfr * configure.in: detect a missing mpfr_sec function * WcalcController.h, add_commas.c, calculator.c, calculator.h, conversion.h, evalvar.c, explain.c, extract_vars.c, historyManager.c, isconst.c, isfunc.c, list.c, main.c, simpleCalc.c, string_manip.c, variables.c, variables.h: whitespace * definitions.h: K (Catalan) * files.c: whitespace * parser.y: comment explaining memory loss * main.c: print errors in commandline * calculator.c: memory leak in error condition * conversion.c, parser.y: memory leak * scanner.l: Gamma function rather than gamma to distinguish it from the Euler constant * add_commas.c: fix memory overrun * list.c: allocate the right thing * extract_vars.c: strdup it so it can be safely freed * main.c: just fixing an exit memory allocation (doesnt *really* matter) * calculator.c: memory leak * variables.c: memory leak (description) * extract_vars.c: memory leak * number_formatting.c: possible memory overwrite * calculator.c, calculator.h, parser.y, scanner.l: secant, cosecant (and related functions), gamma, lngamma, zeta, catalan (K) and enhanced euler * number_formatting.c: correct calloc syntax (does this matter?) * add_commas.c: only numbers 2006-02-14 Kyle Wheeler * calculator.c: make the equal always in the second column * add_commas.c: negatives * calculator.c: a warning against bad thoughts * parser.y: add_commas pref * add_commas.c: debugging * wcalc.1: descriptions of wcalcrc keys * calculator.c: add commas for regular numbers too 2006-02-13 Kyle Wheeler * main.c: potato potah-toe * main.c: cmdline input fix for systems without READLINE_HISTORY * calculator.c, calculator.h: add commas * main.c: whitespace and delimiters preference * scanner.l: \delimiters * parser.y: DELIM_CMD * number_formatting.h: whitespace * number_formatting.c: commas * WcalcController.m: commas preference preliminary * Makefile.am, Makefile.in, add_commas.c, add_commas.h: add_commas * test.simple: trickier precision guard test * number_formatting.c, scanner.l: main.c * calculator.c: spacing and fiddled with print_this_result 2006-02-02 Kyle Wheeler * VariableList.m: compatability with new variables.c 2006-01-19 Kyle Wheeler * explain.c: better error message * test.simple: might be important to test * parser.y: added print_ints pref to \\prefs * main.c: corrected print_integers preference, added error-checking to internal variable storage * variables.c: wrong semantics on key sanity testing 2006-01-15 Kyle Wheeler * variables.h: size_t instead of int * variables.c: made it use the generic List structure * parser.y: better variable abstraction, a readability fix, and slightly more useful error messages * list.h: added getListElement * list.c: removed unnecessary error printout, and added getListElement * files.c: readability 2005-12-12 Kyle Wheeler * wcalc.1: tidying up, reorganizing * wcalc.1: variables & descriptions 2005-12-11 Kyle Wheeler * English.lproj/InfoPlist.strings, Info.plist, OldVariableList.h, VariableList.m, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, WcalcController.m, calculator.c, calculator.h, configure, configure.in, conversion.c, conversion.h, definitions.h, evalvar.c, explain.c, extract_vars.c, files.c, help.c, help.h, historyManager.c, historyManager.h, list.c, list.h, main.c, parser.y, simpleCalc.c, string_manip.c, string_manip.h, variables.c, variables.h: tidying up, incrementing version * calculator.c, explain.c, uint32_max.h: UINT32_MAX is *not* that hard, people! * files.c: save the description, bugfix for saveState 2005-12-10 Kyle Wheeler * explain.c: portability fixes * variables.h: include config.h * explain.c, files.c, help.c, main.c, parser.y, scanner.l, variables.c, variables.h: descriptions * wcalc.1: \\store and \\explain * explain.c, files.c: \\explain \\store * files.c, files.h, main.c, parser.y, scanner.l: \\store function, and useability fixes in files.c for the preload file * calculator.c: formatting * calculator.c: folds * calculator.c: depth-first recursion search, not breadth-first * calculator.c: that was unnecessary * calculator.c: find_recursion uses all List's now * test.errors: more tests * list.c, list.h: added an iterator structure and a way to use the list as a stack rather than a queue * calculator.c: removed local_extract_vars in favor of the separated one in extract_vars.c * calculator.c: fixing the a==5 bug * test.errors: more extensive testing * calculator.c: starting to eliminate non-List lists * Makefile.am, Makefile.in, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, configure, evalvar.c, evalvar.h, explain.c, explain.h, extract_vars.c, extract_vars.h, help.c, isconst.c, isconst.h, isfunc.c, isfunc.h, list.c, list.h, main.c, parser.y, scanner.l, variables.h: \\explain * calculator.c: this was extraneous * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib: missing connection repaired 2005-12-07 Kyle Wheeler * main.c: that var was unecessary * main.c: command-line operations now add to the history * wcalc.1: wcalcrc and active variable documentation 2005-12-02 Kyle Wheeler * configure.in: typo 2005-12-01 Kyle Wheeler * English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, Info.plist, InspectorController.h, InspectorController.m, NEWS, README, Wcalc.pmproj, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, WcalcController.h, WcalcController.m, definitions.h, wcalc.info: fixed resizeness, made Inspector a window, releasing 2.1.2 * ChangeLog: Version 2.1.2 * Makefile.am: Reference for if I need lexx flags in the future * configure, configure.in: Version 2.1.2 * Makefile.in: backup file garbage 2005-11-14 Kyle Wheeler * Makefile.am: remove more cvs cruft 2005-11-10 Kyle Wheeler * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib: the menu functions now say areasinh instead of arcsinh 2005-11-09 Kyle Wheeler * files.c: makes OpenBSD happy 2005-11-08 Kyle Wheeler * files.c: variables as expressions should be quoted correctly 2005-11-07 Kyle Wheeler * Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser: whatever * Makefile.in, aclocal.m4, configure, configure.in: attempt to detect broken MPFR installations * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib: Forgot to connect the drawers to the corrected main window :( * scanner.l: technically, that should be a "mu" and not a "micro", but you can't tell visually... for the time being, we accept either one * WcalcController.m: technically, that should be a "mu" and not a "micro", but you can't tell visually - also, use a real multiply symbol for implicit here * README, definitions.h: I wanted mu, not micro... but that's complicated * ChangeLog, NEWS, README, README.txt, Wcalc.pmproj, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj: 2.1.1 2005-11-05 Kyle Wheeler * WcalcController.m: improve utf-8 friendliness, add debug printouts in loading sequence, fix compatability with locales without NSThousandsSeparators, fix repeat calculation bug * scanner.l: correct name for the asinh,acosh,atanh,acoth functions * ReadMe.rtf: text only now * English.lproj/InfoPlist.strings: binary-fied * English.lproj/InfoPlist.strings: step 1 in binary-fying it * simpleCalc.c: fixed debug output * scanner.l: fixed the division symbol and made it so the error-reporter won't break the GUI by printing malformed UTF-8 * definitions.h: preparing for 2.1.1 * OldVariableList.m, VariableList.m: made utf-8 friendly * ConversionList.m, HistoryList.m, MyTextField.m: made utf-8 friendly * Info.plist: preparing for 2.1.1 * ErrorController.m: minor obvious optimizations (what was I thinking?) * English.lproj/MainMenu.nib/keyedobjects.nib: presto: binary * English.lproj/MainMenu.nib/keyedobjects.nib: step 1 to proper cvsage * English.lproj/MainMenu.nib/info.nib: Re-add as binary * English.lproj/MainMenu.nib/info.nib: Step 1 to making it work properly * English.lproj/MainMenu.nib/classes.nib: Re-adding with wrapper * English.lproj/MainMenu.nib/classes.nib: Step 1 to adding it "properly" 2005-11-02 Kyle Wheeler * test.simple: \ints tests * calculator.c: correct \ints output for small numbers (I am still a moron) * calculator.c: correct \ints output for big numbers (I am a moron) * variables.c: fix logic errors introduced by the openbsd strncmp fixes: now variables where one is a prefix of the other will not be confused * test.errors, test.recursion, test.simple, test.vars: comments that say what you should expect * calculator.c: small optimization and remove a debug printout * calculator.c: fix possible double-free plus some casting warnings * simpleCalc.c: warning removal through casting * English.lproj/InfoPlist.strings, Info.plist, Makefile.in, NEWS, README.txt, Wcalc.pmproj, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, configure, configure.in, wcalc.info, wcalc.spec: post-version 2.1-release commit * ChangeLog: cvs2cl * Makefile.in: changed with Makefile.am * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib: little tweak - added a symbol * Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj: many compilation fixes and organizational improvements * wcalc.info: fink needs to get its act together wrt gmp and mpfr * wcalc.1: gamma is more accurate * scanner.l: make utf-8 savvy (mostly) * parser.y: remove sarcasm * definitions.h: added Phi0 (magnetic flux quantum) and made gamma more accurate * WcalcController.m: comply with ObjC charset restrictions, and add a symbol * ConversionList.m: comply with ObjC charset restrictions 2005-10-27 Kyle Wheeler * test.recursion, test.vars: more tests * calculator.h, files.c, main.c, parser.y, scanner.l: added verbose command * variables.c: removed debugging printouts * calculator.c: dprintf cleanup * variables.c: bug in storing variables when theres only one variable fixed * files.c: removed a length limitation * calculator.c: cleanup and removed a nondynamic string (aka possible overflow) * parser.y, scanner.l: the \base command * aclocal.m4: downgraded for OSX 2005-10-26 Kyle Wheeler * wcalc.1: updates and corrections * parser.y: minor readability tweaks * Makefile.in: automake regen * main.c: typo * main.c: more useful command-line options * calculator.h: pedantic compatability * acinclude.m4: remove extra printout in readline detection * Makefile.am: parser.h is sometimes missed in the cleaning phase 2005-10-02 Kyle Wheeler * wcalc.1: Fixed irand/fact bug - noticed by Daniele Sempione 2005-09-11 Kyle Wheeler * Makefile.am, Makefile.in: more automake distclean cleanup * Makefile.am: shouldnt use maintainer-clean for this purpose * Makefile.in: removing CVS directories * Makefile.am: now removes CVS files when I do a "make maintainer-clean" * Makefile.am, Makefile.in, aclocal.m4, configure: newer auto* tools, and now it gets rid of the lex/yacc stuff 2005-08-30 Kyle Wheeler * calculator.c, historyManager.c, main.c, test.vars, variables.c, variables.h: some more memory leaks, all small, most irrelevant * calculator.c: fix longstanding memory leak. lets hope its a cross-platform solution * calculator.c: memory leak * ChangeLog: cvs2cl * Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, number_formatting.c: compile warnings * test.simple: 100! * number_formatting.c, number_formatting.h: less namespace pollution * Makefile.am, Makefile.in, calculator.c, number_formatting.c, number_formatting.h: fixed a crasher in large number output -- better organized the number formatting stuff 2005-08-29 Kyle Wheeler * calculator.c: allow for the display of REALLY long numbers * calculator.c, files.c, main.c, parser.y, scanner.l, variables.c: OpenBSD portability fixes * NEWS: old fix 2005-08-28 Kyle Wheeler * ChangeLog: cvs2cl * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, VariableList.m, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, main.c, parser.y, variables.c: variable corrections * calculator.c: comment spelling correction * COPYING.txt, COPYRIGHT, NEWS, ReadMe.rtf, Wcalc.pmproj, Wcalc.pmsp, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, test.simple: hopefully, last commit of version 2.0 * Info.plist: correct version * calculator.c: that was stupid - I should have seen that before * parser.y: Corrected a little precedence stuff in the parser. Managed to reduce conflicts too! :) * Wcalc.pbproj: Death to old things * ChangeLog: cvs2cl * English.lproj/InfoPlist.strings, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj: new version * Info.plist: version strings from the old Wcalc .plist * Info.plist: Yes, THIS software * parser.y, scanner.l, variables.c: whitespace * main.c: initialization and whitespace * calculator.c: initialization cannot be here * WcalcController.m: Fixed a few crashes, fixed a toggle/toggle weirdness, and made the AnswerField automatically expand. * WcalcController.h: minor cleanup plus the #import thing * AboutBoxController.h, AboutBoxController.m, ConversionList.h, ConversionList.m, ErrorController.h, ErrorController.m, HistoryList.h, HistoryList.m, MyTextField.h, MyTextField.m, VariableList.h, VariableList.m, main.m, theDelegate.h, theDelegate.m: #import is deprecated now * wcalc.info, wcalc.spec: new version * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj: The usual stuff (preparing for a new release) 2005-08-27 Kyle Wheeler * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj: Fixed the main window's scaling behavior. Since I moved to a text-format nib, CVS shouldn't be screwing it up again. * ConversionList.m: silly semicolon * ConversionList.m, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, conversion.c, conversion.h, help.c, parser.y, scanner.l, test.errors, test.simple: Compiles and works! * ConversionList.m, English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib, Info.plist, VariableList.m, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, WcalcController.m, calculator.c, main.m, parser.y: IT COMPILES AND RUNS! For those who find themselves in a similar pickle, you have to specify WHERE the Info.plist file is in the get-info dialog box of the _native target. 2005-07-28 Kyle Wheeler * calculator.c: fixed integers printing too many decimals 2005-07-21 Kyle Wheeler * calculator.c: You'd think this would be a memory leak, but it isn't for some reason * config.h.in, configure, configure.in: portability for Debian * historyManager.c, parser.y, simpleCalc.c: cleanup * scanner.l: cleanup (use yyleng instead of strlen()) * files.c, main.c: cleanup and trim an extra mpfr_t for efficiency * conversion.c: just clarify things for when I go grepping * calculator.h: some cleanup * calculator.c: some cleanup, fixed some #includes, and fixed variable substitution 2005-07-20 Kyle Wheeler * Makefile.am, Makefile.in, conversion.c, conversion.h, main.c, parser.y, scanner.l: conversions work! * calculator.c, calculator.h, definitions.h, parser.y, scanner.l: added xor and comp() 2005-07-19 Kyle Wheeler * calculator.c: output function doesn't crash anymore, and the bitshifts work properly now * configure, configure.in: version 2.0 * wcalc.1: it had gotten stagnant * scanner.l: typo * main.c: add a few more configuration options * help.c: be more helpful * calculator.c: Fixed a seg-fault in really long numbers. * WcalcController.m: Fixed the menu thingy * main.c, parser.y: fix memory leaks 2005-07-18 Kyle Wheeler * calculator.c: implemented sig_fig rounding indication (huh, ended up identical to the old one) and fixed several things that were wrong with the old implementation * scanner.l: oops, left debugging printfs in there * main.c: increase the default accuracy? why not? * help.c: most recent major thing * parser.y: removed several unnecessary doubles, added the \bits command, and fixed the \prefs display to be slightly more useful * scanner.l: fixed some sigfig problems, and several unnecessary doubles * string_manip.c: correct formatting * main.c: ~/.wcalcrc parsing was broken * main.c: use libhistory properly, and finally fix the damn readline problems * help.c: Info about the \bits command * calculator.c: Implemented binary operations, and a few other minor tweaks. Still much cruft in the second display function. 2005-07-17 Kyle Wheeler * WcalcController.m: fixed the constants menu, added all the mpfr stuff * simpleCalc.c: mpfr stuff added * definitions.h: more constants, corrected constants * variables.c, variables.h: variable_exists test (read: efficiency) * scanner.l: more constants, and no mpfr_inits() * main.c: this should get initialized automatically now * parser.y: damn mpfr_clears() * conversion.h: the correct mpfr includes * calculator.c: fixes to display and the random numbers, and also initialization * MyTextField.h, VariableList.m: mpfr stuff added 2005-06-19 Kyle Wheeler * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/keyedobjects.nib: We're ditching 10.2 support. * English.lproj/MainMenu.nib/objects.nib: BAM! 2005-06-10 Kyle Wheeler * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Wcalc.xcodeproj, Wcalc.xcodeproj/kyle.mode1, Wcalc.xcodeproj/kyle.pbxuser, Wcalc.xcodeproj/project.pbxproj, calculator.c, calculator.h, config.h.in, configure, configure.in, conversion.c, conversion.h, definitions.h, files.c, historyManager.c, historyManager.h, main.c, parser.y, scanner.l, variables.c, variables.h: Arbitrary Precision Compiles! * WcalcController.m: Fixed SourceForge bug 1218205 * variables.c: Just formatting - the mpfr_t stuff will be along in a bit * historyManager.c: Just formatting - the mpfr_t changes will be along in a moment. 2004-02-13 Kyle Wheeler * parser.y: Oops, typo. * calculator.c, calculator.h, parser.y, scanner.l: Added the exp function (exp(x) is equivalent to e^x) 2004-01-05 Kyle Wheeler * Makefile.in, Wcalc.pbproj/kyle.pbxuser, config.h.in, configure: Time for a new version * scanner.l: On machines without HUGE_VALF, strtod returns HUGE_VAL * configure.in: Have I mentioned how irritating Solaris is? * Makefile.am: This is cleaner. 2003-12-29 Kyle Wheeler * ChangeLog, English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, NEWS, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, config.h.in, configure, configure.in, definitions.h, wcalc.info: New version * simpleCalc.c: Minor clear problem fixed (clearing entry shouldn't clear the operator). Also some debugging printouts. * WcalcController.m: Fixed up preference settings disabling when SimpleCalc is enabled. * configure, configure.in: Fixed some more configure stuff * ., .cvsignore, Makefile.in, aclocal.m4, configure, configure.in: Reran autoscan, and updated for newer tools. * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib: All things updated. * MyTextField.h, MyTextField.m, WcalcController.h, WcalcController.m, simpleCalc.c, simpleCalc.h: I think that should do it for simpleCalc. I'll see about concocting some tests to run it through tomorrow, then perhaps prepare for RELEASING A NEW VERSION! WOOOHOOOO!!! Ahem. Yes. This is all true. * calculator.c: Some while loop changes, bad variable substitution fix, some abstraction (set_prettyanswer), and avoiding returning -0.0. Also a bunch of debugging printf's that will get removed by the preprocessor when not compiled for debugging. * variables.c: A thought. * scanner.l: Be slightly more flexible in number formatting. Accept numbers in the form: "5." (without the quotes) * calculator.h: Made SimpleCalc a preference, and made Dprintf not throw warnings when not debugging. 2003-12-25 Kyle Wheeler * calculator.c: A fix for variable expansion * calculator.c: Slightly more informative (and standardized) math errors. * parser.y: Minor correction * parser.y, scanner.l: Fixed a bunch of stuff. Decreased errors, got rid of some dead weight, etc. Trying to do correct error detection from strtod without warnings and it isn't working well. * calculator.h: Added Dprintf 2003-09-30 Kyle Wheeler * files.c: Ran it through 'indent' * files.c: Fixed file loading. 2003-09-01 Kyle Wheeler * calculator.c: Fixed bug * calculator.c: Code cleanup, started the parenthesis hack.... not done yet. 2003-08-25 Kyle Wheeler * calculator.c, parser.y: Fixed error stickyness. 2003-08-22 Kyle Wheeler * main.c: Fixed piped input with active variables * calculator.c: Cleaned up find_recursion per Ingo van Lil's suggestion. 2003-08-21 Kyle Wheeler * wcalc.info: added the wcalc.rc to the doc files * NEWS, ReadMe.rtf, Wcalc.pmsp, configure, configure.in, wcalc.info, wcalc.rc, wcalc.spec: New version. * English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, WcalcController.h, WcalcController.m, config.h.in, configure, definitions.h: Put the printInts preference into the GUI, updated some things for the new version. * parser.y: Fixed extraneous output when there's errors. * parser.y: More good error messages. * parser.y: More sensible error messages when you try to assign new values to constants. * calculator.c: Took the extra variable parsing out of recursion checking. * calculator.c: Fixed a crasher on Linux (Ingo van Lil). 2003-08-20 Kyle Wheeler * wcalc.info: Silly hard-wrapping. * wcalc.info: Updated for new version. * COPYRIGHT, Wcalc.pbproj/kyle.pbxuser, Wcalc.pmsp, wcalc.info: New version stuff * config.h.in, parser.y: Compiling fixes. 2003-08-19 Kyle Wheeler * ChangeLog, English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, NEWS, ReadMe.rtf, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, WcalcController.m, configure, configure.in, wcalc.info, wcalc.spec: New version. * help.c: Updating for new version. * wcalc.1: Fixed lots of stuff * definitions.h: Documentation * parser.y: Small bit of labelling. * calculator.c: Fixed command/variable conflicts. * calculator.c: Fixed a memory leak in the recursion detection. * calculator.c: Fixed a repeatable crash on linux (flex is weird). Fixed the recursion detection. * main.c: Missing a semicolon. 2003-08-18 Kyle Wheeler * main.c: Small, one-time, memory leak, before the main loop gets going. 2003-08-09 Kyle Wheeler * wcalc.info: Wcalc is not part of fink. This is the current .info file for creating the .deb file. * calculator.c, calculator.h, parser.y, scanner.l: Added irandom, rand(), and irand(). rand(x) is a number between 0 and x. irand(x) is an integer between 0 and x. irandom is a random integer. * files.c, historyManager.c: Fixed some signed/unsigned comparison warnings. 2003-07-12 Kyle Wheeler * calculator.c, calculator.h, parser.y, scanner.l: Added bitwise operators & and | and ~ 2003-04-19 Kyle Wheeler * calculator.c, parser.y: Fixed the flatten problems. Removed some compile warnings on Solaris. 2003-04-01 Kyle Wheeler * main.c: Forgot to add the integer pref to the config file. (CLI) * WcalcController.m, calculator.c, calculator.h, main.c, parser.y, scanner.l: Made it so you can turn on and off the "always print integers" thing. (CLI) 2003-03-25 Kyle Wheeler * calculator.c, main.c, scanner.l: Fixed some Solaris warnings. 2003-03-24 Kyle Wheeler * English.lproj/MainMenu.nib/objects.nib, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, WcalcController.m, configure: Version problem fixed. Added cot to the menus. Corrected the log2 thing. 2003-03-23 Kyle Wheeler * help.h, historyManager.c, historyManager.h: Linux compiling fixes. * ChangeLog, Makefile.am, Makefile.in, NEWS, ReadMe.rtf, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, Wcalc.pmsp, acinclude.m4, aclocal.m4, calculator.c, config.h.in, configure, configure.in, definitions.h, wcalc.1, wcalc.spec: Updated everything for the new version (1.6) * historyManager.c, main.c, parser.y: Fixing silly compile errors. * Wcalc.pbproj/kyle.pbxuser, help.c, scanner.l: Updated the scanner to be more flexible with opening and saving filenames, and changed the help text to reflect the new commands. * files.c: Made it save variables in save-files as well as expressions. The variables are saved first, so they'll always be available (because I don't want to have to remember exactly at which point they were saved). 2003-03-22 Kyle Wheeler * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/objects.nib, Makefile.am, Makefile.in, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, WcalcController.h, WcalcController.m, calculator.c, files.c, files.h, main.c, parser.y, scanner.l: Got file support working. Saves and loads history. As it loads, it evaluates, so variables stored that way are saved as well. Handles comments appropriately (read: ignores them) when loading. * HistoryList.m, historyManager.c, historyManager.h: Discovered that history_length conflicts with readline. Fixed. * WcalcController.h, WcalcController.m: Added an open, save, and saveAs command that do predictable things. For the moment, only open really does anything. save and saveAs display dialogs, but don't do anything with the selection (yet). also added a displayErrno function for reporting file-related errors. * calculator.c: Fixed the flatten detection. * parser.y: Fixed the history limit display (CLI) * string_manip.c, string_manip.h: Added a function to remove comments from strings. * ErrorController.m: Errors should beep. 2003-03-21 Kyle Wheeler * WcalcController.m: Patch for decimal key from Thomas Steinhausen 2003-03-19 Kyle Wheeler * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Wcalc.pbproj/kyle.pbxuser: A few nib fixes - the drawer is now reconnected to the main window, things like that. * calculator.c: Added recursion detection. * WcalcController.h, WcalcController.m: Removed some strict_syntax stuff. Fixed printout of the history limit. A few miscellaneous changes. 2003-02-28 Kyle Wheeler * ., .cvsignore: Always more stuff to ignore. * scanner.l: Improved precision specification. Added a rounding indication command. * parser.y: Added a rounding indication command. * main.c: Made readline pay attention to the history limit preference. * help.c: Updated the help screen. * definitions.h: Added a newline to the help screen. * calculator.c: Fixed the arc- trig functions in degree mode. Added a command-line rounding indicator. 2003-02-24 Kyle Wheeler * calculator.h, main.c, parser.y, scanner.l, wcalc.rc: Removed the strict_syntax preference (it doesn't do anything anymore). * calculator.c: Fixed integer output to respect the engineering printout preference. Made it use the builtin prefixes for octal and hex. * calculator.c: I'm an idiot. Simplified the integer-printing stuff. * main.c, wcalc.rc: Added support for persistent preferences (~/.wcalcrc) * calculator.c: If it's just an integer, print the whole thing. (fix the prefs stuff) 2003-02-21 Kyle Wheeler * Makefile.in, Wcalc.pbproj/kyle.pbxuser, aclocal.m4, calculator.c, calculator.h, config.h.in, configure, configure.in, main.c, parser.y, scanner.l, variables.c: Added support for a ~/.wcalcrc. Changed some error-message wording here and there. Miscellaneous fixes. * definitions.h: Added cot acot coth acoth and reformatted a little. 2003-02-20 Kyle Wheeler * ChangeLog, NEWS: Keeping things up to date. 2003-02-19 Kyle Wheeler * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, WcalcController.m: Finally fixed the bizarre window behavior. Replaced it with some bizarre window behavior behind the scenes (see WcalcController.m), but I can hide that from the user. * calculator.c, calculator.h: Added output_string... just for convenience. * parser.y, scanner.l: Added some display functions. * definitions.h: Updated the list of supported symbols. * main.c: Moved the help functions. * Makefile.am, Makefile.in, help.c, help.h: Moved help to be generic. 2003-02-06 Kyle Wheeler * English.lproj/MainMenu.nib/objects.nib, ReadMe.rtf, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, Wcalc.pmsp, definitions.h, main.c, wcalc.spec: Tiny version update. * main.c: Fixed the ^D bug when it's compiled without readline support. * ChangeLog, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, calculator.c, calculator.h, conversion.c, definitions.h, historyManager.c, string_manip.c, variables.c: Got the GUI to build properly. 2003-01-29 Kyle Wheeler * wcalc.spec: Uses more standard rpm macros for cross-distro goodness. 2003-01-28 Kyle Wheeler * Wcalc.pmsp: New version. * ReadMe.rtf: New version. * config.h.in, configure: Removed the AC_FUNC_REALLOC thing. * calculator.c, main.c, parser.y, scanner.l: Moved \dsep and \tsep into the parser/scanner and fixed some configuration issues. * variables.c: Fixed some casting warnings when compiling on Linux. 2003-01-27 Kyle Wheeler * ., .cvsignore: A few more things to ignore. * ., .cvsignore, wcalc.spec: Pulling together a clean release. * configure.in: Not very portable. * Makefile.am, Makefile.in, acinclude.m4, aclocal.m4: Added the man page to automake. * configure: More autoconf/automake * AUTHORS, COPYING, ChangeLog, INSTALL, README, acinclude.m4, aclocal.m4, depcomp, install-sh, missing, mkinstalldirs: More pieces of autoconf/automake compatability. * website: Doesn't need to be CVS'd anymore - it's on sourceforge. * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Makefile, Makefile.am, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, calculator.c, calculator.h, config.h.in, configure.in, conversion.c, definitions.h, historyManager.c, main.c, parser.y, scanner.l, string_manip.c, variables.c, variables.h: Modified it for automake/autoconf 2003-01-25 Kyle Wheeler * ChangeLog, NEWS: Moved ChangeLog to NEWS (since I discovered the ChangeLog format is very strict) 2003-01-23 Kyle Wheeler * WcalcController.m, historyManager.c: Finished (I think) history length limiting. * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Wcalc.pbproj/kyle.pbxuser, WcalcController.h, WcalcController.m, calculator.c, calculator.h, scanner.l: Fixed (I think) the internationalization stuff. Also began work on limiting the history length. 2003-01-17 Kyle Wheeler * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, historyManager.h: Fixed a copyright notice. Added clear buttons to the interface. Updated the project file for use with newer versions of Project Builder. * HistoryList.h, HistoryList.m, VariableList.h, VariableList.m, historyManager.c, historyManager.h: Added clearing functions for the History and the list of variables. 2003-01-16 Kyle Wheeler * WcalcController.m, calculator.c, calculator.h, main.c, scanner.l: Attempted fix to thousands/decimal separator handling. Also got rid of some sticky error messages (one error caused another error later). * conversion.c: Fixed compiling problems. * conversion.c: Alphabetized the listings. 2002-12-18 Kyle Wheeler * calculator.c, calculator.h, parser.y, scanner.l: Added the log2 command. (Should it be logtwo?) 2002-11-12 Kyle Wheeler * Makefile: Added a prefix for installing. * Makefile, calculator.c, main.c, string_manip.c: Fixes to get it to compile on Solaris. 2002-11-01 Kyle Wheeler * parser.y: Fixed a crasher in error reporting. 2002-10-21 Kyle Wheeler * website/contact.html, website/download.html, website/screenshots.html, website/wcalc.html: Just general updates 2002-10-20 Kyle Wheeler * Makefile, parser.y, wcalc.spec: New version, small bugfix. * ReadMe.rtf: New version * Makefile, Wcalc.pmsp: New version. * main.c: Fixed the defaults for the precision guard. * ChangeLog, definitions.h: New version * WcalcController.m, calculator.c, calculator.h: Implemented toggling precision control * main.c: Documented \conservative * parser.y, scanner.l: Added the \conservative command, to toggle conservative precision * main.c: Documented \list 2002-10-03 Kyle Wheeler * parser.y, scanner.l: Lists variables in command-line mode. 2002-09-09 Kyle Wheeler * scanner.l: Another way to tell it "hex" 2002-08-30 Kyle Wheeler * Makefile: Alternate compiling for redhat 2002-08-12 Kyle Wheeler * website/contact.html, website/download.html, website/index.html, website/screenshots.html, website/wcalc.html: New version * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Wcalc.pbproj/kyle.pbxuser: *** empty log message *** * ChangeLog, Makefile, MyTextField.m, ReadMe.rtf, Wcalc.pmsp, main.c, wcalc.1: Distribution * Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, website, website/.cvsignore, website/wcalc.html: *** empty log message *** * ReadMe.rtf, Wcalc.pmsp: Synching before release * English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, definitions.h: Changed the version numbers 2002-08-11 Kyle Wheeler * MyTextField.m: Removed debugging printouts. * ConversionList.h, ConversionList.m, WcalcController.h, WcalcController.m: Conversion functions are available in the GUI. * conversion.c, conversion.h: Conversion functions now work. * calculator.c: uber_converstion belongs in conversion.c 2002-08-02 Kyle Wheeler * calculator.c, calculator.h, conversion.c, conversion.h, scanner.l: Getting a start on the conversions stuff. 2002-07-31 Kyle Wheeler * string_manip.h: Stupid gcc and it's end of line at end of file nonsense. * scanner.l: Added shell-style comment support. * parser.y, scanner.l: Added expression/string support. * calculator.c: Fixed variable reassignment. Fixed exessive printouts in command-line mode. Added expression support (command-line mode). * calculator.c: Fixed a possible infinite loop. * scanner.l: Added support for comments. * main.c: Made the default to print prefixes (0x, etc) Added the standard -h argument support. Changed to match variables.c changes. * MyTextField.m: Removed spacebar actions (now it's normal again). Removed errors from arrow keys. * VariableList.m: Handles expressions now. * string_manip.c, string_manip.h: Added justnumbers. * scanner.l: Changed the precision syntax a bit. Added bitshifts. * parser.y: Added bitshifts. Updated for changes in variables.c. * variables.h: Added expressions to the variable struct. Added the answer struct. Synched the function definitions with variables.c * variables.c: Added the _full functions for pulling out expressions too. Made the getvar functions return answer structs, to provide more information (expressions, errors, etc.) Made getvar_core exit early for zero-length keys. Added a putexp function for inserting expressions. Renamed putvar to putval (for consistency) * calculator.c: Added the flatten function to pre-parse variables (and handle "active" variables recursively). Fixed the bitshift functions. 2002-07-30 Kyle Wheeler * calculator.c, calculator.h: Added left and right bitshifts. 2002-05-21 Kyle Wheeler * WcalcController.h, WcalcController.m: Handles '=' and 'clear' at input-time now (sorta). (also a small change getting ready for dynamic variables... probably breaks it - will commit more later that fix it again) * MyTextField.h, MyTextField.m: Handles '=' and 'clear' at input-time now (sorta). 2002-05-16 Kyle Wheeler * website/download.html: Removed old versions (to save web space). 2002-04-12 Kyle Wheeler * website/contact.html, website/download.html, website/index.html, website/screenshots.html, website/wcalc.html: Version 1.4.5 * wcalc.spec: Updated the version * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj: *** empty log message *** * WcalcController.m, calculator.h, main.c, variables.c: Setup reverse-lookup table for characters (we'll need it when we print errors/numbers back out) * scanner.l: Using reverse-lookup table for error formatting. * calculator.c: Took out debugging printfs * WcalcController.h: Organized the code a bit. * WcalcController.m: No use_commas pref! * scanner.l: Scanner error hides internationalization futzing. * calculator.c: Stripped out the bogus internationalizing loop. * calculator.h, parser.y: No comma-command! * scanner.l: Back to American-only (may be some cruft left in there... I'll get it later) * main.c: Specify separators on the fly in cmd-line. * WcalcController.m, calculator.c, calculator.h, variables.c: Initial preprocessor support! 2002-04-10 Kyle Wheeler * WcalcController.h, WcalcController.m, calculator.h, main.c, parser.y, scanner.l: Added a preference to optionally forget expressions that produce errors and don't return values. 2002-04-09 Kyle Wheeler * WcalcController.m, theDelegate.m: Minor code cleanups 2002-03-28 Kyle Wheeler * WcalcController.m: Now saves the base drawer state, too. * WcalcController.m: Now saves the history/variable state. 2002-03-08 Kyle Wheeler * main.c: Uses new configuration structure. * ChangeLog: Logging changes * WcalcController.m, calculator.c, calculator.h, parser.y, scanner.l: Added cube root (cbrt) 2002-03-07 Kyle Wheeler * scanner.l: Added square function and fixed it up with the new configuration stuff. Counting digits for sig-fig rounding indication. * parser.y: Added square function and fixed it up with the new configuration stuff. * WcalcController.m, calculator.c, calculator.h: Implemented the Rounding indications (Simple and Significant Figure) * string_manip.c, string_manip.h: Added count_digits function. * WcalcController.h, WcalcController.m, calculator.c, calculator.h: Redid preferences as a struct to make it easier to maintain. * WcalcController.m, calculator.c, calculator.h: Visual indication of rounding. (next: sig figs) 2002-03-06 Kyle Wheeler * scanner.l: Added Fortran-style exponent operator. 2002-03-05 Kyle Wheeler * English.lproj, English.lproj/.cvsignore, English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib: *** empty log message *** * English.lproj/InfoPlist.strings: version increment * Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj: *** empty log message *** * website/w.png: The Logo * ChangeLog: Updated changes per CVS log * definitions.h: Incremented the version. * WcalcController.h, WcalcController.m: Added a base drawer. 2002-03-03 Kyle Wheeler * Wcalc.pbproj/kyle.pbxuser, website/wcalc.html: *** empty log message *** * ReadMe.rtf, Wcalc.pmsp: Released a pre-release 2002-03-02 Kyle Wheeler * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj: stuff * Makefile: Switched to yacc and flex. Added the new string manipulation files. * website/wcalc.html: Posted notice of the mailing list I just made * WcalcController.h: Removed a pointless pointer (heh). * WcalcController.m: Fixed the live preference display. Fixed the menu's response the the drawer state. Made the preference panel modeless. * scanner.l: Implemented the strict_syntax preference. * parser.y: *** empty log message *** * parser.y: Removed no-longer reserved variables. * scanner.l: Stripped the wrong char from numbers with commas. * parser.y: Fixed errors on essentially blank lines. * WcalcController.h, WcalcController.m: Changes the period button to a comma button depending on the state. Displays the current comma preference, too. * scanner.l: Moved commands from main.c. Added some acceptable, equivalent symbols. Fixed (I think) comma support. Added a garbage collector for goofily-formatted numbers. * parser.y: Added smarts for piped files. Moved commands here from main.c. * WcalcController.h, calculator.c, calculator.h: Added a preference for comma parsing pickiness. * WcalcController.m: Added a preference for comma parsing pickiness. Fixed a continuous expression bug (new division symbol). * main.c: Moved commands to the parser (so they'll work with piped files). * PrefsController.h, PrefsController.m: long since outdated 2002-03-01 Kyle Wheeler * calculator.h, main.c, parser.y, scanner.l, string_manip.c, string_manip.h: Continued fixing international comma support. Started migrating commands from main.c to the parser/scanner. * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, ReadMe.rtf, Wcalc.pbproj/kyle.pbxuser: stuff * main.c: More CLI error printing (were previously ignoring errorstring. * scanner.l: Added sanity/error checking to alternate bases, started complete support for commas/periods in decimal numbers * parser.y: Fixed potential crasher freeing static memory. 2002-02-28 Kyle Wheeler * PrefsController.m: Display use_commas preference. * calculator.c: fixed crasher in comma-output printing * ChangeLog: logging changes * calculator.c: Fixed binary output. * WcalcController.m, calculator.c, calculator.h, main.c, parser.y, scanner.l: Added sqrt, ceil, floor functions * main.c: Added an interactive CLI "strict variable parsing" toggle. 2002-02-27 Kyle Wheeler * scanner.l: Fixed the comma parsing. * WcalcController.m: Made preference panel and keyboard panel placement more commonsensical. * ChangeLog, English.lproj/InfoPlist.strings, ReadMe.rtf, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, Wcalc.pmsp, WcalcController.m, calculator.c, definitions.h, parser.y, website/contact.html, website/download.html, website/screenshots.html, website/wcalc.html: Excessive error reporting fixed (good god) * calculator.c: clamped too hard! fixed erroneous clamp messages * ., .cvsignore, Wcalc.pmsp: New stuff to ignore, new version * website/contact.html, website/download.html, website/screenshots.html, website/wcalc.html: Updating the website for the new version * wcalc.spec: Version increase * main.c: fixed a typo * ReadMe.rtf: Just describing the new version (1.4.3) 2002-02-26 Kyle Wheeler * Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj: stuff * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib: Changed the preferences layout, added comma option * English.lproj/InfoPlist.strings: Version changes * definitions.h: Version increment * ChangeLog: logging changes * main.c: Update the help * Makefile: made it easier to manage debugging and distribution * WcalcController.h, WcalcController.m, calculator.c, calculator.h, main.c: Added the preference to output with a comma instead of a period. * calculator.c, main.c, parser.y: Fixed a rounding error (all negative decimals were removed!). (BOTH) Added error reporting to the command-line. (CLI) Added a radians toggle (CLI) * ChangeLog: logging changes 2002-02-25 Kyle Wheeler * website, website/contact.html, website/download.html, website/screenshots.html, website/wcalc.html: These belong here 2002-02-24 Kyle Wheeler * Wcalc.pmsp: Goes with the project * English.lproj, English.lproj/.cvsignore, English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Makefile, Wcalc.pbproj/kyle.pbxuser, WcalcController.h, WcalcController.m, historyManager.c, historyManager.h: Fixed a bug or two, made small speed improvements on preference changes. Made history redisplay configurable. * scanner.l: Fixed the parsing (0.9 is now 0.9 and not octal 0 times .9) * ChangeLog: added a dividing line * calculator.c: to make gcc on linux be quiet, i added a newline at the end of the file * wcalc.spec: version increase * Makefile: strips automatically now * English.lproj/InfoPlist.strings, Wcalc.pbproj/project.pbxproj: stuff * ., .cvsignore, README.txt, ReadMe.rtf: getting ready for release of 1.4.2, and tidying up * definitions.h: version change 2002-02-23 Kyle Wheeler * .gdb_history, definitions.h, theDelegate.h, theDelegate.m: Rectifying the repository * Wred.png: Stuff that got left out along the way. * WcalcController.m: Fixed the editing-after-pressing-a-button error (I'm an idiot) (GUI) Fixed the window-position saving routines (GUI) The problem with window sizing has gotten WORSE (OSX's fault?) (GUI) * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj: stuff * wcalc.spec: Version changes * scanner.l: Accepts commas as period replacements * WcalcController.h: Merged the pref panel to be controlled more centrally (splitting it was just a pain in the butt) * ChangeLog: Logging changes * Makefile: Figured out this static thing (I think) * English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj: stuff * English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib/classes.nib, Wcalc.pbproj/project.pbxproj: stuff * Makefile, PrefsController.h, PrefsController.m, WcalcController.h, WcalcController.m, calculator.c, calculator.h, historyManager.c, main.c, parser.y, scanner.l, wcalc.spec: Added output commands to the GUI too (GUI) Fixed debug output in the CLI (CLI) Tried to compile statically (BOTH) Supports real division symbol (BOTH) Random is now truly random, if the system supports it - relies on /dev/random (BOTH) * ChangeLog: Logging changes * English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj: stuff * HistoryList.m, PrefsController.h, PrefsController.m, VariableList.m, WcalcController.m, calculator.c, calculator.h, historyManager.c, historyManager.h, main.c, parser.y, scanner.l: Saves the history (max of 1000 lines - should this be configurable?) (CLI) New commands in the CLI - (most) old ones will disappear next version (CLI) Supports hex (0x), octal (0), and binary (0b) input and output (BOTH) Cleared out some pointless error messages (CLI) Improved factorials (BOTH) Miscellaneous Bugfixes (BOTH) Tried to fix a window drifting problem (GUI) Added a "Result" column to the history (GUI) * wcalc.spec: Version change * ChangeLog: Logging changes * .DS_Store: Doesn't belong in repository * English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj: stuff * WcalcController.h, WcalcController.m, calculator.c, calculator.h, main.m, parser.y, scanner.l, wcalc.spec: More improvements to the parser (BOTH) Added LOTS of constants (BOTH) Added menus for functions and symbols (GUI) Added absolute value abs() (BOTH) Added a bunch of physical constants to the symbols (BOTH) Saves toggled status (GUI) Added the ability to toggle the presence of the keypad (GUI) * ChangeLog: Logging changes * Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj: stuff * English.lproj/InfoPlist.strings, wcalc.spec: Version change * WcalcController.h, WcalcController.m, calculator.c, calculator.h, main.c: Began work on continuous calculations * parser.y: Fixed the grammar again (or tried to) * ChangeLog: Logging changes * AboutBoxController.h, AboutBoxController.m, English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib: Added the version number to the about box * English.lproj/InfoPlist.strings: Version numbers * calculator.h, parser.y: Fixed a typo in the grammar * variables.c: Added newline at the end of the file to make gcc on linux shut up * variables.h, wcalc.spec: Added newlines at the end of the file to make gcc on linux shut up * main.c: Version change * ChangeLog: Logging changes * Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj: Dunno * English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib: GUI changes * English.lproj/InfoPlist.strings: Version number change * HistoryList.m, PrefsController.h, PrefsController.m, WcalcController.h, WcalcController.m, calculator.c, calculator.h, historyManager.c, main.c, main.m, parser.y, scanner.l, variables.c, variables.h, wcalc.spec: Fixed the grammar (or broke it) (BOTH) Added checks to catch values with too much precision (BOTH) Precision slider won't go too far anymore (GUI) Remembers the window position (GUI) Quits when the window is closed (GUI) Saves Preferences! (GUI) Expanded the vocabulary (asin,arcsin,sin^-1) (BOTH) Added a preference to toggle using Radians (GUI) Made the history font smaller (GUI) Fixed a crasher in the history list. (GUI) Can now do floating point mods (BOTH) "random" means a random value (BOTH) added round() to round a value to the nearest whole number (BOTH) * ChangeLog: Logging changes * .DS_Store, .gdb_history, AboutBoxController.h, AboutBoxController.m, ChangeLog, English.lproj, English.lproj/InfoPlist.strings, English.lproj/MainMenu.nib, English.lproj/MainMenu.nib/classes.nib, English.lproj/MainMenu.nib/info.nib, English.lproj/MainMenu.nib/objects.nib, ErrorController.h, ErrorController.m, HistoryList.h, HistoryList.m, Makefile, OldVariableList.h, OldVariableList.m, PrefsController.h, PrefsController.m, README.txt, TheW.icns, VariableList.h, VariableList.m, Wcalc.pbproj, Wcalc.pbproj/kyle.pbxuser, Wcalc.pbproj/project.pbxproj, WcalcController.h, WcalcController.m, calculator.c, calculator.h, historyManager.c, historyManager.h, main.c, main.m, parser.y, scanner.l, variables.c, variables.h, w.png, wcalc.1, wcalc.spec: This commit was generated by cvs2svn to compensate for changes in r2, which included commits to RCS files with non-trunk default branches. 2002-02-23 * .: New repository initialized by cvs2svn. wcalc-2.5/Makefile.in0000664000175000017500000006555012451433376011464 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' 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 = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) AUTHORS COPYING \ ChangeLog INSTALL NEWS README config/compile depcomp \ config/depcomp install-sh config/install-sh missing \ config/missing mkinstalldirs config/ylwrap \ $(top_srcdir)/config/compile $(top_srcdir)/config/install-sh \ $(top_srcdir)/config/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/readline.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/common/includes/config.h 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; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_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 \ cscope distdir dist dist-all distcheck 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 CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 GZIP_ENV = --best DIST_TARGETS = dist-bzip2 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@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GMP_CPPFLAGS = @GMP_CPPFLAGS@ GMP_LDFLAGS = @GMP_LDFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPFR_CPPFLAGS = @MPFR_CPPFLAGS@ MPFR_LDFLAGS = @MPFR_LDFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = English.lproj src test ACLOCAL_AMFLAGS = -I config EXTRA_DIST = Wcalc.xcodeproj/kyle.mode1 Wcalc.xcodeproj/kyle.pbxuser \ Wcalc.xcodeproj/project.pbxproj Info.plist graphics/TheW.icns \ graphics/w.png graphics/Wred.png wcalc.info wcalc.rc \ wcalc.spec COPYRIGHT $(man_MANS) man_MANS = wcalc.1 all: all-recursive .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 .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) # 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" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist 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 -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__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 shar distribution archives 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 distribution archives compressed with" \ "legacy program 'compress' 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)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure \ $(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-recursive all-am: Makefile $(MANS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(man1dir)"; 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 clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -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-man1 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -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-man1 .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-local cscope cscopelist-am ctags ctags-am dist dist-all \ dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs 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-man1 clean-local: $(RM) parser.h parser.c scanner.c # 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: wcalc-2.5/configure0000774000175000017500000063215712451433375011327 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for wcalc 2.5. # # 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: kyle-wcalc@memoryhole.net about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_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='wcalc' PACKAGE_TARNAME='wcalc' PACKAGE_VERSION='2.5' PACKAGE_STRING='wcalc 2.5' PACKAGE_BUGREPORT='kyle-wcalc@memoryhole.net' PACKAGE_URL='' ac_unique_file="src/cli/main.c" # 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 MPFR_LDFLAGS MPFR_CPPFLAGS GMP_LDFLAGS GMP_CPPFLAGS EGREP GREP CPP LEXLIB LEX_OUTPUT_ROOT LEX YFLAGS YACC RANLIB am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_rpath enable_picky enable_dependency_tracking with_readline with_gmp with_mpfr ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS YACC YFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe 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 wcalc 2.5 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/wcalc] --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 wcalc 2.5:";; 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-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-rpath Add -rpath arguments to LDFLAGS --enable-picky turns on extra compiler warnings (for developers) --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --without-readline do not try to find and use the readline library --with-gmp=[PATH] specify the path to the gmp library --with-mpfr=[PATH] specify the path to the mpfr library Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory YACC The `Yet Another Compiler Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _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 wcalc configure 2.5 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 kyle-wcalc@memoryhole.net ## ## ---------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _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_decl # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type 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 wcalc $as_me 2.5, 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 config "$srcdir"/config; 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 config \"$srcdir\"/config" "$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. # Automake's silent rules were implemented in the same version that # color-tests was implemented, so we can use one to detect the other. # This nasty, dirty, unreliable trick is strongly discouraged by its author: # http://blog.flameeyes.eu/trackbacks?article_id=5155 am__api_version='1.14' # 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"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --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}" != 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 # 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='wcalc' VERSION='2.5' # 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. 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 -' # 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 # If Automake supports silent rules, enable them # 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=0;; 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='\' # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; fi # Check whether --enable-picky was given. if test "${enable_picky+set}" = set; then : enableval=$enable_picky; fi if test "x$enable_picky" = x; then : if test -d "${srcdir}/.svn"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: --> developer override: enable picky compiler by default <--" >&5 $as_echo "$as_me: --> developer override: enable picky compiler by default <--" >&6;} enable_picky=yes fi fi # Checks for programs. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" 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_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if 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 for ac_prog in 'bison -y' byacc 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_YACC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # 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_YACC="$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 YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 $as_echo "$YACC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" for ac_prog in flex lex 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_LEX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # 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_LEX="$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 LEX=$ac_cv_prog_LEX if test -n "$LEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 $as_echo "$LEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test "x$LEX" != "x:"; then cat >conftest.l <<_ACEOF %% a { ECHO; } b { REJECT; } c { yymore (); } d { yyless (1); } e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ yyless ((input () != 0)); } f { unput (yytext[0]); } . { BEGIN INITIAL; } %% #ifdef YYTEXT_POINTER extern char *yytext; #endif int main (void) { return ! yylex () + ! yywrap (); } _ACEOF { { ac_try="$LEX conftest.l" 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 "$LEX conftest.l") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 $as_echo_n "checking lex output file root... " >&6; } if ${ac_cv_prog_lex_root+:} false; then : $as_echo_n "(cached) " >&6 else if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 $as_echo "$ac_cv_prog_lex_root" >&6; } LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root if test -z "${LEXLIB+set}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 $as_echo_n "checking lex library... " >&6; } if ${ac_cv_lib_lex+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LIBS=$LIBS ac_cv_lib_lex='none needed' for ac_lib in '' -lfl -ll; do LIBS="$ac_lib $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lex=$ac_lib fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_lib_lex" != 'none needed' && break done LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 $as_echo "$ac_cv_lib_lex" >&6; } test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 $as_echo_n "checking whether yytext is a pointer... " >&6; } if ${ac_cv_prog_lex_yytext_pointer+:} false; then : $as_echo_n "(cached) " >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no ac_save_LIBS=$LIBS LIBS="$LEXLIB $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define YYTEXT_POINTER 1 `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_prog_lex_yytext_pointer=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 $as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then $as_echo "#define YYTEXT_POINTER 1" >>confdefs.h fi rm -f conftest.l $LEX_OUTPUT_ROOT.c fi if test "$LEX" = :; then LEX=${am_missing_run}flex fi if test "x$LEX" == x; then : as_fn_error $? "A Lex/Flex program is required in order to compile wcalc." "$LINENO" 5 else if test "x$LEX" != xflex; then : LEX="$SHELL $missing_dir/missing flex" LEX_OUTPUT_ROOT=lex.yy LEXLIB='' 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 if test "x$enable_picky" = xyes; then : CFLAGS="$CFLAGS -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wmissing-prototypes -Wstrict-prototypes" fi CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500 -D_POSIX_C_SOURCE=200112L" { $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 for ac_header in limits.h do : ac_fn_c_check_header_mongrel "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" if test "x$ac_cv_header_limits_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIMITS_H 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "PATH_MAX" "ac_cv_have_decl_PATH_MAX" "#ifdef HAVE_LIMITS_H #include #endif " if test "x$ac_cv_have_decl_PATH_MAX" = xyes; then : $as_echo "#define HAVE_PATH_MAX 1" >>confdefs.h fi # Checks for libraries. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acos in -lm" >&5 $as_echo_n "checking for acos in -lm... " >&6; } if ${ac_cv_lib_m_acos+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char acos (); int main () { return acos (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_acos=yes else ac_cv_lib_m_acos=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_acos" >&5 $as_echo "$ac_cv_lib_m_acos" >&6; } if test "x$ac_cv_lib_m_acos" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi # Check whether --with-readline was given. if test "${with_readline+set}" = set; then : withval=$with_readline; nc_cv_readline=$withval else nc_cv_readline=yes fi if test "x$nc_cv_readline" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a readline compatible library" >&5 $as_echo_n "checking for a readline compatible library... " >&6; } if ${vl_cv_lib_readline+:} false; then : $as_echo_n "(cached) " >&6 else ORIG_LIBS="$LIBS" for readline_lib in readline edit editline; do for termcap_lib in "" termcap curses ncurses; do if test -z "$termcap_lib"; then TRY_LIB="-l$readline_lib" else TRY_LIB="-l$readline_lib -l$termcap_lib" fi LIBS="$ORIG_LIBS $TRY_LIB" 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 rl_filename_completion_function (); int main () { return rl_filename_completion_function (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : vl_cv_lib_readline="$TRY_LIB" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -n "$vl_cv_lib_readline"; then break fi done if test -n "$vl_cv_lib_readline"; then break fi done if test -z "$vl_cv_lib_readline"; then vl_cv_lib_readline="no" LIBS="$ORIG_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vl_cv_lib_readline" >&5 $as_echo "$vl_cv_lib_readline" >&6; } if test "$vl_cv_lib_readline" != "no"; then $as_echo "#define HAVE_LIBREADLINE 1" >>confdefs.h for ac_header in readline.h readline/readline.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether readline supports history" >&5 $as_echo_n "checking whether readline supports history... " >&6; } if ${vl_cv_lib_readline_history+:} false; then : $as_echo_n "(cached) " >&6 else vl_cv_lib_readline_history="no" 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 add_history (); int main () { return add_history (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : vl_cv_lib_readline_history="yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vl_cv_lib_readline_history" >&5 $as_echo "$vl_cv_lib_readline_history" >&6; } if test "$vl_cv_lib_readline_history" = "yes"; then $as_echo "#define HAVE_READLINE_HISTORY 1" >>confdefs.h for ac_header in history.h readline/history.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi fi fi #========================================================================================== # GMP #========================================================================================== # Check whether --with-gmp was given. if test "${with_gmp+set}" = set; then : withval=$with_gmp; if test "x$enable_rpath" = xyes; then : GMP_CPPFLAGS="-I$with_gmp/include" GMP_LDFLAGS="-L$with_gmp/lib -Wl,-rpath,$with_gmp/lib" else GMP_CPPFLAGS="-I$with_gmp/include" GMP_LDFLAGS="-L$with_gmp/lib" fi fi saved_CPPFLAGS="$CPPFLAGS" saved_LDFLAGS="$LDFLAGS" CPPFLAGS="$GMP_CPPFLAGS $CPPFLAGS" LDFLAGS="$GMP_LDFLAGS $LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __gmpz_init in -lgmp" >&5 $as_echo_n "checking for __gmpz_init in -lgmp... " >&6; } if ${ac_cv_lib_gmp___gmpz_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgmp $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 __gmpz_init (); int main () { return __gmpz_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gmp___gmpz_init=yes else ac_cv_lib_gmp___gmpz_init=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_gmp___gmpz_init" >&5 $as_echo "$ac_cv_lib_gmp___gmpz_init" >&6; } if test "x$ac_cv_lib_gmp___gmpz_init" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGMP 1 _ACEOF LIBS="-lgmp $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpz_init in -lgmp" >&5 $as_echo_n "checking for mpz_init in -lgmp... " >&6; } if ${ac_cv_lib_gmp_mpz_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgmp $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 mpz_init (); int main () { return mpz_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gmp_mpz_init=yes else ac_cv_lib_gmp_mpz_init=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_gmp_mpz_init" >&5 $as_echo "$ac_cv_lib_gmp_mpz_init" >&6; } if test "x$ac_cv_lib_gmp_mpz_init" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGMP 1 _ACEOF LIBS="-lgmp $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpz_init in -lgmp2" >&5 $as_echo_n "checking for mpz_init in -lgmp2... " >&6; } if ${ac_cv_lib_gmp2_mpz_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgmp2 $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 mpz_init (); int main () { return mpz_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gmp2_mpz_init=yes else ac_cv_lib_gmp2_mpz_init=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_gmp2_mpz_init" >&5 $as_echo "$ac_cv_lib_gmp2_mpz_init" >&6; } if test "x$ac_cv_lib_gmp2_mpz_init" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGMP2 1 _ACEOF LIBS="-lgmp2 $LIBS" fi fi fi CPPFLAGS="$saved_CPPFLAGS" LDFFLAGS="$saved_LDFLAGS" #========================================================================================== # MPFR #========================================================================================== # Check whether --with-mpfr was given. if test "${with_mpfr+set}" = set; then : withval=$with_mpfr; if test "x$enable_rpath" = xyes; then : MPFR_CPPFLAGS="-I$with_mpfr/include" MPFR_LDFLAGS="-L$with_mpfr/lib -Wl,-rpath,$with_mpfr/lib" else MPFR_CPPFLAGS="-I$with_mpfr/include" MPFR_LDFLAGS="-L$with_mpfr/lib" fi fi saved_CPPFLAGS="$CPPFLAGS" saved_LDFLAGS="$LDFLAGS" CPPFLAGS="$MPFR_CPPFLAGS $GMP_CPPFLAGS $CPPFLAGS" LDFLAGS="$MPFR_LDFLAGS $GMP_LDFLAGS $LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing mpfr_free_str" >&5 $as_echo_n "checking for library containing mpfr_free_str... " >&6; } if ${ac_cv_search_mpfr_free_str+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 mpfr_free_str (); int main () { return mpfr_free_str (); ; return 0; } _ACEOF for ac_lib in '' mpfr; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_mpfr_free_str=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_mpfr_free_str+:} false; then : break fi done if ${ac_cv_search_mpfr_free_str+:} false; then : else ac_cv_search_mpfr_free_str=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_mpfr_free_str" >&5 $as_echo "$ac_cv_search_mpfr_free_str" >&6; } ac_res=$ac_cv_search_mpfr_free_str if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" $as_echo "#define HAVE_LIBMPFR 1" >>confdefs.h else as_fn_error $? "Need MPFR 2.1.x or better. see http://www.mpfr.org" "$LINENO" 5 fi ac_fn_c_check_func "$LINENO" "mpfr_sec" "ac_cv_func_mpfr_sec" if test "x$ac_cv_func_mpfr_sec" = xyes; then : $as_echo "#define HAVE_MPFR_22 1" >>confdefs.h fi CPPFLAGS="$saved_CPPFLAGS" LDFFLAGS="$saved_LDFLAGS" # what version of mpfr #========================================================================================== # Checks for header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if ${ac_cv_header_sys_wait_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi for ac_header in fcntl.h float.h inttypes.h limits.h stddef.h stdint.h stdlib.h string.h sys/time.h unistd.h stdio.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # Checks for library functions. for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_malloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { return ! malloc (0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then : $as_echo "#define HAVE_MALLOC 1" >>confdefs.h else $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac $as_echo "#define malloc rpl_malloc" >>confdefs.h fi for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 $as_echo_n "checking for GNU libc compatible realloc... " >&6; } if ${ac_cv_func_realloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_realloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *realloc (); #endif int main () { return ! realloc (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_realloc_0_nonnull=yes else ac_cv_func_realloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 $as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } if test $ac_cv_func_realloc_0_nonnull = yes; then : $as_echo "#define HAVE_REALLOC 1" >>confdefs.h else $as_echo "#define HAVE_REALLOC 0" >>confdefs.h case " $LIBOBJS " in *" realloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS realloc.$ac_objext" ;; esac $as_echo "#define realloc rpl_realloc" >>confdefs.h fi for ac_func in vprintf do : ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" if test "x$ac_cv_func_vprintf" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VPRINTF 1 _ACEOF ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = xyes; then : $as_echo "#define HAVE_DOPRNT 1" >>confdefs.h fi fi done for ac_func in gettimeofday memset modf pow stpcpy strchr strdup strerror strrchr strtoul do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_config_headers="$ac_config_headers src/common/includes/config.h" ac_config_files="$ac_config_files Makefile src/Makefile src/common/Makefile src/common/includes/Makefile src/gui/Makefile test/Makefile English.lproj/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_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 -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -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 wcalc $as_me 2.5, 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 case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --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 --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers 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="\\ wcalc config.status 2.5 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;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _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" ;; "src/common/includes/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/common/includes/config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/common/Makefile") CONFIG_FILES="$CONFIG_FILES src/common/Makefile" ;; "src/common/includes/Makefile") CONFIG_FILES="$CONFIG_FILES src/common/includes/Makefile" ;; "src/gui/Makefile") CONFIG_FILES="$CONFIG_FILES src/gui/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "English.lproj/Makefile") CONFIG_FILES="$CONFIG_FILES English.lproj/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_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= 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" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$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 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # 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 wcalc-2.5/NEWS0000644000175000017500000004401412450353630010075 00000000000000--- Version 2.5 --- Changes: - Color support - Generic SI unit conversion Improvements: - Improved documentation - Increased precision for e constant - More robust prefs parsing - Prettier list output - Better detection of libreadline variants - Support for newer versions of autotools - Support for \assert command - Automatic testing infrastructure (via `make check`) Bugfixes: - Fix 0 parsing bug (2.4.1 regression; thanks Arun Prakash Jana!) - Plugged memory leaks - Fixed segfault when parsing hierarchical expressions - Fixed handling of Euler constant --- Version 2.4.1 --- Changes: - Removed official support for the GUI Improvements: - Clarity and corrections in documentation - Flex/Lex handling improvements - Better output (handling of print_ints, big/small numbers, etc.) - More flexibility in building against GMP and MPFR - Modernize the source code file layout - Print variable description in variable list - Fix output reinterpretation for octal and binary with delimiters - Use -u option to print list of available units Bugfixes: - Fix behavior with long HOME values - Avoid potential segfault in number display - Fix 0-precision exponent calculation during display - Fix display of large exponents - Don't use PATH_MAX - Fix Debian bug 600255 - Fix \bits command - Fix history filename handling --- Version 2.4 --- Oct 25 2008 - Kyle Wheeler - Allow alternate input internationalization characters (BOTH) - Use the OSX 10.4+ method of fetching internationalization settings (GUI) - Fixed display if thousands/grouping separator is unset (BOTH) - Made binary operations use a more intuitive rounding mode (BOTH) Oct 10 2008 - Kyle Wheeler - Fixed a potential crash (CLI) - Made bit-shifts behave a bit more intuitively for C programmers (BOTH) Aug 24 2008 - Kyle Wheeler - Improved documentation of features (CLI) Jun 24 2008 - Kyle Wheeler - Corrected engineering flag behavior (CLI) Jun 17 2008 - Kyle Wheeler - Output localization more reliable (BOTH) May 13 2008 - Kyle Wheeler - Corrected isinf/isnan behavior on some platforms (CLI) - Improved Solaris compatibility (CLI) Mar 30 2008 - Kyle Wheeler - Made preference file parsing more tolerant (CLI) Feb 20 2008 - Kyle Wheeler - Made command explanations more tolerant of typos (BOTH) - Expanded tab-completion (CLI) Feb 17 2008 - Kyle Wheeler - Improved readline history detection (CLI) Feb 12 2008 - Kyle Wheeler - Fixed the backwards compatibility logic (GUI) --- Version 2.3.1 --- Feb 08 2008 - Kyle Wheeler - Make engineering notation a three-way toggle (BOTH) - Accept input from a "wcalc_input" environment variable (CLI) Feb 04 2008 - Kyle Wheeler - Make engineering configuration more reliable (CLI) Dec 05 2007 - Kyle Wheeler - Accept @NaN@ and @Inf@ as input, fixes some compound operations (BOTH) Aug 24 2007 - Kyle Wheeler - Add documentation for sinc and exp functions (CLI) Aug 23 2007 - Kyle Wheeler - Sync preferences to disk more predictably (GUI) Aug 22 2007 - Kyle Wheeler - Fix display glitches when auto-resizing (GUI) - Add max-precision preference (GUI) - Overhaul simpleCalc form, remove crashes, make more robust (GUI) Aug 14 2007 - Kyle Wheeler - Fixed FORTRAN-style syntax errors (BOTH) Aug 02 2007 - Kyle Wheeler - Updated licensing to be GPLv2+ compatible (BOTH) --- Version 2.3 --- Jul 20 2007 - Kyle Wheeler - Added Wcalc Service to the Service menu (GUI) - Compiled as a Universal Binary (BOTH) - Lots of cleanup (BOTH) Jul 16 2007 - Kyle Wheeler - Fixed the inspector-window-quits-program bug (GUI) - Added angle and pressure conversions (BOTH) - Fixed the insufficient variable precision bug (BOTH) - Many number formatting fixes (BOTH) Jul 11 2007 - Kyle Wheeler - Improved \prefs listing (CLI) Jul 10 2007 - Kyle Wheeler - Avoid unexploitable buffer overflow in number formatting (BOTH) Apr 05 2007 - Kyle Wheeler - Bohr title corrected (BOTH) - kph synonyms added (BOTH) Dec 28 2006 - Kyle Wheeler - Better error reporting (CLI) Dec 26 2006 - Kyle Wheeler - Added tab-completion (CLI) - Made conversion more forgiving (CLI) --- Version 2.2.2 --- Jul 09 2006 - Kyle Wheeler - Added live precision toggle (GUI) - Added modulus style preferences (BOTH) - Improved preferences versioning (GUI) - Eliminated negative zeros (BOTH) - Improved commandline help (CLI) - Plugged several small memory leaks (BOTH) - Put a mutex around the precision slider update (GUI) Apr 21 2006 - Kyle Wheeler - Better readline history detection (CLI) Mar 20 2006 - Kyle Wheeler - Made modulus operator (%) efficient (BOTH) Mar 09 2006 - Kyle Wheeler - Improved exponent handling for hex numbers (BOTH) - Fixed the negative exponent bug (BOTH) Mar 02 2006 - Kyle Wheeler - Improved several UI inconsistencies (GUI) Mar 01 2006 - Kyle Wheeler - Added ability to copy from history/variable list (GUI) --- Version 2.2.1 --- Mar 01 2006 - Kyle Wheeler - Fixed crash if you open the Persistent Variables window and immediately close it (GUI) --- Version 2.2 --- Feb 28 2006 - Kyle Wheeler - Added sinc (BOTH) - Added documentation of Gamma, lnGamma, zeta, K, and sinc (CLI) - Added persistent variables (GUI) Feb 27 2006 - Kyle Wheeler - Non-base ten decimals no longer infinitely long (BOTH) Feb 26 2006 - Kyle Wheeler - Added internal bitcount control to GUI (GUI) - MPFR version compatibility (CLI) Feb 23 2006 - Kyle Wheeler - Implemented ~ as binary not (BOTH) Feb 21 2006 - Kyle Wheeler - Units may be plural (CLI) - Corrected unit names (BOTH) Feb 15 2006 - Kyle Wheeler - Corrected several memory use errors and potential crashes (BOTH) - Corrected lost errors (CLI) - Added Gamma, lnGamma, sinc, and zeta functions (BOTH) - added catalan (K) and enhanced the Euler constant (BOTH) Feb 14 2006 - Kyle Wheeler - Much more extensive documentation (CLI) - Added the ability to print numbers with separators (BOTH) Feb 13 2006 - Kyle Wheeler - Corrected behavior for systems without READLINE_HISTORY (CLI) - Corrected precision_guard test (BOTH) - Corrected significant figure counting (BOTH) Jan 19 2006 - Kyle Wheeler - Corrected the print_integers preference (CLI) Dec 10 2006 - Kyle Wheeler - Better portability (CLI) - Added a \explain command (CLI) - Added a \store command (CLI) - Faster recursion detection (BOTH) - No longer confuses equivalence testing with assignment (BOTH) - Corrected some minor usability bugs (GUI) - Corrected \save behavior (BOTH) --- Version 2.1.2 --- Dec 01 2005 - Kyle Wheeler - Fixed the resize behavior once and for all with a separate inspector (GUI) Nov 10 2005 - Kyle Wheeler - Fix the menu display of arcsinh to be areasinh (GUI) Nov 08 2005 - Kyle Wheeler - Variables should be quoted when read in from files (BOTH) Nov 07 2005 - Kyle Wheeler - Connected drawers to main window again (GUI) --- Version 2.1.1 --- Nov 05 2005 - Kyle Wheeler - Corrected UTF-8 parsing (thanks Marco Thill!) (BOTH) - Corrected areasinh function names (thanks Marco Thill!) (BOTH) - Compatibility with locales without thousands separators (thanks Marco Thill!) (GUI) - Fixed repeat calculations bug (GUI) - Fixed error reporting (GUI) Nov 02 2005 - Kyle Wheeler - Fix possible double-free (BOTH) - Fix logic errors in variable handling: variables where one is the prefix of another will not be confused (BOTH) - Correct unabbreviated integer output for big numbers (BOTH) --- Version 2.1 --- Nov 01 2005 - Kyle Wheeler - Make UTF-8 compatable (BOTH) - Added Phi0 (magnetic flux quantum) (BOTH) - Made gamma more accurate (BOTH) Oct 27 2005 - Kyle Wheeler - Fix bug in storing variables when there's only one variable (BOTH) - Added verbose command (CLI) Oct 26 2005 - Kyle Wheeler - Fixed up autoconf/automake for Debian (CLI) - Updated man page (CLI) - Removed potential buffer overflow in variable name (BOTH) Oct 02 2005 - Kyle Wheeler - Corrected man page bug (thanks Daniele Sempione!) (CLI) Aug 30 2005 - Kyle Wheeler - Fix memory-leaks (BOTH) --- Version 2.0 --- Aug 28 2005 - Kyle Wheeler - Answer field expands to reveal the entire answer, if necessary (GUI) - Fixed the bizarre resizing behavior, finally! (GUI) - Can display much more precision now (GUI) Jul 19 2005 - Kyle Wheeler - Added a binary xor operator (BOTH) - Added a comp(x) function that returns the one's compliment (BOTH) - Can convert units from the command-line now (CLI) - Improved the man page and online help (CLI) - Reorganized the conversion units, to be easier to use (GUI) - Many more scientific symbols, in standardized units now (BOTH) Jul 18 2005 - Kyle Wheeler - Significant-figure rounding indication is more reliable now (BOTH) - Added support for the \bits command for arbitrary precision (BOTH) - \prefs display is more useful (CLI) - ~/.wcalcrc parsing works now (CLI) - Receiving an EOF will now *never* cause an ugly error message (CLI) Jun 10 2005 - Kyle Wheeler - Selecting the Planck constant from the menu produces the correct symbol (GUI) - Fixed the reduce/reduce conflicts in the parser (BOTH) --- Version 1.7 --- Jan 04 2004 - Kyle Wheeler - Compiling tweaks for Solaris Dec 29 2003 - Kyle Wheeler - Added a "simple" calculator feature (GUI) - Updated autoconf/automake (CLI) - Committed old fix for bad variable substitution (BOTH) - Misc bug fixes (BOTH) - Accepts numbers of the form "5." without the quotes (BOTH) Dec 25 2003 - Kyle Wheeler - More informative math errors. (BOTH) - Code cleanup (BOTH) Sep 30 2003 - Kyle Wheeler - Fixed file loading (CLI) Aug 25 2003 - Kyle Wheeler - Fixed error stickyness. Thanks Ingo van Lil! (CLI) - Cleaned up variable recursion detection. Thanks Ingo! (BOTH) --- Version 1.6.2 --- Aug 21 2003 - Kyle Wheeler - Fixed the print integers preference (GUI) - Fixed the recursion detection, so symbols should work again (BOTH) - Fixed incorrect output on some errors (CLI) - Fixed a crash in Linux when errors are reported (CLI) --- Version 1.6.1 --- Aug 19 2003 - Kyle Wheeler - Avoid command/variable conflicts (BOTH) Aug 18 2003 - Kyle Wheeler - Fixed repeatable crash on Linux (CLI) - Fixed recursion detection (BOTH) Aug 17 2003 - Kyle Wheeler - Fixed small, one time, memory leak (CLI) Aug 09 2003 - Kyle Wheeler - Added irandom, rand(), and irand() (BOTH) Jul 12 2003 - Kyle Wheeler - Added bitwise operators & and | and ~ (BOTH) Apr 19 2003 - Kyle Wheeler - Fix some flatten problems (BOTH) - Compilation fixes (Solaris) Mar 25 2003 - Kyle Wheeler - Made "always print integers" a preference (BOTH) - Compilation fixes (Linux) Mar 24 2003 - Kyle Wheeler - Added cot to the menus (GUI) - Fixed log2 silliness (BOTH) --- Version 1.6 --- Mar 22 2003 - Kyle Wheeler - Errors now beep. (GUI) - Added open/save/saveAs to create/load script files. (BOTH) Mar 20 2003 - Thomas Steinhausen - Fixed decimal key display in non-USA countries (GUI) Mar 19 2003 - Kyle Wheeler - Added recursion detection. (BOTH) Feb 28 2003 - Kyle Wheeler - Fixed the arc- trig functions in degree mode. (BOTH) - Made readline respect the history length preference. (CLI) - Added rounding indication to the CLI. (CLI) - Added rounding indication command. (BOTH) Feb 24 2003 - Kyle Wheeler - If it's just an integer, print the whole thing (BOTH) - Added support for persistent preferences in ~/.wcalcrc (CLI) Feb 21 2003 - Kyle Wheeler - Added cot acot coth acoth and reformatted a little (BOTH) Feb 19 2003 - Kyle Wheeler - Added some display functions for variables and prefs (CLI) - Finally fixed the bizarre window behavior (GUI) --- Version 1.5.2.1 --- Feb 02 2003 - Kyle Wheeler - Fixed the ^D bug when compiled without readline (CLI) Jan 29 2003 - Kyle Wheeler - Uses more standard rpm macros (CLI) --- Version 1.5.2 --- Jan 27 2003 - Kyle Wheeler - Modified to use automake/autoconf (CLI) Jan 23 2003 - Kyle Wheeler - Fixed the internationalization stuff (BOTH). - Added history length limiting. Jan 17 2003 - Kyle Wheeler - Added clearing functions for History and Variables (BOTH) Jan 16 2003 - Kyle Wheeler - Alphabetized conversion listings (GUI) - Fixed sticky error messages (BOTH) Dec 18 2002 - Kyle Wheeler - Added the log2 command (BOTH). Nov 01 2002 - Kyle Wheeler - Fixed a crasher in error reporting (BOTH). --- Version 1.5.1 --- Oct 20 2002 - Kyle Wheeler - Added an option to avoid precision pitfalls (BOTH). - Recompiled for Jaguar (BOTH). Oct 03 2002 - Kyle Wheeler - Lists variables in command-line mode (CLI) Sep 08 2002 - Kyle Wheeler - Another way to tell it "hex" (BOTH) - Fixed the division thing (GUI) --- Version 1.5 --- Aug 08 2002 - Kyle Wheeler - Added conversions (GUI) Jul 31 2002 - Kyle Wheeler - Added support for comments (#, //, /* */) (BOTH) - Supports "active" variables (BOTH) Jul 30 2002 - Kyle Wheeler - Prints prefixes (0x, etc) by default. (CLI) Jul 29 2002 - Kyle Wheeler - Added left and right bitshift operations (BOTH) May 21 2002 - Kyle Wheeler - '=' and 'clear' work when you press the keys (GUI) Apr 12 2002 - Kyle Wheeler - Pre-process input to solve comma/period problem (BOTH) - Specify separators on the fly in the command-line (CLI) Apr 10 2002 - Kyle Wheeler - Added a preference to ignore erroneous expressions (GUI) Mar 28 2002 - Kyle Wheeler - Saves drawer states (GUI) --- Version 1.4.5 --- Mar 07 2002 - Kyle Wheeler - Added cube root (cbrt) (BOTH) - Added rounding indicator (GUI) - Added square function (BOTH) Mar 04 2002 - Kyle Wheeler - Added a base-drawer (GUI) Mar 02 2002 - Kyle Wheeler - Fixed the live preference display (GUI) - Fixed the menu's response to the drawer state (GUI) - Made the preference Panel Modeless (GUI) - Implemented strict_syntax preference (BOTH) Mar 01 2002 - Kyle Wheeler - Removed all but one reserved variable (CLI) - Period button becomes a comma button depending on comma preference (GUI) - Added confusing-number garbage collector (BOTH) - Moved commands to parser for GUI and piped file support (BOTH) - Fixed division symbol & continuous expressions (GUI) - Full international comma support (BOTH) - CLI doesn't ignore some errors anymore (CLI) - Fixed crasher in precision output (BOTH) Feb 28 2002 - Kyle Wheeler - Added CLI variable parsing strictness toggle (CLI) - Added sqrt, ceil, and floor functions (BOTH) - Fixed binary output (BOTH) - Fixed crasher in comma output (BOTH) Feb 27 2002 - Kyle Wheeler - Fixed the comma parsing (BOTH) --- Version 1.4.4 --- Feb 27 2002 - Kyle Wheeler - Fixed clamping errors (BOTH) --- Version 1.4.3 --- Feb 26 2002 - Kyle Wheeler - Added a preference to output numbers with a comma (BOTH) - Added error reporting to the commandline (CLI) - Fixed a rounding error (BOTH) Feb 24 2002 - Kyle Wheeler - Fixed the scanner (0.9 now means 0.9 and not 0 * .9) (BOTH) - History redisplay is configurable now (GUI) --- Version 1.4.2 --- Feb 20 2002 - Kyle Wheeler - Fixed the editing-after-pressing-a-button error (I'm an idiot) (GUI) - Fixed the window-position saving routines (GUI) - The problem with window sizing has gotten *worse* since updating OS X (GUI) Feb 12 2002 - Kyle Wheeler - Accepts commas as period replacements (BOTH) --- Version 1.4.1 --- Feb 10 2002 - Kyle Wheeler - Added output commands to the GUI too (GUI) - Fixed debug output in the CLI (CLI) - Compiled everything statically - no more library problems! (BOTH) - Supports real division symbol (Ö) (BOTH) - Random is now truly random, if the system supports it - relies on /dev/random (BOTH) --- Version 1.4 --- Feb 6 2002 - Kyle Wheeler - Saves the history (max of 1000 lines - should this be configurable?) (CLI) - New commands in the CLI - (most) old ones will disappear next version (CLI) - Supports hex (0x), octal (0), and binary (0b) input and output (BOTH) - Cleared out some pointless error messages (CLI) - Improved factorials (BOTH) - Miscellaneous Bugfixes (BOTH) - Tried to fix a window drifting problem (GUI) Feb 4 2002 - Kyle Wheeler - Added a "Result" column to the history (GUI) --- Version 1.3 --- Feb 3 2002 - Kyle Wheeler - More improvements to the parser (BOTH) - Added LOTS of constants (BOTH) Feb 2 2002 - Kyle Wheeler - Added menus for functions and symbols (GUI) - Added absolute value "abs()" (BOTH) - Added a bunch of physical constants to the symbols (BOTH) - Saves toggled status (GUI) Jan 30 2002 - Kyle Wheeler - Added the ability to toggle the presence of the keypad (GUI) --- Version 1.2 --- Jan 29 2002 - Kyle Wheeler - Fixed the grammar again (BOTH) - Began work on continuous calculations (GUI) Jan 28 2002 - Kyle Wheeler - Fixed a typo in the grammar (BOTH) - Added a command-equivalent to the preferences window (GUI) - Added the version number to the about box (GUI) - Corrected the version number display Jan 26 2002 - Kyle Wheeler - Fixed the grammar (MUCH better now) (BOTH) Jan 25 2002 - Kyle Wheeler - Added checks to catch values with too much precision (BOTH) - Precision slider won't go too far anymore (GUI) - Remembers the window position (GUI) - Quits when the window is closed (GUI) - Saves Preferences! (GUI) - Expanded the vocabulary (asin,arcsin,sin^-1) (BOTH) Jan 24 2002 - Kyle Wheeler - Added a preference to toggle using Radians (GUI) - Made the history font smaller (GUI) - Fixed a crasher in the history list. (GUI) - Can now do floating point mods (BOTH) - "random" means a random value (BOTH) - added round() to round a value to the nearest value (BOTH) Jan 21 2002 - Kyle Wheeler - Rewrote the Variable management - now it's simpler, slower, more useful (BOTH) - Variable GUI list is functioning! - History list selection now replaces the current expression - Pickiness about undefined variables is configurable (GUI-only) - Made it approximately the size of Apple's calculator - Prefs are their own window now - Logging duplicates in the history is configurable (GUI-only). - Need to redo commands in command-line version (perhaps \q to quit, \dups for history dups... eh?) - Fixed the boolean thing - now both !4 and 4! work (!4 = 0, 4! = 24, !0 = 1) - Discovered that 9+-9 doesn't work... dunno how to fix. I'll think about it. (is this critical?) Jan 20 2002 - Kyle Wheeler - Fixed the factorial parsing (non-elegant solution) - Added GUI Engineering Notation toggle (template for future preferences, if any) - Decided I have to rewrite the variable storage mechanism to get the GUI list working. :( - Need to save prefs somehow... wcalc-2.5/English.lproj/0000775000175000017500000000000012451434213012171 500000000000000wcalc-2.5/English.lproj/InfoPlist.strings0000644000175000017500000000100612115670003015422 00000000000000ţ˙/* Localized versions of Info.plist keys */ CFBundleName = "Wcalc"; CFBundleShortVersionString = "Wcalc version 2.4"; CFBundleGetInfoString = "Wcalc version 2.4, Copyright 2001-2008 Kyle Wheeler."; NSHumanReadableCopyright = "Copyright 2008 Kyle Wheeler."; wcalc-2.5/English.lproj/Makefile.in0000664000175000017500000002570712451433376014202 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' 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 = English.lproj DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/readline.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/common/includes/config.h 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) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GMP_CPPFLAGS = @GMP_CPPFLAGS@ GMP_LDFLAGS = @GMP_LDFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPFR_CPPFLAGS = @MPFR_CPPFLAGS@ MPFR_LDFLAGS = @MPFR_LDFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = InfoPlist.strings \ MainMenu.nib/classes.nib \ MainMenu.nib/info.nib \ MainMenu.nib/keyedobjects.nib all: all-am .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 English.lproj/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign English.lproj/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(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): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: wcalc-2.5/English.lproj/MainMenu.nib/0000775000175000017500000000000012451434213014451 500000000000000wcalc-2.5/English.lproj/MainMenu.nib/info.nib0000644000175000017500000000116412115670003016012 00000000000000 IBFramework Version 672 IBLastKnownRelativeProjectPath ../Wcalc.xcodeproj IBOldestOS 4 IBOpenObjects 300 29 1793 2306 IBSystem Version 9F33 targetFramework IBCocoaFramework wcalc-2.5/English.lproj/MainMenu.nib/classes.nib0000644000175000017500000002350412115670003016516 00000000000000 IBClasses CLASS theDelegate LANGUAGE ObjC OUTLETS mainWindow NSWindow SUPERCLASS NSObject ACTIONS clearVariables id copyMe id delVariable id newVariable id CLASS VariableList LANGUAGE ObjC OUTLETS theList NSTableView SUPERCLASS NSObject ACTIONS closeIt id onClose id openIt id toggleIt id CLASS InspectorController LANGUAGE ObjC OUTLETS affectInspectorMenu NSMenuItem historyList NSTableView inspectorWindow NSPanel variableList NSTableView SUPERCLASS NSObject ACTIONS clearHistory id copyMe id rowSelected id CLASS HistoryList LANGUAGE ObjC OUTLETS expressionField NSTextField theList NSTableView SUPERCLASS NSObject ACTIONS newType id CLASS ConversionList LANGUAGE ObjC OUTLETS fromList NSTableView theType NSPopUpButton toList NSTableView SUPERCLASS NSObject ACTIONS closeIt id openIt id CLASS AboutBoxController LANGUAGE ObjC OUTLETS aboutBox NSWindow version NSTextField SUPERCLASS NSObject ACTIONS addVar id clearVars id delVar id showList id CLASS PersVarList LANGUAGE ObjC OUTLETS theList NSTableView theWindow NSWindow SUPERCLASS NSObject ACTIONS clear id closeWindow id convert id displayPrefs id enterData id go id menuConstant id menuFunction id open id openBDrawer id openIDrawer id quit id save id saveAs id savePrefs id setPrecision id setPrefs id shConversions id showBaseDrawer id showKeyboardDrawer id showPrefs id toggleSize id CLASS WcalcController LANGUAGE ObjC OUTLETS AnswerField NSTextField ExpressionField NSTextField PrecisionSlider NSSlider affectKeyboardMenu NSMenuItem altInputDecSep NSTextField altInputThouSep NSTextField alternateInputPref NSButton baseDrawer NSDrawer baseMenu NSMenuItem bitsPref NSTextField bitsStepper NSStepper cModPref NSButton capsLockKey NSButton conversionMenu NSMenuItem conversionWindow NSPanel convertFrom NSTableView convertTo NSTableView convertType NSPopUpButton decimalKey NSButton engineeringNotation NSPopUpButton enterKey NSButton errorController id historyDuplicates NSButton historyList id inspector InspectorController inspectorWindow NSWindow keypad id limitHistory NSButton limitHistoryLen NSTextField limitHistoryLenTag NSTextField livePrecision NSButton mainWindow NSWindow meta NSApplication outputFormat NSMatrix outputFormat2 NSMatrix persVarsWindow NSWindow pickyVariables NSButton precisionGuard NSButton printDelimiters NSButton printInts NSButton printPrefixes NSButton rememberErrors NSButton roundingIndication NSPopUpButton saveAsMenuItem NSMenuItem saveMenuItem NSMenuItem shiftKey1 NSButton shiftKey2 NSButton simpleCalculator NSButton sizeToggleMenu NSMenuItem sliderPref NSTextField sliderStepper NSStepper strictSyntax NSButton theKeyboard id thePrefPanel NSPanel updateHistory NSButton useRadians NSButton variableList NSTableView SUPERCLASS NSObject ACTIONS id CLASS FirstResponder LANGUAGE ObjC SUPERCLASS NSObject CLASS WcalcService LANGUAGE ObjC OUTLETS historyList NSTableView inspectorWindow NSWindow variableList NSTableView SUPERCLASS NSObject ACTIONS closeAlert id showAlert id throwAlert NSString CLASS ErrorController LANGUAGE ObjC OUTLETS errorDialog id errorMessage id SUPERCLASS NSObject CLASS MyTextField LANGUAGE ObjC OUTLETS AnswerField NSTextField mainController WcalcController SUPERCLASS NSTextField IBVersion 1 wcalc-2.5/English.lproj/MainMenu.nib/keyedobjects.nib0000644000175000017500000041612212115670003017536 00000000000000bplist00Ô X$versionT$topY$archiverX$objects† Ń]IB.objectdata€_NSKeyedArchiverŻ Ő 156<=B\]^_cg t{Š‹ŚŤź ¨©¬¶·¸˝żÄĹČĚĎŘŮíďôőřţ &';<ADGQRZ[\demnwx€‚‹Ś”•–žź§¨°±ąşÂĂËĚÔŐÝŢćçďđřů  &'(12:;CDLTU]^fgopxy‚†üý‡Š“”ž  ˇŁ¤Ą¦§Ş®$+019:>BEFGKPSTt„‹”•ž±˛µşĚÍÔŐŘÝŢáéîďňűü  #$&'*/@EFKLMPTUXY^efns|‚ŚŹ’“ ˇ¬­±˛µ¶»ÂĂËĚŃÖŢâăçîňóôů   $%&',345:=HOPQXYZelmnuvw~€‡‰‹Ś‘™žź§¨­µąşżŔĹŇŰá”ęďűü  #$*+167>FMNUV]binowx€•—™Ą©Ş«®´˝ŞľÇŞČĚĎĐÔŐÚâćçčéî÷ř'HIJKLMNOPQRSTUVadhknquv†zꆊ‹Ś‘”—›śžź¤«°±»ĽżÂĂÄÉĐŐÖ×ŘÝâéîďđńöűü       % * 2 7 8 @ A C E F K R S [ ` h i n o t u z ‚ Ź ś ž   © ­Ş ® ° ¶ żŞ Ŕ ÉŞ Ę Ë Đ × Ř ŕ á ć ë î ď ö ÷    Ş   # ,Ş - 6Ş 7 @Ş A JŞ K TŞ U ^Ş _ hŞ i rŞ s |Ş } †Ş ‡ Ť ” • ť ž ˘ Ł ¨ ° µ ¶ ż Á Ä Ĺ Ć Ë Ó × Ř Ý ĺ ć ë ň ö ÷ ü     & * 0 5 = A B E N O P S [ \ ` a b e l m u w x y ~ † ‰ Ž Ź ’ ™ ›   § Ż A ł » Ľ Ä Ĺ ` a É Ń Ň Ű Ţ ŕ l ç ď ń ř ů  w   Ł Ą       & ' / 0 1 6 = > F G L O P U V [ _ f k l m r z { € „ … Š ‘ – — ś ˇ ¦ § ¬ ´ µ ˝ ľ Ă Č Đ Ń Ö Ţ ß ä ě í ö ÷ ř ý        ' 1 2 @ G H Q X Y Z c l 1 m r t w x ‰ ‘ š ˇ ˘ Ł ¬ 1 ­ Ż · ľ ż Ŕ É 1 Ę Ě Đ Ń Ú â ă ä< 1 íb 1 ö ţ ! 1"@I 1JY`ahipqxy‚‰Š’“š›Ł¤¬­¶ 1·ĆÎĎ×Řŕáéęňóúű  %&/67?@IQRZ[cdmtu|}…†ŽŹ—ˇ¨©°±şÂĂĘËÔÜÝć 1çř˙ )2 137@HIQRYZabijqr{ 1|€Š’“›ś¤Ą­®¶·żŔČÉŇ 1Óĺíîö÷˙ #$,-56>?GHQ 1R`hiqrz{„ŚŤ•–žź§¨°±ąşĂĘËŇÓÜ 1Ýßçîďđ÷řů    1&'().3:;DEJOTYZ_dixyz{~„‰Ž“ź ¨©®Żł´ąľĂĘËÓÔŮŢăčđ÷ ř #$,./49:?DINSX]bgnowxy~…†Ž“ ©Ş®ŻłĽÂČÉÎÓÚŰâăäéęďôőůú˙ #*+34NOV_`cdfmnvw~€Ë‡‹•śťĄ¦«°±¶˝ľĆÇĚŃŇ×Üăčő  "1Ź­9>?DEöOPTYZk\`cfgjkpuv{|†ŤŽ–› ĄŞ«°·¸ŔĹĆËĚĐŃÖăěíóüý± "#&.8>EFKPUZ[`ghpqvw|†‹’“› ¬ ­Ż¶ÂČŃŐ©ŕäĺéđöüý ü#* Ä12Ł3Ą45:BCMRW^_glxy{˛ąşÂĂĘËÓÔŰÜäëěôűü  %,-5<=EFMNVW^_gnow~‡ŽŹ—žź§¨Ż°¸żŔČĎĐŘßŕčéđńůú "#+23;BCKRS[bckrs{‚‹’“›˘Ł«˛ł»Ł ĄĽ˝ľĂČÍŇ×ŘÝáâçčíň÷ü !&',16;@AFKPWX`ev}~…ŤŽ™ˇ˘Ş«€Ë¬˛ł¸˝ÂÇĚŃÖŰŕĺćëđőú˙$).38=>CHMTU]^cklwx±|†‡Ś‘’—ťžŁ¨­˛ąşÂĂČÍŇ×Ţßçčíîóřý  !&-.689>?DIJOTYZ_`ejotuz„…ŠŹ’“ť˘§¬­˛¶·ĽÁÂÇĚŃÖ×Üáâçčíň÷ü  %*/:;=?FNRS[\deijkŁ Ąlmnsx}‚‡ŤŽ“™žŁ¤©ŞŻ´µş»ŔĹĘĎÔŐÚßŕĺćëđńöű  $).38=>CHMR]^_ahly}‡Ź™š˘ŁŞ«¬­´»ĹĚÍŐ«Ö×Ţ«çîďý  $%,«-.56 7 Ł Ą89:?@EJOTUZ_dinoty~„‰ŠŹ”™šź¤ĄŞŻł´¶·ĽĆÇČĘŃÝćçčéęëěí÷řűţ    č % & * . / Ł Ą 0 1 6 ; @ J K L N V _ h i l u ~  ‡ Ź — ˇ § « ¬ Ż ° ¸ ą Á  ĂŁ Ą Ä Ĺ Ę Ď Ö × Ř Ű ŕ á ć ç ě í ň ó ř ů ţ ˙!!! ! !!!!!!!"!#"Ş"­$4%Ľ'D'E'F'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'['\']'^'_'`'a'b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'q'r's't'u'v'w'x'y'z'{'|'}'~''€''‚''„'…'†'‡''‰'Š'‹'Ś'Ť'Ž'Ź''‘'’'“'”'•'–'—''™'š'›'ś'ť'ž'ź' 'ˇ'˘'Ł'¤'Ą'¦'§'¨'©'Ş'«'¬'­'®'Ż'°'±'˛'ł'´'µ'¶'·'¸'ą'ş'»'Ľ'˝'ľ'ż'Ŕ'Á'Â'Ă'Ä'Ĺ'Ć'Ç'Č'É'Ę'Ë'Ě'Í'Î'Ď'Đ'Ń'Ň'Ó'Ô'Ő'Ö'×'Ř'Ů'Ú'Ű'Ü'Ý'Ţ'ß'ŕ'á'â'ă'ä'ĺ'ć'ç'č'é'ę'ë'ě'í'î'ď'đ'ń'ň'ó'ô'ő'ö'÷'ř'ů'ú'ű'ü'ý'ţ'˙(((((((((( ( ( ( ( ((((((((((((((((((( (!("(#($(%(&('((()(*(+(,(-(.(/(0(1(2(3(4(5(6(7(8(9(:(;(<(=(>(?(@(A(B(C(D(E(F(G(H(I(J(K(L(M(N(O(P(Q(R(S(T(U(V(W(X(Y(Z([(\(](^(_(`(a(b(c(d(e(f(g(h(i(j(k(l(m(n(o(p(q(r(s(t(u(v(w(x(y(z({(|(}(~((€((‚((„(…(†(‡((‰(Š(‹(Ś(Ť(Ž(Ź((‘(’(“(”(•(–(—((™(š(›(ś(ť(ž(ź( (ˇ(˘(Ł(¤(Ą(¦(§(¨(©(Ş(«(¬(­(®(Ż(°(±(˛(ł(´(µ(¶(·(¸(ą(ş(»(ż(Ă+¶.©.Ş.«.¬.­.®.Ż.°.±.˛.ł ä.´".µ.¶.·.¸.ą.ş.».Ľ.˝.ľ.ż.Ŕ.Á.Â.Ă.Ä.Ĺ.Ć.Ç.Č.É.Ę.Ë.Ě.Í.Î.Ď.Đ.Ń.Ň.Ó.Ô.Ő.Ö.×.Ř.Ů.Ú.Ű.Ü.ÝP.Ţ ë.ß.ŕ.á.â.ă.ä.ĺ.ć.ç.č.é.ę.ë.ě.í.î.ď.đ.ń.ň.ó.ô.ő.ö.÷.ř.ů.ú.ű.ü.ý.ţ.˙////////// / / / / /////////////////// /!/"/#/$/%/&/'/(/)/*/+/,/-/.///0/1/2/3/4/5/6/7/8/9/:/;//?/@/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X /Y/Z/[/\/]/^/_/`/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/{/|/}/~//€//‚//„/…/†/‡//‰/Š/‹/Ś/Ť/Ž/Ź//‘/’/“/”/•/–/—//™/š/›/ś/ť/ž/ź/ /ˇ/˘/Ł/¤/Ą/¦/§/¨/©/Ş/«/¬/­/®/Ż/°/±/˛/ł/´/µ/¶/·/¸/ą/ş/»/Ľ/˝/ľ/ż/Ŕ/Á/Â/Ă/Ä/Ĺ/Ć/Ç/Č/É/Ę/Ë/Ě/Í/Î/Ď/Đ/Ń/Ň/Ó/Ô‘/Ő/Ö/×/Ř/Ů/Ú/Ű/Ü/Ý/Ţ/ß/ŕ/á/â/ă/ä/ĺ/ć/ç/č/é/ę/ë/ě/í/î/ď/đ/ń/ň/ó/ô/ő/ö/÷/ř/ů/ú/ű/ü/ý/ţ/˙0ő000000000 0 0 0 0 00{0000000000đ0000000 0!0"0#0$0%0&0'0(0)0*0+0,0-0.0/0001024030405060708090:0;0<0=0>0?0@0A0B0C0D˘0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~00€00‚00„0…0†0‡00‰0Š0‹0Ś0Ť0Ž0ŹY00‘0’0“0”0•0–0—00™0š0›0ś0ť0ž0ź0 0ˇ0˘0Ł0¤0Ą0¦0§0¨0©0Ş0«0¬0­0®0Ż0°0±0˛0ł0´0µ0¶ß0·0¸0ą0ş0»0Ľ0˝0ľ0ż0Ŕ0Á0Â0Ă0Ä0Ĺ0Ć0Ç0Č0É0Ę0Ë0Ě0Í0Î0Ď0Đ0Ń0Ň0Ó0Ô0Ő0Ö0×0Ř0Ů0Ú0Ű0Ü0Ý0Ţ0ß0ŕ0á0â0ă0ä0ĺ0ć0ç0č0é0ę0ë0ě0í0î0ď0đ0ń0ň0ó0ô0ő0ö0÷0ř0ů0ú0ű0ü0ý0ţ0˙1111111111 1 Ý1 1 1 1111111111111q111111 1!1"1#1$1%1&1'1(1)1*1+1,1-1.1/101112131415161718191:1;1<1=~1>1?1@1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z1[1\1]1^1_1`1a1b1c1d1e1f1g1h1iC1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1{1|1}1~11€11‚11„1…1†1‰1Ś1ŹU$nullß  !"#$%&'()*+,-./0VNSRootV$class]NSObjectsKeys_NSClassesValues_NSAccessibilityOidsValues]NSConnections[NSNamesKeys[NSFramework]NSClassesKeysZNSOidsKeys]NSNamesValues_NSAccessibilityConnectors]NSFontManager_NSVisibleWindows_NSObjectsValues_NSAccessibilityOidsKeysYNSNextOid\NSOidsValues€ ÔaŢ Ó€Ťd€Ýße Ń€€c Ň şŕŇ234[NSClassName€€]NSApplicationŇ789:X$classesZ$classname˘:;^NSCustomObjectXNSObject_IBCocoaFrameworkŇ>?@ZNS.objects€ŚˇA€ÝCDEFGHIJKLMNOPQRSTUVWXYZ[\NSWindowView\NSScreenRect_NSFrameAutosaveName]NSWindowTitleYNSWTFlags]NSWindowClass\NSWindowRectYNSMaxSize_NSWindowBacking_NSWindowStyleMaskYNSMinSize[NSViewClass€ €‹€‡€Š€ 0(€ €€‰€€ _{{312, 292}, {171, 255}}UWcalcXNSWindowŇ`abYNS.string€ TViewŇ78deŁef;_NSMutableStringXNSString×hijk^lmnopqms_NSNextResponderZNSSubviewsXNSvFlags[NSFrameSize[NSSuperview€€†€€„€€…Ň>uv€{¤wxyz€€#€+€€Úh|}~j^2lO‚„…†mOWNSFrame_NSOriginalClassNameVNSCellYNSEnabled€ €"€€€ €€€ [MyTextField[NSTextField_{{11, 198}, {149, 19}}ŮŽŹ‘’“”•–—™šwś†ž[NSCellFlags_NSBackgroundColorZNSContentsYNSSupport]NSControlView\NSCellFlags2_NSDrawsBackground[NSTextColor˙˙˙˙”aţ€!€€€€ €PÔˇ˘Ł¤Ą¦§VNSSizeVNSNameXNSfFlags€#@&€ \LucidaGrandeŇ78Ş«˘«;VNSFontŐ­®Ż°±˛ł´µWNSColor\NSColorSpace[NSColorName]NSCatalogName€€€€VSystem_textBackgroundColorӮ౻ĽWNSWhite€B1Ň78ľ­˘­;Ő­®Ż°±ÁłÂµ€€ €€YtextColorÓ®ą±»Ç€B0Ň78ÉʤĘË~;_NSTextFieldCell\NSActionCellŇ78Í΢Î;^NSClassSwapperŘh|~j^lOŃŇÓÔ†mO€ €*€$€%" €€ _{{11, 176}, {149, 15}}ŢÚŽŰÜ‘’ÝŢ“ßŕáâăäĺĺćçxéâśęë†WNSValue_NSNumberOfTickMarks_NSTickMarkPositionZNSMaxValueZNSMinValueZNSVertical]NSAltIncValue_NSAllowsTickMarkValuesOnly#żđ˙€)€&€'€##@b`# Ň`aź€ Ôˇ˘Ł¤ńňó€#@(€(YHelveticaŇ78ö÷¤÷Ë~;\NSSliderCellŇ78ůúĄúűüý;XNSSliderYNSControlVNSView[NSResponderŮh|ij^2˙lOmO[NSExtension€ €€|€, €€}€~€ Ň>u €{Ż  €-€4€9€=€B€G€K€O€S€W€[€_€c€h€l€o€s€wŘh|~j^ly !"p†my€+€3€.€/ €€+_{{37, 35}, {37, 33}}ÝŽ()*+,‘’-“./0™2X3443 89:_NSAlternateContents_NSPeriodicInterval^NSButtonFlags2_NSAlternateImage_NSKeyEquivalent_NSPeriodicDelay]NSButtonFlagsţ€2€K€1€0€0€1€-˙˙˙˙††@˙Q2Ôˇ˘Ł¤>¦@€#@*€Ň78BC¤CË~;\NSButtonCellŇ78EFĄFűüý;XNSButtonŮh|~j^lHy KLp†myPUNSTag€+€3€5€6 €€+j_{{114, 101}, {37, 33}}ŢŽ()*+,‘’-“.H/0™2X3VW3 89:P€2€€1€8€7€1€4a"Q-Řh|~j^ly _`p†my€+€3€:€; €€+_{{75, 68}, {37, 33}}ÝŽ()*+,‘’-“./0™2X3ii389:€2€€1€<€<€1€9Q6Ůh|~j^lHy qr†myv€+€3€>€? €€+k_{{114, 134}, {37, 33}}ŢŽ()*+,‘’-“.H/0™2X3|}389:v€2€€1€A€@€1€=a×Q*Ůh|~j^lHy …††myŠ€+€3€C€D €€+i_{{75, 134}, {37, 33}}ŢŽ()*+,‘’-“.H/0™2X3‘389:Š€2€€1€F€E€1€Ba÷Q/Řh|~j^ly ™šp†my€+€3€H€I €€+_{{114, 68}, {37, 33}}ÝŽ()*+,‘’-“./0™2X3ŁŁ389:€2€€1€J€J€1€GQ+Řh|~j^ly «¬p†my€+€3€L€M €€+_{{75, 101}, {37, 33}}ÝŽ()*+,‘’-“./0™2X3µµ389:€2€€1€N€N€1€KQ9Řh|~j^ly ˝ľp†my€+€3€P€Q €€+_{{-2, 2}, {76, 33}}ÝŽ()*+,‘’-“./0™2X3ÇÇ389:€2€€1€R€R€1€OQ0Řh|~j^ly ĎĐp†my€+€3€T€U €€+_{{75, 35}, {37, 33}}ÝŽ()*+,‘’-“./0™2X3ŮŮ389:€2€€1€V€V€1€SQ3Řh|~j^ly áâp†my€+€3€X€Y €€+_{{37, 68}, {37, 33}}ÝŽ()*+,‘’-“./0™2X3ëë389:€2€€1€Z€Z€1€WQ5Řh|~j^ly óôp†my€+€3€\€] €€+_{{-2, 35}, {37, 33}}ÝŽ()*+,‘’-“./0™2X3ýý389:€2€€1€^€^€1€[Q1Řh|~j^ly p†my€+€3€`€a €€+_{{75, 2}, {37, 33}}ÝŽ()*+,‘’-“./0™2X3389:€2€€1€b€b€1€_Q.Ůh|~j^lHy p†my€+€3€d€e €€+h_{{114, 2}, {37, 66}}ŢŽ()*+,‘’-“.H/0™2X3"#389:€2€€1€g€f€1€cQ=Q Ůh|~j^lHy +,†my0€+€3€i€j €€+d_{{-2, 134}, {37, 33}}ŢŽ()*+,‘’-“.H/0™2X3™7389:0€2€€1€€k€1€hQCŮh|~j^lHy >?†my€+€3€m€n €€+_{{37, 134}, {37, 33}}ŢŽ()*+,‘’-“.H/0™2X3##389:€2€€1€f€f€1€lŘh|~j^ly OPp†my€+€3€p€q €€+_{{-2, 101}, {37, 33}}ÝŽ()*+,‘’-“./0™2X3YY389:€2€€1€r€r€1€oQ7Řh|~j^ly abp†my€+€3€t€u €€+_{{37, 101}, {37, 33}}ÝŽ()*+,‘’-“./0™2X3kk389:€2€€1€v€v€1€sQ8Řh|~j^ly stp†my€+€3€x€y €€+_{{-2, 68}, {37, 33}}ÝŽ()*+,‘’-“./0™2X3}}389:€2€€1€z€z€1€wQ4Ň78„Ł„…;^NSMutableArrayWNSArray_{{11, 5}, {149, 165}}Ň78‰¤‰üý;\NSCustomViewŘh|~j^lOŚŤŽʆmO€ €€€‚ €€ _{{11, 225}, {149, 21}}ŮŽŹ‘’“”••—™3z›†ž˙˙˙˙„ˇţ€!€€€1€€@ €Ň78ź‹Ą‹űüý;Z{171, 255}Ň78˘üŁüý;_{{0, 0}, {1680, 1028}}Z{171, 277}_{3.40282e+38, 3.40282e+38}UwcalcŇ78¨©˘©;_NSWindowTemplateŇ78«¬Ł¬­;\NSMutableSetUNSSetŇ>u°€{Żk±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚„…†‡‰Š‹ŚŤŽŹ‘’“”•–—™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙     €Ž€š€Ć€Ň€Ö€Ţ€ç€ě€í€ń€ö€ű€˙ !'+-Kegmš¤Ş«±˛´ą˝ĆĘÍĎŃÔçěí )-04~‰Ž‘“”™ś ¤Ą¦¨­®±´ş˝ľŔÜÝâăäĺçčéđńňóôůűýţ˙ !"#$*.9:@BCEGHIJNghmnpuvx{ťž ˘Ł§¨©Ş¬°˛´¶ËĚÍÎĐŐ×ŘŮÚŢ  ‚„…‡ŠŚŤŽŹ‘–—š›śťž ˇ˘¦ąş»Ľ˝ľżŔÁÂÄĹĆÇČĚÍÎĎĐŃŇÓÔÖ×ŘÝäĺçčęěîďđńö÷řůţ  "#$&'*+,-.01346789;<>@ABCDEFGHJKLMNdefghjlmoprtuwyz{|}€‚„…‡‰Š‹ŤŹ‘’“”•–—™š›śŘÚŰÜÝßŕáâăĺćçéęěíîđńóôů CDEIKMOQSUWY[]_Ô !"#]NSDestinationXNSSourceWNSLabel€™€–€Ź€×h|~jl% '(p†%€€3€‘€’ €Őhijk+n.p/€€†{_{{240, 87}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™67"89:€2€€•€€“€”€ŹQiÔˇ˘Ł¤<¦ó€#@$€Ôˇ˘Ł¤<¦A€€ Ň23D€€—_WcalcControllerZenterData:Ň78HIŁIJ;_NSNibControlConnector^NSNibConnectorÔLMNO€Ĺ€ť€›€ÄŇ23R€€ś_InspectorControllerßhUVWŹXYZ[\jk]^_l`abcĺdef˛†ijklpm†op»crYs_NSDraggingSourceMaskForNonLocalYNSTvFlags\NSHeaderView_NSAllowsTypeSelect\NSCornerView_NSIntercellSpacingWidth_NSColumnAutoresizingStyle_NSIntercellSpacingHeight^NSAutosaveName[NSGridColor_NSGridStyleMask^NSTableColumns_NSDraggingSourceMaskForLocal[NSRowHeight€ž€Ă˙˙˙˙ű@€€ € €¤#@#@€ź €Â€ż€ž€¨#@,Úh|uijvwlxyz{|}~M€yMYNScvFlagsYNSDocViewYNSBGColor]NSNextKeyView€ĄCBA €ť€Ľ€Ą€ťZ{432, 262}Öhjkl…†‡p†M[NSTableView€ˇ€Ł€˘€ˇ€ťÚh|uijvwlxyzŽ|Ź~f€yf€ĄCKJ€ €Ľ€Ą€ Y{432, 17}Ň78–—¤—üý;_NSTableHeaderViewŐh|jlyš›śy€Ą€§€¦˙˙˙˙€€ĄÝhź| ˇi˘jlŁx¤Ą¦§¨©†«¬…Ą®cc[NSHScrollerXNSsFlags_NSHeaderClipView\NSScrollAmts[NSVScroller]NSContentView>HML2€ˇ@OA A A€A€>D€ž€ž_{{-26, 0}, {16, 17}}Ň78ł´¤´üý;]_NSCornerViewŇ>u·€{˘¸ą€©€µÚ»Ľ˝ľżŔÁÂ…†ÄĹĆÇČ»ÉĘM^NSIsResizeable\NSHeaderCell\NSIdentifierWNSWidthZNSDataCell^NSResizingMaskZNSMinWidthZNSMaxWidth €´€«€Ş#@k`€±#@D#@Ź@€ťWhistory׎Ź‘“•ÎĎĐŃš9Óţ€°€­€¬€€®ZExpressionӮ౻׀K0.33333334Ő­®Ż°±Áł۵€€ €Ż€_headerTextColorŇ78ßŕĄŕĘË~;_NSTableHeaderCell׎Ź‘’“•â—˛šMçč1ţ@€!€€€ť€˛Ő­®Ż°±Áłěµ€€ €ł€_controlTextColorŇ78đń˘ń;]NSTableColumnÚ»Ľ˝ľżŔÁÂ…†Äőö÷ř»ůĘM €´€·€¶#@iŕ€»#@Bgđ€ťVresult׎Ź‘“•/Ďţ˙š9Ó€°€ą€¸€€®VResultŐ­®Ż°±˛łµ€€€ş€[headerColorŘŽŹ‘’“”•â—€šM†č€!€Ľ€€ť €˛Ő­®Ż°±łµ€€ľ€˝€_controlBackgroundColorӮ౻€K0.66666669Ő­®Ż°±łµ€€Á€Ŕ€YgridColorӮ౻"€D0.5YinspectorŇ78%…Ą…űüý;[historyListŇ78()Ł)J;_NSNibOutletConnectorÔ !-.€™€–€Ç€ŃŮ0123456H789™;<=>?WNSTitle_NSKeyEquivModMaskZNSKeyEquiv]NSMnemonicLocYNSOnImage\NSMixedImageVNSMenu€Đ€É€˙˙˙€Ę€Î€Č Ó0ABCD[NSMenuItems^Cosecant (csc)Ó2GHIJ^NSResourceName€Í€Ë€ĚWNSImage_NSMenuCheckmarkŇ78NO˘O;_NSCustomResourceÓ2GHIS€Í€Ë€Ď_NSMenuMixedStateŇ78VW˘W;ZNSMenuItem]menuFunction:Ô !\#€™€–€Ó€×h|~jl% abp†%€€3€Ô€Ő €_{{321, 29}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™7\89:€2€€•€€F€”€ÓÔLp!r€Ĺ€×€–€ÝŘh|~jlHtuvwx†t{€Ř€Ü€Ů€Ú €ŘŐh|ij+n€…€€†·˛_{{148, 135}, {19, 27}}ÚÚŽÝŢ’“„H…†‡‰pĺ†{[NSIncrement\NSAutorepeat#@ ţ €Ű#@@#@°€× Ň78ŤޤŽË~;]NSStepperCellŇ78‘Ą‘űüý;YNSStepper[bitsStepperÔ !–—€™€–€ß€ćŘh|~jlHt ›śx†tź€Ř€3€ŕ€á €Ř_{{15, 203}, {108, 18}}ŢŽ()*+,‘’-“.H/0™¤XĄ™§3–Şĺ«ź€2€€ă€€â€1€ßČHu?€{¨@ABCDEĺG €ňŘ01234567J9K;<=í€Đ €Ę€Î€óTUndoQzŘ01234567S9T;<=í€Đ€Ę€Î€óTRedoQZÚ01[2\34567™9†™†;<=í]NSIsSeparator\NSIsDisabled€Đ€ € €Ę€Î€óŘ01234567g9h;<=í€Đ€Ę€Î€óSCutQxŘ01234567p9q;<=í€Đ€Ę€Î€óTCopyQcŘ01234567y9z;<=í€Đ€Ę€Î€óUPasteQvŘ01234567‚9;<=í€Đ€Ę€Î€óZSelect AllQaŇ78Š6˘6;TmenuÔ !Ź—€™€–"€ćŘh|~jlH’ ”•x†’#€3$% # Őh|ij+nśťp€€†»ş_{{15, 199}, {183, 18}}ŢŽ()*+,‘’-“.H/0™¤XĄ™¤3ŹŞĺ«€2€€ă€&€1"_Record Errors in HistoryÔ !«.€™€–(€ŃŮ0123456H7Ż9™;<=ł´€Đ*€€Ę€Î)(Ó0AB·¸_Sampling Function (sinc)ÔLzwľ€Ĺ€€€,[AnswerFieldÔLÂĂ9€ĹB. ßhUVWŹXYZ[\jk^_l`abĆĺdČɲ†Ějklp͆p»ĆŃYs/€Ă˙˙˙˙ú@€1€ 40 €ż/7Úh|uijvwlxÓzŐ|Ö~Ă€ÓĂ5Ca`.€Ľ5.Öhjkl…܇pŢÜĂ2€Ł32.Úh|uijvwlxÓzä|ĺ~É€ÓÉ5Cgf1€Ľ51Őh|jlÓšíśÓ5€§65Ýhź| ˇi˘jlŁx¤đń§óôÜö¬…đřĆĆ]dMh2_]b//_{{-22, 0}, {12, 17}}Ň>uţ€{˘˙8=Ű»Ľ˝ľżŔÁÂ…†Ä»ÉʆĂ\NSIsEditable €´:9#@ks+< .Xvariable׎Ź‘“•ÎĎĐš9Ó€°€­;€€®XVariable׎Ź‘’“•â—˛šĂč€!€€.€˛Ű»Ľ˝ľżŔÁÂ…†Ä» ʆĂ €´?>#@iĚŐA#@BłT .Uvalue׎Ź‘“•ÎĎĐ'š9Ó€°€­@€€®UValue׎Ź‘’“•â—˛šĂçč€!€€.€˛Ô0˘AB3™5C€DTMenuŇ>u9€{¤:;<=EFHJŮ0123456H7p9™;<=ÂE€Đ€€Ę€ÎBšŘ01234567H9™;<=€ĐG€€Ę€ÎBSNewŘ01234567P9™;<=€ĐI€€Ę€ÎBVDeleteŘ01234567é9™;<=€Ѐô€€Ę€ÎBÔL_`a€ĹQLdŘh|~jlHc efx†cłM€3NO MŐh|ij+nlmp€€†Ëľ_{{17, 199}, {106, 18}}ŢŽ()*+,‘’-“.H/0™¤XĄ™t3`Şĺ«ł€2€€ă€P€1L^Print PrefixesŘh|~jlHcz{|x†cMcRS M _{{20, 71}, {173, 22}}ߎ‚()*+,‘W’„…†-“6.‡†k‰2ŠkšŚšŽ_»††8’“”_NSMenuItemRespectAlignment_NSArrowPosition_NSPreferredEdge_NSUsesItemFromMenu]NSAltersState˙˙˙˙„Aţ@ Tb€U€VQ W‚@˙Ň`aź€ Ň`aź€ Űš0123456›ś|7ź9™;<=“¤kXNSTargetXNSActionWNSStateS€ĐX€€Ę€ÎWYÓ0AB§¨Z[TNone__popUpItemAction:Ň`a­€ ZOtherViewsŇ>u°€{ŁŽ˛łV\_Úš0123456›|7·9™;<=“ĽS€Đ]€€Ę€ÎW^VSimpleÚš0123456›|7Á9™;<=“ĆS€Đ`€€Ę€ÎWa_Significant FiguresŇ78ÉʦĘËCË~;_NSPopUpButtonCell^NSMenuItemCellŇ78ÍΦÎFűüý;]NSPopUpButton[nextKeyViewÓ GÓ€™fZselectAll:ÔL×!Ů€Ĺh€–lŮ0123456H7Ü9Ý;<=ŕá€Đjk€Ę€ÎiéÓ0ABäĺáâTSaveQs\saveMenuItemÔLë!í€Ĺn€–™Řh|~jlH’Śńňó†’ö#€op #_{{286, 176}, {67, 19}}ŰůŽŹ‘’ú“”H•űü—šë†öž_NSAllowedInputLocales[NSFormatter–˙˙˙˙”qţA€!€€nq@ €ß     +dž!+#$†ęVNS.nilZNS.decimalVNS.nan[NS.roundingWNS.zero_NS.negativeattrsVNS.max]NS.attributes_NS.positiveformat_NS.allowsfloats_NS.negativeformat_NS.positiveattrs[NS.thousandVNS.min\NS.localized_NS.hasthousands•…€b’€Ž‹r€R Ś€‘ Ó(>)*9WNS.keys”®+,-./012345678stuvwxyz{|}~€®$=>!ÇBE#…‡Š‹Ś€RŤŽ€b‘’Wminimum_textAttributesForNegativeValues_attributedStringForNilVlocale\allowsFloatsWmaximum^negativeFormat^positiveFormat_usesGroupingSeparator_attributedStringForZero_decimalSeparator_formatterBehavior_groupingSeparator_attributedStringForNotANumber×WXYZ[\]ęĺkĺ_ęZNS.compact[NS.exponent^NS.mantissa.boYNS.length[NS.mantissa[NS.negative‚OŇ78bc˘c;_NSDecimalNumberPlaceholderÓ(>efg„  Ň78ij˘j;\NSDictionaryŇfl™†€Ň78op˘p;_NSAttributedStringŇrst]NS.identifier‰Uen_USŇ78wx˘x;XNSLocale ×WXYZ[\]†|kk}ę‚ OR-0Ó‚fl„Ç\NSAttributes†Ź€RÓ(>e‰„  čQ,Ó‚fl„ʆʓSNaNŇ78’“Ł“j;_NSMutableDictionaryŇ78•–Ł–ú;_NSNumberFormatterŇ>™ˇš—_&NSAllRomanInputSourcesLocaleIdentifierŇ78ť…˘…;_limitHistoryLenÔ ˇ˘Ł€™ˇ›Ł×h|~jlĄ §¨p†Ąś€3ťž śŐh|ij+n®Żp€€†>%_{{228, 12}, {91, 32}}ÝŽ()*+,‘’-“./0™¤k´"¶3˘Şąş€2€ €gź€1›8˙˙˙˙†‚@˙UOops.Ôˇ˘Ł¤>ňó€€(Ň23Á€˘_ErrorController[closeAlert:Ô ÇČ€™€Ą©Ř01234567Ë9Ě;<=πЧ¨€Ę€Î¦Ô0˘ABSÓÔ€ ÝĆZHide WcalcQhUhide:Ô !#€™€–€W€ÔLß!á€Ĺ¬€–°Ř01234567ä9ĺ;<=č€Đ®݀ƀέÔ0˘ABëěíĆŃÇ[Hide KeypadQt^sizeToggleMenuÔLa€Ĺ€w€SdÔLĂ!ú€Ĺ.€–ł\variableListÔ !˙ €™€–µ¸Ů0123456H7 9™;<=  €Đ·€€Ę€Î¶“Ó0AB §©_Boltzmann Constant (k)]menuConstant:Ô ! —€™€–ş€ćŘh|~jlHcu  x†c M€Ü»Ľ M_{{152, 25}, {19, 27}}ŰÚŽ ÝŢ’“„H醇 † "é ĺ† \NSValueWraps€Ű#?đ #@̶ş Ô ! ( )€™€–ľĹ×h|~jl + - . /† +ż€3ŔÁ! żŐh|ij+n 5 6p€€†˙ă_{{250, 12}, {94, 32}}ÝŽ()*+,‘’-“./0 :¤k´ < =3 (Şąş€2àĀ1ľXConvert!Ň`aź€ Ň`aź€ Xconvert:Ô ! I#€™€–Ç€×h|~jl% N Op†%€€3ČÉ €_{{45, 58}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™7 I89:€2€€•€€”ÇÔ ! ^.€™€–Ë€ŃŮ0123456H7 b9™;<=ł g€ĐĚ€€Ę€Î)_Logarithm [base 2] (logtwo)ÔLA m€Ĺ€€üÎZmainWindowÔLˇ! s€Ĺˇ€–Đ_errorControllerÔ ! x.€™€–Ň€ŃŮ0123456H7 |9™;<=ł €ĐÓ€€Ę€Î)'_Exponential Integral (eint)ÔL …! ‡€ĹŐ€–ćŘh|~jlHcz ‹ Śx†c»McÖ× M_{{18, 113}, {173, 22}}ߎ‚()*+,‘W’„…†-“6.‡†k ’2Škš •š — …»††8’ ›” Řb€Ů€ÚŐ ŰŇ`aź€ Ň`aź€ Űš0123456›ś Ś7 Ł9™;<= › ¨k×€ĐÜ€€Ę€ÎŰÝÓ0AB « ¬ŢßYAutomaticŇ`a­€ Ň>u ˛€{Ł — ´ µÚŕăÚš0123456› Ś7 ą9™;<= › ľ×€ĐကʀÎŰâUNeverÚš0123456› Ś7 Ă9™;<= › Č×€Đ䀀ʀÎŰĺVAlways_engineeringNotationÔ ! Î#€™€–č€×h|~jl% Ó Ôp†%€€3éę €_{{0, 116}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ Ý7 Î89:€2€€•€뀔čQ`ÔLxa€Ĺ€[€#dÔL č é ę€ĹđîŇ23 í€ď^ConversionList×h|~jl +z ň óʆ +żcńň ż_{{17, 262}, {324, 26}}ߎ‚()*+,‘W’„…†-“6.‡†k™2Šk3 ü3 ţ 軆†8ç ş €b€1ó€1ôđ őŇ`aź€ Űš0123456›ś ó7 9™;<=  kň€Đö€€Ę€Îő÷Ó0AB  řůVLengthŇ`a­€ Ň>u €{« ţ        ! "ôúý  Úš0123456› ó7 &9™;<=  +ň€Đű€€Ę€ÎőüTAreaÚš0123456› ó7 09™;<=  5ň€Đţ€€Ę€Îő˙VVolumeÚš0123456› ó7 :9™;<=  ?ň€Đ€€Ę€ÎőTMassÚš0123456› ó7 D9™;<=  Iň€Đ€€Ę€ÎőUSpeedÚš0123456› ó7 N9™;<=  Sň€Đ€€Ę€ÎőUPowerÚš0123456› ó7 X9™;<=  ]ň€Đ €€Ę€Îő UForceÚš0123456› ó7 b9™;<=  gň€Đ €€Ę€Îő\AccelerationÚš0123456› ó7 l9™;<=  qň€Đ€€Ę€Îő[TemperatureÚš0123456› ó7 v9™;<=  {ň€Đ€€Ę€ÎőUAngleÚš0123456› ó7 €9™;<=  …ň€Đ€€Ę€ÎőXPressureWtheTypeÔ ! ‹#€™€–€×h|~jl% ‘p†%€€3 €_{{327, 87}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ š7 ‹89:€2€€•€€”Q[Ó E ˇ€™Vpaste:Ô Ą ¦ §€™&!(×h|~jl © « ¬ ­† ©"€3#$$ "Őh|ij+n ł ´p€€†^S_{{-2, 0}, {71, 28}}ÝŽ()*+,‘’-“./0™¤kš şHš ¦Ş ľş€2€€%G€!Ň`aź€ Ň23 Ă€'[PersVarListWaddVar:Ô ! É €™€–*¸Ů0123456H7 Í9™;<= Ń Ň€Đ,€€Ę€Î+;Ó0AB Ő ÖŤŹoTau Mass (MÄ/Mtau)Ô ! Ű €™€–.¸Ů0123456H7 ß9™;<= Ń ä€Đ/€€Ę€Î+._Bohr Radius (ao)Ô ! é €™€–1¸Ů0123456H7 í9™;<= ńX€Đ3€€Ę€Î2Ó0AB ô őZ\QeÔL ů! ű€Ĺ5€–}ÝCDEFGHIJKLMN ýP ˙o     X  :€‹z€Â7px86|{9_{{34, 75}, {440, 341}}YInspectorŇ`a € WNSPanelŇ`ab€ Őhijk+n p €€†;yŇ>u €{ˇ <Üh V|«ij”l   ý  9 š !…† ý† %^NSTabViewItems_NSAllowTruncatedLabels_NSSelectedTabViewItem:xTS€= : UŇ>u (€{ˇĄ>Öh|ijl n - .p <€†R?<Ň>u 2€{˘y 4€ĄNŇ>u 7€{Ąc®¦†i€žDH€ˇ€¤Ň>u ?€{ˇM€ť_{{1, 17}, {432, 262}}Ň78 C D¤ Düý;ZNSClipViewŘhš|j›l Fyy I Jś Ky MYNSPercent€Ą€ĄGEF€Ą#?ď}s@_{{-30, 17}, {15, 247}}\_doScroller:Ň78 Q RĄ Rűüý;ZNSScrollerŮhš| j›l Fyy I Wkś Ky Z€Ą€ĄGIF€Ą#?ďMéŔ_{{1, -30}, {417, 15}}Ň>u ^€{ˇf€ _{{1, 0}, {432, 17}}_{{0, 29}, {434, 280}}Ň78 c d¤ düý;\NSScrollView×h|~jlĄ h i ­†Ą>€3OP >_{{368, -2}, {71, 28}}ÝŽ()*+,‘’-“./0™¤kš qéš 4Ş ľş€2€€Q€ô€NŇ`aź€ _{{10, 25}, {434, 309}}_{{-7, -10}, {454, 347}}Ň>u {€{˘ % }U[Ö˝ü ­ € Ą  „ …YNSTabViewZV><XWŇ`a€ WHistoryŐ­®Ż°±ł ڵ€€ľY€\controlColorŇ78 ‘˘ ‘;]NSTabViewItemÖ˝ü ­ € ”đ  „ Z\]<XwŇ`a;€ Őh|ij+n ž źp€€†v^Ň>u ˘€{¤Ó ¤ Ą ¦5inrŇ>u ©€{ĄĆřńÜĚ/bd24Ň>u ±€{ˇĂ.Řhš|j›l FÓÓ I ·ś KÓ ş55GcF5#?ďÔâ`_{{-22, 17}, {11, 262}}Ůhš| j›l FÓÓ I Ŕkp KÓ Ă55GeF5#?ď±ű _{{-100, -100}, {140, 15}}Ň>u Ç€{ˇÉ1×h|~jlđ Ě Í Î†đ]€3jk% ]_{{181, -2}, {71, 28}}ÝŽ()*+,‘’-“./0™¤k Ő ÖPš ¤Ş Úş€2€lmI€i:Ôˇ˘Ł¤Ąňó€€(Ň`aź€ ×h|~jlđ ă ä /†đ]€3op ]ÝŽ()*+,‘’-“./0™¤k Ő ëéš ĄŞ Úş€2€lq€ô€nŇ`aź€ ×h|~jlđ ô ő ­†đ]€3st ]_{{-5, -2}, {71, 28}}ÝŽ()*+,‘’-“./0™¤k Ő ýHš ¦Ş Úş€2€luG€rŇ`aź€ YVariablesŇ78  ¤ üý;Z{440, 341}Z{213, 129}_inspectorWindowÔ !#€™€–€9€ÔL   €Ĺ‚€Ň23 €_AboutBoxControllerŘh|~j^l Ś  p†  €„† …×hijk^l n "p #  %…€†ţ…_{{14, 20}, {100, 14}}ŘŽŹ‘’“•/— „ *š  -č€!X‡€‚@€˛]Version 1.1.1WversionÔ ! 4#€™€–Š€×h|~jl% 9 :p†%€€3‹Ś €_{{37, 87}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ C7 489:€2€€•€Ť€”ŠQqÔL IM€ĹŹ€ť€ţŇ23 N€[HistoryListÔLx! T€Ĺ€#€–’_PrecisionSliderÔ ! #€™€–€4€Ó ] ^€™•Ř01234567 a9™;<= e€Đ—€€Ę€Î–Ô0˘AB h i jéëęZClear Menu_clearRecentDocuments:Ô ! p.€™€–š€ŃŮ0123456H7 t9™;<=> y€Đ›€€Ę€Î€Č"_%Inverse Cosecant (acsc/arccsc/csc^-1)Ô } ¤ €™ťiźŇ23 ‚€ž\VariableList\delVariable:Ô I ‰€™ŹˇŁŘ01234567é9™;<= €Đ€ô€€Ę€Î˘Ô0˘AB3™ •C€y]clearHistory:ÔLa€Ĺ€B€_dÔLM!O€Ĺ€ť€–€ÄÔL*! Ą€Ĺ€–§^conversionMenuÔ ! Ş—€™€–©€ćŘh|~jlHc Ż °x†c łM€3Ş« M_{{17, 157}, {120, 18}}ŢŽ()*+,‘’-“.H/0™¤XĄ™ ş3 ŞŞĺ« ł€2€€ă€¬€1©_Print DelimitersÔLz!ľ€Ĺ€€€–,Ô ! Ć €™€–ݏŮ0123456H7 Ę9™;<= Ń Ď€Đ°€€Ę€Î+9_Proton Mass (Mp)Ô ! Ô €™€–˛¸Ů0123456H7 Ř9™;<= Ń Ý€Đł€€Ę€Î+4o!Fine-Structure Constant (±/alpha)ÔL á! ă€Ĺµ€–ąŘh|~jlH% ç čp†% 뀀3¶· €g_{{350, 29}, {86, 30}}ŢŽ()*+,‘’-“.H/0™2ł7™ ň7 á89 ő ë€2€€”€¸€”µ˙˙˙˙¶†@˙UshiftYshiftKey2Ô ! ű.€™€–»€ŃŮ0123456H7 ˙9™;<=ł €ĐĽ€€Ę€Î)_Random Integer (irand)Ô !#€™€–€G€ÔL! €Ĺ€€–żTmetaÔL €Ĺ€üÁ€ţÔ0˘AB   ÂŰĂXMainMenuŇ>u €{¨  ! " # $ % &ÄŢđó˙YĂŇÚ (0123456›7ĎS9™;<=  0YNSSubmenu€Đ¦€ €€Ę€ÎÁĹ^submenuAction:Ň>u 4€{« 5 6 7 8 9 :Ç < = > ?ÇÉĘÍÎŐĄÖŘÚŰ×0234567 B™;<=Ď€ĐČ€€Ę€Î¦[About WcalcÚ01[2\34567™9†™†;<=πЀ € €Ę€Î¦Ř01234567 S9 T;<=Ď€ĐË̀ʀΦ^Preferences...Q;Ú01[2\34567™9†™†;<=πЀ € €Ę€Î¦Ú (0123456›7 e f9™;<=Ď k€ĐŃĎ€€Ę€Î¦ĐXServicesÔ0˘AB o p qŇÔÓŇ`a l€ Ň>u v€{ __NSServicesMenuÚ01[2\34567™9†™†;<=πЀ € €Ę€Î¦Ř01234567 9™;<=Ď€Đ×€€Ę€Î¦[Hide OthersŘ01234567 ‹9™;<=Ď€ĐŮ€€Ę€Î¦XShow AllÚ01[2\34567™9†™†;<=πЀ € €Ę€Î¦Ř01234567 ś9 C;<=Ď€ĐÜŤ€Ę€Î¦ZQuit Wcalc\_NSAppleMenuÚ (0123456›7ŕ ¦9™;<=  «€Đi߀€Ę€ÎÁŕTFileŇ`a ¬€ Ň>u ±€{Ą ˛ ł ´× ¶ăćěhíŘ01234567 ą9 ş;<=ŕ€Đäĺ€Ę€ÎiWOpen...QoÚ (0123456›7 e Ă9™;<=ŕ ȀЖ瀀ʀÎič[Open RecentŇ`a É€ Ň>u ΀{ˇ ]•__NSRecentDocumentsMenuÚ01[2\34567™9†™†;<=ŕ€Đ€ € €Ę€ÎiŮ0123456H7 Ü9 Ý;<=ŕ á€Đîď€Ę€ÎięZSave As...QSÚ (0123456›7í ç9™;<=  ě€Đ€óń€€Ę€ÎÁňÚ (0123456›7"9™;<=  ő€Đô€€Ę€ÎÁőŇ>u ř€{Ą ů ú* ý÷ůüŘ0123456796;<=€Đř€“€Ę€Î^Show InspectorŘ012345679 ;<=€Đúű€Ę€Î_Show Base DrawerQbŘ012345679;<=€Đýţ€Ę€Î_Preloaded VariablesQVÚ (0123456›7ł·9™;<=  €Đ)€€Ę€ÎÁYFunctionsŇ>u$€{Ż%&'() ^+,-.«0123 x56789:;<=> ű568Ë:;=?(ABDFŇHJLMOQRTVW»Ú (0123456›7>C9™;<=łH€Đ€Č€€Ę€Î)]TrigonometricŇ>uL€{¬MNOPQ-STUVW p   €ÇšŮ0123456H7[9™;<=>k€Đ€€Ę€Î€ČZSine (sin)Ů0123456H7c9™;<=>X€Đ €€Ę€Î€Č\Cosine (cos)Ů0123456H7k9™;<=>»€Đ €€Ę€Î€Č]Tangent (tan)Ů0123456H7s9™;<=> €Đ€€Ę€Î€Č_Cotangent (cot)Ů0123456H7{9™;<=>€€Đ€€Ę€Î€Č\Secant (sec)Ů0123456H7„9™;<=>|€Đ€€Ę€Î€Č_!Inverse Sine (asin/arcsin/sin^-1)Ů0123456H7Ś9™;<=>‘€Đ€€Ę€Î€Č_#Inverse Cosine (acos/arccos/cos^-1)Ů0123456H7•9™;<=>ł€Đ€€Ę€Î€Č_$Inverse Tangent (atan/arctan/tan^-1)Ů0123456H7ť9™;<=>˘€Đ€€Ę€Î€Č_&Inverse Cotangent (acot/arccot/cot^-1)Ů0123456H7¦9™;<=>«€Đ€€Ę€Î€Č!_#Inverse Secant (asec/arcsec/sec^-1)Ú (0123456›7Üŕ9™;<=łµ€Đ€ď€€Ę€Î)_Hyperbolic FunctionsŇ>uą€{¬Ô»Ľ˝ľżŔÁÂĂÄĹ€î!#%')+-/13Ů0123456H7Č9™;<=ǛР€€Ę€Î€ď_Hyperbolic Cosine (cosh)Ů0123456H7Ń9™;<=ÜÖ€Đ"€€Ę€Î€ď _Hyperbolic Tangent (tanh)Ů0123456H7Ú9™;<=Ü߀Đ$€€Ę€Î€ď_Hyperbolic Cotangent (coth)Ů0123456H7ă9™;<=Üč€Đ&€€Ę€Î€ď#_Hyperbolic Secant (sech)Ů0123456H7ě9™;<=Üń€Đ(€€Ę€Î€ď$_Hyperbolic Cosecant (csch)Ů0123456H7ő9™;<=Ü€Đ*€€Ę€Î€ď_0Inverse Hyperbolic Sine (asinh/areasinh/sinh^-1)Ů0123456H7ý9™;<=Ü€Đ,€€Ę€Î€ď_2Inverse Hyperbolic Cosine (acosh/areacosh/cosh^-1)Ů0123456H79™;<=Ü €Đ.€€Ę€Î€ď _3Inverse Hyperbolic Tangent (atanh/areatanh/tanh^-1)Ů0123456H79™;<=ܤ€Đ0€€Ę€Î€ď_5Inverse Hyperbolic Cotangent (acoth/areacoth/coth^-1)Ů0123456H79™;<=Ü€Đ2€€Ę€Î€ď%_2Inverse Hyperbolic Secant (asech/areasech/sech^-1)Ů0123456H79™;<=Ü$€Đ4€€Ę€Î€ď&_4Inverse Hyperbolic Cosecant (acsch/areacsch/csch^-1)Ú01[2\34567™9†™†;<=ł€Đ€ € €Ę€Î)Ů0123456H719™;<=łö€Đ7€€Ę€Î)_Natural Logarithm (ln)Ů0123456H799™;<=ł>€Đ9€€Ę€Î) _Logarithm [base 10] (log)Ú01[2\34567™9†™†;<=ł€Đ€ € €Ę€Î)Ů0123456H7K9™;<=łP€Đ<€€Ę€Î)_Gamma Function (Gamma)Ů0123456H7T9™;<=łY€Đ>€€Ę€Î)_Log Gamma Function (lnGamma)Ů0123456H7]9™;<=łb€Đ@€€Ę€Î)_Zeta Function (zeta)Ú01[2\34567™9†™†;<=ł€Đ€ € €Ę€Î)Ů0123456H7o9™;<=łY€ĐC€€Ę€Î)_Nearest Integer (round)Ů0123456H7w9™;<=łó€ĐE€€Ę€Î)_Absolute Value (abs)Ů0123456H79™;<=ł„€ĐG€€Ę€Î)+_One's Complement (comp)Ů0123456H79™;<=łŤ€ĐI€€Ę€Î))_Exponential Power (exp)Ů0123456H7‘9™;<=ł–€ĐK€€Ę€Î)*_Factorial (fact)Ú01[2\34567™9†™†;<=ł€Đ€ € €Ę€Î)Ů0123456H7Ł9™;<=ł ł€ĐN€€Ę€Î)oSquare Root (sqrt/")Ů0123456H7«9™;<=łź€ĐP€€Ę€Î)_Cube Root (cbrt)Ú01[2\34567™9†™†;<=ł€Đ€ € €Ę€Î)Ů0123456H7Ľ9™;<=łÁ€ĐS€€Ę€Î)_Next-lowest Integer (floor)Ů0123456H7Ĺ9™;<=ł{€ĐU€€Ę€Î)_#Next-highest Integer (ceil/ceiling)Ú01[2\34567™9†™†;<=ł€Đ€ € €Ę€Î)Ů0123456H7Ö9™;<=łŰ€ĐX€€Ę€Î)_Random Value (rand)Ú (0123456›7 ń ô9™;<= ĺ€Đ2Z€€Ę€ÎÁ[WSymbolsŇ>ué€{®ę éěíîďđńňóôőö÷]1_aceghyڦľżÁŮ0123456H7ú9™;<= ńk€Đ^€€Ę€Î2dpi/ŔŮ0123456H79™;<= ń»€Đ`€€Ę€Î2oEuler's Constant (ł/gamma)Ů0123456H7 9™;<= ńÍ€Đb€€Ę€Î2_Catalan Constant (K)Ů0123456H79™;<= ń|€Đd€€Ę€Î2_Acceleration due to gravity (g)Ů0123456H79™;<= ń‘€Đf€€Ę€Î2_Coulomb Constant (Cc)Ú01[2\34567™9†™†;<= ń€Đ€ € €Ę€Î2Ú (0123456›7+,9™;<= ń1€Đki€€Ę€Î2j_Universal ConstantsÓ0AB,6ilŇ>u9€{¦:;<=>?moqsuwŮ0123456H7B9™;<=+G€Đn€€Ę€Îke_Impedance of Vacuum (Z0/Zzero)Ů0123456H7K9™;<=+P€Đp€€Ę€Îkfo+Permittivity of Free Space (µ0/epsilonzero)Ů0123456H7T9™;<=+ ë€Đr€€Ę€Îko&Permeability of Free Space (µ0/muzero)Ů0123456H7\9™;<=+€Đt€€Ę€Îk_Gravitational Constant (G)Ů0123456H7d9™;<=+Š€Đv€€Ę€Îk_Planck Constant (h)Ů0123456H7l9™;<=+P€Đx€€Ę€Îk_Speed of Light (c)Ú (0123456›7tu9™;<= ńz€Đ|z€€Ę€Î2{_Electromagnetic ConstantsÓ0ABuz}Ň>u‚€{§„…†‡‰~€‚„†ŠŮ0123456H7Ś9™;<=t‘€Đ€€Ę€Î|ÉoBohr Magneton (µB/muB)Ů0123456H7•9™;<=tš€Đ€€Ę€Î|ĘoNuclear Magneton (µN/muN)Ů0123456H7ž9™;<=tŁ€Đ€€Ę€Î|Ë_Conductance Quantum (G0)Ů0123456H7§9™;<=t¬€Đ…€€Ę€Î|Ě_Elementary Charge (ec)Ů0123456H7°9™;<=tµ€Đ‡€€Ę€Î|Í_Josephson Constant (Kj)Ů0123456H7ą9™;<=tľ€Đ‰€€Ę€Î|Î_Von Klitzing Constant (Rk)Ů0123456H7Â9™;<=tǀЋ€€Ę€Î|ĎoMagnetic Flux Quantum (¦0)Ú (0123456›7 Ń Ő9™;<= ńŃ€Đ+Ť€€Ę€Î2Ž_Atomic and Nuclear ConstantsŇ>uŐ€{ŻÖ ŰŘŮÚŰÜ ÔŢßŕá Ćă É.’”–š˛śž ˘Ż¤*Ů0123456H7ç9™;<= Ńě€Đ‘€€Ę€Î+-oAlpha Particle Mass (M±/Malpha)Ů0123456H7đ9™;<= Ńő€Đ“€€Ę€Î+/_Deuteron Mass (Md)Ů0123456H7ů9™;<= Ńţ€Đ•€€Ę€Î+0_Electron Mass (Me)Ů0123456H79™;<= рЗ€€Ę€Î+1_Electron Radius (re)Ů0123456H7 9™;<= рЙ€€Ę€Î+2_Electron Volt (eV)Ů0123456H79™;<= рЛ€€Ę€Î+3_Fermi Coupling Constant (Gf)Ů0123456H79™;<= Ń"€Đť€€Ę€Î+5_Hartree Energy (Eh)Ů0123456H7&9™;<= Ń+€ĐꀀƀÎ+6_Helion Mass (Mh)Ů0123456H7/9™;<= Ń4€Đˇ€€Ę€Î+7oMuon Mass (Mµ/Mmu)Ů0123456H789™;<= Ń=€ĐŁ€€Ę€Î+8_Neutron Mass (Mn)Ů0123456H7A9™;<= ŃF€ĐĄ€€Ę€Î+:oRydberg Constant (R"/Rinf)Ú (0123456›7  9™;<= ńP€Đ¶§€€Ę€Î2¨_Physio-Chemical ConstantsŇ>uT€{«UV˙XYZ[\]^_ެµ®°˛´¶¸şĽŮ0123456H7b9™;<= g€Đ«€€Ę€Î¶‘_Atomic Mass Constant (u)Ů0123456H7k9™;<= p€Đ­€€Ę€Î¶’_Avogadro's Constant (Na/NA)Ů0123456H7t9™;<= y€ĐŻ€€Ę€Î¶”_Faraday Constant (F)Ů0123456H7}9™;<= ‚€Đ±€€Ę€Î¶•_First Radiation Constant (c1)Ů0123456H7†9™;<= ‹€Đł€€Ę€Î¶–_Loschmidt Constant (n0/nzero)Ů0123456H7Ź9™;<= ”€Đµ€€Ę€Î¶—_Molar Gas Constant (R)Ů0123456H79™;<= ť€Đ·€€Ę€Î¶_"Molar Volume of Ideal Gas (Vm/NAk)Ů0123456H7ˇ9™;<= ¦€Đą€€Ę€Î¶™_Second Radiation Constant (c2)Ů0123456H7Ş9™;<= Ż€Đ»€€Ę€Î¶šo#Stefan-Boltzmann Constant (Ă/sigma)Ů0123456H7ł9™;<= ¸€Đ˝€€Ę€Î¶›_"Wien Displacement Law Constant (b)Ú01[2\34567™9†™†;<= ń€Đ€ € €Ę€Î2Ů0123456H7Ĺ9™;<= ńł€ĐŔ€€Ę€Î2_A Random Value (random)Ů0123456H7Í9™;<= ń݀Ѐ€Ę€Î2_A Random Integer (irandom)Ú (0123456›7čÖ9™;<= ۀЭ€ƀÎÁĹVWindowŇ`aÜ€ Ň>uá€{ĄâăßĺćČˬÎĎŘ01234567é9ę;<=č€ĐÉʀʀέXMinimizeQmŘ01234567ň9ó;<=č€ĐĚ̀ʀέ\Close WindowQwÚ01[2\34567™9†™†;<=č€Đ€ € €Ę€Î­Ř012345679™;<=č€ĐĐ€€Ę€Î­_Bring All to Front^_NSWindowsMenuÚ (0123456›7 9™;<= €ĐŐÓ€€Ę€ÎÁÔTHelpÓ0ABÖ×Ň`a€ Ň>u€{ˇŘŘ01234567!9";<= €ĐŮڀʀÎŐZWcalc HelpQ?[_NSMainMenuÔ !#€™€–€l€Ô !1#€™€–Ţ€Řh|~jlH% 67p†%P€€3ßŕ €_{{0, 58}, {46, 30}}ŢŽ()*+,‘’-“.H/0™2ł4™@7189CP€2€€•€နŢ6†@˙TcapsÔ !ă €™€–¤¸Ô !‰ €™€–Š¸Ô ! €™€–¸ÔL!X€Ĺ€c€–ćXenterKeyÔ !ŕ €™€– ¸Ô !).€™€–8€ŃÔLf!h€ĹꀖďÚhj„klmnop+r+ktu<<v+^NSParentWindow_NSMaxContentSize]NSContentSize_NSTrailingOffset_NSLeadingOffset_NSMinContentSizeZNSDelegate€î€íëě€Y{135, 74}Y{106, 50}\{10000, 400}Ň78|}Ł}ý;XNSDrawerZbaseDrawerÔ !1.€™€–B€ŃÔ !`—€™€–L€ćÔLa€Ĺ€o€9dÔ !,.€™€–;€ŃÔ !–#€™€–ő€×h|~jl% ›śp†%€€3ö÷ €_{{103, 58}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™Ą7–89:€2€€•€ř€”őQdÔLŹ!­€Ĺ"€–ú^rememberErrorsÓ â˛€™Čü_performMiniaturize:Ô !U.€™€–€ŃÔ !T.€™€–€ŃÔ !Á#€™€–€×h|~jl% ĆÇp†%€€3 €_{{211, 87}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™Đ7Á89:€2€€•€€”QuÔ !8.€™€–M€ŃÔ !í €™€–a¸ÔLN!o€Ĺ€›€–€ÂÔ !ć—€™€–€ćŮh|~j^lHé ëěx†îéX €3    ×h|ij^lńnóôpîńŁ€†®Ą Ł_{{15, 221}, {99, 18}}ŢŽ()*+,‘’-“.H/0™¤XĄ™ý3ćŞĺ«X€2€€ă€ €1[Use RadiansÔ !#€™€–€×h|~jl%   p†%€€3 €_{{124, 87}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™789:€2€€•€€”QrÔ Ą€™&×h|~jl ©  /† ©"€3 "_{{368, -1}, {71, 28}}ÝŽ()*+,‘’-“./0™¤kš(險 ľş€2€€€ô€Ň`aź€ ZclearVars:Ô }< €™ťHźÔ } ¦8€™ťr\newVariable:Ô !(.€™€–6€ŃÔ !#€™€–€O€ÔL a€Ĺ€G€4dÔ !-.€™€–=€ŃÔ !#€™€–€S€Ô !„ €™€–€¸Ô !6.€™€–J€ŃÔ !; €™€–o¸ÔLd!f€Ĺ%€–)Řh|~jlH’ jkx†’>#€3&' #_{{15, 177}, {183, 18}}ŢŽ()*+,‘’-“.H/0™¤XĄ™t3dŞĺ«>€2€€ă€(€1%_Limit History Length\limitHistoryÔ !|#€™€–+€×h|~jl% ‚p†%€€3,- €_{{269, 87}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ ş7|89:€2€€•€倔+ÔL é’€Ĺ/î8ßhUVŹXYZ[\jk^al`b”ĺd–˛†™jklpš†pY”žź0€ĂR@€€ 21 €ż04#@1Úh|uijvwlxˇzŁ|¤~€ˇöCůř/€Ľö/Z{138, 184}Ôh|j+š­p€€§3_{{141, 0}, {16, 17}}Ň>u±€{ˇ˛5Ú»ĽľżŔÁÂ…†Ä¶·¸»ąʆ €´6#@`ŕ7#@ /׎Ź‘“•ÎĎĐ™šĺÓ€°€­€€€®×ŽŹ‘’“•â—˛3çč€!€€1/€˛VtoListÔ !V €™€–¬¸ÔLĐ!Ň€Ĺ;€–?×h|~jl’ŚÖ×p†’#€<= #_{{259, 178}, {22, 14}}ŘŽŹ‘’“•/— „ޚР-č€!X>€;€˛TTo: _limitHistoryLenTagÔL ůNč€Ĺ÷€›A_affectInspectorMenuÔ !Ţ €™€–ś¸Ô  5󀙀ÇDWopenIt:Ó ř€™ŘFYshowHelp:Ô !#€™€–€_€Ô !Ä.€™€–1€ŃÔ !Ú €™€––¸Ô ! #€™€–K€×h|~jl% p†%€€3LM €_{{190, 58}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™Ě7 89:€2€€•€¨€”KÔL !a€ĹSOdŘh|~jlH’ &'x†’Ý#€3PQ #_{{15, 221}, {183, 18}}ŢŽ()*+,‘’-“.H/0™¤XĄ™03!Şĺ«Ý€2€€ă€R€1O_Update History Displayßh|567Ź89«:j;lH<=>c@ABXC „E˛3Hx†Xc‘KLM[NSProtoCellYNSNumRows^NSSelectedCell[NSCellClass_NSCellBackgroundColorZNSCellSizeYNSNumCols_NSIntercellSpacing]NSMatrixFlagsWNSCellsMfTdVXc€€1a MbD(U_{{17, 221}, {219, 38}}Ň>uQ€{¤CSTUV[]_ÝŽ()*+,‘’-“.W0Y¤XZY\3 Şĺ«˙˙˙˙„ţ€2ZXZW€1SWDecimalŇ®Żb€ĺY]NSRadioButtonŇ`aź€ ÝŽ)*+,‘’-“.H/02XZ™j3 8ĺ«k€2X€\€1SUOctalŢŽ()*+,‘’-“.H/0Y¤XZYs3 Şĺ«X€2ZXZ^€1S[HexadecimalÝŽ)*+,‘’-“.H/02XZ™{3 8ĺ«»€2X€`€1SVBinaryY{107, 18}V{4, 2}ŰŽ)*+,‘-“./02ĺZ™…38ĺ«€2X€e€1URadioŇ78‰ŠĄŠűüý;XNSMatrixÔ !< €™€–q¸Ô !“—€™€–i€ćŘh|~jlHt ™x†tó€Ř€3jk €Ř_{{15, 223}, {132, 18}}ŢŽ()*+,‘’-“.H/0™¤XĄ™˘3“Şĺ«ó€2€€ă€l€1i_Simple CalculatorÔ !#€™€–€o€Ô }:Ż€™ťEoWcopyMe:Ô !´#€™€–q€×h|~jl% ąşp†%€€3rs €_{{161, 58}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™Ă7´89:€2€€•€t€”qQgÔ !Ů €™€–”¸ÔLć!Ѐŀ–wZuseRadiansÔL I €ĹŹ˘€ţŇ>uŮ€{˘Ú zˇŮ0123456H7p9™;<= E€Đ€€Ę€Î˘ÔLĺˇç€Ĺ|ˇśÚhéęëjkJlpěíîłďđńňě+_NSTextContainerYNSTVFlags\NSSharedData}›‡ ~š}€Űh|öuijvwlx÷zůú|ű~ĺ˛÷ĺXNSCursor3C675|€3|Z{196, 115}ŐľkĺYNSTCFlagsZNSTextView_NSLayoutManager†|#@h€€Ő   p ł+_NSTextContainers]NSTextStorageYNSLMFlags…„€Ófp+‚€Ň`aź€ Ň78 ¤ p;_NSMutableAttributedStringŇ>u€{ˇîŇ78˘;Ň78!é˘é;Ř#$%Ź&'()*+Á˛.+0WNSFlags_NSDefaultParagraphStyle_NSInsertionColor_NSSelectedAttributes_NSMarkedAttributes_NSLinkAttributes™ `—€ €€ŹÓ(>e36„˘45‰Š˘78‹ŤŐ­®Ż°±ł<µ€€ľŚ€_selectedTextBackgroundColorŐ­®Ż°±ÁłBµ€€ Ž€_selectedTextColorÓ(>eGK„Ł5IJŠ‘ŁLMN’“–[NSUnderlineÓ®Q±kSUNSRGB€F0 0 1ÓUVWX>YNSHotSpot\NSCursorType•”W{8, -8}Ň78[ö˘ö;Ň]+_ZNSTabStops€Ň78ab˘b;_NSParagraphStyleŇ78de˘e;_NSTextViewSharedData\{198, 1e+07}Ň78hĄiüý;VNSText\errorMessageÔ !P.€™€– €ŃÔ N ůt€™€›÷źYtoggleIt:ÔL!z€Ĺ€–ˇ_affectKeyboardMenuÔL!w€Ĺ€–€€ţÔ !„#€™€–¤€×h|~jl% ‰Šp†%€€3Ą¦ €_{{174, 116}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™i7„89:€2€€•€€<€”¤Ô ![ €™€–´¸Ô !Ŕ.€™€–)€ŃÔ !_—€™€–Q€ćÔ !ă©€™€–Ë«\closeWindow:Ô !®#€™€–­€×h|~jl% ł´p†%€€3®Ż €_{{74, 58}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™Ý7®89:€2€€•€k€”­Ô ! ¶Ä€™€–í±WsaveAs:ÔLy!ʀŀ+€–łVkeypadÓ ćĎ€™Ďµ_arrangeInFront:ÔLÓ ĄŐ€Ĺ·&ĘßhUVWŹXYZ[\jk^_l`ab×ĺdŮÚ˛†Ýj|lpކp»×âYs¸€Ă˙˙˙˙ňŔş€ ˝ą €ż¸ŔÚh|uijvwlxäzć|ç~Ó€äÓľCVU·€Ľľ·Z{438, 283}Öhjkl…î‡pđîÓ»€ŁĽ»·Úh|uijvwlxäzö|÷~Ú€äÚľC\[ş€ĽľşY{438, 17}Őh|jl䚜侀§żľÝhź| ˇi˘jlŁx¤ ©§©î¬… © ××"YM]»T"W¸¸Ň>u€{˘ÁÇŰ»Ľ˝ľżŔÁÂ…†Ä»ÉʆÓ €´ĂÂ#@h@Ć ·Tname׎Ź‘“•ÎĎš9Ó€°ĹÄ€€®TNameӮ౻%€K0.33333299׎Ź‘’“•'—€šÓ,č!ţ@€!€Ľ€·€˛Ű»Ľ˝ľżŔÁÂ…†Ä134»5ʆÓ €´Č>#@mĚŘÉ#@Bł` ·×ŽŹ‘“•ÎĎ'š9Ó€°Ĺ@€€®×ŽŹ‘’“•'—€šÓCč€!€Ľ€·€˛WtheListÔLĂ }Ő€Ĺ.ťĘÔ !#€™€–€B€ÔL ůN ű€Ĺ5€›}ÔL ú!Y€Ĺů€–ĎXbaseMenuÔL!^a€ĹOŃdŘh|~jlH’ cdx†’|#€3ŇÓ #_{{15, 243}, {215, 18}}ŢŽ()*+,‘’-“.H/0™¤XĄ™m3^Şĺ«|€2€€ă€Ô€1Ń_Allow DuplicatesÔLAfu€Ĺ€ęÖ\parentWindowÔLa€Ĺ€W€wdÔ !N.€™€– €ŃÔL M9€Ĺ˘€ť Ô !‰#€™€–Ű€×h|~jl% ŽŹp†%€€3ÜÝ €_{{66, 87}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ó7‰89:€2€€•€Í€”ŰÔLť!ź€Ĺ߀–ÝCDEFGHIJKLMN +PŁ..¦§¨©X Ş«ż€‹˙˙˙˙đxáŕâ_{{100, 424}, {358, 306}}Ň`ab€ Ň>u±€{¤ 賡 (đäöľÜhź| i˘jlŁx¤ +¸§şÁ»Ľ˝ +żŔŔżóMőĺOA A AAżńććŇ>uÄ€{ŁŔż¸ćńóÚh|uijvwlxłzË|Ě~Í€łÍäCđç耼äčŇ>uÓ€{ˇÍčßhUVŹXYZ[\jk^al`bŔĺd–˛†ÚjklpۆpYŔßźć€Ă€ ęé €żćěÔh|j+šăp€€§ë_{{139, 0}, {16, 17}}Ň>uç€{ˇčíÚ»ĽľżŔÁÂ…†Äě·í»ÉʆÍ €´îď č׎Ź‘“•ÎĎĐ™šĺÓ€°€­€€€®×ŽŹ‘’“•â—˛3Íçč€!€€1耲_{{1, 1}, {138, 184}}Řhš|j›l Fłł Ip KłääGňFä#?îýN _{{139, 1}, {15, 184}}Ůhš| j›l Fłł I kp Kł ĂääGôFä_{{-100, -100}, {138, 15}}_{{20, 60}, {155, 186}}Ühź| i˘jlŁx¤ +§ÁĽ… +””żüMţ÷żú00Ň>u€{Ł”0úüŇ>u!€{ˇ/Řhš|j›l Fˇˇ I'p KˇööGűFöŮhš| j›l Fˇˇ I.kp Kˇ ĂööGýFö_{{183, 60}, {155, 186}}_{{1, 1}, {358, 306}}Z{358, 129}_conversionWindowÔ !8—€™€–€ćŮh|~j^lHéŚ=>x†îéŰ €   _{{237, 147}, {96, 22}}ŮŽŹ‘’“”•D—™38J†ž˙˙˙˙´qţA€!€€€1@ €ÔLa€Ĺ€_€OdÔ !U#€™€– €×h|~jl% Z[p†%€€3  €_{{95, 87}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ í7U89:€2€€•€3€” ÔLi!k€Ĺ€–€ÝCDEFGHIJKLMN%Popr§tuX{vw€€‹|˙˙˙˙đá~}_{{932, 584}, {436, 146}}Ň`ab€ Ň>u}€{Ż4÷|U„…†‡‰Š"ŚŤÁŹ á ’“”•1 Ią™š›ś δ\ ˇ˘„¤®¦ 4¨ ‹Ş«‰–ݰ±€÷+  $'*-1€Ź58;µK>AEHŢÇ€čKNRVčq€ÓY]`¤c­fŠiloŰőrux×h|~jl% µ¶p†%€€3 €_{{356, 87}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ż789:€2€€•€€”Q]×h|~jl% ĆÇp†%€€3 €_{{205, 29}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™Đ789:€2€€•€€”Qn×h|~jl% ×Řp†%€€3 €_{{292, 29}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™789:€2€€•€€b€”×h|~jl% çčp†%€€3 €_{{116, 116}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™}7„89:€2€€•€€z€”Řh|~jlH% ÷řp†%G€€3!" €_{{377, 116}, {59, 30}}ŢŽ()*+,‘’-“.H/0™2ł4™7…89:G€2€€•€#€” Vdelete×h|~jl%  p†%€€3%& €_{{232, 116}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™k7†89:€2€€•€€v€”$×h|~jl% p†%€€3() €_{{261, 116}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™µ7‡89:€2€€•€€N€”'×h|~jl% ()p†%€€3+, €_{{176, 29}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ 789:€2€€•€ű€”*×h|~jl% 89p†%€€3./ €_{{277, 58}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™B7‰89:€2€€•€0€”-Ql×h|~jl% IJp†%€€323 €_{{364, 58}, {72, 30}}ÝŽ()*+,‘’-“./0™2ł4™S7Š89:€2€€•€4€”1Vreturn×h|~jl% Z[p†%€€367 €_{{319, 116}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™V7Ś89:€2€€•€€8€”5×h|~jl% jkp†%€€39: €_{{306, 58}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ T7Ť89:€2€€•€Ě€”8×h|~jl% z{p†%€€3<= €_{{29, 116}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ý7Ź89:€2€€•€€^€”;×h|~jl% Š‹p†%€€3?@ €_{{118, 29}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™q7’89:€2€€•€€”>×h|~jl% š›p†%€€3BC €_{{132, 58}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™¤7“89:€2€€•€D€”AQf×h|~jl% «¬p†%€€3FG €_{{58, 116}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™47”89:€2€€•€€0€”E×h|~jl% »Ľp†%€€3IJ €_{{87, 116}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™Ů7•89:€2€€•€€V€”H×h|~jl% ËĚp†%€€3LM €_{{348, 116}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™#7™89:€2€€•€€f€”K×h|~jl% ŰÜp†%€€3OP €_{{182, 87}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ĺ7š89:€2€€•€Q€”NQy×h|~jl% ěíp†%€€3ST €_{{219, 58}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ö7›89:€2€€•€U€”RQj×h|~jl% ýţp†%€€3WX €_{{147, 29}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™z7ś89:€2€€•€€”V×h|~jl%  p†%€€3Z[ €_{{335, 58}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™7 89:€2€€•€\€”YQ'×h|~jl% p†%€€3^_ €_{{145, 116}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ë7ˇ89:€2€€•€€Z€”]×h|~jl% ./p†%€€3ab €_{{263, 29}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™#7˘89:€2€€•€‘€”`×h|~jl% >?p†%€€3de €_{{290, 116}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™Ç7¤89:€2€€•€€R€”c×h|~jl% NOp†%€€3gh €_{{89, 29}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™h7¦89:€2€€•€€”f×h|~jl% ^_p†%€€3jk €_{{203, 116}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™Y7¨89:€2€€•€€r€”i×h|~jl% nop†%€€3mn €_{{60, 29}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™K7Ş89:€2€€•€€”lŘh|~jlH% ~p†% 뀀3pq €_{{0, 29}, {61, 30}}ŢŽ()*+,‘’-“.H/0™2ł4™ ň7«89 ő ë€2€€•€¸€”o×h|~jl% ŽŹp†%€€3st €_{{153, 87}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ĺ7Ż89:€2€€•€Ż€”r×h|~jl% žźp†%€€3vw €_{{234, 29}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™ę7°89:€2€€•€Ę€”u×h|~jl% ®Żp†%€€3yz €_{{248, 58}, {30, 30}}ÝŽ()*+,‘’-“./0™2ł4™7±89:€2€€•€€”xZ{436, 146}Xkeyboard[theKeyboardÔ !Ű €™€–¸Ô !\ €™€–¶¸ÔL a€Ĺ€4€=dÔ !<.€™€–T€ŃÔ ! 7Ö€™€–ʆZshowPrefs:Ô !#€™€–€=€Ó Dŕ€™‰Ucopy:Ô !Š怙€–1‹Sgo:ÔLa€Ĺ€s€odÔ !Ť#€™€–8€ÔLM IՀŀťŹĘÔ ! …—€™€–Ő€ćÔ !¦#€™€–f€Ô !—€™€–’€ćŘh|~jlHt   x†t g€Ř€3“” €Ř_{{15, 183}, {181, 18}}ŢŽ()*+,‘’-“.H/0™¤XĄ™3Şĺ« g€2€€ă€•€1’_C-style Mod (%) OperatorÔ !^—€™€–Ń€ćÔ !d—€™€–%€ćÔL }Ă%€Ĺť.™ZdataSourceÔ !Ă.€™€–/€ŃÔ !„#€™€–€Ô !Ż#€™€–r€Ô !ę €™€–]¸Ô ! ú?€™€–ůź_showBaseDrawer:Ô !_ €™€–Ľ¸Ô !#€™€–€Ô !N—€™€–Ł€ćŘh|~jlHtŚSTx†tÁ€Ř€¤Ą €Ř_{{17, 138}, {126, 22}}ÚŽŹ‘’“”H•ü—™3NJ†Áž€!€€€1Ł €ÔLb!d€Ĺ§€–¸ßh|567Ź89«:j;lH<=>f@hiXj „l˛3op†Xf‘stu¨f©·«X¶€€1´ ¨µD¨Ş×hijk2˙+y…z{€€őö÷€~_{{18, 18}, {98, 38}}Ň>u€€{¤j‚„«®°˛ÝŽ()*+,‘’-“.W0™¤XZ‰Š3bŞĺ«€2€X­¬€1§SDecŇ`aź€ ŢŽ()*+,‘’-“.H/0™2XZ™•3b8ĺ«k€2€X€Ż€1§SOctŢŽ()*+,‘’-“.H/0™¤XZ‰ž3bŞĺ«X€2€X­±€1§SHexŢŽ()*+,‘’-“.H/0™2XZ™§3b8ĺ«»€2€X€ł€1§SBinX{47, 18}ŰŽ)*+,‘-“./02ĺZ™…38ĺ«€2X€e€1]outputFormat2ÔL é%€Ĺî/™Ô !#€™€–€c€Ô !Z €™€–˛¸Ô !™#€™€–K€Ô !W.€™€–€ŃÔ ! €™€–~¸Ô !ś#€™€–V€Ô !Ö €™€–¸Ô !˝.€™€–#€ŃÔ IM䀙Ź€ťĂ\rowSelected:ÔL e€Ĺ€ü–€ţÔ !’#€™€–>€Ô !°#€™€–u€Ô !O.€™€– €ŃÔ !ý—€™€–É€ćŮh|~j^lHéŚx†îé¤ €ĘË   _{{237, 173}, {96, 22}}ŮŽŹ‘’“”•D—™3ýJ†ž€!€€€1É €Ô !? €™€–w¸Ô !†#€™€–$€ÔL a€Ĺ€S€-dÔ !Â.€™€–-€ŃÔLa€Ĺ€c€GdÔ !#€™€–€s€ÔLxwa€Ĺ€#€dÔ !… €™€–‚¸ÔL«!<€Ĺo€–ŐYshiftKey1ÔLwa€Ĺ€€hdÔ !3.€™€–F€ŃÔ !K—€™€–Ů€ćŘh|~jlHt PQx†t €Ř€3ÚŰ €Ř_{{15, 243}, {121, 18}}ŢŽ()*+,‘’-“.H/0™¤XĄ™Z3KŞĺ« €2€€ă€Ü€1Ů_Precision GuardÔ !a—€™€–Ţ€ćŮh|~j^lHé fgx†îéß €3ßŕ   _{{15, 201}, {320, 18}}ߎ(m)*+,‘’-“.H/0™p¤qĄ™t3aŞĺ«ß]NSNormalImage€2€â‚€ă€á€1Ţ_-Use different input number format from outputÓ2GHI{€Í€ËăÔ !Ş#€™€–l€Ô !×…€™€–hćUsave:ÔLa€Ĺ€K€sdÔ  =€™€Řé_unhideAllApplications:ÔLK!–€ĹŮ€–ë^precisionGuardÔLN!ś€ĹŁ€–íXbitsPrefÔ !ß €™€–ž¸Ô !±#€™€–x€Ô !^ €™€–ş¸Ô !°—€™€–ň€ćŘh|~jlHc µ¶x†cYM€3óô M_{{17, 177}, {149, 18}}ŢŽ()*+,‘’-“.H/0™¤XĄ™ż3°Şĺ«Y€2€€ă€ő€1ň_Print Whole IntegersÔ !] €™€–¸¸Ô !b—€™€–§€ćÔ !”#€™€–E€ÔLÔ!Ö€Ĺú€–ýŘh|~jlHcŚÚŰx†c˘M€űü M_{{21, 28}, {126, 22}}ÚŽŹ‘’“”H•ü—™3ÔJ†˘ž€!€€€1ú €ZsliderPrefÔ }=쀙ťJ˙_clearVariables:Ô !5.€™€–H€ŃÔ !2.€™€–D€ŃÔ !9.€™€–O€ŃÔLw I€Ĺ€Ź_expressionFieldÔ !#€™€–€K€ÔL ! €Ĺ€– Ůh|~j^lHé x†îék €3   _{{15, 243}, {179, 18}}ŢŽ()*+,‘’-“.H0™¤XĄ™3 Şĺ«k$ţ€2€€ă€ €1_Flag Undefined Variables^pickyVariablesÔ Ą$%€™& ×h|~jl © )* Ά ©"€3 "_{{181, -1}, {71, 28}}ÝŽ()*+,‘’-“./0™¤kš2Pš$Ş ľş€2€€I€ Ň`aź€ WdelVar:Ô é č=€™îđXnewType:Ô !÷ €™€–Á¸Ô  <H€™€Ö_hideOtherApplications:Ô !…#€™€– €Ô !† €™€–„¸ÔLwAX€Ĺ€€_initialFirstResponderÔL_!^€ĹQ€–_roundingIndicationÔ !î €™€–c¸ÔL a€Ĺ€-€[dÔ !Q.€™€–€ŃÔL^!s€ĹŃ€–!_historyDuplicatesÔ !•#€™€–H€ÔLa€Ĺ€=€BdÔ ! ?€™€–Ű%Uquit:Ô !˘#€™€–`€ÔL ůŤ ű€Ĺ5(}Ň23‘€)\WcalcServiceÔL A€Ĺ€ü€€ţÔ !¤#€™€–c€ÔLMŤO€Ĺ€ť(€ÄÔLĂNú€Ĺ.€›łÔL`!«€ĹL€–/]printPrefixesÔLa€Ĺ€h€ldÓ Aµ€™2Uredo:Ô !!—€™€–O€ćÔL ¶!Ŕ€Ĺ퀖5^saveAsMenuItemÔ !#€™€–*€Ô !Ź#€™€–;€Ô ! á#€™€–µ€ÔL !Ő€ĹS€–:\outputFormatÔ !p—€™€–€×€ćÔL!!ŕ€ĹO€–=]updateHistoryÔL!ć€Ĺ/€–?YconvertToÔ !#€™€–€w€ÔL éÍ%€Ĺîč™Ô !#€™€–€h€Ô !ö €™€–ż¸Ô !ż.€™€–'€ŃÔ !U €™€–Ş¸Ô !> €™€–u¸Ô !›#€™€–R€Ô !߀™€–¬I[toggleSize:Ô !Ľ.€™€–!€ŃÔ IÚŻ€™ŹzoÔL IM%€ĹŹ€ť™Ô !Ô—€™€–ú€ćÔL, Ą.€ĹO&cÝCDEFGHIJKLMN ©P23 567XY89"€‹_býQPa`R_{{60, 137}, {440, 332}}Ň`a^€ Ň`ab€ Ň>uA€{¤ä ¦$ľ! Ň>uH€{Ą× îݸWY»˝Ň>uP€{ˇÓ·_{{1, 17}, {438, 283}}Řhš|j›l Fää IWś KäZľľGXFľ#?çÝ_{{-30, 17}, {15, 265}}Ůhš| j›l Fää I`kś KäcľľGZFľ#?ďĚč_{{1, -30}, {463, 15}}Ň>ug€{ˇÚş_{{1, 0}, {438, 17}}_{{0, 31}, {440, 301}}_{{1, 9}, {440, 332}}YpreloadedYtheWindowÔ !‡ €™€–†¸Ô !Ś#€™€–5€Ô ! —€™€–S€ćÔ !“#€™€–A€ÔLa!†€ĹŢ€–i_alternateInputPrefÔL8!Ś€Ĺ€–k_altInputThouSepÔ } Ą쀙ťn˙ÔLÍ é—€ĹčînXfromListÔ !;.€™€–R€ŃÔL“!˘€Ĺi€–q_simpleCalculatorÔL Ş!¨€Ĺ©€–s_printDelimitersÔ !Ü €™€–š¸ÔL°!ł€Ĺň€–vYprintIntsÔL!ą€Ĺ’€–xXcModPrefÔ !>.€™€–W€ŃÔ !: €™€–m¸Ô !ľ.€™€–%€ŃÔ !‰#€™€–-€Ô !xÓ€™€–€#~]setPrecision:Ô ! #€™€–Y€ÔL č!Ţ€Ĺđ€–[convertTypeÔ ! ˛䀙€–ăUopen:Ô !#€™€–€ÔL!wď€Ĺ€–€†^mainControllerÔ !#€™€–€Ô !X €™€–®¸Ô !ë—€™€–n€ćÔ !V.€™€–€ŃÓ C€™ŚTcut:ÔLý!€ĹÉ€–Ž^altInputDecSepÔ ! #€™€–€-€Ô !w怙€–€‹Ô I 4 ‰€™ŹNŁÔ !Y €™€–°¸Ô !ě €™€–_¸Ô !Á.€™€–+€ŃÔ !S.€™€–€ŃÔ !á €™€–˘¸ÔL,!<€ĹO€–^persVarsWindowÔ !‡#€™€–'€Ô !ˇ#€™€–]€Ô !¨#€™€–i€ÔLO!Q€Ĺť€–×ÝCDEFGHIJKLMNSPUVW¦§YZX{[\ˇ€‹ÓÖźážŐÔ _{{44, 427}, {374, 304}}[PreferencesŇ`ab€ ×hijk^lîndpeîg €†˘Ń ŇŇ>uj€{ˇńŁŢh V|«ij^”l  pS oĺp3r…î†S†wxˇx°Ż€1¤ ˇ ÍĐŇ>u{€{ˇé Ň>u€{§ ćaý„8†ŢɦŞŘh|~j^l錊‹x†îé €§¨   _{{109, 177}, {123, 14}}ŘŽŹ‘’“•‘— „”š„—čţ@€!X©€¦B€˛_Decimal Separator:Řh|~j^l錝žx†îé €«¬   _{{109, 151}, {123, 14}}ŘŽŹ‘’“•‘— „¦š†—č€!X­€Ş€˛_Grouping Separator:_{{10, 33}, {370, 262}}_{{-8, -10}, {390, 308}}Ň>uŻ€{¤°±˛w±ąĽÍÖ˝ü ­ €ýtń „şZ€^€ŘŁX¸Ň>u˝€{§K“–ÂpNŮi€ß’ł€×Ł×h|~jltŚČÉx†t€Ř€´µ €Ř_{{14, 163}, {129, 14}}ŘŽŹ‘’“•/— „ĐšÂÓč€!X¶€ł@€˛_Internal Precision Bits:WGeneralÖ˝ü ­ €4’ń „ …Z€0#ŁXWŇ>uŕ€{¦^!ŹdëĐŃO"%n;Ö˝ü ­ €écń „íZ˝MŁXĚVItem 2Ň>uń€{« `_° ŞÔ ůú …üSLQň©úşżĂŐÇ×h|~jlcŚx†cM€ŔÁ M_{{18, 53}, {185, 14}}ŘŽŹ‘’“•/— „šůÓč€!X€ż€˛_Maximum Slider Precision:×h|~jlcŚx†cM€ÄĹ M_{{18, 95}, {129, 14}}ŘŽŹ‘’“•/— „šú -č€!XƀÀ˛_Rounding Indication:×h|~jlcŚ !x†cM€ČÉ M_{{16, 137}, {129, 14}}ŘŽŹ‘’“•/— „(šü -č€!Xʀǀ˛_Engineering Notation:WDisplayÖ˝ü ­ €0éń „4ZÎ ŁXĎVItem 3UInputZ{374, 304}[wcalc_prefs\thePrefPanelÔL!>€Ĺ€_€–ŮZdecimalKeyÔ };8€™ťFÔ !..€™€–?€ŃÔLa€Ĺ€l€cdÔLÍ!S€Ĺ耖Ţ[convertFromÔ !ď €™€–e¸Ô !š#€™€–N€ÔLĂŤú€Ĺ.(łÔ !M.€™€–€ŃÔ Ą ým€™&üäYshowList:ÔLa€Ĺ€9€WdÔ !«#€™€–o€ÔL–!}€Ĺ€ß€–č]livePrecisionÔL ĄÓ%€Ĺ&·™ÔLw!€Ĺ€€–ë_ExpressionFieldÔLa€Ĺ€O€KdÔ ! —€™€–€ćÔL1!€ĹŢ€–ď[capsLockKeyÔL }Àŝ.€ţÔL !Ł€Ĺş€–ň]sliderStepperÔ != €™€–s¸ÔLff®€Ĺ¨ęřŇ>u±€{ˇb§Y{134, 74}Ň`aü€ [contentViewÔLą »€Ĺú€ÜCDFGHIJKLMN PżŔ UÂĂX»ÄĹ€‹ü€ űý_{{288, 212}, {480, 297}}^About Wcalc...Ň`ab€ Ň>uĚ€{¤ÍÎ Đ˙ ‚Úh|Ň~Ój^l ŐÖ†ŘŮp†  ZNSEditable[NSDragTypes   …Ň>?߀ڦŕáâăäĺ_Apple PDF pasteboard type_Apple PNG pasteboard type_1NeXT Encapsulated PostScript v1.2 pasteboard type_NSFilenamesPboardType_NeXT TIFF v4.0 pasteboard type_Apple PICT pasteboard type_{{17, 195}, {94, 89}}ŘŽîďđ“ńňóĺôĺĺőęWNSStyleWNSAlignWNSScaleZNSAnimatesţ  Ó2GHIú€Í€Ë Ň78üýŁý~;[NSImageCellŇ78˙ Ą űüý;[NSImageViewŘh|~j^l Ś  p†  € …_{{116, 20}, {347, 257}}ŘŽŹ‘’“•/— „ 3Î -č€!X€1 €˛o™Wcalc started as a project written for my C++ class at Ohio University, way back on January 14th, 2000. I made it to be a "natural language" calculator - in that it would take any valid mathematical expression, or at least, that was the idea (it had some minor problems). Today, it has gone a bit beyond. I reworked it (version 0.2) in November 2001 to use lex and yacc powerful string parsing tools. Then, I got OS X, and thought "why not?" Believe me, Cocoa is every bit as wonderful as they say. More recently, I incorporated MPFR to allow me to do excessively large computations, which has been a real adventure. In any case, enjoy! I hope you find it useful.Úh|Ň~Ój^l Ő †  p†     …Ň>? €Ś¦ŕá !ăäĺ_{{17, 86}, {94, 89}}ŘŽîďđ“ńňóĺ (ĺĺőę Ó2GHI -€Í€ËXNewWcalcZ{480, 297}XaboutBoxÔLA! m€Ĺ€€–ÎÔ !».€™€–€ŃÔL =ˇ ?€Ĺ!ˇBÜCDFGHIJKLMNĄP C D U F GXk H Iś€‹?#€ "A@$_{{375, 153}, {333, 223}}VError!Ň`ab€ Ň>u P€{Ą Q R S÷˘&*03›Ůh|Ň~ÓjlĄŐ Y† [ \p†Ąś ( )' śŇ>? a€Ś¦ŕáâăäĺ_{{17, 148}, {75, 58}}׎îďđ“ńňóĺĺĺőę Ůh|Ň~ÓjlĄŐ o† q rp†Ąś , -+ śŇ>? w€Ś¦ŕáâăäĺ_{{14, 148}, {78, 61}}ŘŽîďđ“ńňóĺ ĺĺőę .Ó2GHI †€Í€Ë/TWred×h|~jlĄŚ ‹ Śp†Ąś€12 ś_{{97, 185}, {219, 21}}ŘŽŹ‘’“•/— „ D3 S -č€!X#€10€˛Űhź| ijlŁx¤Ą ™§ ›Á śpĄ žěěś;M=4ś9}}Ň>u Ł€{Łě ž ™}9;Ň>u ©€{ˇĺ|_{{1, 1}, {196, 115}}ÓUVW ®ĺ•8W{1, -1}Řhš|j›l ±÷÷ I µp K÷ ZNSCurValue33G:F3_{{197, 1}, {15, 115}}Úhš| j›l ± F÷÷ I ˝kp K÷ Ŕ33G<F3#?îBČ`_{{-100, -100}, {87, 18}}_{{100, 60}, {213, 117}}_{{1, 9}, {333, 223}}[errorDialogÔ !Ř €™€–’¸Ô !Ĺ.€™€–3€ŃÔ Đ Ń ŇK Ô ŐXNSMarkerVNSFileHŮGF_NSToolTipHelpKey_RAttempt to detect inaccuracies near zero due to the internal binary representationŇ78 Ů Ú˘ Ú;_NSIBHelpConnectorÔ Đ Ń Ň“ Ţ ŐHiJF_/Remove most advanced features of the calculatorÔ Đ Ń ŇN ä ŐHŁLF_!%Ż„ Së >±˘đ÷ ůú ,>Vî;Í–ő 5ÜzQĹŤ + i9 µ ńŰ •Úľ "!S …˝ŕ¦%Nă!V 6 &[^1˛Ş„Ąw ¶Ŕ Ą1˘ż Ť #Ü â ©!śM  4W$™  < ‹ éÚAě=Ž 87°†Nť !0‡ˇ QÓ-Ţ xU 4ą2ô¸Ä=ĺ ] é č ^†÷Ř =+č —ý e ! 9_  »„ (×Ďü)„Đ Ô°Š ýß„˛˙DÔ đ Ô‰ň:¨Á }łó›¤čG ¦ ł" p:O3Ă8ŕ%C ţ ¦OP<÷“ "ˇ'Ă Yíí }ßU ?Â\_ tď I’b†±*, ÎXń–VTaO´«ySCá\ĐĄ˙  = ú;:…ąjA^㼳MÁ. Ą> exŚł]öU ŰUą‰® ´    : ˛; á˛ É ů’ ¤…ÖŮ Ş„ä ůf <t‚ Rc ĺć“ IŻ+d` ›8Zń(š=ĺęp ű 7NÇ|Ź @?°  %Ź<SˇwB Ń> é«-  ýćfÓ $ÎT5y“ ´K”E Ć ‰Í‡ %6 &0€GnÚx›g€÷÷Ăő;€Č¬co˙őľǀ3(ż€üO€lă2ú°Hz%ó€–ˇŐ#if€€›¤bÉŐŇ´ŃB\l€śÍí)nŢ`'8˙šýČ"/€=OV€o€ť Š KSTî–€_qsVÍLu€9$ŁßđA†]&·€ÇśŇNúD¦€©1J€ň•€4 đËŞÁ’€K!€WÇkíÚÉ–ÎĽÁIJľh¦Ç8;ł˛ň1*:ž¤5µúş]€îŰyE~i+ť)ŚRc­rć€s€w€ŹšmťF/M Vô!  q3’iö5.ˇ°a€ó[¬_ŘŰ-€Ó€cQ<€ŘeÇ#§„ąO讣€ßŢ€ q=(€Ą€[˘¶>8 BŘůFQ €č«şË!ä€B€h?&uŃ€#5_¸żŞ. €µŠ­ě¶€_ŐăRµĽ€O*Kż>€Si‚”Ţ©¦ľ5¨Ö|®*MÎĎWŹr:%LŰÁ˛h6NV|]€×»Ę Ą+;€- w±YU"H[ˇ€+W1o=€üę5Y ]H€+AŕŮEŻ˘-č'ĂJ‚Ň234€€Ň>"ŻŻ„Ąy’Ď%Ą ń%c čł%  ń+ % ńĎ&O>Üťły › $ Ń b% Ü OcÜ %i ŃĎ &  ’ł“%t =ńŕÜđ%%Ü %  Ń č,ˇ%y’%yy %> ©% cł% Ń ńë+“ ©Ďł%y%t łt%Ąä> Ńł>Ął ńMÜÂí eyw +łé ń ŃyyÓńÍ ›é ł Ď  Üb +ŕ cł%’t Ńc%% " ů Ń% ícc }éÜ% ńÂt%Ü # ń%%t %íđŕyy%>+łÜł Ńł  ©>>+Ątt  +łÓ  ń ! č  ĎÜ%yc ý° ń%±ftń% St>>éA%ĂłĄ>yí Ń   %Ă ĎÂł%%bí čÜ +y>%ył+ 9O%“  ń  Ń%Mt%ŕô yąĎŕ%ł%ńy Ń%c%yđt Ń Ń cé ©ĎňbĄ˛ čč_%ł’c …éÓ  ń%ł%ł÷ ńtłĎ>Ď%%%yí+ń% ’ Oíół ń%łéđ   łO% ›t%í Ń%ł% ł łś€+#¦€ś2€Mđ)¶2k€2¦€ €Č€ď€߀€)€+ŰY+ő§€˘€ďÁ€ťM€ďŢ€€+€¦ŇÁ¶#)W€|!Łi€ď]€€€ďő€Á+ő­Oö€€+#€€+€Ąő€€Č"€őM)€€+€2nkW"¦)€€+€€Ř€Á)|€śľ€Č+)€Č>€)2€ť€ďB€ó–€+Íż) 2+€+€€+·hčŰ ćő¦¶€Á€ď§żiÄM)€#€Ř+M€€ó5+€/¶€óMM[ €ď€2B|€€ď€˙2€€|Ă€ó]i€+€+€€Čk€)€ď)+)Ső"€Č€Čkś€Ř€Řőż)5˘¶2đ<­SŐ¦€ď€€+M:±2€ą¨|Ł€€¶ˇ€Ř€Č€Č €€.)>€Č€+€ó+¶U.ő€¦B)€€§€ó¶­€ďż€+€Č€€+)€k΀ €W¶2¶+€€ť|€i¦ő€+ú¦i€)€Ł€++€M€€+]|++ÁM "€€¦y§śĽő­­Q€€)#MŐ ·¶2€)€)32€Ř)¦€Č¦€€€€+€ókŁ€<#BS€€ €óŚ)2€)€ €]ÁS)€ €ۀ؀€ó+€€ä€Á))Ň>$6Ż… Së˘ >±đ÷ ůú ,–î>ÍV;ő 5zÜŤQĹ + i9 µ ńŰ •Ú! "Sľ …¦ŕN%˝ă!V 6 &[^1˛ŞĄw„ ¶Ŕ Ą1˘ż Ť #Ü â ©!śM  4W$™  < ‹ éAÚě=Ž7 8°†Nť !0ˇ Q‡Ó-Ţ xU 4ą2ô=ĸĺ ] čé ^†÷Ř =+č —ý e ! 9_  »„ (×Ď„)Đü Ô°Š ýß„˛˙DđÔ  Ô‰ň:¨Á }łó›¤čG ¦ ł" pO:3Ă8ŕ% ţC ¦O÷P<“ "ˇ' ĂYíí }ßU ?Â\_ t Iď’b†±*, ÎńX–VTaO´«ySCá\ĐĄ˙  = ú;:…ąjłAă ĄÁMĽ.^> exŚł]öU ŰUą‰® ´    : ˛; á˛ É ’ů ¤… ÖŮ„ä Ş ůf‚ <t Rc ĺć“ IŻ+d8` ›Zš(ń=ĺęp ű 7|ÇNŹ @°?  %<ŹSˇwB Ń> é«-  ýćfÓ $ÎT5y“ ´K”E Ć ‰Í‡ %6 &0€Gn›Úxg€÷÷Ăő;őc€Č˙¬oľ€Ç€€€ď(3ż€üO€lă2ú°Hz€–óˇ%Őfi€›€#¤bÉŐŇ´ŃB\lśÍ€í)nŢ`'8˙šýČ"/€=OV€o€ť Š KST_qsVLÍu€9$ŁßđA]&†·€ÇśŇNúD¦J1€©€ň€4•đ ËŞÁ’€K!€WÇkíÚÉ–ÎĽÁIJľh¦8;Çł˛ň1*:ž¤5µ]úş€îŰyE~i+ť)ŚRc­rć€s€w€ŹšťmF/M ôV! 3 q’iö5ˇ.°a€ó[¬_ŘŰ-€Ó€cQ<€ŘÇe#§„ąO裮€ßŢ€ q=(€Ą€[˘¶>8 BŘůFQ €č«äË€h&€B!?şuŃ€#5_¸żŞ. €µŠ­ě¶€_ŐăRµĽ€O*K€S>żi‚Ţ”¦ľ©5¨®Ö|*MÎĎWŹr:%LÁ۲N6hV|]€×»Ę+Ą ;€- ±wYUH"[ˇ€+W1o=€üę5Y ]H€+AŕŮEŻ˘-č'ĂJ‚Ň>%ľŻ…%ż%Ŕ%Á%Â%Ă%Ä%Ĺ%Ć%Ç%Č%É%Ę%Ë%Ě%Í%Î%Ď%Đ%Ń%Ň%Ó%Ô%Ő‘%×%Ř%Ů%Ü%Ý%Ţ%ß%ŕ%á%â%ă%äD%ć%ç%č%é%ę%ëR%í%î%ď%đ%ń%ň%ó%ô%ő%ö%÷%ř%ů%ú%ű%ü%ý%ţ%˙&&&&&&&&&& & & & & &&&&&&&&&&&&&&&&&&& &!&"&#&$&%&&.&(&)&*&+&,&-&.&/&0&1&2&3&4&5&6&7&8&9&:&;&<"&>&?&@&A&B D&D&E&F&G&H&I&J&K&L&M &O&P&Q&R&S&T&U&V&W&X&Y&Z&[&\&]&^&_&`&a&b&c&d&e&f&g&h&i&j&k&l&m&n&o ‚&q&r&s&t&u&v&w&x&y&z&{&|&}&~&&€&&‚&&„&…&†&‡&&‰&Š&‹&Ś&Ť&Ž&Ź&&‘&’&“&”&•&–&—&&™&š&›&ś&ť&ž&ź& &ˇ&˘&Ł&¤&Ą&¦&§&¨&©&Ş&«&¬&­&®&Ż&°&±&˛&ł&´&µ&¶&·&¸&ą&ş&»&Ľ&˝&ľ&ż&Ŕ&Á&Â&Ă&Ä&Ĺ&Ć&Ç&Č&É Ă&Ë&Ě&Í&Î&Ď&Đ&Ń&Ň&Ó&Ô&Ő&Ö&×&Ř&Ů&Ú&Ű&Ü&Ý&Ţ&ß&ŕ&á&â&ă&ä&ĺ&ć&ç&č&é&ę&ë&ě&í&î&ď&đ&ń&ň&ó&ô&ő&ö&÷&ř&ů&ú&ű&ü&ý&ţ&˙'' N''''''' ' ' ' ' ''''''''''''''''''' '!'"Á'$'%'&'''(')'* ','-'.'/'0'1'2'3'4'5'6'7'8'9':';'<'='>'?'@'A'B'Cfghijklmnopqrstuvwxyz{|)}~€ý€‚„…†‡€—‰Š‹ŚŤŽ€śŹ‘’“”•–—™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝôŢßŕáâ#ăäĺćçčéęëěÂíîďđńňóôőö÷řůúűüýţ˙     ž !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef'ghijklmnopqrstuvwxyz{|}~€‚„…†‡‰Š‹ŚŤŽŹ‘’“”•–—™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝˘ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜ_Static Text (Error!)_Bevel Button (+)\Text Field-3_Push Button (Oops.)[Separator-7_Square Button (k)\Separator-12_Square Button (p)_Menu Item (Show Inspector)_"Static Text (Rounding Indication:)_Menu (OtherViews)_"Menu Item (Gamma Function (Gamma))_Square Button (d)_+Menu Item (Acceleration due to gravity (g))_Menu (Trigonometric)^Image View (w)_'Menu Item (Avogadro's Constant (Na/NA))o7Menu Item (Permittivity of Free Space (µ0/epsilonzero))\Separator-13\File's Owner_Menu Item (About Wcalc)ZText Field_Menu (Hyperbolic Functions)_Menu Item (Secant (sec))_@Menu Item (Inverse Hyperbolic Cosecant (acsch/areacsch/csch^-1))^Content View-4_Menu Item (Cube Root (cbrt))_Bevel Button (=)_Menu Item (Always)^Menu (Symbols)_Menu Item (Electron Volt (eV))_Menu Item (Area)_Button Cell (Hex)_Square Button (3)_Menu Item (Copy)_Menu Item (View)^Content View-3_$Menu Item (Hyperbolic Secant (sech))_Popup Button (Automatic)_Square Button (x)[Menu (File)^Content View-1_'Menu Item (Hyperbolic Cotangent (coth))o&Menu Item (Rydberg Constant (R"/Rinf))[Application[Separator-8[Menu (Help)_Menu Item (Help)_"Menu Item (Molar Gas Constant (R))_Check Box (Allow Duplicates)_#Menu Item (Nearest Integer (round))_Menu Item (Simple)_Square Button (z)^Content View-2_Selected Tab View Item (Input)o%Menu Item (Nuclear Magneton (µN/muN))_Menu Item (Save As...)_Menu Item (Inverse Hyperbolic Secant (asech/areasech/sech^-1))_Table Column (history)_Menu Item (Clear)-2oBevel Button (")_Menu Item (Clear Menu)_Popup Button (Length)_'Menu Item (Logarithm [base 2] (logtwo))_!Static Text (Grouping Separator:)_&Menu Item (A Random Integer (irandom))_Menu Item (Deuteron Mass (Md))_Bevel Button (9)_Bevel Button (5)_Table Column (value)_Menu (Universal Constants)^Table Column-1_Menu Item (Automatic)\Text Field-1_Menu (Open Recent)_Menu Item (Angle)_Menu Item (Services)_.Menu Item (Wien Displacement Law Constant (b))_Menu Item (Wcalc)_$Menu Item (Hyperbolic Cosine (cosh))_Button Cell (Bin)_Push Button (Convert!)_Menu Item (Save)\Menu (Wcalc)_Square Button (4)_%Menu Item (Logarithm [base 10] (log))_Static Text (To: )_#Static Text (Engineering Notation:)_&Static Text (Internal Precision Bits:)o-Menu Item (Fine-Structure Constant (±/alpha))_ Check Box (Print Whole Integers)_Square Button (return)_Square Button (b)^Content View-7[Menu (View)_Menu Item (Helion Mass (Mh))_Square Button (6)\Table Column_"Menu Item (Boltzmann Constant (k))_Menu Item (Copy)-2VView-4\Text Field-4WStepper_$Check Box (Flag Undefined Variables)_"Menu Item (Hyperbolic Sine (sinh))_Square Button (w)_%Menu Item (Electromagnetic Constants)_Menu Item (Copy)-1o"Menu Item (Bohr Magneton (µB/muB))_Square Button (7)_>Menu Item (Inverse Hyperbolic Cosine (acosh/areacosh/cosh^-1))_Menu (Functions)_(Menu Item (Atomic and Nuclear Constants)_Square Button (j)_Square Button (0)_&Menu Item (Von Klitzing Constant (Rk))]Menu (Window)_Menu Item (Select All)_Push Button (New)-1_Menu Item (Open Recent)_Bevel Button (8)_Bevel Button (4)_Square Button (i)_1Menu Item (Inverse Cosecant (acsc/arccsc/csc^-1))YPrefPanel_*Menu Item (Impedance of Vacuum (Z0/Zzero))_#Menu Item (One's Complement (comp))_AMenu Item (Inverse Hyperbolic Cotangent (acoth/areacoth/coth^-1))o Menu Item (Square Root (sqrt/"))oMenu Item (Muon Mass (Mµ/Mmu))_Menu Item (Trigonometric)_Menu Item (Length)_Button Cell (Decimal)_Push Button (New)_Menu Item (Tangent (tan))_ Bordered Scroll View (Text View)_Menu Item (Cotangent (cot))o2Menu Item (Permeability of Free Space (µ0/muzero))_$Check Box (C-style Mod (%) Operator)_Check Box (Simple Calculator)_Menu Item (Pressure)_!Bordered Scroll View (Table View)[Separator-2_Menu Item (Clear)_Table View (Variable, Value)_)Menu Item (First Radiation Constant (c1))_ Menu Item (Catalan Constant (K))[Menu (Edit)_Tab View Item (Variables)_Menu Item (Hide Keypad)_Button Cell (Binary)_Menu Item (Wcalc Help)_Menu Item (Quit Wcalc)_?Menu Item (Inverse Hyperbolic Tangent (atanh/areatanh/tanh^-1))_Square Button (/)_Bevel Button (=)-1_Popup Button (None)_!Top Tab View (History, Variables)VView-3_Square Button (a)_!Menu Item (Coulomb Constant (Cc))VView-1VMatrix_"Menu Item (Elementary Charge (ec))_Tab View Item (History)_Menu Item (Conversions)_Persistent Vars Window_Square Button (`)_/Top Tab View (General, History, Display, Input)_ Menu Item (Faraday Constant (F))_Check Box (Live Precision)_2Menu Item (Inverse Cotangent (acot/arccot/cot^-1))_/Menu Item (Inverse Cosine (acos/arccos/cos^-1))_9Check Box (Use different input number format from output)^Content View-5_Square Button (g)_Table Column (value)-1_$Menu Item (Sampling Function (sinc))_#Bordered Scroll View (Table View)-4_-Menu Item (Inverse Sine (asin/arcsin/sin^-1))_Bevel Button (1)_Menu Item (Cut)_Menu Item (Neutron Mass (Mn))_.Menu Item (Molar Volume of Ideal Gas (Vm/NAk))_Image View (NewWcalc)VView-5_Table Column (variable)_Menu Item (Force)]Menu (Menu)-1_Menu Item (Show All)_Menu Item (Show Base Drawer)_Menu Item (New)[Separator-3_Square Button (delete)_Square Button ( )_Button Cell (Dec)_#Bordered Scroll View (Table View)-1_Menu Item (Redo)_Menu Item (Close Window)_Bevel Button (C)oBevel Button (÷)_Square Button (u)_Menu Item (Sine (sin))_%Menu Item (Hyperbolic Tangent (tanh))_ Menu Item (Zeta Function (zeta))o/Menu Item (Stefan-Boltzmann Constant (Ă/sigma))_Menu Item (Planck Constant (h))_Menu (Services)_Horizontal Slider_Square Button (-)_Menu Item (Significant Figures)_*Menu Item (Second Radiation Constant (c2))_#Menu Item (A Random Value (random))_$Menu Item (Atomic Mass Constant (u))_Menu Item (Bohr Radius (ao))_Square Button (e)_Table Column (result)o&Menu Item (Magnetic Flux Quantum (¦0))_Square Button (s)\Separator-11_ Menu (Physio-Chemical Constants)_Menu Item (Mass)_Bevel Button (.)\Content View\Separator-10_Square Button (n)_Menu Item (Open...)_'Menu Item (Next-lowest Integer (floor))_Square Button (shift)_Tab View Item (Display)_Bevel Button (0)oMenu Item (Tau Mass (MÄ/Mtau))_Square Button (h)_Bevel Button (3)_Square Button (c)_'Static Text (Maximum Slider Precision:)_Push Button (Delete)-1_$Menu Item (Conductance Quantum (G0))_Menu Item (File)o+Menu Item (Alpha Particle Mass (M±/Malpha))_Menu Item (Electron Mass (Me))_ Static Text (Decimal Separator:)_#Bordered Scroll View (Table View)-2_Check Box (Print Delimiters)_Inspector PanelXBaseView_Button Cell (Oct)_Menu Item (Hide Others)_ Menu (Electromagnetic Constants)_Image View (Wred)VView-2_Menu Item (Speed)\Separator-14_Menu Item (Bring All to Front)_Menu (OtherViews)-2_Square Button (t)[Separator-4_ Check Box (Limit History Length)\Text Field-2_Check Box (Print Prefixes)_Table Column (name)_Menu (OtherViews)-1_)Menu Item (Loschmidt Constant (n0/nzero))_Square Button (])_Square Button (y)_"Menu Item (Natural Logarithm (ln))_Menu Item (Universal Constants)[Separator-5YText ViewoMenu Item (pi/Ŕ)YStepper-1_"Menu Item (Random Integer (irand))_Menu Item (Preferences...)_Square Button (o)_Square Button (r)_Menu Item (Hide Wcalc)_Menu Item (Cosine (cos))_Square Button (1)_Bevel Button (2)_Menu Item (Undo)_Tab View Item (General)_Menu Item (Speed of Light (c))_Square Button (')_ Selected Tab View Item (History)_Menu Item (Delete)_$Check Box (Record Errors in History)_Button Cell (Octal)]My Text Field[Separator-6_#Menu (Atomic and Nuclear Constants)_Menu Item (Random Value (rand))]Menu Item (e)_Square Button (shift)-1_(Menu Item (Log Gamma Function (lnGamma))_Menu Item (Preloaded Variables)_Check Box (Use Radians)ZBaseDrawer_#Bordered Scroll View (Table View)-3_Menu Item (Symbols)o§Static Text (Wcalc started as a project written for my C++ class at Ohio University, way back on January 14th, 2000. I made it to be a "natural language" calculator - in that it would take any valid mathematical expression, or at least, that was the idea (it had some minor problems). Today, it has gone a bit beyond. I reworked it (version 0.2) in November 2001 to use lex and yacc powerful string parsing tools. Then, I got OS X, and thought "why not?" Believe me, Cocoa is every bit as wonderful as they say. More recently, I incorporated MPFR to allow me to do excessively large computations, which has been a real adventure. In any case, enjoy! I hope you find it useful.)_Button Cell (Hexadecimal)_#Menu Item (Exponential Power (exp))[Custom View_Square Button (f)_Menu Item (Never)_Check Box (Precision Guard)_Square Button (2)_Menu Item (Paste)_Menu Item (Proton Mass (Mp))[Menu (Menu)_Square Button (l)\Table View-1_Square Button (9)_Menu Item (Keyboard)_Menu Item (Window)_Menu Item (Factorial (fact))_Static Text (Version 1.1.1)_ Menu Item (Hyperbolic Functions)Ň>(˝ˇw€Ň>(Áˇ€Ň>(ĹŻđë˘Ađú V–Ď;Íj 5ý}ńÜŤQřS{Ö™Wä i9 öw˛Úľ!S …˝¦N%%ź,ă ÍŘ˝® C &^«˛ÚŞŤw Ą˘ąż KŤéÜ úŐcăM  4W×$ţ˛  +8 ‹˙쏎µ 87°Ń‡Ó-ŢŮ x 4ą#= ] Ăé čÎŐ ^÷)O€čŢ´ 9d_ňLÄ )„ĐĐ@ Ô Š1çýŞŠDđ  ‰ň:ŻÁ0 }óë›Ĺ¤G ł"Ćđ= †:3Ă8É›CP÷<y‘ "['ĂÍYííÓ }U„Âă şn\ŔäŘÉÔČď IÁ’bM±Ę*9–óVTÇᱠščóĐĄ–˙ĺDĺËĚŇ =Óaľ;:ąjÝXĽ•Á łë“xłU ŰUą‰í  ˛˛đ ’ ¤…  <$ R »ć IşŻé?dú8çZôů‚=ŕ 7¨ŹŢ@°rîüRuÔB ŃÄ> é¶«-fÓ:Q $Îx‹ˇĘK””E Ć Í*Ü· %6 S& >±;ř÷ ůĆ,>îőztőĹ +kś µţ ńŰ <' • "ŕ!!V 6ö[Ě1‰„Ą ¶ŔĄ1 #Fâ ©Ö!ĎśN"™<× épÚAĂ=¸Ŕ.ďs†Nť !]0‡ˇ QhiîżU…2ô¸Äĺ^ÝJ†ĹŘ =»ŕ~+g —ýíâ e !űŃ3  č껄 (×Ďü°G÷ß ý߄ܾ˛-Á˙ÔÔz¨ł˘eč ¦H p(O÷ěŕ%B ţČ ¦5O±Ů“Ç—ˇą ěßć ?2|_ tË´ml†v, ÎXńć˙YqaO´ßŰf«ySECá>Úâ_\©/I¤µÎ ęŽ` úZ° …A^ăł ĄPMŇŰ.ő>§ eŁ VŚ]ö® ´  & :; Ḽ· ÉůbÖŮ Ş„ä ůfT‚tcňô’žoĺłť­ \ď“+` ›ńš(áĺůęĽp űN|Ƕń ?Śű6  %UŹ<S4ˇw¬¦ü  ýćĐT5y“ ´ż7˝‰‡ n›ÍgĂő¬őmo˙»Ç€çŇ›€ď(݇ĐÔ Ť‹€l€üO ÜĚ€šz%€–ˇŐ#f€›I€p¤˛ěC.ŐĐŇŃ+\}lńÍn`>'8’šýăŃž€=Š€ť Šz ć4Sn©ç_÷V8ÍLu€9p跀ǜíŇNúGJ•€4- đlwËÁhéô€W‚Öí„€ŇΠĽ´ KB8;˝Ě˛1ť.*ĺ*î]şŰyÔE0+{ťŚů¤Rec9ć€s€w€Źgš´çmF/M¤V 3qÎ’ů‘5.j°a€ót[_Řä-‰@ż€ÓFŽ{eĎdeÇG#§  ąŞŞ€ßşN~3C+‘KŘ>8ŤŐ‘!ghrBHŘÍśDFQ€č«)Ž!€B€Ćꔀ#_Ş. €µŠ¦O¶ăĽ®K>i‚ŢřWÖH*_€öĎQŹ€ńrśË%áÁ”˛đ˝âŘV4Ę&;- ±Ä—ă…Çu+KW19o=ę5¬„Y ÍďfŮEŻ˘čm €çĂJ€G0Úx°߀÷÷ÝM;€Čcľ€€ĆŰ3żĽăč2ú˛°N$HóiCbÉŔ´±B쀜í)"íŢ˙]ŘČ"/yOąV€o×đEKTçîÁS–€Jqs€ě!v­Ĺ$Łßđ—A†]&ąş¨EĺţD¦€©1€ň‚ŞL’€K!:A‡ÓÇk¦ÚÉ––âĆ ÁÄ™“î˛ňľh¦ÇłňŮôÜ…:ž¤€5u'Uµú€îĎ~i*)ńˇ­rYÚšgťÝ• Îôš!Ł €Ž|óimö€íˇĄ¬“ŰžŃE€cQ<€Ř«#7ľ˝„ČO讣ŹéŹÂŢ€ q=0˘(€Ą€[óע¶‰š¶'xŢ €Ö´  ö›ů1ů ęşËä€h&Ę?ľu$Ń˙Ś5¸ż@­ě€_JŐRµ<B€O;*ż€Sť”©¦ľ5¨®|űMśÚţŔÎ6-–™Wě:LŰDhN6ń|Iŕ]€ű€×» +Ą€Ţ±€-Mwđä§YUŠ"H[˘ˇ€,#ýĺ€üo][H€+"Aŕ ¨€˙-'‚Ň>+¸Żđ+ą+ş+»+Ľ+˝+ľ+ż+Ŕ+Á+Â+Ă+Ä+Ĺ+Ć+Ç+Č+É+Ę+Ë+Ě+Í+Î+Ď+Đ+Ń+Ň+Ó+Ô+Ő+Ö+×+Ř+Ů+Ú+Ű+Ü+Ý+Ţ+ß+ŕ+á+â+ă+ä+ĺ+ć+ç+č+é+ę+ë+ě+í+î+ď+đ+ń+ň+ó+ô+ő+ö+÷+ř+ů+ú+ű+ü+ý+ţ+˙,,,,,,,,,, , , , , ,,,,,,,,,,,,,,,,,,, ,!,",#,$,%,&,',(,),*,+,,,-,.,/,0,1,2,3,4,5,6,7,8,9,:,;,<,=,>,?,@,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,[,\,],^,_,`,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,{,|,},~,,€,,‚,,„,…,†,‡,,‰,Š,‹,Ś,Ť,Ž,Ź,,‘,’,“,”,•,–,—,,™,š,›,ś,ť,ž,ź, ,ˇ,˘,Ł,¤,Ą,¦,§,¨,©,Ş,«,¬,­,®,Ż,°,±,˛,ł,´,µ,¶,·,¸,ą,ş,»,Ľ,˝,ľ,ż,Ŕ,Á,Â,Ă,Ä,Ĺ,Ć,Ç,Č,É,Ę,Ë,Ě,Í,Î,Ď,Đ,Ń,Ň,Ó,Ô,Ő,Ö,×,Ř,Ů,Ú,Ű,Ü,Ý,Ţ,ß,ŕ,á,â,ă,ä,ĺ,ć,ç,č,é,ę,ë,ě,í,î,ď,đ,ń,ň,ó,ô,ő,ö,÷,ř,ů,ú,ű,ü,ý,ţ,˙---------- - - - - ------------------- -!-"-#-$-%-&-'-(-)-*-+-,---.-/-0-1-2-3-4-5-6-7-8-9-:-;-<-=->-?-@-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z-[-\-]-^-_-`-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-{-|-}-~--€--‚--„-…-†-‡--‰-Š-‹-Ś-Ť-Ž-Ź--‘-’-“-”-•-–-—--™-š-›-ś-ť-ž-ź- -ˇ-˘-Ł-¤-Ą-¦-§-¨-©-Ş-«-¬-­-®-Ż-°-±-˛-ł-´-µ-¶-·-¸-ą-ş-»-Ľ-˝-ľ-ż-Ŕ-Á-Â-Ă-Ä-Ĺ-Ć-Ç-Č-É-Ę-Ë-Ě-Í-Î-Ď-Đ-Ń-Ň-Ó-Ô-Ő-Ö-×-Ř-Ů-Ú-Ű-Ü-Ý-Ţ-ß-ŕ-á-â-ă-ä-ĺ-ć-ç-č-é-ę-ë-ě-í-î-ď-đ-ń-ň-ó-ô-ő-ö-÷-ř-ů-ú-ű-ü-ý-ţ-˙.......... . . . . ................... .!.".#.$.%.&.'.(.).*.+.,.-.../.0.1.2.3.4.5.6.7.8.9.:.;.<.=.>.?.@.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.[.\.].^._.`.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.{.|.}.~..€..‚..„.….†.‡..‰.Š.‹.Ś.Ť.Ž.Ź..‘.’.“.”.•.–.—..™.š.›.ś.ť.ž.ź. .ˇ.˘.Ł.¤.Ą.¦.§.¨áâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ „ … † ‡ ‰ Š ‹ Ś Ť Ž Ź ‘ ’ “ ” • – — ™ š › ś ť ž ź   ˇ ˘ Ł ¤ Ą ¦ § ¨ © Ş « ¬ ­ ® Ż ° ± ˛ ł ´ µ ¶ · ¸ ą ş » Ľ ˝ ľ ż Ŕ Á Â Ă Ä Ĺ Ć Ç Č É Ę Ë Ě Í Î Ď Đ Ń Ň Ó Ô Ő Ö × Ř Ů Ú Ű Ü Ý Ţ ß ŕ á â ă ä ĺ ć ç č é ę ë ě í î ď đ ń ň ó ô ő ö ÷ ř ů ú ű ü ý ţ ˙                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ „ … † ‡ ‰ Š ‹ Ś Ť Ž Ź ‘ ’ “ ” • – — ™ š › ś ť ž ź   ˇ ˘ Ł ¤ Ą ¦ § ¨ © Ş « ¬ ­ ® Ż ° ± ˛ ł ´ µ ¶ · ¸ ą ş » Ľ ˝ ľ ż Ŕ Á Â Ă Ä Ĺ Ć Ç Č É Ę Ë Ě Í Î Ď Đ Ń Ň Ó Ô Ő Ö × Ř Ů Ú Ű Ü Ý Ţ ß ŕ á â ă ä ĺ ć ç č é ę ë ě í î ď đ ń ň ó ô ő ö ÷ ř ů ú ű ü ý ţ ˙                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ „ … † ‡ ‰ Š ‹ Ś Ť Ž Ź ‘ ’ “ ” • – — ™ š › ś ť ž ź   ˇ ˘ Ł ¤ Ą ¦ § ¨ © Ş « ¬ ­ ® Ż ° ± ˛ ł ´ µ ¶ · ¸ ą ş » Ľ ˝ ľ ż Ŕ Á Â Ă Ä Ĺ Ć Ç Č É Ę Ë Ě Í Î Ď Đ;=đ NĐ2FŤ $ܤM’26mäůŻtśF p#¶÷]f©Čr}ť#ôgJ*kö`ßî2ĚŘ  Ä"·"®Ś` x]ß  ÉkáÇL5ńË=3ăďŹNŇ $™Ř“b)\+D,»0  CIÓ#ÜÖŹ’W ĺúć¤<$5atŞš1¨1™&L‚ťR_Ď5 +(«EX!˝łĆ¬‰± «ĆÚoEd­˛ÔO‘G-BUKFL  Qy©Roű¬ăň;˙Áo şŕ"uđ¸öýŮAÔü<6Ä;Ő—•é={%3 F ¸N SKró Ŕ*z–Mç»-Oą×‡¨Gݵś"łaýM\˘ý: Kµˇ˙…˛ł <ş× ‘I $ě P·Ń:P ÚżS ź>†!Ѱy'űđŢ9tŮśY'ŇěìΠń·éÝ÷sµ«f"7ăüšbŁ•ÓĹž›W|‰ô>¸ á’j ęiIŰ÷@ݶSą˙˙˙˙˙˙˙ýÂćTčĚ9˛ŞŘn·ćŰ #ŽÖÖŁŹTľe~4zş´Ő(±j j°=Hâ?m[ţ¦ÉŁ>M;Ă+Bľ–ÄžJą¤Ă  ^B0sŮBâh „x·JŚđž8˘4§ Ř´ż9kÇ×%ň4/ícĹ 8|_ OQ¦´8ĘëÜp î>  !ä™m\#ťdŕ'!ŕŰŹęřn A9®(y:u8 í˙ţLlÖqˇ: ŐżPú@ál Ŕ úĘ^” ~) eÝí?µUN&!hÍŠ)ŮŢý˛ĄH­VeŰ,‹J°}ĂIG›é­Rív ǰ ,őł±‘3ËhS [_˝ ×ěŐµÚ6l13tx\âzrŢë'{^gĽA»çV‹ čëvČĐŤ †Î<€ D‘wCŽÂď.P.O+źG7o¶Q "`c´i0˛źĺ©§wŇ>u1€{ Ň>1‹ Ň>1Ž Ň7811‘˘1‘;^NSIBObjectData"'1:?DRTfels“Ż˝ÉŐăîü&9Keo|~„‡ŠŚŹ‘”—šťźˇ¤§Ş­¶ÂÄĆÔÝćńö!*57:<q~‹ˇŻąÇÔŢđ "$)+-/1357RXajtv{„‹ť¦ĂŐŕéő  $&(*,U]sz„†ŠŚŽ‘’”–¤°Éîú#1>R^gikmoqvwyz‹’™˘¤­Ż˛żČÍÔéńţ  ")?LTVX[di~€‚„†ťź˘«´ĆÓÜáđ!:s{‘¦±ĽÇŐňű         ' ) : < E G I S \ e r { † Ź ™   ¬ Ń Ý ß á ă ĺ č ę ě î đ ů ű!"!$!&!(!*!,!.!0!2!4!6!8!:!<!>!@!B!D!F!g!i!k!m!o!p!r!t!‹!Ŕ!Ö!ë!ú" ""1"?"D"F"H"J"L"N"P"R"T"W"\"e"g"x"z""…""‘"š"§"°"»"Ä"é"ď"ń"ó"ő"÷"ř"ú"ü"ţ##P#R#T#V#X#Z#\#^#a#c#„#†##Š#Ś#Ť#Ź#‘#¨#Ý#ß#á#ă#ĺ#ç#é#ë#í$$$$$$$$$!$:$s$u$w$y${$}$$$„$†$«$­$Ż$±$ł$´$¶$¸$ş$Ň% % %%%%%%%%%?%A%C%E%G%H%J%L%d%™%›%ť%ź%ˇ%Ł%Ą%§%©%Ę%Ě%Î%Đ%Ň%Ó%Ő%×%ď&$&&&(&*&,&.&0&2&4&U&W&Y&[&]&^&`&b&x&­&Ż&±&ł&µ&·&ą&»&˝&Ţ&ŕ&â&ä&ć&ç&é&ë''7'9';'='?'A'C'E'G'h'j'l'n'p'q's'u'Ś'Á'Ă'Ĺ'Ç'É'Ë'Í'Ď'Ń'ň'ô'ö'ř'ú'ű'ý'˙((K(M(O(Q(S(U(W(Y([(|(~(€(‚(„(…(‡(‰(ź(Ô(Ö(Ř(Ú(Ü(Ţ(ŕ(â(ä) ) ) )))))))/)h)j)l)n)p)r)t)v)x)z)ź)ˇ)Ł)Ą)§)¨)Ş)¬)®)Ć)˙***** * * **4*6*8*:*<*=*?*A*Y*’*”*–**š*ś*ž* *Á*Ă*Ĺ*Ç*É*Ę*Ě*Î*ć++++!+#+%+'+)+++L+N+P+R+T+U+W+Y+q+¦+¨+Ş+¬+®+°+˛+´+¶+×+Ů+Ű+Ý+ß+ŕ+â+ä+ű,0,2,4,6,8,:,<,>,@,I,P,_,g,,,‘,ž,ż,Á,Ă,Ĺ,Ç,Ę,Ë,Í,Ď,č- ------ -%-&-(-1-<-G-P-W-p-{--ž-§-¬-ż-Č-Ď-Ü-â-ë-í0Ç0É0Ë0Í0Ď0Ń0Ó0Ő0×0Ů0Ű0Ý0ß0á0ä0ç0ę0í0đ0ó0ö0ů0ü0˙1111 1111111 1#1&1)1,1/1215181;1>1A1D1G1J1M1P1S1V1Y1\1_1b1e1h1k1n1q1t1w1z1}1€11†1‰1Ś1Ź1’1•11›1ž1ˇ1¤1§1Ş1­1°1ł1¶1ą1Ľ1ż1Â1Ĺ1Č1Ë1Î1Ń1Ô1×1Ú1Ý1ŕ1ă1ć1é1ě1ď1ň1ő1ř1ű1ţ2222 2 2222222"2%2(2+2.2124272:2=2@2C2F2I2L2O2R2U2X2[2^2a2d2g2j2m2p2s2v2y2|22‚2…22‹2Ž2‘2”2—2š2ť2 2Ł2¦2©2¬2Ż2˛2µ2¸2»2ľ2Á2Ä2Ç2Ę2Í2Đ2Ó2Ö2Ů2Ü2ß2â2ĺ2č2ë2î2ń2ô2÷2ú2ý3333 3 3333333!3$3'3*3-303336393<3?3B3E3H3K3N3Q3T3W3Z3]3`3c3f3i3l3o3r3u3x3{3~33„3‡3Š3Ť33“3–3™3ś3ź3˘3Ą3¨3«3®3±3´3·3ş3˝3Ŕ3Ă3Ć3É3Ě3Ď3Ň3Ő3Ř3Ű3Ţ3á3ä3ç3ę3í3đ3ó3ö3ů3ü3˙4444 4444444 4#4&4)4,4/4245484;4>4A4D4G4J4M4P4S4V4Y4\4_4b4e4h4k4n4q4t4w4z4}4€44†4‰4Ś4Ź4’4•44›4ž4ˇ4¤4§4Ş4­4°4ł4¶4ą4Ľ4ż4Â4Ĺ4Č4Ë4Î4Ń4Ô4×4Ú4Ý4ŕ4ă4ć4é4ě4ď4ň4ő4ř4ű5 55#5+5-5/51535P5R5T5V5X5Y5[5p5r5t5w5z5’5Ç5É5Ë5Í5Ď5Ń5Ó5Ő5×5č5ę5ó5ő666 6 6666,676@6G6_6n6666…6‡66’6”6Ş77#7-7:7O7\7v7’7­7Ľ7Č7Ú7é88888!8#8%8&8(81838<8>8?8A8C8E8G8P8y88Ť8—8Ą8§8Ş8­8Ż8˛8µ8·8ą8»8˝8Č8á8í8ď8ń8ó8ő8÷9 9"9%9(9+9-9/91939=9F9O9c9x9z9|9~9‡9‰9ľ9Ę9Ó9ć9ó9˙: :::::::!:4:7:::<:>:U:^:g:u:~:€:…:‡:‰:˛:Á:Î:Ű:ă:î:ý;;;;;;;#;%;.;7;9;A;^;c;e;g;i;k;m;x;…;‡;“;¨;Ş;¬;®;°;Â;Ë;Ö;ę<< <<<<<<<.<0<2<4<6>>(>*>,>.>0>U>]>q>|>Š>”>ˇ>¨>Ş>¬>±>ł>¸>ş>Ľ>ľ>Ŕ>Í>Ů>Ü>ß>â>ń>ţ? ?????-?6?;?N?[?]?_?a?t?}?‚?Ť?›?¬?®?°?˛?´?Ń?Ó?Ő?×?Ů?Ú?Ü?ô@)@+@-@/@1@3@5@7@H@J@L@N@P@q@s@u@w@y@|@}@@@–@@š@ť@ @ą@â@î@űAA A AAAA A)A2A@AIATA^AjA{A}AAAA¤A¦A¨AŞA¬A­AŻA±AĘBBBB B B BBBBBB)B2B>B@BBBKBTBYBoByBŠBŚBŽBB’BŻB±BłBµB·B¸BşBŇCC C C CCCCCC(C*C,C.C0CACCCECGCICnCpCrCtCvCxCzC|C‰CŚCŹC’C«C¸CşCĽCľCßCáCăCĺCçCéCëCřCűCţDDDDD!D#D%D'DDDFDHDJDLDMDODgDśDžD D˘D¤D¦D¨DŞD¬D˝DżDÁDĂDĹDÎDĐDŇDŢDçDřDúDüD˙EE#E%E(E+E-E/E2E?EBEEEHEQESEiEzE|E~EE„EĄE§EŞE¬E®E°EłEżEÎEßEáEăEĺEčEńEóEřFFFFFFF F#F&F(F+FLFNFQFTFVFXFZF_FaF‚F„F‡FŠFŚFŽFF•F—FŔFÎFŰFÝFßFŕFâFăFĺFçFéG G GGGGGGGG?GAGDGGGIGKGMGRGTGuGwGzG}GGGG‰G‹G¬G®G±G´G¶G¸GşGĹGÇGĐGŐGÚGëGíGďGňGôHHHHH H!H$H&H;H=H?HBHEH^H—H™H›HťHźH˘H¤H§HÂHÓHŐH×HÚHÜIIIII I IIII!I$I'IBISIUIWIYI\IhIyI{I~II„I×IÚIÜIĺIčIęIëIîIńIňIôI÷IúJ#J&J)J,J/J2J4J7J:JSJVJXJ[J^JaJŠJŤJJ“J–J™J›JžJˇJ¶JąJ»JľJÁJöJůJüJ˙KKKK KKKKK.K7K9K>KAKDKqK~KKK„K‡KK“K”K—K K˝KżKÁKÄKĆKČKŃKîKđKňKôK÷KůL&L'L)L,L/L8L;LDLELHLNLkLmLoLrLtLvL|L™L›LťLźL˘L¤LµL¸L»L˝LŔLĹLÎLĐLŮLÜLßLâLĺM M MMMMMMM<M>MAMCMEMGMJMNMoMqMtMvMxMzM}M„MĄM§M©M«M­MŻM˛MĂMĹMČMËMÎMďMňMôM÷MúMűMţNNNNNN6NoNqNsNuNwNzN|NNŽNŻN˛NµN¸N»NĽNżNÁNŮO(OEOWOiO~OŚO•O–O™OśOžOˇOŁO¦O©OŞO«O°OłO¸OÁOĂOĚOÎOűPP PPPPPP!P#P&P)P6P9P<P?PDPXPaPcPnPwPyP€PP†P‰P˛PµP·PşPĽPľPŔPĂPĆPÍPöPůPűPţQQQQQ Q Q)Q6QJQYQbQoQ}Q‰Q–QQ›QžQ©QşQĽQżQÁQÄQéQëQîQńQóQőQřQűRR RRRRR%R6R8R;R=R@RaRdRfRiRlRoRpRsRuRŽR»RÓRßRâRëRíRďRńRôR÷RüRýR˙SFSMSXS_SkSsS†SŤS›SŻSÁSŐSčSôSűTTTT T"T%T'T*T-T0T3T5T6T9T;T>TATBTCTPTXT[TxT{T~TT„T‡TŠTŤTT“T–T™TśTźT˘TżTÂTĹTČTËTÎTŃTÔTÖTŮTÜTŢTáTäTçTďUU*U1U>UFUUUdU|U–U©U˝UŃUńVVV%V4V>VJVVVYVZVmVnVwV|V™V¦V©VŞV«V´VąVĆVĎVŇVÔVÝVâV÷WWWWWW#W(W1W2WOWRWSWfWgWjWkWxW…WW‹WŤWšWťWžWźW˘W¤W±W´W·WşWľWÇWÎWäWíWôXXXXXXCXLXQXcXtXvXyX|XXśXźXˇX¤X§X¨X«XŔXÂXÄXÇXĘXâYYYYY Y#Y%Y(Y-Y6Y<YMYOYQYZY\Y_YqY}YŽYY’Y•YYąY»YľYÁYĂYĹYČYŮYÜYŢYáYäYďYńY÷ZZ Z ZZZ!Z#Z&Z(Z+ZLZNZQZTZVZXZ[ZlZoZrZuZxZ„Z†Z•Z¦Z¨ZŞZ¬ZŻZŔZÂZĹZÇZĘZ×ZčZęZěZďZň[[[[[ ["[%[([5[8[;[>[W[e[v[x[z[}[[ [Ł[Ą[¨[«[¬[Ż[±[É[ö\\\\\\\\-\/\1\4\7\T\W\Y\\\_\b\c\f\{\}\\‚\…\ť\Ň\Ô\×\Ú\Ý\ŕ\â\ĺ\î\÷\ů]]] ]] ]"]%]']D]F]H]K]N]O]Q]h]ť]ź]ˇ]Ł]Ą]¨]Ş]­]ľ]Ŕ]Â]Ĺ]Ç]ě]î]ń]ó]ő]÷]ú]ü^^+^-^/^1^4^?^P^R^U^W^Z^l^}^^^„^†^«^­^°^˛^´^¶^ą^»^Ů^ę^ě^ď^ń^ô_____!_"_%_>_Ť_Ž_‘_”_–_™_›_ž_ˇ_˘_Ł_¦_Ż_±_ş_Ľ_é_ě_î_ń_ó_ő_÷_ú_ý` ` ````&`(`1`3`:`=`@`C`l`o`q`t`v`x`z`}`€`†`Ż`˛`´`·`ą`»`˝`Ŕ`Ă`Ę`ŕ`ń`ó`ő`ř`úaaaaa!a"a$a;aparatavaxa{a}a€a‚a“a•a—a™aśa­aŻa˛aµa¸aÁaĂaĆaŐaňaőařaűaţa˙bbbjbkbmbpbrbubwbzb}b~bb‚b‹bŤbşb˝bżbÂbÄbĆbČbËbÎbŰbŢbábäbëbôböb˙ccccc!c$c'c*c-c0c3c6c9cbcecgcjclcncpcscvc{c¤c§c©c¬c®c°c˛cµc¸cżcčcëcícđcňcôcöcůcüdd*d-d/d2d4d6d8d;d>dDdmdpdrdudwdyd{d~dd‡d°dłdµd¸dşdĽdľdÁdÄdĘdódödřdűdýd˙eeeee=e@eBeEeGeIeKeNeQe]e†e‰e‹eŽee’e”e—eše eÉeĚeÎeŃeÓeŐe×eÚeÝećeîe˙fffff%f'f)f,f/f0f2fJffff…f‡fŠfŚfŹf‘fžf fŁf¦f­fľfŔfĂfĆfÉfćféfëfîfńfôfőfřg ggggg-gbgdgfghgkgngpgsgxgggŚgŽg‘gťgĄg¶g¸gşg˝gŔgĺgçgęgěgîgđgógöhhh h h3hDhFhHhKhNhshuhxhzh|h~hh„h—h¨hŞh¬hŻh˛h×hŮhÜhŢhŕhâhĺhňhőhřhűhýiiiiiiMiPiRiUiWiZi_ibieihikini‡i‘išiśi¤i­iŻiÄiĆiČiËiÎi×iŮiÜißjjj8jPjSjVjYj\j^jajbjejfjijrjtjwjzj“j–jj›jžjˇjŞj¬j±jłj¶jżjÁjĚjÎjŃjÔjÖjŘjájăjćjčkk kkk>kHkJkLkOkRkUkWk`kyk†kŹkškĄkĘkĚkÎkŃkÔk×kŮkâkúllll l l8lAlJlWltlwlyl|ll€ll›lĐlŇlÔlÖlŮlŰlÝlŕlélëmmm'm)m.m1m4mMmWmZm]m`mcmfmimrmtm|m‘m“m•mmšm§m°mµmĂmÜmßmâmĺmčmëmîm÷můnnnnnn!n#n,n/n2n5n8nAnCnNnQnTnWnZn]nfnhnknnnŹn’n•nn›nžnˇnŞnĂnčnënînńnôn÷núooo(o*o-o0oMoPoRoUoXo[o\o_owo¬o®o°oło¶oąo»oľoĂoÔoÖoŘoáoăppppp p ppDpFpHpKpNpPpRpUp^p`p}p€p‚p…pp‰pŚpŁpŘpÚpÜpßpâpĺpçpępópőp˙qqqq'q9qJqLqNqPqRqcqeqhqkqnqwqyq|q‘q˛qµq·qşq˝qľqÁqÄqáqäqćqéqěqďqňr r+r-r0r3r5r8r=r?rMrUrfrhrjrmrorŚrŽrr“r–r—r™r°rĺrçrérërírđrňrőr÷ss s ssssss+s<s>s@sBsEsWshsjslsnsps}ss‚s…s¦s¨s«s­sŻs±s´sĹsČsËsÎsŃsÜsôttt t tt3t5t8t:t<t>t@tBtjt{t}t€tt†tŹt‘t”tˇt®tżtÁtÄtÇtĘtëtítďtńtótőtřu u uuuu"u3u5u7u9u<uMuOuQuSuUufuhukumupuuu’u”u—u™uşu˝użuÂuĹuĆuÉuËuävvv!v#v%v(v*v-v@vQvSvUvWvZvkvmvovrvuvšvśvźvˇvŁvĄv¨v«vľvĎvŃvÓvÖvŮvţwwwww w wwTwewgwjwlwoww’w”w—wšw›wťwźw·wđwňwôwöwřwűwýxx xxx*x,x.x1x3xXxZx]x_xaxcxfxhxx’x”x–xxšx«x­xŻx±x´xąxĘxĚxÎxŃxÓxäxçxęxíxđxůyyyyyyy!y$y'y*y-yVy`ybyeygyiykymypysy‚y‹yŤy¤y§yŞy­y°yły¶yąyĽyżyÂyĹyâyäyçyéyëyíyđyüz%z'z)z*z,z-z/z1z4zUzWzZz]z_zazdzszuzžz z˘zŁzĄz¦z¨zŞz­zÖzŘzŰzŢzŕzâzäzçzęzó{{{ { {{{{${&{'{9{b{d{f{g{i{j{l{n{q{’{”{—{™{›{ť{ {¬{Í{Ď{Ň{Ô{Ö{Ř{Ű{ä| |||||||||=|?|B|E|G|I|L|W|d|Ť|Ź|’|•|—|™|›|ž|ˇ|¦|Ż|±|ş|Ľ|Ç|Ę|Í|Đ|Ó|Ö|÷|ů|ü|˙}}}}}}9};}>}A}C}E}G}J}M}Y}b}d}m}o}r}u}Ž}·}ą}»}Ľ}ľ}ż}Á}Ă}Ć}ë}í}đ}ó}ő}÷}ú}ý~~ ~3~5~7~:~<~>~@~C~F~o~q~t~w~y~{~}~€~~Ś~Ž~™~ś~ź~˘~Ą~¨~É~Ë~Î~Đ~Ň~Ô~×~ć  )+LNQTVX[qsśžˇ¤¦¨Ş­°şĂĹţ€€€€ € €€€€€€€"€%€(€+€.€1€4€7€:€=€@€C€F€I€L€O€x€z€|€€€€…€€‹€™€˘€¤€˝€Ŕ€Ă€Ć€É€Ě€Î€Ń€Ô€×€Ú€Ý€ŕ BDGIKMO\†ŠŚŽśÁĂĆČĘĚÎŕ‚‚‚ ‚ ‚‚‚‚‚!‚F‚H‚K‚M‚O‚Q‚S‚w‚ś‚ž‚ˇ‚Ł‚Ą‚§‚©‚«‚Ń‚ö‚ř‚ű‚ý‚˙*OQTVXZ\^‡¬®±łµ·ą»á„ „ „„„„„„„„4„=„?„X„Z„]„`„c„f„i„l„o„r„u„x„{„ „˘„Ą„§„©„«„­„݄Ƅď„ń„ô„ö„ř„ú„ü„ţ……?…A…D…F…H…J…L…N…l…‘…“…–……š…ś…ž… …»…ŕ…â…ĺ…ç…é…ë…í…ď† †1†3†6†8†:†<†>†q†–††›†ť†ź†ˇ†Ł†Ř†ý†˙‡‡‡‡‡ ‡ ‡B‡g‡i‡l‡n‡p‡r‡t‡¬‡Ń‡Ó‡Ö‡Ř‡Ú‡Ü‡Ţ‡ŕ:<?ACEGI€©«­®°±łµ¸Ýßâäćč뉉)‰+‰.‰0‰2‰4‰7‰9‰U‰~‰€‰‚‰‰…‰†‰‰Š‰Ť‰˛‰´‰·‰ą‰»‰˝‰Ŕ‰Â‰ŰŠŠŠŠŠ Š ŠŠŠ/ŠTŠVŠYŠ[Š]Š_ŠbŠdŠ{Š¤Š¦Š¨Š©Š«Š¬Š®Š°ŠłŠŘŠÚŠÝŠßŠáŠăŠć‹‹%‹'‹*‹,‹.‹0‹3‹J‹o‹q‹t‹v‹x‹z‹}‹‹™‹ľ‹Ŕ‹Ă‹Ĺ‹Ç‹É‹Ě‹Î‹čŚ ŚŚŚŚŚŚŚŚ0ŚYŚ[Ś]Ś^Ś`ŚaŚcŚeŚhŚŤŚŹŚ’Ś”Ś–ŚŚ›ŚĆŚëŚíŚđŚňŚôŚöŚůŤ Ť5Ť7Ť9Ť:Ť<Ť=Ť?ŤAŤDŤiŤkŤnŤpŤrŤtŤwŤyŤ—ŤĽŤľŤÁŤĂŤĹŤÇŤĘŤđŽŽŽŽŽ Ž!Ž#Ž%Ž(ŽMŽOŽRŽTŽVŽXŽ[Ž]ŽsŽśŽžŽˇŽ¤Ž¦Ž¨ŽŞŽ­Ž°Ž¸ŽÁŽĂŽŕŽăŽćŽéŽěŽďŽňŽőŽřŽűŽţŹŹŹŹ Ź/Ź1Ź4Ź6Ź8Ź:Ź=ŹFŹkŹmŹpŹrŹtŹvŹyʰŹŐŹ×ŹÚŹÜŹŢŹŕŹăŹú!$&(*-Otvy{}‚šĂĹÇČĘËÍĎŇűý‘‘‘‘‘ ‘ ‘‘%‘2‘5‘8‘;‘D‘F‘S‘V‘Y‘\‘_‘b‘e‘Бڑʑ‘‘“‘•‘‘š‘»‘ŕ‘â‘ĺ‘ç‘é‘ë‘î‘đ’I’n’p’s’u’w’y’|’Ë’đ’ň’ő’÷’ů’ű’ţ““@“B“E“G“I“K“N“d“‰“‹“Ž““’“”“—“¬“Փדړݓߓá“ă“ć“é””””””$”&”5”8”;”>”A”D”G”J”o”q”t”v”x”z”}””®”ӔՔؔڔܔޔá”ă••=•?•B•D•F•H•K•M•h•Ť•Ź•’•”•–••›•ť•¶•ەݕŕ•â•ä•ć•é•ë––*–,–/–1–3–5–8–:–W–|–~–––…–‡–Š–Ś–Ă–ě–î–ń–ô–ö–ř–ú–ý———(—*—K—N—Q—T—W—Z—]—`—c—f—i—l—o—r—u—x—ť—ź—˘—¤—¦—¨—«—®—ď"%:_adfhjmp…Ş¬Ż±łµ¸»Ň÷ůüţ™™™™™™B™D™G™I™K™M™P™S™r™—™™™ś™ž™ ™˘™Ą™¨™ľ™ă™ĺ™č™ę™ě™î™ń™ôšš,š.š1š3š5š7š:š=šdš‰š‹šŽšš’š”š—ššš®šÓšŐšŘšÚšÜšŢšášä››D›F›I›L›N›P›R›U›X›t›}››–›™›ś›ź›˘›Ą›¨›«›®›±›´›·›Ü›Ţ›á›ă›ĺ›ç›ę›íśś-ś/ś2ś4ś6ś8ś;ś>ś\śśś†śśŠśŚśŹś’ś©śÎśĐśÓśŐś×śŮśÜśßś˙ť$ť&ť)ť+ť-ť/ť2ť5ťUťzť|ťťťť…ťť‹ť¤ťÉťËťÎťĐťŇťÔť×ťÚť˙ž$ž&ž)ž+ž-ž/ž2ž5žVž{ž}ž€ž‚ž„ž†ž‰žŚžŐžúžüž˙źźźźź ź0źYź[ź]ź^ź`źaźcźeźhźŤźŹź’ź”ź–źź›źµźÚźÜźßźáźăźĺźč  . 0 3 6 8 : < ? B I R T ] _ j m p s v y š ś ź ˘ ¤ ¦ © ˛ ´ Ő × Ú Ý ß á ä ń óˇˇˇ ˇ!ˇ#ˇ$ˇ&ˇ(ˇ+ˇLˇNˇQˇSˇUˇWˇZˇoˇ~ˇ§ˇ©ˇ¬ˇŻˇ±ˇłˇµˇ¸ˇ»ˇŔˇÍˇĐˇÓˇÖˇßˇáˇęˇěˇďˇň˘˘˘˘˘˘˘"˘-˘/˘;˘L˘N˘P˘R˘T˘e˘g˘i˘l˘n˘Ź˘‘˘“˘–˘™˘š˘ś˘˛˘ë˘í˘ď˘ń˘ó˘ö˘ř˘űŁŁŁŁŁŁŁ Ł1Ł3Ł5Ł8Ł;ŁLŁNŁPŁSŁVŁgŁiŁkŁmŁpŁyŁŠŁŚŁŽŁ‘Ł”ŁĄŁ§Ł©Ł¬Ł®ŁżŁÁŁÄŁĆŁÉŁň¤¤¤"¤5¤G¤Z¤e¤g¤j¤l¤o¤r¤u¤w¤¤‹¤¤ˇ¤¨¤±¤Ľ¤Í¤Ď¤Ń¤Ô¤Ö¤ç¤é¤ë¤î¤đĄĄĄĄĄ ĄĄĄĄ"Ą$Ą5Ą7Ą9Ą<Ą>Ą[Ą]Ą_ĄbĄeĄfĄhĄ€ĄµĄ·ĄąĄ»Ą˝ĄŔĄÂĄĹĄÇĄŘĄÚĄÝĄßĄâĄńĄţ¦¦¦¦¦-¦/¦1¦4¦6¦G¦I¦K¦N¦P¦a¦c¦e¦h¦j¦‡¦‰¦‹¦Ž¦‘¦’¦”¦¬¦á¦ă¦ĺ¦ç¦é¦ě¦î¦ń¦ó§§§§ § §§ §"§%§(§9§;§=§?§A§R§T§V§Y§[§€§§…§§‹§Ś§Ź§’§Ż§˛§´§·§ş§˝§Ŕ§Ř¨¨¨¨¨¨¨¨!¨-¨>¨@¨B¨E¨G¨d¨f¨h¨k¨n¨o¨q¨‰¨ľ¨Ŕ¨Â¨Ä¨Ć¨É¨Ë¨Î¨Đ¨á¨ă¨ć¨é¨ě© © ©©©©©©0©e©g©i©k©n©p©r©u©~©€©‹©ś©ž©ˇ©¤©§©¸©ş©˝©Ŕ©Ă©Đ©á©ă©ĺ©č©ę©ű©ý©˙ŞŞŞŞŞŞŞŞ.Ş0Ş2Ş5Ş7ŞHŞJŞLŞNŞPŞaŞcŞeŞhŞkŞ|Ş~Ş€ŞŞ…Ş–ŞŞšŞťŞ Ş±ŞłŞ¶Ş¸Ş»ŞÜŞßŞáŞäŞçŞčŞë««=«?«A«C«E«H«J«M«d«q«‚«„«†«‰«‹«¨«Ş«¬«Ż«˛«ł«µ«Í¬¬¬¬¬ ¬ ¬¬¬#¬%¬(¬+¬.¬y¬|¬~¬¬…¬†¬‰¬Ś¬Ť¬Ź¬’¬•¬ž¬Ç¬Ę¬Í¬Đ¬Ó¬Ö¬Ř¬Ű¬Ţ¬é¬ú¬ü¬ţ­­­!­#­&­)­R­S­U­X­a­d­m­n­q­Ž­­’­”­–­­µ­·­ą­»­ľ­Ŕ­Ç­Ř­Ú­Ü­ß­â­ó­ő­ř­ú­ý®®®®"®%®&®)®B®c®e®h®k®m®p®r®w®Ś®ť®ź®˘®¤®§®˝®Î®Đ®Ň®Ő®Ř®é®ë®î®ń®ô®üŻ Ż ŻŻŻŻ,Ż.Ż0Ż2Ż4ŻEŻGŻIŻLŻNŻ_ŻaŻcŻfŻiŻzŻ|Ż~ŻŻŻ Ż˘Ż¤Ż§ŻŞŻ«Ż­ŻĹŻúŻüŻţ°°°°° °°° °#°&°G°J°L°O°R°S°V°o°¨°Ş°¬°®°°°ł°µ°¸°Ń± ±,±6±E±Q±i±t±~±“±ˇ±©±¬±Ż±˛±µ±¸±»±ľ±Ŕ±Â±Ĺ±Ć±É±Ě±Ń±Ô±í±ö±ř˛˛˛˛ ˛ ˛B˛K˛M˛P˛S˛V˛Y˛[˛^˛f˛o˛q˛t˛‚˛‹˛Ť˛Â˛Ä˛Ç˛É˛Ě˛Î˛Ń˛×łłłłłłł ł#ł/łdłfłiłkłnłpłsłzł„ł‹ł¸łşł˝łżłÂłÄłĘłÓłŢłçłřłúłüł˙´´´´´´´=´?´A´D´G´H´J´c´ś´ž´ ´˘´¤´§´©´¬´Ŕ´Ń´Ó´Ő´×´Ů´ę´ě´ď´ň´ő´ýµµµµµµ4µ6µ8µ;µ>µ?µAµYµŽµµ’µ”µ–µ™µ›µžµ µ±µłµµµ¸µ»µĚµÎµŃµÓµÖµáµňµôµ÷µúµü¶¶¶ ¶¶¶7¶9¶<¶>¶@¶B¶E¶V¶X¶[¶^¶a¶Š¶ś¶¦¶ł¶¶¶ą¶Ľ¶ż¶Â¶Ĺ¶Č¶Ë¶Í¶ú··· · ·······(·=·G·R·d·g·j·s·v·‹·ž·¬·¶·ą·Ľ·ż·Á·Î·Ń·Ô·Ö·ß·á·ę·ó¸¸¸¸¸ ¸)¸.¸7¸<¸]¸e¸¸’¸©¸ľ¸Ń¸Ô¸×¸Ú¸Ü¸Ţ¸á¸ă¸ć¸ó¸ö¸ű¸ţąąą ą ą!ą#ą%ą(ą*ąHą]ą_ąaądąfązą‡ąŠą‘ą”ą—ąšąˇą¤ą§ąŞą¶ąĂąÉąËąŇąßąéąöąůąüşş şşş&ş(ş+ş4ş9şLşUşZşqş~ş‡ş’ş™ş¦ş·şąş»şľşŔşŃşÓşŐşŘşŰşĺşöşřşűşý»»»&»(»*»,».»?»A»C»F»H»e»g»i»l»o»p»r»‹»Ŕ»Â»Ä»Ć»Č»Ę»Ě»Ď»ŕ»â»ä»ç»ę»ű»ý»˙ĽĽĽĽĽĽĽĽ/Ľ1Ľ3Ľ6Ľ9ĽFĽWĽYĽ[Ľ^Ľ`Ľ}ĽĽĽ„Ľ‡ĽĽŠĽˇĽÖĽŘĽÚĽÜĽŢĽáĽăĽćĽ÷ĽůĽűĽţ˝˝ ˝˝˝˝ ˝#˝*˝7˝9˝<˝?˝Q˝b˝d˝g˝j˝m˝Ŕ˝Ă˝Ĺ˝Î˝Ń˝Ó˝Ô˝×˝Ú˝Ű˝Ý˝ŕ˝ăľ ľľľľľľľ ľ#ľ.ľGľJľLľOľRľUľ~ľľ„ľ‡ľŠľŤľŹľ’ľ•ľźľ´ľ·ľąľĽľżľôľ÷ľúľýżżżż ż żżżżż"ż%ż(żUżVżXż[ż^żgżjżkżnżsżż’ż•żżšżśżˇż®ż°żĽżŮżŢżŕżâżäżçżěżîŔŔŔŔ!Ŕ$Ŕ-Ŕ0Ŕ9Ŕ:Ŕ=ŔZŔ\Ŕ_ŔbŔdŔfŔŔ…Ŕ‡Ŕ‰ŔŚŔŹŔ‘Ŕ™ŔŞŔ¬ŔŻŔ˛ŔµŔĆŔČŔĘŔĚŔÎŔßŔáŔäŔćŔéŔúŔüŔ˙ÁÁÁ ÁÁ Á#Á&Á)ÁJÁMÁOÁRÁUÁVÁYÁrÁ«Á­ÁŻÁ±ÁłÁ¶Á¸Á»ÁÎÁßÁáÁăÁćÁéÁö   ÂÂ!Â#Â%Â(Â*Â;Â=Â@ÂBÂEÂVÂXÂZÂ]Â_Â|Â~€Â†‡‰ ÂŐÂ×ÂŮÂŰÂÝÂŕÂâÂĺÂöÂřÂűÂýĂĂ5Ă8Ă:Ă=Ă@ĂCĂLĂOĂRĂUĂXĂ[ĂvĂĂĂŠĂŚĂ•ĂÛÞáĂŇĂŐĂŘĂŰĂŢĂáĂôĂ÷ĂúĂýÄÄÄ ÄÄÄÄÄÄGÄJÄMÄPÄSÄVÄXÄ[Ä^ÄgÄiÄlÄoĺĽĿÄÁÄÂÄĹÄČÄÉÄËÄÎÄŃÄâÄäÄćÄéĹĹ Ĺ ĹĹĹ:Ĺ;Ĺ=Ĺ@ĹCĹDĹGĹdĹfĹhĹjĹlĹnŋōŏőŔŖŭĹÎĹŃĹÔĹ×ĹÚĹÝĹŕĹéĆĆ&Ć)Ć,Ć/Ć2Ć5Ć8ĆTĆmƞơƤƧƪƭưƳƶƹĆÂĆÄĆËĆÎĆŃĆÔĆÝĆßĆâĆĺÇÇ Ç ÇÇÇÇÇ=Ç@ÇCÇFÇIÇLÇOÇiǀNjǞǯDZdzǶǸÇÝÇŕÇâÇĺÇčÇéÇěÇďČČ-Č6Č8Č:Č<Č>ČAČFČGČIČZČ\Č^Č`ČcČtČvČxČ{Č}ȚȜȞȡȤȥȧȾČóČőČ÷ČůČűČţÉÉÉÉÉÉÉÉSÉUÉWÉZÉ]É`ÉiÉlÉoÉrÉuÉxɓɜɞɧɩĘĘĘĘĘĘ"Ę%Ę(Ę+Ę.Ę1Ę4Ę7Ę:Ę<Ę?ĘBĘEĘHĘKĘNĘQĘTĘWĘZĘ]Ę`ĘbĘeĘhĘkĘnĘqĘtĘvĘyĘ|ĘʂʅĘʋʎʑʔʗʚʝʠʣʦʩʬĘÉĘËĘÍĘĐĘÓĘÔĘÖĘîË#Ë%Ë'Ë)Ë+Ë.Ë0Ë3Ë5ËRËTËVËYË\Ë]Ë_Ëwˬˮ˰˲˴˷˹˼˾ËŰËÝËßËâËĺËćËčĚĚ5Ě7Ě9Ě;Ě=Ě?ĚAĚDĚaĚcĚeĚhĚkĚlĚṅ̼̾ĚŔĚÂĚÄĚĆĚČĚËĚěĚîĚđĚóĚöĚ÷ĚůÍÍKÍMÍOÍQÍSÍVÍXÍ[ÍbÍÍÍ͉͆͊͌ͥÍÚÍÜÍŢÍŕÍâÍäÍćÍéÎÎÎ Î ÎÎÎÎ,ÎaÎcÎeÎgÎiÎkÎmÎp΍ΏΑΔΗÎΚβÎçÎéÎëÎíÎďÎňÎôÎ÷ĎĎĎĎĎĎĎ!Ď9ĎnĎpĎrĎtĎvĎyĎ{Ď~πϝϟϡϤϧϨϪĎÂĎ÷ĎůĎűĎýĎ˙ĐĐĐĐĐ+Đ-Đ/Đ2Đ5Đ6Đ8ĐQІĐĐŠĐŚĐŽĐВЕвджймнпĐ×Ń ŃŃŃŃŃŃŃŃ9Ń;Ń=Ń@ŃCŃDŃFŃ^ѓѕїљћѝџѢѿŃÁŃĂŃĆŃÉŃĘŃĚŃäŇŇŇŇŇ!Ň$Ň&Ň)ŇFŇHŇJŇMŇPŇQŇSŇkҠҢҤҦҨҫҭҰҲŇĎŇŃŇÓŇÖŇŮŇÚŇÜŇôÓ)Ó+Ó-Ó/Ó1Ó3Ó5Ó8ÓUÓWÓYÓ\Ó_Ó`ÓbÓzÓŻÓ±ÓłÓµÓ·ÓąÓ»ÓľÓŰÓÝÓßÓâÓĺÓćÓčÔÔ6Ô8Ô:Ô<Ô>Ô@ÔBÔEÔbÔdÔfÔiÔlÔmÔoÔ‡ÔĽÔľÔŔÔÂÔÄÔÇÔÉÔĚÔÎÔëÔíÔďÔňÔőÔöÔřŐŐEŐGŐIŐKŐMŐPŐRŐUŐWŐtŐvŐxŐ{Ő~ŐŐŐ™ŐÎŐĐŐŇŐÔŐÖŐŮŐŰŐŢŐűŐýŐ˙ÖÖÖÖÖ ÖUÖWÖYÖ[Ö]Ö`ÖbÖeÖgÖ„Ö†ÖÖ‹ÖŽÖŹÖ‘ÖŞÖßÖáÖăÖĺÖçÖéÖëÖî× × ××××××0×e×g×i×k×m×p×r×uגהזילםן׸×í×ď×ń×ó×ő×÷×ů×üŘŘŘŘ Ř#Ř$Ř&Ř=ŘrŘtŘvŘxŘzŘ}Ř؂؟ءأئةتجŘĹŘúŘüŘţŮŮŮŮŮ Ů&Ů(Ů*Ů-Ů0Ů1Ů3ŮJŮŮŮمهيٌُٰٲٴٷٺٻٽŮÓÚ ÚÚÚÚÚÚÚÚ9Ú;Ú=Ú@ÚCÚDÚFÚ^Ú“Ú•Ú—Ú™Ú›ÚžÚ ÚŁÚŔÚÂÚÄÚÇÚĘÚËÚÍÚĺŰŰŰŰ Ű"Ű%Ű'Ű*ŰGŰIŰKŰNŰQŰRŰTŰlۣۡۥۧ۩۬ۮ۱ۼŰĹŰŃŰâŰäŰćŰéŰěŰýŰ˙ÜÜÜÜÜÜÜÜ!Ü2Ü4Ü6Ü9Ü;ÜLÜNÜPÜSÜVÜaÜrÜtÜvÜxÜz܇܉܌܏ܕܦܨܪܭܴܰÜĹÜÇÜÉÜËÜÎÜßÜáÜăÜćÜčÜůÜűÜýÝÝÝÝÝÝÝÝ.Ý0Ý2Ý5Ý7ÝHÝJÝLÝOÝQÝrÝtÝvÝyÝ|Ý}ÝÝÝŃÝÓÝŐÝ×ÝŮÝÜÝŢÝáÝüŢ ŢŢŢŢŢ'Ţ)Ţ+Ţ.Ţ0ŢAŢCŢFŢIŢLŢWŢhŢjŢlŢoŢqނބކމދޜޞޠޣޥ޶޸޺޽ŢŔŢŃŢÓŢŐŢŘŢŰŢíŢţßßßßßßßß ß"ß3ß5ß7ß:ß<ß]ß_ßaßdßgßhßjß߲߬߮߰ߴ߷߸ߺßËßÍßĐßŇßŐŕ$ŕ'ŕ*ŕ-ŕ0ŕ3ŕ6ŕ9ŕ;ŕ=ŕ@ŕCŕDŕGŕJŕOŕRŕoŕqŕsŕvŕyŕ|ŕ~ŕ•ŕžŕ ŕ©ŕ¬ŕŻŕ˛ŕµŕęŕěŕîŕńŕôŕ÷ŕůŕüáá á áDáFáHáKáMáPáRáUáYá’á”á–á™áśáźáˇá¤á¨áááăáĺáčáęáíáďáňáöá˙â,â.â1â3â6â8âFâWâYâ\â_âbâsâuâwâyâ{âŚâŽââ“â–â§â©â«â®â°âÁâĂâĹâČâĘâŰâÝâßâââĺâöâřâúâýâ˙ăăăăăă+ă-ă/ă2ă4ăEăGăJăLăOă\ămăoăqătăvă‡ă‰ă‹ăŽăăˇăŁăĄă¨ăŞă»ă˝ăżăÂăÄăŐă×ăŮăÜăŢääää äääää.äSäUäWäYä[ä^ä_äaärätäväyä|äŤäŹä‘ä”ä–ä§ä©ä«ä­ä°äÁäĂäĹäČäĘäŰäÝäßäáäääőä÷äůäűäýĺĺĺĺĺĺ(ĺ*ĺ,ĺ/ĺ2ĺCĺEĺHĺJĺMĺWĺhĺjĺlĺnĺqĺ‚ĺ„ĺ†ĺ‰ĺ‹ĺśĺžĺ ĺŁĺĄĺĆĺČĺĘĺÍĺĐĺŃĺÓĺěć%ć'ć)ć+ć-ć0ć2ć5ćGćXćZć\ć_ćać†ć‰ć‹ćŽć‘ć’ć•ćć±ćđćţççççç ç ççççCçPçRçTçWçhçjçlçoçqç‚ç„ç†ç‰çŚç’çŁçĄç§ç©ç¬ç˝çżçÁçÄçÇçŕçńçóçöçřçűč ččč č"č%č.č?čAčCčFčIčZč\č^čačcčtčvčxč{č~čŹč‘č“č–ččąčĽčľčÁčÄčĹčČčáéééé é"é%é'é*éAéRéTéVéYé\éméoéqétévé‡é‰é‹éŽééˇéŁé¦é¨é«éĚéĎéŃéÔé×éŘéŰéóęęę ę"ę$ę'ę(ę*ę5ęFęHęKęNęQęcętęvęxę{ę}ęŽęę’ę•ę—ę¨ęŞę¬ęŻę±ęÂęÄęĆęÉęĚęŢęďęńęóęőę÷ëë ë ëëë7ë:ë<ë?ëBëCëFëIëbë›ë ë˘ë¤ë¦ë¨ë«ë­ë°ëËëÚëëëíëđëóëöěěěěěěě"ě:ěoěqěsěuěxě{ě}ě€ě‰ě‹ě“ě¤ě¦ě©ě¬ěŻě¸ěÉěËěÍěĐěÓěäěćěčěëěîíííííí!í2í4í6í9í<íMíOíQíSíVínííí„í†í‰ížíŻí±íłí¶íąíĘíĚíÎíĐíÓíäíćíčíëíííţîîîîîî-î/î1î4î6îGîIîKîMîPîaîcîeîhîkîqî‚î„î†î‰î‹îśîžîˇî¤î§î°î˛îµîÂîÓîŐî×îŮîŰîěîîîđîóîőďďď ď ďď ď"ď%ď'ď*ď;ď=ď@ďBďEďSďdďfďhďjďmďzď|ďď‚ďď™ď›ďťď ď˘ďłďµď¸ďşď˝ďĚďÝďßďáďäďćď÷ďůďűďţđđđđđđđ+đ-đ0đ2đ5đBđSđUđWđYđ[đlđnđqđsđvđ„đ•đ—đšđśđźđ©đşđĽđľđŔđÂđÓđŐđŘđŰđŢđďđńđóđőđ÷ńń ń ńńń#ń%ń'ń*ń,ń=ń?ńAńDńGńXńZń\ń_ńbńsńuńwńzń|ńŤńŹń‘ń”ń—ńŁń´ń¶ń¸ń»ń˝ńÎńĐńÓńÖńŮńęńěńďńńńôňňň ň ňňň!ň$ň'ň*ň_ňbňdňgňjňmňpňsňvňyň|ň–ňźňˇňŞň¬ňµň·ňŔňĂňĆňÉňĚňŐň×ňâňĺňčňëňîňńňúňüň˙óóó;ó>óAóDóGóJóMóVóoó”ó—óšóťó óŁó¦óŻóÇóĐóŇóŐóŘóîôôô'ô1ôBôDôFôIôLô]ô_ôaôdôfôwôyô{ô~ô€ô‘ô“ô•ôôšô«ô­ô°ô˛ôµôĘôŰôÝôŕôâôĺô÷őő ő őőő$ő&ő)ő,ő/ő8őIőKőMőPőRőcőeőhőjőmő€ő‘ő“ő–őő›ő­őľőŔőÂőĹőČőŮőŰőŢőŕőăőíőţöööööö"ö$ö&ö)ö+ö<ö>ö@öCöFöWöYö[ö^ö`öqösöuöxözö‹öŤöŹö‘ö”ö˘öłöµö·öşöĽöÍöĎöŇöÔö×öăöôöööřöűöţ÷÷÷÷÷÷÷/÷1÷3÷5÷8÷G÷X÷Z÷\÷_÷a÷r÷t÷v÷y÷|÷Ť÷Ź÷‘÷”÷–÷§÷©÷«÷®÷°÷˝÷ż÷Â÷Ĺ÷Ę÷Ű÷Ý÷ŕ÷â÷ĺ÷ôřřř ř ř řř ř"ř$ř'ř8ř:ř=ř@řCřTřVřXř[ř^řořqřsřvřyřŠřŚřŽř‘ř“ř¤ř¦ř¨ř«ř­řľřŔřÂřĹřČřŮřŰřŢřŕřăřňůůůů ů ůůů!ů$ů&ů7ů9ů;ů>ů@ůQůSůVůXů[ůů“ů•ůů›ůžůˇů¤ů§ůŞů­ůÇůÓůÜůŢůűůţúúúú ú úúúúúVúYú\ú_úbúdúgújúkúnúoúrúuú~ú€úú†úŹú‘ú úŁú¦ú©ú¬úŻú˛úµúÖúŮúŰúŢúáúâúĺúčűű#ű(ű*ű-ű0ű2ű5ű:ű<űQűrűuűwűzű}ű~űű„űžűżűÁűÄűÇűÉűĚűÎűäűýüü ü"ü+ü.ü1ü4ü7üPüSüUüWüZü]ü`üiüküzü}ü€ü‚ü…üüŠüŤüŞü¬ü®ü±ü´üµü·üĐüńüóüöüůüűüţýýý ý(ýAýDýFýIýLýOýRý[ý]ýjýmýpýsývýyý|ý•ýý›ýžýˇý¤ý§ý®ý·ýąýĐýÓýÖýŮýÜýßýâýĺýčýëýîýńţţţţţţţţ5ţVţXţ[ţ^ţ`ţcţeţţžţˇţŁţ¦ţ©ţŞţ­ţĹţćţčţëţîţđţóţő˙ ˙)˙,˙.˙1˙4˙5˙8˙Q˙r˙t˙w˙z˙|˙˙˙™˙ˇ˙ş˙˝˙Ŕ˙Ă˙Ć˙É˙Ě˙Ó˙Ů˙ä˙đ˙ý"358;>OQSVXikmor…ŠŤ™Ş¬®±´ĹÇÉĚÎßáäçęűý˙ *;=?ADUWY\^oqsux†—™śź˘łµ·ąĽÎßáăĺčůűý):<?BDUWZ\_m~€‚…™›žˇ¤­Ż˛µżČĘÖçéěďň#&(+.0369<Wfoqz|…‹Ž‘şĹŃÔ×ÚŰŢáâĺčńó  .J~–·Ôě %058;@ANPRU^eqz…‘˛µ·ş˝ľÁÄŢ˙   D m p s v w z } ~  „ Ť Ź ś ź ˘ Ą ¨ « ® Ĺ ć é ě í ú ü ţ     / 1 3 5 8 I K M P R c e h k n ź ˘ ¤ § Ş ¬ Ż ˛ µ ¸ Ó Ú ă ĺ î đ ű ţ     / 2 5 8 9 < ? @ C L N [ ^ a d g j m … ˘ Ą ¦ Ë Î Ń Ô Ő Ř Ű Ü ß č ę ÷ ú ý !BEHIVXZ]b‚„‡Š‹Ž§ČĘÍĐŇŐ×  (*147:CEHKboru}ž©¬Ż˛µ¸»Óü˙ 2Lco€‚„‡Š›ťź˘¤µľĹČËÎŃä9BG[loruxŞ»ľÁÄÇ"_psvy|´ĹČËÎŃ&),/2©¬Ż˛µÖçęíđó7HKNQTŚť Ł¦©ř  EVY\_b°ąĽČËÍĐÓÖŮÜŢáäçęěďňőřűţ !$'*-0368;>ADGIKNQTWZ]`cfilorux{~„‡ŠŤ“–™śźˇ¤§©«®±´·ş˝ŔĂĆÉĚÎŃÔ×ÚÝŕăćčëîńô÷úý "$'),/258;=@BEHKNQTWZ]`cfilorux{~„‡ŠŤ“–™śź˘Ą¨«®°ł¶ąĽżÂĹČËÎŃÔ×ÚÝŕâäćéěďňőřűţ  "%(+.0369<?BDFILNQTWZ]`cfiloqtwz|‚…‡ŠŚŹ’•›žˇ¤§Ş­°łµ¸»ľÁÄÇÉĚĎŃÔ×ÚÝßâĺčëîńôöůü˙  !$'*,/258;>ADGJMPSVY\_behknqtwz}€†‰ŚŹ’•—šť Ł¦©¬®±´·ş˝ŔĂĆÉËÎŃÔ×ÚÝŕăćéěďňőřúý  !$'024=@ L O Q T W Y \ _ a d g j m p s v y | ~  „ ‡ ‰ ‹ Ť Ź ’ ” – ™ › ž ˇ ¤ § Ş ¬ Ż ± ´ ¶ ą Ľ ľ Á Ă Ć Č Ë Í Đ Ó Ö Ů Ü ß â ä ç ę í đ ň ő ÷ ů ű ţ!!!! ! !!!!!!!!!"!$!&!)!+!.!1!4!6!8!;!=!@!C!F!I!L!O!R!T!V!X!Z!\!_!b!e!g!j!m!o!r!u!w!z!|!!‚!„!†!‰!‹!Ž!!“!–!™!ś!ź!˘!¤!¦!¨!«!®!±!´!·!ş!˝!Ŕ!Ă!Ĺ!Č!Ę!Í!Đ!Ó!Ö!Ů!Ü!Ţ!á!ă!ć!é!ë!í!đ!ó!ö!ř!ű!ţ"""" " """""""""""%"'")","/"1"4"7"9";"="?"B"D"G"I"L"O"R"U"X"["]"_"b"e"g"i"l"o"r"u"x"{"~""„"‡"Š"Ť""’"”"–"™"ś"ź"˘"¤"§"Ş"­"°"ł"µ"·"ş"˝"ż"Á"Ă"Ć"Č"Ę"Í"Đ"Ó"Ő"×"Ů"Ü"ß"â"ĺ"č"ë"í"đ"ó"ö"ů"ű"ý##### # ######## #"#$#'#*#-#0#3#5#7#:#<#?#B#E#G#J#M#P#R#U#W#Z#\#_#a#d#f#h#k#n#q#t#w#z#}#€#‚#„#‡#Š#Ť##“#–#™#ś#ź#ˇ#Ł#¦#©#¬#Ż#˛#µ#¸#»#˝#Ŕ#Â#Ĺ#Č#Ë#Í#Đ#Ó#Ő#Ř#Ú#Ü#Ţ#ŕ#â#ĺ#č#ę#í#đ#ó#ö#ř#ú#ü#˙$$$$ $ $$$$$$$ $#$%$'$*$,$.$0$3$5$7$:$<$?$B$E$H$K$T$W'e'h'j'm'p's'v'y'{'~''„'‡'Š'Ť'Ź'’'•''›'ť' '˘'¤'§'Ş'­'°'˛'µ'¸'ş'˝'Ŕ'Ă'Ć'É'Ě'Ď'Ń'Ô'×'Ú'Ý'ŕ'ă'ĺ'ç'ę'í'đ'ó'ö'ů'ü'˙(((( ((((((( (#(&()(,(/(2(5(8(;(>(@(C(F(H(J(M(P(S(V(Y(\(_(b(e(h(j(m(p(s(v(y(|((‚(…(‡(Š(Ť((“(–(™(ś(ź(˘(¤(§(Ş(­(°(ł(¶(ą(Ľ(ż(Á(Ă(Ĺ(Č(Ë(Î(Ń(Ô(×(Ú(Ü(ß(á(ä(ç(ę(í(đ(ó(ö(ů(ü(˙)))) ))))))) )#)&))),)/)2)5)8);)>)A)D)G)J)M)O)R)U)X)[)^)a)d)g)j)m)p)s)v)y)|))))…))‹)Ž)‘)”)—)š)ť) )Ł)¦)©)¬)Ż)˛)µ)¸)»)ľ)Á)Ä)Ç)Ę)Í)Ď)Ň)Ő)Ř)Ű)Ţ)á)ă)ĺ)č)ë)í)đ)ó)ö)ů)ü)˙**** ********!*$*&*)*+*.*1*4*7*:*=*@*C*F*I*L*O*R*T*W*Z*]*`*b*e*g*j*m*p*s*v*y*|*~**„*‡*Š*Ť**“*•**›*ž*ˇ*¤*¦*©*¬*Ż*˛*µ*¸*»*˝*Ŕ*Ă*Ĺ*Č*Ë*Î*Ń*Ô*×*Ú*Ý*ŕ*ă*ć*é*ě*ď*ň*ő*ř*ű*ţ++++ + +++++++"+%+(+++.+1+4+6+9+<+?+B+E+H+K+M+P+S+V+Y+\+_+b+e+h+j+m+p+s+v+y+|++‚+…++‹+Ž+‘+”+—+™+ś+ź+˘+Ą+¨+«+®+±+´+·+ş+˝+Ŕ+Ă+Ć+Ď+Ň.ŕ.ă.ć.é.ě.ď.ň.ő.ř.ű.ţ//// / ///////"/%/(/+/./1/3/6/9/</?/B/E/H/K/N/Q/S/V/Y/\/_/b/e/g/j/m/p/s/v/y/|//‚/…//‹/Ž/‘/”/—/š/ť/ /Ł/¦/©/¬/Ż/˛/µ/¸/»/ľ/Á/Ä/Ç/Ę/Í/Đ/Ó/Ö/Ů/Ü/ß/â/ĺ/č/ë/î/ń/ô/÷/ú/ý0000 0 0000000!0$0'0*0-000306090<0?0B0E0H0K0N0Q0T0W0Z0]0`0c0f0i0l0o0r0u0x0{0~00„0‡0Š0Ť00“0–0™0ś0ź0˘0Ą0¨0«0®0±0´0·0ş0˝0Ŕ0Ă0Ć0É0Ě0Ď0Ň0Ő0Ř0Ű0Ţ0á0ä0ç0ę0í0đ0ó0ö0ů0ü0˙1111 1111111 1#1&1)1,1/1215181;1>1A1D1G1J1M1P1S1V1Y1\1_1b1e1h1k1n1q1t1w1z1}1€11†1‰1Ś1Ź1’1•11›1ž1ˇ1¤1§1Ş1­1°1ł1¶1ą1Ľ1ż1Â1Ĺ1Č1Ë1Î1Ń1Ô1×1Ú1Ý1ŕ1ă1ć1é1ě1ď1ň1ő1ř1ű1ţ2222 2 2222222"2%2(2+2.2124272:2=2@2C2F2I2L2O2R2U2X2[2^2a2d2g2j2m2p2s2v2y2|22‚2…22‹2Ž2‘2”2—2š2ť2 2Ł2¦2©2¬2Ż2˛2µ2¸2»2ľ2Á2Ä2Ç2Ę2Í2Đ2Ó2Ö2Ů2Ü2ß2â2ĺ2č2ë2î2ń2ô2÷2ú2ý3333 3 3333333!3$3'3*3-303336393<3?3B3E3H3K3N3Q3T3W3Z3]3`3c3f3i3l33–3Ł3ą3Ĺ3Ů3ć3ú44<4P4u4‰4·4Î4Ý55x5…5’5¬5·5Ő5đ636B6a6t6‰66ą6Ě6ŕ6ô777)7P7k77‹7š7Ä888+878J8o8Ž8´8É8Ý8ě9 9Z9s9˛9Ę9á9ő::2:F:^:‰:ž:µ:Ä:Ď:ă;;+;?;R;t;Ź;Ł;Ő;ě<<<#>2>O>q>›>Î>ć>ď??:?P?‘?Ş?Ŕ?ă?ü@@>@b@‹@¬@ż@Ň@éAAA-A:AOAcAzA«AżAćAúBB&B3BGBoB„BŞBÓC0CSClC€CŹC›CşCÎCŰDDDD)D1DXD}D‘DąDÎEE)EjE}E¨EĽEĐEůFF F6FPFcFvFŠFľFČFőGG_G˘GáGýHH*H>HZH}H›II)III`I„II¤IĂIďJJJ:JTJkJ„JťJßJóKKKBKIK]KKKŹK´KÎKčLLLGLjL‡LĽLîM*M9MMMfMŤMłMăMöNN(NYNqNxN’N¦N´NËNęNüOO!O5OIOoO‚OťO°OÓOçPP(PKP¬PÎPŕPôQQ*QWQ}Q¤QĂQ×QďR>RRR_R‚R•R¨RµRÂRÖRěSS.SHS[SšS®SÁSŐS˙TT?TRT«TĚTďUU4UFUOUcU}U U´U»UĎUÜUýVV'V3VVVcV€V–V¬VŘVěWW%WGWSW]W€WŠWŻWĚWŕWôX X(X<XOXbX|XťX±XÔXéYY&Y4Y@YfYY–Y°YŰYýZZ"ZHZ^_°_Ě_ň_ţ``&`D`X`l`‹`—`«`¸`Ě`ă`řaa5aXaaadagaiarauaxazaa†gjgmgpgsgvgyg|gg‚g…gg‹gŽg‘g”g–g™gśgźgˇg¤g§gŞg­g°głg¶gągĽgżgÁgĂgĆgÉgĚgĎgŇgÔg×gÚgÜgßgâgĺgčgęgígďgňgőgřgűgţhhhh h hhhhhhh"h%h(h+h.h1h4h7h:h=h@hChFhIhLhNhQhShVhYh\h_hbhehhhkhnhqhthwhzh}h€hh†h‰hŚhŹh‘h”h—hšhśhźh˘hĄh¨h«h®h±h´h¶hąhĽhżhÂhĹhČhËhÎhŃhÔhÖhŮhÜhßhâhähçhęhíhđhóhöhůhüh˙iiii iiiiiii i#i&i)i,i/i2i5i8i;i>iAiDiGiJiMiPiSiViYi\i_ibieihijiliniqitiwizi}i€ii†i‰iŚiŹi’i•ii›ižiˇi¤i§iŞi­i°iłi¶iąi»iľiÁiÄiÇiĘiÍiĐiÓiÖiŮiÜiŢiáiäiçięiíiđióiöiůiüi˙jjjj jjjjjjjj"j%j(j+j.j1j4j7j:j=j@jCjFjIjLjOjRjUjXj[j^jajdjgjjjmjpjrjujxj{j~jjj†j‰j‹jŽj‘j”j–j™jśjźj˘j¤j§jŞj­j°jłj¶jąjĽjżjÂjĹjČjËjÎjŃjÔj×jÚjÝjŕjâjĺjčjëjíjđjójöjůjüj˙kkkk kkkkkkk k#k&k)k,k/k2k5k8k;k>kAkDkGkJkMkPkSkVkYk\k_kbkekhkkknkqktkwkzk}k€kk†k‰kŚkŹk’k”k—kškťkźk˘kĄk¨k«k®k±kłk¶kąkĽkżkÁkÄkÇkÉkĚkĎkŇkŐkŘkŰkŢkákäkçkękíkđkókökůkük˙llll lllllll l#l&l)l,l/l2l5l8l;l>lAlDlGlJlMlPlSlUlXl[l^laldlgljlmlplslvlyl{l~ll„l‡l‰lŚlŹl’l•ll›lžlˇl¤l§lŞl­l°lłl¶ląlĽlżlÂlĹlČlËlÍlĐlŇlŐlŘlŰlŢlálälćlélělďlňlőlřlűlţmmmm m mmmmmmm"m%m(m+m.m1m4m7m:m=m@mCmFmImLmOmRmUmXm[m^mamdmgmjmmmpmsmumxm{m~mm„m‡mŠmŤmm“m–m™mśmźm˘mĄm¨m«m®m±m´m·mşm˝mŔmĂmĹmČmËmÎmŃmÔm×mŮmÜmßmâmĺmčmëmîmńmómömůműmţnnnn n nnnnnnn"n%n(n+n-n0n3n6n9n<n?nAnDnFnInLnOnRnUnXn[n^nandngnjnmnonrnunxn{n~nn„n‡nŠnŤnn“n–n™nśnžnˇn¤n§nŞn­n°nłn¶nąnĽnżnÂnĹnČnËnÎnŃnÔn×nÚnÝnßnânĺnčnënînńnônönůnün˙oooo o ooooooo"o%o(o+o.o1o4o7o:o=o@oCoFoIoLoOoRoUoXo[o^oaodogojomoposovoyo{o}o€oo†o‰oŚoŽo‘o“o–o™ośoźo˘oĄo¨o«o®o±o´o·oşo˝ożoÂoĹoČoËoÎoŃoÔo×oÚoÝoŕoâoĺočoëoîońoóoöoůoüo˙pp uďuňuőuřuűuţvvvv v vvvvvvv"v%v(v+v.v1v4v7v:v=v@vCvFvIvLvOvRvUvXv[v^vavdvgvjvmvpvsvvvyv|vv‚v…vv‹vŽv‘v”v—všvťv vŁv¦v©v¬vŻv˛vµv¸v»vľvÁvÄvÇvĘvÍvĐvÓvÖvŮvÜvßvâvĺvčvëvîvńvôv÷vúvýwwww w wwwwwww!w$w'w*w-w0w3w6w9w<w?wBwEwHwKwNwQwTwWwZw]w`wcwfwiwlwowrwuwxw{w~ww„w‡wŠwŤww“w–w™wśwźw˘wĄw¨w«w®w±w´w·wşw˝wŔwĂwĆwÉwĚwĎwŇwŐwŘwŰwŢwáwäwçwęwíwđwówöwůwüw˙xxxx xxxxxxx x#x&x)x,x/x2x5x8x;x>xAxDxGxJxMxPxSxVxYx\x_xbxexhxkxnxqxtxwxzx}x€xx†x‰xŚxŹx’x•xx›xžxˇx¤x§xŞx­x°xłx¶xąxĽxżxÂxĹxČxËxÎxŃxÔx×xÚxÝxŕxăxćxéxěxďxňxőxřxűxţyyyy y yyyyyyy"y%y(y+y.y1y4y7y:y=y@yCyFyIyLyOyRyUyXy[y^yaydygyjymypysyvyyy|yy‚y…yy‹yŽy‘y”y—yšyťy yŁy¦y©y¬yŻy˛yµy¸y»yľyÁyÄyÇyĘyÍyĐyÓyÖyŮyÜyßyâyĺyčyëyîyńyôy÷yúyýzzzz z zzzzzzz!z$z'z*z-z0z3z6z9z<z?zBzEzHzKzNzQzTzWzZz]z`zczfzizlzozrzuzxz{z~zz„z‡zŠzŤzz“z–z™zśzźz˘zĄz¨z«z®z±z´z·zşz˝zŔzĂzĆzÉzĚzĎzŇzŐzŘzŰzŢzázäzçzęzízđzózözůzüz˙{{{{ {{{{{{{ {#{&{){,{/{2{5{8{;{>{A{D{G{J{M{P{S{V{Y{\{_{b{e{h{k{n{q{t{w{z{}{€{{†{‰{Ś{Ź{’{•{{›{ž{ˇ{¤{§{Ş{­{°{ł{¶{ą{Ľ{ż{Â{Ĺ{Č{Ë{Î{Ń{Ô{×{Ú{Ý{ŕ{ă{ć{é{ě{ď{ň{ő{ř{ű{ţ|||| | |||||||"|%|(|+|.|1|4|7|:|=|@|C|F|I|L|O|R|U|X|[|^|a|d|g|j|m|p|s|v|y||||‚|…||‹|Ž|‘|”|—|š|ť| |Ł|¦|©|¬|Ż|˛|µ|¸|»|ľ|Á|Ä|Ç|Ę|Í|Đ|Ó|Ö|Ů|Ü|ß|â|ĺ|č|ë|î|ń|ô|÷|ú|ý}}}} } }}}}}}}!}$}'}*}-}0}3}6}9}<}?}B}E}H}K}N}Q}T}W}Z}]}`}c}f}i}l}o}r}u}x}{}~}}„}‡}Š}Ť}}“}–}™}ś}ź}˘}Ą}¨}«}®}±}´}·}ş}˝}Ŕ}Ă}Ć}É}Ě}Ď}Ň}Ő}Ř}Ű}Ţ}á}ä}ç}ę}í}đ}ó}ö}ů}ü}˙~~~~ ~~~~~~~ ~#~&~)~,~/~2~5~8~;~>~A~D~G~J~M~P~S~V~Y~\~_~b~e~h~k~n~q~t~w~z~}~€~~†~‰~Ś~Ź~’~•~~›~ž~ˇ~¤~§~Ş~­~°~ł~¶~ą~Ľ~ż~Â~Ĺ~Č~Ë~Î~Ń~Ô~×~Ú~Ý~ŕ~ă~ć~é~ě~ď~ň~ő~ř~ű~ţ  !$'*-/258;>ADGJMPSVY\_behknqtwz}€†‰ŚŹ’•›žˇ¤§Ş­°ł¶ąĽżÂĹČËÎŃÔ×ŮÜßâĺçęíđóöůü˙€€€€ €€€€€€€ €#€&€)€,€/€2€5€8€:€=€@€C€F€I€L€O€R€U€X€[€^€a€d€g€j€m€p€s€v€y€|€~€€„€‡€Š€Ť€€“€–€™€ś€ź€˘€Ą€¨€«€­€°€˛€µ€¸€»€ľ€Á€Ä€Ç€Ę€Í€Đ€Ó€Ö€Ů€Ű€Ţ€á€ä€ç€ę€í€đ€ó€ö€ů€ü€˙  !$'*-0369<?BEHKNQTWZ]`cfilorux{~„‡ŠŤ“–™śź˘Ą¨«®°ł¶ąĽżÂĹČËÎŃÔ×ÚÝŕăćéěďňőřűţ‚‚‚‚ ‚ ‚‚‚‚‚‚‚"‚%‚'‚*‚-‚0‚3‚6‚9‚<‚>‚A‚D‚G‚J‚M‚P‚S‚V‚Y‚\‚_‚b‚e‚h‚k‚n‚p‚s‚v‚y‚|‚‚‚‚…‚‚‹‚Ž‚‘‚“‚–‚™‚ś‚ź‚˘‚Ą‚¨‚«‚®‚±‚´‚·‚ş‚˝‚Ŕ‚ÂƂɂ̂΂тԂׂڂ݂ŕ‚ă‚ć‚é‚ě‚ď‚ń‚ô‚÷‚ú‚ý  !#&),/258;>ADFIRTWZ]`cfilorux{~„‡ŠŤ“–™śź˘Ą§Ş­°ł¶ąĽżÂĹČËÎŃÔ×ÚÝŕăćčëîńô÷úý„„„„ „ „„„„„„„ „#„&„)„,„/„2„5„8„;„>„A„D„G„J„M„P„S„V„Y„\„_„b„d„g„j„m„p„s„v„y„|„„„„„‡„Š„Ť„„“„–„™„ś„ź„˘„Ą„¨„«„®„±„´„·„ş„˝„Ŕ„ÄƄɄ̄τ҄Մ؄ۄބá„ä„ç„ę„í„đ„ó„ö„ů„ü„˙………… ………………… …#…&…)…+….…1…4…7…:…=…@…C…F…I…L…O…R…U…X…[…^…a…d…g…j…m…p…s…v…y…|……‚…………‹…Ž…‘…”…–…™…ś…ź…˘…Ą…¨…«…®…±…´…·…ş…˝…Ŕ…Ă…Ć…É…Ě…Î…Ń…Ô…Ö…Ů…Ü…ß…â…ĺ…č…ë…î…đ…ó…ö…ů…ü…˙†††† ††††††† †#†&†(†+†.†1†4†7†:†=†@†C†F†I†L†O†R†U†X†[†]†`†c†f†i†l†o†r†t†w†z†}†€††††‰†Ś†Ź†’†•††›†ž†ˇ†¤†§†Ş†­†°†ł†¶†ą†Ľ†ż†Â†Ä†Ç†Ę†Í†Đ†Ó†Ö†Ů†Ü†ß†â†ĺ†č†ë†î†ń†ô†÷†ú†ý‡‡‡‡ ‡ ‡‡‡‡‡‡‡!‡$‡'‡*‡-‡0‡3‡6‡9‡B‡D‡E‡N‡Q‡R‡[‡^‡_‡h‡m1’‡|wcalc-2.5/English.lproj/Makefile.am0000644000175000017500000000017612115670003014143 00000000000000EXTRA_DIST = InfoPlist.strings \ MainMenu.nib/classes.nib \ MainMenu.nib/info.nib \ MainMenu.nib/keyedobjects.nib wcalc-2.5/depcomp0000754000175000017500000002753312115670000010750 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects # Copyright 1999, 2000 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, 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. # Originally written by Alexandre Oliva . 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 # `libtool' can also be set to `yes' or `no'. if test -z "$depfile"; then base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` dir=`echo "$object" | sed 's,/.*$,/,'` if test "$dir" = "$object"; then dir= fi # FIXME: should be _deps on DOS. depfile="$dir.deps/$base" fi tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi 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. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. 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. stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" outname="$stripped.o" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1="$dir.libs/$base.lo.d" tmpdepfile2="$dir.libs/$base.d" "$@" -Wc,-MD else tmpdepfile1="$dir$base.o.d" tmpdepfile2="$dir$base.d" "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" else tmpdepfile="$tmpdepfile2" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a space and a tab in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #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 proprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. We will use -o /dev/null later, # however we can't do the remplacement now because # `-o $object' might simply not be used 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 "$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; -*) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--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 '/^# [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 proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 wcalc-2.5/wcalc.info0000644000175000017500000000211712115670002011333 00000000000000Package: wcalc Version: 2.1 Revision: 1 Maintainer: Kyle Wheeler Source: mirror:sourceforge:w-calc/Wcalc-%v.tar.bz2 Source-MD5: 56f5235a576c46b09a50ec6cd42bb82c DocFiles: AUTHORS COPYING COPYRIGHT INSTALL NEWS ReadMe.rtf wcalc.rc ConfigureParams: --mandir=%i/share/man/ Depends: readline-shlibs,gmp-shlibs,libmpfr1-shlibs BuildDepends: readline,gmp,libmpfr1 Description: Command-line calculator DescDetail: << Wcalc is a very capable command-line calculator (also has a Cocoa GUI version). It has standard functions (sin, asinh, and sqrt for example, in either radians or degrees), many pre-defined constants (pi, e, c, G, etc.), support for using variables, "active" variables, a command history, hex/octal/binary input and output, unit conversions, embedded comments, and the ability to save history to a file and load it from a file. Wcalc evaluates expressions using the standard order of operations. Wcalc uses intuitive expressions. For example, Wcalc will evaluate 5sin 4!-7*2(4%6)^2 to be -221.96631678. << License: GPL Homepage: http://w-calc.sourceforge.net/ wcalc-2.5/COPYING0000644000175000017500000004311012115670002010416 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. wcalc-2.5/config/0000775000175000017500000000000012451434214010721 500000000000000wcalc-2.5/config/compile0000755000175000017500000001624512261335263012230 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2013 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: wcalc-2.5/config/test-driver0000755000175000017500000001027712261335263013047 00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2013-07-13.22; # UTC # Copyright (C) 2011-2013 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. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then estatus=1 fi case $estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # 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: wcalc-2.5/config/depcomp0000755000175000017500000005601612261335263012227 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 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: wcalc-2.5/config/readline.m40000644000175000017500000000320712254672067012701 00000000000000dnl Available from the GNU Autoconf Macro Archive at: dnl http://autoconf-archive.cryp.to/vl_lib_readline.html dnl last modified 2002-04-04 dnl AC_DEFUN([VL_LIB_READLINE], [ AC_CACHE_CHECK([for a readline compatible library], vl_cv_lib_readline, [ ORIG_LIBS="$LIBS" for readline_lib in readline edit editline; do for termcap_lib in "" termcap curses ncurses; do if test -z "$termcap_lib"; then TRY_LIB="-l$readline_lib" else TRY_LIB="-l$readline_lib -l$termcap_lib" fi LIBS="$ORIG_LIBS $TRY_LIB" dnl AC_TRY_LINK_FUNC(readline, vl_cv_lib_readline="$TRY_LIB") AC_TRY_LINK_FUNC(rl_filename_completion_function, vl_cv_lib_readline="$TRY_LIB") if test -n "$vl_cv_lib_readline"; then break fi done if test -n "$vl_cv_lib_readline"; then break fi done if test -z "$vl_cv_lib_readline"; then vl_cv_lib_readline="no" LIBS="$ORIG_LIBS" fi ]) if test "$vl_cv_lib_readline" != "no"; then AC_DEFINE(HAVE_LIBREADLINE, 1, [Define if you have a readline compatible library]) AC_CHECK_HEADERS(readline.h readline/readline.h) AC_CACHE_CHECK([whether readline supports history], vl_cv_lib_readline_history, [ vl_cv_lib_readline_history="no" AC_TRY_LINK_FUNC(add_history, vl_cv_lib_readline_history="yes") ]) if test "$vl_cv_lib_readline_history" = "yes"; then AC_DEFINE(HAVE_READLINE_HISTORY, 1, [Define if your readline library has \`add_history']) AC_CHECK_HEADERS(history.h readline/history.h) fi fi ])dnl wcalc-2.5/config/missing0000755000175000017500000001533012261335263012243 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2013 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: wcalc-2.5/config/install-sh0000755000175000017500000003325512261335263012656 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: wcalc-2.5/config/ylwrap0000755000175000017500000001531212261335263012110 00000000000000#! /bin/sh # ylwrap - wrapper for lex/yacc invocations. scriptversion=2013-01-12.17; # UTC # Copyright (C) 1996-2013 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 # . get_dirname () { case $1 in */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';; # Otherwise, we want the empty string (not "."). esac } # guard FILE # ---------- # The CPP macro used to guard inclusion of FILE. guard () { printf '%s\n' "$1" \ | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \ -e 's/__*/_/g' } # quote_for_sed [STRING] # ---------------------- # Return STRING (or stdin) quoted to be used as a sed pattern. quote_for_sed () { case $# in 0) cat;; 1) printf '%s\n' "$1";; esac \ | sed -e 's|[][\\.*]|\\&|g' } case "$1" in '') echo "$0: No files given. Try '$0 --help' for more information." 1>&2 exit 1 ;; --basedir) basedir=$2 shift 2 ;; -h|--h*) cat <<\EOF Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]... Wrapper for lex/yacc invocations, renaming files as desired. INPUT is the input file OUTPUT is one file PROG generates DESIRED is the file we actually want instead of OUTPUT PROGRAM is program to run ARGS are passed to PROG Any number of OUTPUT,DESIRED pairs may be used. Report bugs to . EOF exit $? ;; -v|--v*) echo "ylwrap $scriptversion" exit $? ;; esac # The input. input=$1 shift # We'll later need for a correct munging of "#line" directives. input_sub_rx=`get_dirname "$input" | quote_for_sed` case $input in [\\/]* | ?:[\\/]*) # Absolute path; do nothing. ;; *) # Relative path. Make it absolute. input=`pwd`/$input ;; esac input_rx=`get_dirname "$input" | quote_for_sed` # Since DOS filename conventions don't allow two dots, # the DOS version of Bison writes out y_tab.c instead of y.tab.c # and y_tab.h instead of y.tab.h. Test to see if this is the case. y_tab_nodot=false if test -f y_tab.c || test -f y_tab.h; then y_tab_nodot=true fi # The parser itself, the first file, is the destination of the .y.c # rule in the Makefile. parser=$1 # A sed program to s/FROM/TO/g for all the FROM/TO so that, for # instance, we rename #include "y.tab.h" into #include "parse.h" # during the conversion from y.tab.c to parse.c. sed_fix_filenames= # Also rename header guards, as Bison 2.7 for instance uses its header # guard in its implementation file. sed_fix_header_guards= while test $# -ne 0; do if test x"$1" = x"--"; then shift break fi from=$1 # Handle y_tab.c and y_tab.h output by DOS if $y_tab_nodot; then case $from in "y.tab.c") from=y_tab.c;; "y.tab.h") from=y_tab.h;; esac fi shift to=$1 shift sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;" sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;" done # The program to run. prog=$1 shift # Make any relative path in $prog absolute. case $prog in [\\/]* | ?:[\\/]*) ;; *[\\/]*) prog=`pwd`/$prog ;; esac dirname=ylwrap$$ do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (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 mkdir $dirname || exit 1 cd $dirname case $# in 0) "$prog" "$input" ;; *) "$prog" "$@" "$input" ;; esac ret=$? if test $ret -eq 0; then for from in * do to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"` if test -f "$from"; then # If $2 is an absolute path name, then just use that, # otherwise prepend '../'. case $to in [\\/]* | ?:[\\/]*) target=$to;; *) target=../$to;; esac # Do not overwrite unchanged header files to avoid useless # recompilations. Always update the parser itself: it is the # destination of the .y.c rule in the Makefile. Divert the # output of all other files to a temporary file so we can # compare them to existing versions. if test $from != $parser; then realtarget=$target target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'` fi # Munge "#line" or "#" directives. Don't let the resulting # debug information point at an absolute srcdir. Use the real # output file name, not yy.lex.c for instance. Adjust the # include guards too. sed -e "/^#/!b" \ -e "s|$input_rx|$input_sub_rx|" \ -e "$sed_fix_filenames" \ -e "$sed_fix_header_guards" \ "$from" >"$target" || ret=$? # Check whether files must be updated. if test "$from" != "$parser"; then if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then echo "$to is unchanged" rm -f "$target" else echo "updating $to" mv -f "$target" "$realtarget" fi fi else # A missing file is only an error for the parser. This is a # blatant hack to let us support using "yacc -d". If -d is not # specified, don't fail when the header file is "missing". if test "$from" = "$parser"; then ret=1 fi fi done fi # Remove the directory. cd .. rm -rf $dirname 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: wcalc-2.5/Wcalc.xcodeproj/0000775000175000017500000000000012451434213012500 500000000000000wcalc-2.5/Wcalc.xcodeproj/project.pbxproj0000644000175000017500000015404712115670002015500 00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 45; objects = { /* Begin PBXBuildFile section */ 2704376C0C4584640024DB8D /* number.c in Sources */ = {isa = PBXBuildFile; fileRef = 2704376A0C4584640024DB8D /* number.c */; }; 2704376D0C4584640024DB8D /* number.h in Headers */ = {isa = PBXBuildFile; fileRef = 2704376B0C4584640024DB8D /* number.h */; }; 2704376E0C4584640024DB8D /* number.c in Sources */ = {isa = PBXBuildFile; fileRef = 2704376A0C4584640024DB8D /* number.c */; }; 2704376F0C4584640024DB8D /* number.h in Headers */ = {isa = PBXBuildFile; fileRef = 2704376B0C4584640024DB8D /* number.h */; }; 27085E2A0EB4D75E009B43DD /* libl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2789AB460EB1877D008DEB99 /* libl.a */; }; 27085F000EB512E1009B43DD /* libncurses.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 27085EFF0EB512E1009B43DD /* libncurses.dylib */; }; 27085F040EB51331009B43DD /* iscmd.c in Sources */ = {isa = PBXBuildFile; fileRef = 27085F020EB51331009B43DD /* iscmd.c */; }; 27085F050EB51331009B43DD /* iscmd.h in Headers */ = {isa = PBXBuildFile; fileRef = 27085F030EB51331009B43DD /* iscmd.h */; }; 27085F060EB51331009B43DD /* iscmd.c in Sources */ = {isa = PBXBuildFile; fileRef = 27085F020EB51331009B43DD /* iscmd.c */; }; 27085F070EB51331009B43DD /* iscmd.h in Headers */ = {isa = PBXBuildFile; fileRef = 27085F030EB51331009B43DD /* iscmd.h */; }; 27085F0A0EB51382009B43DD /* libreadline.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27085F090EB51382009B43DD /* libreadline.a */; }; 27085F0C0EB5138C009B43DD /* libhistory.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27085F0B0EB5138C009B43DD /* libhistory.a */; }; 271AB2670EBB813500250C1C /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 271AB2660EBB813500250C1C /* libgmp.a */; }; 271AB2680EBB813500250C1C /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 271AB2660EBB813500250C1C /* libgmp.a */; }; 271AB26A0EBB813A00250C1C /* libmpfr.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 271AB2690EBB813A00250C1C /* libmpfr.a */; }; 271AB26B0EBB813A00250C1C /* libmpfr.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 271AB2690EBB813A00250C1C /* libmpfr.a */; }; 2729A40209B1ECE5001F07F4 /* add_commas.h in Headers */ = {isa = PBXBuildFile; fileRef = 2729A40009B1ECE5001F07F4 /* add_commas.h */; }; 2729A40309B1ECE5001F07F4 /* add_commas.c in Sources */ = {isa = PBXBuildFile; fileRef = 2729A40109B1ECE5001F07F4 /* add_commas.c */; }; 2729A40409B1ECE5001F07F4 /* add_commas.h in Headers */ = {isa = PBXBuildFile; fileRef = 2729A40009B1ECE5001F07F4 /* add_commas.h */; }; 2729A40509B1ECE5001F07F4 /* add_commas.c in Sources */ = {isa = PBXBuildFile; fileRef = 2729A40109B1ECE5001F07F4 /* add_commas.c */; }; 2729A53809B256DA001F07F4 /* PersVarList.h in Headers */ = {isa = PBXBuildFile; fileRef = 2729A53609B256DA001F07F4 /* PersVarList.h */; }; 2729A53909B256DA001F07F4 /* PersVarList.m in Sources */ = {isa = PBXBuildFile; fileRef = 2729A53709B256DA001F07F4 /* PersVarList.m */; }; 272C376308C3FDAF009EA18F /* number_formatting.h in Headers */ = {isa = PBXBuildFile; fileRef = 272C375F08C3FDAF009EA18F /* number_formatting.h */; }; 272C376408C3FDAF009EA18F /* number_formatting.c in Sources */ = {isa = PBXBuildFile; fileRef = 272C376008C3FDAF009EA18F /* number_formatting.c */; }; 273655E6094C63910043391C /* list.h in Headers */ = {isa = PBXBuildFile; fileRef = 273655E4094C63910043391C /* list.h */; }; 273655E7094C63910043391C /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 273655E5094C63910043391C /* list.c */; }; 273655E8094C63910043391C /* list.h in Headers */ = {isa = PBXBuildFile; fileRef = 273655E4094C63910043391C /* list.h */; }; 273655E9094C63910043391C /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 273655E5094C63910043391C /* list.c */; }; 273655F3094C63F20043391C /* explain.c in Sources */ = {isa = PBXBuildFile; fileRef = 273655EF094C63F20043391C /* explain.c */; }; 273655F4094C63F20043391C /* explain.h in Headers */ = {isa = PBXBuildFile; fileRef = 273655F0094C63F20043391C /* explain.h */; }; 273655F5094C63F20043391C /* extract_vars.c in Sources */ = {isa = PBXBuildFile; fileRef = 273655F1094C63F20043391C /* extract_vars.c */; }; 273655F6094C63F20043391C /* extract_vars.h in Headers */ = {isa = PBXBuildFile; fileRef = 273655F2094C63F20043391C /* extract_vars.h */; }; 273655F7094C63F20043391C /* explain.c in Sources */ = {isa = PBXBuildFile; fileRef = 273655EF094C63F20043391C /* explain.c */; }; 273655F8094C63F20043391C /* explain.h in Headers */ = {isa = PBXBuildFile; fileRef = 273655F0094C63F20043391C /* explain.h */; }; 273655F9094C63F20043391C /* extract_vars.c in Sources */ = {isa = PBXBuildFile; fileRef = 273655F1094C63F20043391C /* extract_vars.c */; }; 273655FA094C63F20043391C /* extract_vars.h in Headers */ = {isa = PBXBuildFile; fileRef = 273655F2094C63F20043391C /* extract_vars.h */; }; 27365601094C64170043391C /* isconst.c in Sources */ = {isa = PBXBuildFile; fileRef = 273655FD094C64170043391C /* isconst.c */; }; 27365602094C64170043391C /* isfunc.c in Sources */ = {isa = PBXBuildFile; fileRef = 273655FE094C64170043391C /* isfunc.c */; }; 27365603094C64170043391C /* isconst.h in Headers */ = {isa = PBXBuildFile; fileRef = 273655FF094C64170043391C /* isconst.h */; }; 27365604094C64170043391C /* isfunc.h in Headers */ = {isa = PBXBuildFile; fileRef = 27365600094C64170043391C /* isfunc.h */; }; 27365605094C64170043391C /* isconst.c in Sources */ = {isa = PBXBuildFile; fileRef = 273655FD094C64170043391C /* isconst.c */; }; 27365606094C64170043391C /* isfunc.c in Sources */ = {isa = PBXBuildFile; fileRef = 273655FE094C64170043391C /* isfunc.c */; }; 27365607094C64170043391C /* isconst.h in Headers */ = {isa = PBXBuildFile; fileRef = 273655FF094C64170043391C /* isconst.h */; }; 27365608094C64170043391C /* isfunc.h in Headers */ = {isa = PBXBuildFile; fileRef = 27365600094C64170043391C /* isfunc.h */; }; 2736560B094C642B0043391C /* evalvar.c in Sources */ = {isa = PBXBuildFile; fileRef = 27365609094C642B0043391C /* evalvar.c */; }; 2736560C094C642B0043391C /* evalvar.h in Headers */ = {isa = PBXBuildFile; fileRef = 2736560A094C642B0043391C /* evalvar.h */; }; 2736560D094C642B0043391C /* evalvar.c in Sources */ = {isa = PBXBuildFile; fileRef = 27365609094C642B0043391C /* evalvar.c */; }; 2736560E094C642B0043391C /* evalvar.h in Headers */ = {isa = PBXBuildFile; fileRef = 2736560A094C642B0043391C /* evalvar.h */; }; 275D2B5E0C5032E50056D137 /* WcalcService.h in Headers */ = {isa = PBXBuildFile; fileRef = 275D2B5C0C5032E50056D137 /* WcalcService.h */; }; 275D2B5F0C5032E50056D137 /* WcalcService.m in Sources */ = {isa = PBXBuildFile; fileRef = 275D2B5D0C5032E50056D137 /* WcalcService.m */; }; 2773DD3409180D4300DBDA9D /* calculator.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B29D6601F7391601A80164 /* calculator.h */; }; 2773DD3509180D4300DBDA9D /* variables.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B29D7401F7394501A80164 /* variables.h */; }; 2773DD3609180D4300DBDA9D /* definitions.h in Headers */ = {isa = PBXBuildFile; fileRef = F5DEAE8F021254A501A80164 /* definitions.h */; }; 2773DD3709180D4300DBDA9D /* string_manip.h in Headers */ = {isa = PBXBuildFile; fileRef = F5293926023032E201A80164 /* string_manip.h */; }; 2773DD3809180D4300DBDA9D /* conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = F5DD321702F8F43501A80164 /* conversion.h */; }; 2773DD3909180D4300DBDA9D /* help.h in Headers */ = {isa = PBXBuildFile; fileRef = 2799DA4303FAD61400CA71DD /* help.h */; }; 2773DD3A09180D4300DBDA9D /* files.h in Headers */ = {isa = PBXBuildFile; fileRef = 275710BC042D0472004ACA36 /* files.h */; }; 2773DD3B09180D4300DBDA9D /* number_formatting.h in Headers */ = {isa = PBXBuildFile; fileRef = 272C375F08C3FDAF009EA18F /* number_formatting.h */; }; 2773DD3D09180D4300DBDA9D /* calculator.c in Sources */ = {isa = PBXBuildFile; fileRef = F5B29D6501F7391601A80164 /* calculator.c */; }; 2773DD3E09180D4300DBDA9D /* variables.c in Sources */ = {isa = PBXBuildFile; fileRef = F5B29D7301F7394501A80164 /* variables.c */; }; 2773DD3F09180D4300DBDA9D /* parser.y in Sources */ = {isa = PBXBuildFile; fileRef = F5B29D6D01F7393A01A80164 /* parser.y */; }; 2773DD4009180D4300DBDA9D /* scanner.l in Sources */ = {isa = PBXBuildFile; fileRef = F5B29D6E01F7393A01A80164 /* scanner.l */; }; 2773DD4109180D4300DBDA9D /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = F521993F01F8D2B801A80164 /* main.c */; }; 2773DD4209180D4300DBDA9D /* string_manip.c in Sources */ = {isa = PBXBuildFile; fileRef = F5293927023032E201A80164 /* string_manip.c */; }; 2773DD4309180D4300DBDA9D /* conversion.c in Sources */ = {isa = PBXBuildFile; fileRef = F5DD321602F8F43501A80164 /* conversion.c */; }; 2773DD4409180D4300DBDA9D /* help.c in Sources */ = {isa = PBXBuildFile; fileRef = 2799DA4403FAD61400CA71DD /* help.c */; }; 2773DD4509180D4300DBDA9D /* files.c in Sources */ = {isa = PBXBuildFile; fileRef = 275710BD042D0472004ACA36 /* files.c */; }; 2773DD4609180D4300DBDA9D /* number_formatting.c in Sources */ = {isa = PBXBuildFile; fileRef = 272C376008C3FDAF009EA18F /* number_formatting.c */; }; 2773DD650918117800DBDA9D /* historyManager.c in Sources */ = {isa = PBXBuildFile; fileRef = F574E09E01FD122F01A80164 /* historyManager.c */; }; 2773DD660918117900DBDA9D /* historyManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F574E09D01FD122F01A80164 /* historyManager.h */; }; 2789AADA0EB1772B008DEB99 /* NewWcalc.icns in Resources */ = {isa = PBXBuildFile; fileRef = 2789AAD90EB1772B008DEB99 /* NewWcalc.icns */; }; 2789AB470EB1877D008DEB99 /* libl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2789AB460EB1877D008DEB99 /* libl.a */; }; 27BDF4C8059F712200CF1DF6 /* simpleCalc.c in Sources */ = {isa = PBXBuildFile; fileRef = 27BDF4C4059F712100CF1DF6 /* simpleCalc.c */; }; 27BDF4C9059F712200CF1DF6 /* simpleCalc.h in Headers */ = {isa = PBXBuildFile; fileRef = 27BDF4C5059F712100CF1DF6 /* simpleCalc.h */; }; 27D39129059BEA850035F25F /* AboutBoxController.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B29D6101F7391001A80164 /* AboutBoxController.h */; }; 27D3912A059BEA850035F25F /* calculator.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B29D6601F7391601A80164 /* calculator.h */; }; 27D3912B059BEA850035F25F /* ErrorController.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B29D6901F7392301A80164 /* ErrorController.h */; }; 27D3912C059BEA850035F25F /* variables.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B29D7401F7394501A80164 /* variables.h */; }; 27D3912D059BEA850035F25F /* WcalcController.h in Headers */ = {isa = PBXBuildFile; fileRef = F5B29D7701F7395001A80164 /* WcalcController.h */; }; 27D3912E059BEA850035F25F /* VariableList.h in Headers */ = {isa = PBXBuildFile; fileRef = F521994601FA8EC401A80164 /* VariableList.h */; }; 27D3912F059BEA850035F25F /* HistoryList.h in Headers */ = {isa = PBXBuildFile; fileRef = F574E09901FD0FD701A80164 /* HistoryList.h */; }; 27D39130059BEA850035F25F /* historyManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F574E09D01FD122F01A80164 /* historyManager.h */; }; 27D39131059BEA850035F25F /* theDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = F5EF54D302022A7001A80164 /* theDelegate.h */; }; 27D39132059BEA850035F25F /* definitions.h in Headers */ = {isa = PBXBuildFile; fileRef = F5DEAE8F021254A501A80164 /* definitions.h */; }; 27D39133059BEA850035F25F /* string_manip.h in Headers */ = {isa = PBXBuildFile; fileRef = F5293926023032E201A80164 /* string_manip.h */; }; 27D39134059BEA850035F25F /* MyTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D446D00263B46801A80164 /* MyTextField.h */; }; 27D39135059BEA850035F25F /* conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = F5DD321702F8F43501A80164 /* conversion.h */; }; 27D39136059BEA850035F25F /* ConversionList.h in Headers */ = {isa = PBXBuildFile; fileRef = F5A165F7030711ED01A80164 /* ConversionList.h */; }; 27D39137059BEA850035F25F /* help.h in Headers */ = {isa = PBXBuildFile; fileRef = 2799DA4303FAD61400CA71DD /* help.h */; }; 27D39138059BEA850035F25F /* files.h in Headers */ = {isa = PBXBuildFile; fileRef = 275710BC042D0472004ACA36 /* files.h */; }; 27D3913A059BEA850035F25F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 27D3913B059BEA850035F25F /* TheW.icns in Resources */ = {isa = PBXBuildFile; fileRef = F5B29D6F01F7393A01A80164 /* TheW.icns */; }; 27D3913C059BEA850035F25F /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = F5B29D7B01F7398A01A80164 /* MainMenu.nib */; }; 27D3913D059BEA850035F25F /* w.png in Resources */ = {isa = PBXBuildFile; fileRef = F5B29D8301F73C2701A80164 /* w.png */; }; 27D3913E059BEA850035F25F /* ChangeLog in Resources */ = {isa = PBXBuildFile; fileRef = F521994801FA927601A80164 /* ChangeLog */; }; 27D3913F059BEA850035F25F /* Wred.png in Resources */ = {isa = PBXBuildFile; fileRef = F5463560020065B401A80164 /* Wred.png */; }; 27D39140059BEA850035F25F /* COPYING in Resources */ = {isa = PBXBuildFile; fileRef = 277DB27D042F5173004ACA36 /* COPYING */; }; 27D39141059BEA850035F25F /* NEWS in Resources */ = {isa = PBXBuildFile; fileRef = 277DB27F042F51A5004ACA36 /* NEWS */; }; 27D39143059BEA850035F25F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 27D39144059BEA850035F25F /* AboutBoxController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5B29D6201F7391001A80164 /* AboutBoxController.m */; }; 27D39145059BEA850035F25F /* calculator.c in Sources */ = {isa = PBXBuildFile; fileRef = F5B29D6501F7391601A80164 /* calculator.c */; }; 27D39146059BEA850035F25F /* ErrorController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5B29D6A01F7392301A80164 /* ErrorController.m */; }; 27D39147059BEA850035F25F /* parser.y in Sources */ = {isa = PBXBuildFile; fileRef = F5B29D6D01F7393A01A80164 /* parser.y */; }; 27D39148059BEA850035F25F /* variables.c in Sources */ = {isa = PBXBuildFile; fileRef = F5B29D7301F7394501A80164 /* variables.c */; }; 27D39149059BEA850035F25F /* WcalcController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5B29D7801F7395001A80164 /* WcalcController.m */; }; 27D3914A059BEA850035F25F /* VariableList.m in Sources */ = {isa = PBXBuildFile; fileRef = F521994301FA86B001A80164 /* VariableList.m */; }; 27D3914B059BEA850035F25F /* HistoryList.m in Sources */ = {isa = PBXBuildFile; fileRef = F574E09A01FD0FD701A80164 /* HistoryList.m */; }; 27D3914C059BEA850035F25F /* theDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F5EF54D202022A7001A80164 /* theDelegate.m */; }; 27D3914D059BEA850035F25F /* historyManager.c in Sources */ = {isa = PBXBuildFile; fileRef = F574E09E01FD122F01A80164 /* historyManager.c */; }; 27D3914E059BEA850035F25F /* string_manip.c in Sources */ = {isa = PBXBuildFile; fileRef = F5293927023032E201A80164 /* string_manip.c */; }; 27D3914F059BEA850035F25F /* MyTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = F5D446D10263B46801A80164 /* MyTextField.m */; }; 27D39150059BEA850035F25F /* scanner.l in Sources */ = {isa = PBXBuildFile; fileRef = F5B29D6E01F7393A01A80164 /* scanner.l */; }; 27D39151059BEA850035F25F /* conversion.c in Sources */ = {isa = PBXBuildFile; fileRef = F5DD321602F8F43501A80164 /* conversion.c */; }; 27D39152059BEA850035F25F /* ConversionList.m in Sources */ = {isa = PBXBuildFile; fileRef = F5A165F8030711ED01A80164 /* ConversionList.m */; }; 27D39153059BEA850035F25F /* help.c in Sources */ = {isa = PBXBuildFile; fileRef = 2799DA4403FAD61400CA71DD /* help.c */; }; 27D39154059BEA850035F25F /* files.c in Sources */ = {isa = PBXBuildFile; fileRef = 275710BD042D0472004ACA36 /* files.c */; }; 27D39156059BEA850035F25F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 27FAECF2093FAE5A00D7EE3E /* InspectorController.h in Headers */ = {isa = PBXBuildFile; fileRef = 27FAECF0093FAE5A00D7EE3E /* InspectorController.h */; }; 27FAECF3093FAE5A00D7EE3E /* InspectorController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FAECF1093FAE5A00D7EE3E /* InspectorController.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 2704376A0C4584640024DB8D /* number.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = number.c; sourceTree = ""; }; 2704376B0C4584640024DB8D /* number.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = number.h; sourceTree = ""; }; 27085EFF0EB512E1009B43DD /* libncurses.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libncurses.dylib; path = usr/lib/libncurses.dylib; sourceTree = SDKROOT; }; 27085F020EB51331009B43DD /* iscmd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iscmd.c; sourceTree = ""; }; 27085F030EB51331009B43DD /* iscmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iscmd.h; sourceTree = ""; }; 27085F090EB51382009B43DD /* libreadline.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libreadline.a; path = "../universal-libs/lib/libreadline.a"; sourceTree = SOURCE_ROOT; }; 27085F0B0EB5138C009B43DD /* libhistory.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; name = libhistory.a; path = "../universal-libs/lib/libhistory.a"; sourceTree = SOURCE_ROOT; }; 271AB2660EBB813500250C1C /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgmp.a; path = "../universal-libs/lib/libgmp.a"; sourceTree = SOURCE_ROOT; }; 271AB2690EBB813A00250C1C /* libmpfr.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmpfr.a; path = "../universal-libs/lib/libmpfr.a"; sourceTree = SOURCE_ROOT; }; 2721CD490869C13400E3BB4D /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 2729A40009B1ECE5001F07F4 /* add_commas.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = add_commas.h; sourceTree = ""; }; 2729A40109B1ECE5001F07F4 /* add_commas.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = add_commas.c; sourceTree = ""; }; 2729A53609B256DA001F07F4 /* PersVarList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PersVarList.h; sourceTree = ""; }; 2729A53709B256DA001F07F4 /* PersVarList.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PersVarList.m; sourceTree = ""; }; 272C375F08C3FDAF009EA18F /* number_formatting.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = number_formatting.h; sourceTree = ""; }; 272C376008C3FDAF009EA18F /* number_formatting.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = number_formatting.c; sourceTree = ""; }; 273655E4094C63910043391C /* list.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = ""; }; 273655E5094C63910043391C /* list.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = ""; }; 273655EF094C63F20043391C /* explain.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = explain.c; sourceTree = ""; }; 273655F0094C63F20043391C /* explain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = explain.h; sourceTree = ""; }; 273655F1094C63F20043391C /* extract_vars.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = extract_vars.c; sourceTree = ""; }; 273655F2094C63F20043391C /* extract_vars.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = extract_vars.h; sourceTree = ""; }; 273655FD094C64170043391C /* isconst.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = isconst.c; sourceTree = ""; }; 273655FE094C64170043391C /* isfunc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = isfunc.c; sourceTree = ""; }; 273655FF094C64170043391C /* isconst.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = isconst.h; sourceTree = ""; }; 27365600094C64170043391C /* isfunc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = isfunc.h; sourceTree = ""; }; 27365609094C642B0043391C /* evalvar.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = evalvar.c; sourceTree = ""; }; 2736560A094C642B0043391C /* evalvar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = evalvar.h; sourceTree = ""; }; 275710BC042D0472004ACA36 /* files.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = files.h; sourceTree = ""; }; 275710BD042D0472004ACA36 /* files.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = files.c; sourceTree = ""; }; 275D2B5C0C5032E50056D137 /* WcalcService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WcalcService.h; sourceTree = ""; }; 275D2B5D0C5032E50056D137 /* WcalcService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WcalcService.m; sourceTree = ""; }; 2773DD4F09180D4300DBDA9D /* wcalc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = wcalc; sourceTree = BUILT_PRODUCTS_DIR; }; 277DB27D042F5173004ACA36 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; 277DB27F042F51A5004ACA36 /* NEWS */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = NEWS; sourceTree = ""; }; 2789AAD90EB1772B008DEB99 /* NewWcalc.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = NewWcalc.icns; sourceTree = ""; }; 2789AB460EB1877D008DEB99 /* libl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libl.a; path = /usr/lib/libl.a; sourceTree = ""; }; 2799DA4303FAD61400CA71DD /* help.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = help.h; sourceTree = ""; }; 2799DA4403FAD61400CA71DD /* help.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = help.c; sourceTree = ""; }; 27BDF4C4059F712100CF1DF6 /* simpleCalc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = simpleCalc.c; sourceTree = ""; }; 27BDF4C5059F712100CF1DF6 /* simpleCalc.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = simpleCalc.h; sourceTree = ""; }; 27D3915A059BEA860035F25F /* Wcalc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Wcalc.app; sourceTree = BUILT_PRODUCTS_DIR; }; 27FAECF0093FAE5A00D7EE3E /* InspectorController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = InspectorController.h; sourceTree = ""; }; 27FAECF1093FAE5A00D7EE3E /* InspectorController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = InspectorController.m; sourceTree = ""; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; F521993F01F8D2B801A80164 /* main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; F521994301FA86B001A80164 /* VariableList.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = VariableList.m; sourceTree = ""; }; F521994601FA8EC401A80164 /* VariableList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VariableList.h; sourceTree = ""; }; F521994801FA927601A80164 /* ChangeLog */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ChangeLog; sourceTree = ""; }; F5293926023032E201A80164 /* string_manip.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = string_manip.h; sourceTree = ""; }; F5293927023032E201A80164 /* string_manip.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = string_manip.c; sourceTree = ""; }; F5463560020065B401A80164 /* Wred.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Wred.png; sourceTree = ""; }; F574E09901FD0FD701A80164 /* HistoryList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HistoryList.h; sourceTree = ""; }; F574E09A01FD0FD701A80164 /* HistoryList.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = HistoryList.m; sourceTree = ""; }; F574E09D01FD122F01A80164 /* historyManager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = historyManager.h; sourceTree = ""; }; F574E09E01FD122F01A80164 /* historyManager.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = historyManager.c; sourceTree = ""; }; F5A165F7030711ED01A80164 /* ConversionList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ConversionList.h; sourceTree = ""; }; F5A165F8030711ED01A80164 /* ConversionList.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ConversionList.m; sourceTree = ""; }; F5B29D6101F7391001A80164 /* AboutBoxController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AboutBoxController.h; sourceTree = ""; }; F5B29D6201F7391001A80164 /* AboutBoxController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AboutBoxController.m; sourceTree = ""; }; F5B29D6501F7391601A80164 /* calculator.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = calculator.c; sourceTree = ""; }; F5B29D6601F7391601A80164 /* calculator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = calculator.h; sourceTree = ""; }; F5B29D6901F7392301A80164 /* ErrorController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ErrorController.h; sourceTree = ""; }; F5B29D6A01F7392301A80164 /* ErrorController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ErrorController.m; sourceTree = ""; }; F5B29D6D01F7393A01A80164 /* parser.y */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.yacc; path = parser.y; sourceTree = ""; }; F5B29D6E01F7393A01A80164 /* scanner.l */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.lex; path = scanner.l; sourceTree = ""; }; F5B29D6F01F7393A01A80164 /* TheW.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = TheW.icns; sourceTree = ""; }; F5B29D7301F7394501A80164 /* variables.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = variables.c; sourceTree = ""; }; F5B29D7401F7394501A80164 /* variables.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = variables.h; sourceTree = ""; }; F5B29D7701F7395001A80164 /* WcalcController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WcalcController.h; sourceTree = ""; }; F5B29D7801F7395001A80164 /* WcalcController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = WcalcController.m; sourceTree = ""; }; F5B29D7C01F7398A01A80164 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = ""; }; F5B29D8301F73C2701A80164 /* w.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = w.png; sourceTree = ""; }; F5D446D00263B46801A80164 /* MyTextField.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyTextField.h; sourceTree = ""; }; F5D446D10263B46801A80164 /* MyTextField.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyTextField.m; sourceTree = ""; }; F5DD321602F8F43501A80164 /* conversion.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = conversion.c; sourceTree = ""; }; F5DD321702F8F43501A80164 /* conversion.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = conversion.h; sourceTree = ""; }; F5DEAE8F021254A501A80164 /* definitions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = definitions.h; sourceTree = ""; }; F5EF54D202022A7001A80164 /* theDelegate.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = theDelegate.m; sourceTree = ""; }; F5EF54D302022A7001A80164 /* theDelegate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = theDelegate.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 2773DD4709180D4300DBDA9D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 27085E2A0EB4D75E009B43DD /* libl.a in Frameworks */, 27085F000EB512E1009B43DD /* libncurses.dylib in Frameworks */, 27085F0A0EB51382009B43DD /* libreadline.a in Frameworks */, 27085F0C0EB5138C009B43DD /* libhistory.a in Frameworks */, 271AB2670EBB813500250C1C /* libgmp.a in Frameworks */, 271AB26A0EBB813A00250C1C /* libmpfr.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 27D39155059BEA850035F25F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 27D39156059BEA850035F25F /* Cocoa.framework in Frameworks */, 2789AB470EB1877D008DEB99 /* libl.a in Frameworks */, 271AB2680EBB813500250C1C /* libgmp.a in Frameworks */, 271AB26B0EBB813A00250C1C /* libmpfr.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( 275D2B5C0C5032E50056D137 /* WcalcService.h */, 275D2B5D0C5032E50056D137 /* WcalcService.m */, F5B29D6101F7391001A80164 /* AboutBoxController.h */, F5B29D6201F7391001A80164 /* AboutBoxController.m */, F5B29D6901F7392301A80164 /* ErrorController.h */, F5B29D6A01F7392301A80164 /* ErrorController.m */, F5B29D7701F7395001A80164 /* WcalcController.h */, F5B29D7801F7395001A80164 /* WcalcController.m */, 27BDF4C5059F712100CF1DF6 /* simpleCalc.h */, 27BDF4C4059F712100CF1DF6 /* simpleCalc.c */, F5B29D6001F738F601A80164 /* Shared Code */, F521994601FA8EC401A80164 /* VariableList.h */, F521994301FA86B001A80164 /* VariableList.m */, F574E09901FD0FD701A80164 /* HistoryList.h */, F574E09A01FD0FD701A80164 /* HistoryList.m */, F5EF54D302022A7001A80164 /* theDelegate.h */, F5EF54D202022A7001A80164 /* theDelegate.m */, F5D446D00263B46801A80164 /* MyTextField.h */, F5D446D10263B46801A80164 /* MyTextField.m */, F5A165F7030711ED01A80164 /* ConversionList.h */, F5A165F8030711ED01A80164 /* ConversionList.m */, 27FAECF0093FAE5A00D7EE3E /* InspectorController.h */, 27FAECF1093FAE5A00D7EE3E /* InspectorController.m */, 2729A53609B256DA001F07F4 /* PersVarList.h */, 2729A53709B256DA001F07F4 /* PersVarList.m */, ); name = Classes; sourceTree = ""; }; 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { isa = PBXGroup; children = ( 2789AB460EB1877D008DEB99 /* libl.a */, 271AB2660EBB813500250C1C /* libgmp.a */, 271AB2690EBB813A00250C1C /* libmpfr.a */, 27085F0B0EB5138C009B43DD /* libhistory.a */, 27085F090EB51382009B43DD /* libreadline.a */, 27085EFF0EB512E1009B43DD /* libncurses.dylib */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, ); name = "Linked Frameworks"; sourceTree = ""; }; 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { isa = PBXGroup; children = ( 29B97325FDCFA39411CA2CEA /* Foundation.framework */, 29B97324FDCFA39411CA2CEA /* AppKit.framework */, ); name = "Other Frameworks"; sourceTree = ""; }; 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( 27D3915A059BEA860035F25F /* Wcalc.app */, 2773DD4F09180D4300DBDA9D /* wcalc */, ); name = Products; sourceTree = ""; }; 29B97314FDCFA39411CA2CEA /* Wcalc */ = { isa = PBXGroup; children = ( 080E96DDFE201D6D7F000001 /* Classes */, 29B97315FDCFA39411CA2CEA /* Other Sources */, 29B97317FDCFA39411CA2CEA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, ); name = Wcalc; sourceTree = ""; }; 29B97315FDCFA39411CA2CEA /* Other Sources */ = { isa = PBXGroup; children = ( 29B97316FDCFA39411CA2CEA /* main.m */, F521993F01F8D2B801A80164 /* main.c */, ); name = "Other Sources"; sourceTree = ""; }; 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( F5B29D6F01F7393A01A80164 /* TheW.icns */, 2789AAD90EB1772B008DEB99 /* NewWcalc.icns */, 2721CD490869C13400E3BB4D /* Info.plist */, F5B29D7B01F7398A01A80164 /* MainMenu.nib */, 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, F5463560020065B401A80164 /* Wred.png */, F5B29D8301F73C2701A80164 /* w.png */, F521994801FA927601A80164 /* ChangeLog */, 277DB27F042F51A5004ACA36 /* NEWS */, 277DB27D042F5173004ACA36 /* COPYING */, ); name = Resources; sourceTree = ""; }; 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, ); name = Frameworks; sourceTree = ""; }; F5B29D6001F738F601A80164 /* Shared Code */ = { isa = PBXGroup; children = ( F5DEAE8F021254A501A80164 /* definitions.h */, 2729A40009B1ECE5001F07F4 /* add_commas.h */, 2729A40109B1ECE5001F07F4 /* add_commas.c */, F5B29D6601F7391601A80164 /* calculator.h */, F5B29D6501F7391601A80164 /* calculator.c */, 27365609094C642B0043391C /* evalvar.c */, 2736560A094C642B0043391C /* evalvar.h */, 273655EF094C63F20043391C /* explain.c */, 273655F0094C63F20043391C /* explain.h */, 273655F1094C63F20043391C /* extract_vars.c */, 273655F2094C63F20043391C /* extract_vars.h */, 2799DA4303FAD61400CA71DD /* help.h */, 2799DA4403FAD61400CA71DD /* help.c */, 27085F020EB51331009B43DD /* iscmd.c */, 27085F030EB51331009B43DD /* iscmd.h */, 273655FD094C64170043391C /* isconst.c */, 273655FE094C64170043391C /* isfunc.c */, 273655FF094C64170043391C /* isconst.h */, 27365600094C64170043391C /* isfunc.h */, 273655E4094C63910043391C /* list.h */, 273655E5094C63910043391C /* list.c */, F5B29D7401F7394501A80164 /* variables.h */, F5B29D7301F7394501A80164 /* variables.c */, F5B29D6D01F7393A01A80164 /* parser.y */, F5B29D6E01F7393A01A80164 /* scanner.l */, F5293926023032E201A80164 /* string_manip.h */, F5293927023032E201A80164 /* string_manip.c */, F5DD321702F8F43501A80164 /* conversion.h */, F5DD321602F8F43501A80164 /* conversion.c */, 275710BC042D0472004ACA36 /* files.h */, 275710BD042D0472004ACA36 /* files.c */, F574E09D01FD122F01A80164 /* historyManager.h */, F574E09E01FD122F01A80164 /* historyManager.c */, 272C375F08C3FDAF009EA18F /* number_formatting.h */, 272C376008C3FDAF009EA18F /* number_formatting.c */, 2704376A0C4584640024DB8D /* number.c */, 2704376B0C4584640024DB8D /* number.h */, ); name = "Shared Code"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 2773DD3309180D4300DBDA9D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 2773DD3409180D4300DBDA9D /* calculator.h in Headers */, 2773DD3509180D4300DBDA9D /* variables.h in Headers */, 2773DD3609180D4300DBDA9D /* definitions.h in Headers */, 2773DD3709180D4300DBDA9D /* string_manip.h in Headers */, 2773DD3809180D4300DBDA9D /* conversion.h in Headers */, 2773DD3909180D4300DBDA9D /* help.h in Headers */, 2773DD3A09180D4300DBDA9D /* files.h in Headers */, 2773DD3B09180D4300DBDA9D /* number_formatting.h in Headers */, 2773DD660918117900DBDA9D /* historyManager.h in Headers */, 273655E8094C63910043391C /* list.h in Headers */, 273655F8094C63F20043391C /* explain.h in Headers */, 273655FA094C63F20043391C /* extract_vars.h in Headers */, 27365607094C64170043391C /* isconst.h in Headers */, 27365608094C64170043391C /* isfunc.h in Headers */, 2736560E094C642B0043391C /* evalvar.h in Headers */, 2729A40409B1ECE5001F07F4 /* add_commas.h in Headers */, 2704376F0C4584640024DB8D /* number.h in Headers */, 27085F050EB51331009B43DD /* iscmd.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 27D39128059BEA850035F25F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 27D39129059BEA850035F25F /* AboutBoxController.h in Headers */, 27D3912A059BEA850035F25F /* calculator.h in Headers */, 27D3912B059BEA850035F25F /* ErrorController.h in Headers */, 27D3912C059BEA850035F25F /* variables.h in Headers */, 27D3912D059BEA850035F25F /* WcalcController.h in Headers */, 27D3912E059BEA850035F25F /* VariableList.h in Headers */, 27D3912F059BEA850035F25F /* HistoryList.h in Headers */, 27D39130059BEA850035F25F /* historyManager.h in Headers */, 27D39131059BEA850035F25F /* theDelegate.h in Headers */, 27D39132059BEA850035F25F /* definitions.h in Headers */, 27D39133059BEA850035F25F /* string_manip.h in Headers */, 27D39134059BEA850035F25F /* MyTextField.h in Headers */, 27D39135059BEA850035F25F /* conversion.h in Headers */, 27D39136059BEA850035F25F /* ConversionList.h in Headers */, 27D39137059BEA850035F25F /* help.h in Headers */, 27D39138059BEA850035F25F /* files.h in Headers */, 27BDF4C9059F712200CF1DF6 /* simpleCalc.h in Headers */, 272C376308C3FDAF009EA18F /* number_formatting.h in Headers */, 27FAECF2093FAE5A00D7EE3E /* InspectorController.h in Headers */, 273655E6094C63910043391C /* list.h in Headers */, 273655F4094C63F20043391C /* explain.h in Headers */, 273655F6094C63F20043391C /* extract_vars.h in Headers */, 27365603094C64170043391C /* isconst.h in Headers */, 27365604094C64170043391C /* isfunc.h in Headers */, 2736560C094C642B0043391C /* evalvar.h in Headers */, 2729A40209B1ECE5001F07F4 /* add_commas.h in Headers */, 2729A53809B256DA001F07F4 /* PersVarList.h in Headers */, 2704376D0C4584640024DB8D /* number.h in Headers */, 275D2B5E0C5032E50056D137 /* WcalcService.h in Headers */, 27085F070EB51331009B43DD /* iscmd.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 2773DD3209180D4300DBDA9D /* wcalc */ = { isa = PBXNativeTarget; buildConfigurationList = 2773DD4B09180D4300DBDA9D /* Build configuration list for PBXNativeTarget "wcalc" */; buildPhases = ( 2773DD3309180D4300DBDA9D /* Headers */, 2773DD3C09180D4300DBDA9D /* Sources */, 2773DD4709180D4300DBDA9D /* Frameworks */, 2773DD4A09180D4300DBDA9D /* Rez */, ); buildRules = ( ); dependencies = ( ); name = wcalc; productName = wcalc; productReference = 2773DD4F09180D4300DBDA9D /* wcalc */; productType = "com.apple.product-type.tool"; }; 27D39127059BEA850035F25F /* Wcalc.app */ = { isa = PBXNativeTarget; buildConfigurationList = 27B38FA00859DCBE00C2FE3C /* Build configuration list for PBXNativeTarget "Wcalc.app" */; buildPhases = ( 27D39128059BEA850035F25F /* Headers */, 27D39139059BEA850035F25F /* Resources */, 27D39142059BEA850035F25F /* Sources */, 27D39155059BEA850035F25F /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = Wcalc.app; productName = Wcalc; productReference = 27D3915A059BEA860035F25F /* Wcalc.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; }; buildConfigurationList = 27B38FA40859DCBE00C2FE3C /* Build configuration list for PBXProject "Wcalc" */; compatibilityVersion = "Xcode 3.1"; hasScannedForEncodings = 1; mainGroup = 29B97314FDCFA39411CA2CEA /* Wcalc */; projectDirPath = ""; projectRoot = ""; targets = ( 2773DD3209180D4300DBDA9D /* wcalc */, 27D39127059BEA850035F25F /* Wcalc.app */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 27D39139059BEA850035F25F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 27D3913A059BEA850035F25F /* InfoPlist.strings in Resources */, 27D3913B059BEA850035F25F /* TheW.icns in Resources */, 27D3913C059BEA850035F25F /* MainMenu.nib in Resources */, 27D3913D059BEA850035F25F /* w.png in Resources */, 27D3913E059BEA850035F25F /* ChangeLog in Resources */, 27D3913F059BEA850035F25F /* Wred.png in Resources */, 27D39140059BEA850035F25F /* COPYING in Resources */, 27D39141059BEA850035F25F /* NEWS in Resources */, 2789AADA0EB1772B008DEB99 /* NewWcalc.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXRezBuildPhase section */ 2773DD4A09180D4300DBDA9D /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 2773DD3C09180D4300DBDA9D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2773DD3D09180D4300DBDA9D /* calculator.c in Sources */, 2773DD3E09180D4300DBDA9D /* variables.c in Sources */, 2773DD3F09180D4300DBDA9D /* parser.y in Sources */, 2773DD4009180D4300DBDA9D /* scanner.l in Sources */, 2773DD4109180D4300DBDA9D /* main.c in Sources */, 2773DD4209180D4300DBDA9D /* string_manip.c in Sources */, 2773DD4309180D4300DBDA9D /* conversion.c in Sources */, 2773DD4409180D4300DBDA9D /* help.c in Sources */, 2773DD4509180D4300DBDA9D /* files.c in Sources */, 2773DD4609180D4300DBDA9D /* number_formatting.c in Sources */, 2773DD650918117800DBDA9D /* historyManager.c in Sources */, 273655E9094C63910043391C /* list.c in Sources */, 273655F7094C63F20043391C /* explain.c in Sources */, 273655F9094C63F20043391C /* extract_vars.c in Sources */, 27365605094C64170043391C /* isconst.c in Sources */, 27365606094C64170043391C /* isfunc.c in Sources */, 2736560D094C642B0043391C /* evalvar.c in Sources */, 2729A40509B1ECE5001F07F4 /* add_commas.c in Sources */, 2704376E0C4584640024DB8D /* number.c in Sources */, 27085F040EB51331009B43DD /* iscmd.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 27D39142059BEA850035F25F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 27D39143059BEA850035F25F /* main.m in Sources */, 27D39144059BEA850035F25F /* AboutBoxController.m in Sources */, 27D39145059BEA850035F25F /* calculator.c in Sources */, 27D39146059BEA850035F25F /* ErrorController.m in Sources */, 27D39147059BEA850035F25F /* parser.y in Sources */, 27D39148059BEA850035F25F /* variables.c in Sources */, 27D39149059BEA850035F25F /* WcalcController.m in Sources */, 27D3914A059BEA850035F25F /* VariableList.m in Sources */, 27D3914B059BEA850035F25F /* HistoryList.m in Sources */, 27D3914C059BEA850035F25F /* theDelegate.m in Sources */, 27D3914D059BEA850035F25F /* historyManager.c in Sources */, 27D3914E059BEA850035F25F /* string_manip.c in Sources */, 27D3914F059BEA850035F25F /* MyTextField.m in Sources */, 27D39150059BEA850035F25F /* scanner.l in Sources */, 27D39151059BEA850035F25F /* conversion.c in Sources */, 27D39152059BEA850035F25F /* ConversionList.m in Sources */, 27D39153059BEA850035F25F /* help.c in Sources */, 27D39154059BEA850035F25F /* files.c in Sources */, 27BDF4C8059F712200CF1DF6 /* simpleCalc.c in Sources */, 272C376408C3FDAF009EA18F /* number_formatting.c in Sources */, 27FAECF3093FAE5A00D7EE3E /* InspectorController.m in Sources */, 273655E7094C63910043391C /* list.c in Sources */, 273655F3094C63F20043391C /* explain.c in Sources */, 273655F5094C63F20043391C /* extract_vars.c in Sources */, 27365601094C64170043391C /* isconst.c in Sources */, 27365602094C64170043391C /* isfunc.c in Sources */, 2736560B094C642B0043391C /* evalvar.c in Sources */, 2729A40309B1ECE5001F07F4 /* add_commas.c in Sources */, 2729A53909B256DA001F07F4 /* PersVarList.m in Sources */, 2704376C0C4584640024DB8D /* number.c in Sources */, 275D2B5F0C5032E50056D137 /* WcalcService.m in Sources */, 27085F060EB51331009B43DD /* iscmd.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 089C165DFE840E0CC02AAC07 /* English */, ); name = InfoPlist.strings; sourceTree = ""; }; F5B29D7B01F7398A01A80164 /* MainMenu.nib */ = { isa = PBXVariantGroup; children = ( F5B29D7C01F7398A01A80164 /* English */, ); name = MainMenu.nib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 275D2DBF0C514B850056D137 /* Deployment Universal */ = { isa = XCBuildConfiguration; buildSettings = { GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_OPTIMIZATION_LEVEL = 2; GCC_PREPROCESSOR_DEFINITIONS = ( HAVE_READLINE_HISTORY_H, HAVE_READLINE_HISTORY, HAVE_LIBREADLINE, HAVE_READLINE_READLINE_H, "VERSION=\"\\\"$(CURRENT_PROJECT_VERSION)\\\"\"", ); PRODUCT_NAME = wcalc; }; name = "Deployment Universal"; }; 275D2DC00C514B850056D137 /* Deployment Universal */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); INFOPLIST_FILE = Info.plist; PRODUCT_NAME = Wcalc; WRAPPER_EXTENSION = app; }; name = "Deployment Universal"; }; 275D2DC10C514B850056D137 /* Deployment Universal */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_BIT)"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 2.4; GCC_MODEL_TUNING = ""; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = "VERSION=\"\\\"$(CURRENT_PROJECT_VERSION)\\\"\""; GCC_VERSION = ""; GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; GCC_WARN_SHADOW = YES; GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../universal-libs/include\""; LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../universal-libs/lib\""; MACOSX_DEPLOYMENT_TARGET = 10.4; ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = "-Wl,-search_paths_first"; SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = YES; SDKROOT = macosx10.4; STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static; VERSIONING_SYSTEM = "apple-generic"; }; name = "Deployment Universal"; }; 276C6F5D091A9B97005A5B75 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_OPTIMIZATION_LEVEL = 2; GCC_PREPROCESSOR_DEFINITIONS = ( HAVE_READLINE_HISTORY_H, HAVE_READLINE_HISTORY, HAVE_LIBREADLINE, HAVE_READLINE_READLINE_H, "VERSION=\"\\\"$(CURRENT_PROJECT_VERSION)\\\"\"", ); PRODUCT_NAME = wcalc; }; name = Development; }; 276C6F5E091A9B97005A5B75 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = Info.plist; PRODUCT_NAME = Wcalc; WRAPPER_EXTENSION = app; }; name = Development; }; 276C6F5F091A9B97005A5B75 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_BIT)"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 2.4; GCC_CW_ASM_SYNTAX = NO; GCC_MODEL_TUNING = ""; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = "VERSION=\"\\\"$(CURRENT_PROJECT_VERSION)\\\"\""; GCC_VERSION = ""; GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; GCC_WARN_SHADOW = YES; GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../universal-libs/include\""; LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../universal-libs/lib\""; MACOSX_DEPLOYMENT_TARGET = ""; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "-Wl,-search_paths_first"; SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = YES; STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static; STRIP_INSTALLED_PRODUCT = NO; VERSIONING_SYSTEM = "apple-generic"; }; name = Development; }; 277E70AD0D6A0ECD001C912C /* Deployment 10.3.9 */ = { isa = XCBuildConfiguration; buildSettings = { GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_OPTIMIZATION_LEVEL = 2; GCC_PREPROCESSOR_DEFINITIONS = ( HAVE_READLINE_HISTORY_H, HAVE_READLINE_HISTORY, HAVE_LIBREADLINE, HAVE_READLINE_READLINE_H, "VERSION=\"\\\"$(CURRENT_PROJECT_VERSION)\\\"\"", ); PRODUCT_NAME = wcalc; }; name = "Deployment 10.3.9"; }; 277E70AE0D6A0ECD001C912C /* Deployment 10.3.9 */ = { isa = XCBuildConfiguration; buildSettings = { INFOPLIST_FILE = Info.plist; PRODUCT_NAME = Wcalc; SDKROOT = macosx10.3.9; WRAPPER_EXTENSION = app; }; name = "Deployment 10.3.9"; }; 277E70AF0D6A0ECD001C912C /* Deployment 10.3.9 */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ppc; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 2.4; GCC_MODEL_TUNING = ""; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = "VERSION=\"\\\"$(CURRENT_PROJECT_VERSION)\\\"\""; GCC_VERSION = ""; GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; GCC_WARN_SHADOW = YES; GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../10.3.9/include\""; LIBRARY_SEARCH_PATHS = "\"$(SRCROOT)/../10.3.9/lib\""; MACOSX_DEPLOYMENT_TARGET = 10.3; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "-Wl,-search_paths_first"; SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = YES; SDKROOT = macosx10.3.9; STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static; VERSIONING_SYSTEM = "apple-generic"; }; name = "Deployment 10.3.9"; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 2773DD4B09180D4300DBDA9D /* Build configuration list for PBXNativeTarget "wcalc" */ = { isa = XCConfigurationList; buildConfigurations = ( 276C6F5D091A9B97005A5B75 /* Development */, 275D2DBF0C514B850056D137 /* Deployment Universal */, 277E70AD0D6A0ECD001C912C /* Deployment 10.3.9 */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = "Deployment Universal"; }; 27B38FA00859DCBE00C2FE3C /* Build configuration list for PBXNativeTarget "Wcalc.app" */ = { isa = XCConfigurationList; buildConfigurations = ( 276C6F5E091A9B97005A5B75 /* Development */, 275D2DC00C514B850056D137 /* Deployment Universal */, 277E70AE0D6A0ECD001C912C /* Deployment 10.3.9 */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = "Deployment Universal"; }; 27B38FA40859DCBE00C2FE3C /* Build configuration list for PBXProject "Wcalc" */ = { isa = XCConfigurationList; buildConfigurations = ( 276C6F5F091A9B97005A5B75 /* Development */, 275D2DC10C514B850056D137 /* Deployment Universal */, 277E70AF0D6A0ECD001C912C /* Deployment 10.3.9 */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = "Deployment Universal"; }; /* End XCConfigurationList section */ }; rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; } wcalc-2.5/Wcalc.xcodeproj/kyle.pbxuser0000644000175000017500000022572212115670002015001 00000000000000// !$*UTF8*$! { 089C165DFE840E0CC02AAC07 /* English */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {745, 664}}"; sepNavSelRange = "{258, 0}"; sepNavVisRange = "{0, 258}"; sepNavVisRect = "{{0, 0}, {642, 609}}"; }; }; 2704376A0C4584640024DB8D /* number.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {742, 1106}}"; sepNavSelRange = "{1557, 0}"; sepNavVisRect = "{{0, 854}, {742, 154}}"; }; }; 2704376B0C4584640024DB8D /* number.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {745, 5166}}"; sepNavSelRange = "{311, 17}"; sepNavVisRange = "{0, 608}"; sepNavVisRect = "{{0, 0}, {648, 514}}"; }; }; 270437A10C458C830024DB8D /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 27FAECF1093FAE5A00D7EE3E /* InspectorController.m */; name = "InspectorController.m: 44"; rLen = 0; rLoc = 1173; rType = 0; vrLen = 1173; vrLoc = 0; }; 27085D720EB3D3BE009B43DD /* PBXBookmark */ = { isa = PBXBookmark; fRef = F5B29D6F01F7393A01A80164 /* TheW.icns */; }; 27085D7A0EB3D5AE009B43DD /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5A165F8030711ED01A80164 /* ConversionList.m */; name = "ConversionList.m: 60"; rLen = 0; rLoc = 1585; rType = 0; vrLen = 1326; vrLoc = 0; }; 27085D940EB3D881009B43DD /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6601F7391601A80164 /* calculator.h */; name = "calculator.h: 132"; rLen = 0; rLoc = 2268; rType = 0; vrLen = 1280; vrLoc = 1220; }; 27085D990EB40B1B009B43DD /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7701F7395001A80164 /* WcalcController.h */; name = "WcalcController.h: 50"; rLen = 0; rLoc = 1654; rType = 0; vrLen = 1528; vrLoc = 454; }; 27085DDF0EB41838009B43DD /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7801F7395001A80164 /* WcalcController.m */; name = "WcalcController.m: 983"; rLen = 0; rLoc = 33915; rType = 0; vrLen = 957; vrLoc = 33336; }; 27085DF90EB418EC009B43DD /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 2704376B0C4584640024DB8D /* number.h */; name = "number.h: 19"; rLen = 17; rLoc = 311; rType = 0; vrLen = 608; vrLoc = 0; }; 27085E7F0EB4FC43009B43DD /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6101F7391001A80164 /* AboutBoxController.h */; name = "AboutBoxController.h: 3"; rLen = 0; rLoc = 34; rType = 0; vrLen = 230; vrLoc = 0; }; 27085E8F0EB4FE3E009B43DD /* PlistBookmark */ = { isa = PlistBookmark; fRef = 2721CD490869C13400E3BB4D /* Info.plist */; fallbackIsa = PBXBookmark; isK = 0; kPath = ( ); name = /Users/kyle/Wcalc_Development/Wcalc/Info.plist; rLen = 0; rLoc = 2147483647; }; 27085E910EB4FE3E009B43DD /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5DEAE8F021254A501A80164 /* definitions.h */; name = "definitions.h: 1"; rLen = 147; rLoc = 0; rType = 0; vrLen = 2083; vrLoc = 0; }; 27085EB40EB4FFB8009B43DD /* PBXTextBookmark */ = { isa = PBXTextBookmark; comments = "warning: format '%s' expects type 'char *', but argument 2 has type 'double'"; fRef = 2799DA4403FAD61400CA71DD /* help.c */; rLen = 1; rLoc = 22; rType = 1; }; 27085F2D0EB51634009B43DD /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F574E09E01FD122F01A80164 /* historyManager.c */; name = "historyManager.c: 74"; rLen = 0; rLoc = 1447; rType = 0; vrLen = 1380; vrLoc = 1319; }; 271AB2710EBB881100250C1C /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F521993F01F8D2B801A80164 /* main.c */; name = "main.c: 27"; rLen = 0; rLoc = 716; rType = 0; vrLen = 1295; vrLoc = 300; }; 271AB2720EBB881100250C1C /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F521993F01F8D2B801A80164 /* main.c */; name = "main.c: 27"; rLen = 0; rLoc = 716; rType = 0; vrLen = 1295; vrLoc = 300; }; 271AB2730EBB881100250C1C /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7801F7395001A80164 /* WcalcController.m */; name = "WcalcController.m: 1165"; rLen = 0; rLoc = 39971; rType = 0; vrLen = 2678; vrLoc = 38382; }; 2721CBBA0865FD2800E3BB4D /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5DEAE8F021254A501A80164 /* definitions.h */; name = "definitions.h: 77"; rLen = 0; rLoc = 2984; rType = 0; vrLen = 2091; vrLoc = 212; }; 2721CBC30865FD3C00E3BB4D /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 089C165DFE840E0CC02AAC07 /* English */; name = "English: 6"; rLen = 0; rLoc = 241; rType = 0; vrLen = 258; vrLoc = 0; }; 2721CBE90865FDFE00E3BB4D /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F521994801FA927601A80164 /* ChangeLog */; name = "ChangeLog: 1587"; rLen = 0; rLoc = 43050; rType = 0; vrLen = 1129; vrLoc = 2217; }; 2721CBFF086604FD00E3BB4D /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6601F7391601A80164 /* calculator.h */; name = "#include "; rLen = 17; rLoc = 276; rType = 0; vrLen = 416; vrLoc = 0; }; 2721CC090866055400E3BB4D /* PBXBookmark */ = { isa = PBXBookmark; fRef = F5B29D6F01F7393A01A80164 /* TheW.icns */; }; 2721CC4108660C9200E3BB4D /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 29B97316FDCFA39411CA2CEA /* main.m */; name = "#import \"calculator.h\""; rLen = 64; rLoc = 163; rType = 0; vrLen = 375; vrLoc = 0; }; 2721CC49086652BA00E3BB4D /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F521993F01F8D2B801A80164 /* main.c */; name = "main.c: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1086; vrLoc = 1144; }; 2721CD220869C0C400E3BB4D /* PBXBookmark */ = { isa = PBXBookmark; fRef = F5463560020065B401A80164 /* Wred.png */; }; 2721CD280869C0C400E3BB4D /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6101F7391001A80164 /* AboutBoxController.h */; name = "AboutBoxController.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 229; vrLoc = 0; }; 2721CD2B0869C0C400E3BB4D /* PBXBookmark */ = { isa = PBXBookmark; fRef = F5463560020065B401A80164 /* Wred.png */; }; 2721CD2C0869C0C400E3BB4D /* PBXBookmark */ = { isa = PBXBookmark; fRef = F5B29D8301F73C2701A80164 /* w.png */; }; 2721CD2E0869C0C400E3BB4D /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 277DB27F042F51A5004ACA36 /* NEWS */; name = "NEWS: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 726; vrLoc = 0; }; 2721CD490869C13400E3BB4D /* Info.plist */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {686, 742}}"; sepNavSelRange = "{1188, 0}"; sepNavVisRect = "{{0, 119}, {642, 609}}"; sepNavWindowFrame = "{{651, 111}, {879, 764}}"; }; }; 2729A40109B1ECE5001F07F4 /* add_commas.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {988, 1778}}"; sepNavSelRange = "{3018, 0}"; sepNavVisRange = "{1079, 395}"; sepNavVisRect = "{{0, 874}, {748, 255}}"; }; }; 2729A45C09B22FE2001F07F4 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 273655E5094C63910043391C /* list.c */; name = getListElement; rLen = 14; rLoc = 6847; rType = 0; vrLen = 994; vrLoc = 6651; }; 2729A45D09B22FE2001F07F4 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 273655E5094C63910043391C /* list.c */; name = getListElement; rLen = 14; rLoc = 6847; rType = 0; vrLen = 994; vrLoc = 6651; }; 2729A53609B256DA001F07F4 /* PersVarList.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {642, 609}}"; sepNavSelRange = "{164, 0}"; sepNavVisRect = "{{0, 0}, {642, 609}}"; }; }; 2729A53709B256DA001F07F4 /* PersVarList.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {890, 2604}}"; sepNavSelRange = "{4949, 0}"; sepNavVisRect = "{{0, 1064}, {742, 154}}"; }; }; 2729A55E09B25AE9001F07F4 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 2729A53709B256DA001F07F4 /* PersVarList.m */; name = "PersVarList.m: 7"; rLen = 0; rLoc = 316; rType = 0; vrLen = 322; vrLoc = 0; }; 2729A55F09B25AE9001F07F4 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 2729A53609B256DA001F07F4 /* PersVarList.h */; name = "PersVarList.h: 4"; rLen = 0; rLoc = 61; rType = 0; vrLen = 255; vrLoc = 0; }; 272C359B08C1557A009EA18F /* WcalcController.m:430 */ = { isa = PBXFileBreakpoint; actions = ( ); breakpointStyle = 0; continueAfterActions = 0; countType = 0; delayBeforeContinue = 0; fileReference = F5B29D7801F7395001A80164 /* WcalcController.m */; functionName = "-awakeFromNib"; hitCount = 0; ignoreCount = 0; lineNumber = 430; location = Wcalc; modificationTime = 247178637.581671; state = 1; }; 272C35D908C16738009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6901F7392301A80164 /* ErrorController.h */; name = include; rLen = 7; rLoc = 24; rType = 0; vrLen = 268; vrLoc = 0; }; 272C35DD08C16738009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 27BDF4C5059F712100CF1DF6 /* simpleCalc.h */; name = "simpleCalc.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 171; vrLoc = 0; }; 272C35E408C16738009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5D446D00263B46801A80164 /* MyTextField.h */; name = "MyTextField.h: 7"; rLen = 0; rLoc = 99; rType = 0; vrLen = 478; vrLoc = 0; }; 272C35EB08C16738009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6901F7392301A80164 /* ErrorController.h */; name = "ErrorController.h: 3"; rLen = 0; rLoc = 31; rType = 0; vrLen = 268; vrLoc = 0; }; 272C35ED08C16738009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6A01F7392301A80164 /* ErrorController.m */; name = "ErrorController.m: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 570; vrLoc = 0; }; 272C35F008C16738009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6201F7391001A80164 /* AboutBoxController.m */; name = "AboutBoxController.m: 2"; rLen = 0; rLoc = 33; rType = 0; vrLen = 324; vrLoc = 0; }; 272C35F308C16738009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7701F7395001A80164 /* WcalcController.h */; name = "WcalcController.h: 3"; rLen = 0; rLoc = 85; rType = 0; vrLen = 912; vrLoc = 0; }; 272C35F608C16738009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 27BDF4C5059F712100CF1DF6 /* simpleCalc.h */; name = "simpleCalc.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 171; vrLoc = 0; }; 272C35F708C16738009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F521994601FA8EC401A80164 /* VariableList.h */; name = "VariableList.h: 3"; rLen = 0; rLoc = 28; rType = 0; vrLen = 542; vrLoc = 0; }; 272C35F908C16738009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F574E09901FD0FD701A80164 /* HistoryList.h */; name = "HistoryList.h: 5"; rLen = 0; rLoc = 53; rType = 0; vrLen = 420; vrLoc = 0; }; 272C35FB08C16738009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5EF54D302022A7001A80164 /* theDelegate.h */; name = "theDelegate.h: 3"; rLen = 0; rLoc = 27; rType = 0; vrLen = 200; vrLoc = 0; }; 272C35FC08C16738009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5EF54D202022A7001A80164 /* theDelegate.m */; name = "theDelegate.m: 1"; rLen = 0; rLoc = 8; rType = 0; vrLen = 155; vrLoc = 0; }; 272C35FD08C16738009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5D446D00263B46801A80164 /* MyTextField.h */; name = "MyTextField.h: 7"; rLen = 0; rLoc = 99; rType = 0; vrLen = 478; vrLoc = 0; }; 272C363C08C17E7F009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 2721CD490869C13400E3BB4D /* Info.plist */; name = "Info.plist: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 759; vrLoc = 0; }; 272C373F08C21615009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7401F7394501A80164 /* variables.h */; name = "variables.h: 12"; rLen = 0; rLoc = 197; rType = 0; vrLen = 428; vrLoc = 0; }; 272C374508C21615009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7401F7394501A80164 /* variables.h */; name = "variables.h: 12"; rLen = 0; rLoc = 197; rType = 0; vrLen = 428; vrLoc = 0; }; 272C374608C21615009EA18F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7301F7394501A80164 /* variables.c */; name = "variables.c: 137"; rLen = 0; rLoc = 2506; rType = 0; vrLen = 640; vrLoc = 2062; }; 272C375F08C3FDAF009EA18F /* number_formatting.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {627, 429}}"; sepNavSelRange = "{164, 0}"; sepNavVisRect = "{{0, 0}, {627, 429}}"; }; }; 272C376008C3FDAF009EA18F /* number_formatting.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {728, 8216}}"; sepNavSelRange = "{12708, 0}"; sepNavVisRange = "{12665, 366}"; sepNavVisRect = "{{0, 574}, {748, 154}}"; }; }; 273655E5094C63910043391C /* list.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {688, 6230}}"; sepNavSelRange = "{4145, 0}"; sepNavVisRect = "{{0, 2220}, {688, 503}}"; }; }; 273655EF094C63F20043391C /* explain.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {2468, 5390}}"; sepNavSelRange = "{17655, 0}"; sepNavVisRect = "{{0, 2240}, {742, 154}}"; }; }; 273655F1094C63F20043391C /* extract_vars.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {742, 1148}}"; sepNavSelRange = "{1878, 0}"; sepNavVisRect = "{{0, 840}, {742, 154}}"; }; }; 273655FD094C64170043391C /* isconst.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {728, 2086}}"; sepNavSelRange = "{106, 58}"; sepNavVisRange = "{165, 208}"; }; }; 27365609094C642B0043391C /* evalvar.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {627, 429}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {627, 429}}"; }; }; 2736561D094C69B80043391C /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 27365609094C642B0043391C /* evalvar.c */; name = "evalvar.c: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 548; vrLoc = 0; }; 27365622094C69B80043391C /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 27365609094C642B0043391C /* evalvar.c */; name = "evalvar.c: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 548; vrLoc = 0; }; 2754E75508C0D6E1007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 277DB27D042F5173004ACA36 /* COPYING */; name = "COPYING: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 886; vrLoc = 0; }; 2754E75608C0D6E1007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 277DB27D042F5173004ACA36 /* COPYING */; name = "COPYING: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 886; vrLoc = 0; }; 2754E7E408C0E659007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5A165F8030711ED01A80164 /* ConversionList.m */; name = "ConversionList.m: 26"; rLen = 0; rLoc = 728; rType = 0; vrLen = 807; vrLoc = 0; }; 2754E7E508C0E659007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5A165F7030711ED01A80164 /* ConversionList.h */; name = "ConversionList.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 383; vrLoc = 0; }; 2754E7E708C0E659007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5DD321602F8F43501A80164 /* conversion.c */; name = "conversion.c: lengths"; rLen = 0; rLoc = 380; rType = 0; vrLen = 2064; vrLoc = 337; }; 2754E7E808C0E659007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5DD321702F8F43501A80164 /* conversion.h */; name = "conversion.h: 13"; rLen = 0; rLoc = 317; rType = 0; vrLen = 663; vrLoc = 216; }; 2754E80108C0F6E5007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5DD321602F8F43501A80164 /* conversion.c */; name = "conversion.c: 60"; rLen = 0; rLoc = 2862; rType = 0; vrLen = 618; vrLoc = 15054; }; 2754E81108C10043007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6501F7391601A80164 /* calculator.c */; name = "#ifndef GUI"; rLen = 12; rLoc = 0; rType = 0; vrLen = 672; vrLoc = 0; }; 2754E81208C10043007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F574E09E01FD122F01A80164 /* historyManager.c */; name = "history = temp;"; rLen = 20; rLoc = 2336; rType = 0; vrLen = 902; vrLoc = 1782; }; 2754E81308C10043007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5D446D10263B46801A80164 /* MyTextField.m */; name = "}"; rLen = 1; rLoc = 208; rType = 0; vrLen = 610; vrLoc = 0; }; 2754E81408C10043007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F574E09A01FD0FD701A80164 /* HistoryList.m */; name = "if ([[col identifier] isEqualToString:@\"history\"])"; rLen = 52; rLoc = 336; rType = 0; vrLen = 606; vrLoc = 0; }; 2754E81508C10043007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F521994301FA86B001A80164 /* VariableList.m */; name = "struct variable *keyval = getrealnvar(rowIndex);"; rLen = 84; rLoc = 422; rType = 0; vrLen = 767; vrLoc = 96; }; 2754E81708C10043007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6E01F7393A01A80164 /* scanner.l */; name = "return(NUMBER); }"; rLen = 24; rLoc = 8655; rType = 0; vrLen = 1484; vrLoc = 7560; }; 2754E8CB08C126B6007F45CF /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 27BDF4C4059F712100CF1DF6 /* simpleCalc.c */; name = "simpleCalc.c: simpleEval"; rLen = 0; rLoc = 371; rType = 0; vrLen = 1060; vrLoc = 0; }; 275710BD042D0472004ACA36 /* files.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {742, 3850}}"; sepNavSelRange = "{2394, 65}"; sepNavVisRect = "{{0, 1344}, {742, 154}}"; }; }; 275D2B270C4DDA3B0056D137 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 27FAECF0093FAE5A00D7EE3E /* InspectorController.h */; name = "InspectorController.h: historyList"; rLen = 0; rLoc = 225; rType = 0; vrLen = 395; vrLoc = 0; }; 275D2B5C0C5032E50056D137 /* WcalcService.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {642, 417}}"; sepNavSelRange = "{315, 0}"; sepNavVisRect = "{{0, 0}, {642, 417}}"; }; }; 275D2B5D0C5032E50056D137 /* WcalcService.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {642, 1050}}"; sepNavSelRange = "{794, 0}"; sepNavVisRect = "{{0, 212}, {642, 417}}"; sepNavWindowFrame = "{{15, 259}, {879, 764}}"; }; }; 275D2C930C50346B0056D137 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 275D2B5C0C5032E50056D137 /* WcalcService.h */; name = "WcalcService.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 210; vrLoc = 0; }; 275D2C940C50346B0056D137 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 275D2B5D0C5032E50056D137 /* WcalcService.m */; name = "WcalcService.m: 46"; rLen = 0; rLoc = 2222; rType = 0; vrLen = 1138; vrLoc = 129; }; 275D2CC00C5137330056D137 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5A165F7030711ED01A80164 /* ConversionList.h */; name = "ConversionList.h: 14"; rLen = 0; rLoc = 383; rType = 0; vrLen = 384; vrLoc = 0; }; 275D2D690C5144DD0056D137 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 275D2B5C0C5032E50056D137 /* WcalcService.h */; name = "WcalcService.h: historyList"; rLen = 0; rLoc = 315; rType = 0; vrLen = 324; vrLoc = 0; }; 275D2DA60C5148550056D137 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 275D2B5D0C5032E50056D137 /* WcalcService.m */; name = "WcalcService.m: 30"; rLen = 0; rLoc = 794; rType = 0; vrLen = 1105; vrLoc = 391; }; 2767136C0EBB886E0081DD3A /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7801F7395001A80164 /* WcalcController.m */; name = "WcalcController.m: 1165"; rLen = 0; rLoc = 39971; rType = 0; vrLen = 2615; vrLoc = 38445; }; 276713750EBB895B0081DD3A /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7801F7395001A80164 /* WcalcController.m */; name = "WcalcController.m: 1165"; rLen = 0; rLoc = 39971; rType = 0; vrLen = 2615; vrLoc = 38445; }; 276713760EBB89930081DD3A /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7801F7395001A80164 /* WcalcController.m */; name = "WcalcController.m: 1165"; rLen = 0; rLoc = 39971; rType = 0; vrLen = 2615; vrLoc = 38445; }; 2767137B0EBB89E30081DD3A /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7801F7395001A80164 /* WcalcController.m */; name = "WcalcController.m: 1165"; rLen = 0; rLoc = 39971; rType = 0; vrLen = 2615; vrLoc = 38445; }; 2767137C0EBB8A270081DD3A /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7801F7395001A80164 /* WcalcController.m */; name = "WcalcController.m: 1165"; rLen = 0; rLoc = 39971; rType = 0; vrLen = 2615; vrLoc = 38445; }; 2767137D0EBB8AB80081DD3A /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7801F7395001A80164 /* WcalcController.m */; name = "WcalcController.m: 1165"; rLen = 0; rLoc = 39971; rType = 0; vrLen = 2615; vrLoc = 38445; }; 276713BF0EBB9D1F0081DD3A /* PBXBookmark */ = { isa = PBXBookmark; fRef = 2789AAD90EB1772B008DEB99 /* NewWcalc.icns */; }; 276713C00EBB9D1F0081DD3A /* PBXBookmark */ = { isa = PBXBookmark; fRef = 2789AAD90EB1772B008DEB99 /* NewWcalc.icns */; }; 276713CB0EBB9D9C0081DD3A /* PBXBookmark */ = { isa = PBXBookmark; fRef = 2789AAD90EB1772B008DEB99 /* NewWcalc.icns */; }; 276713CF0EBB9FCA0081DD3A /* PBXBookmark */ = { isa = PBXBookmark; fRef = 2789AAD90EB1772B008DEB99 /* NewWcalc.icns */; }; 276713D60EBBA1B70081DD3A /* PBXBookmark */ = { isa = PBXBookmark; fRef = 2789AAD90EB1772B008DEB99 /* NewWcalc.icns */; }; 276713DE0EBBA4970081DD3A /* PBXBookmark */ = { isa = PBXBookmark; fRef = 2789AAD90EB1772B008DEB99 /* NewWcalc.icns */; }; 276713DF0EBBA4970081DD3A /* PBXBookmark */ = { isa = PBXBookmark; fRef = F5B29D6501F7391601A80164 /* calculator.c */; }; 276713E00EBBA4970081DD3A /* PBXBookmark */ = { isa = PBXBookmark; fRef = 2789AAD90EB1772B008DEB99 /* NewWcalc.icns */; }; 276713E10EBBA4970081DD3A /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6501F7391601A80164 /* calculator.c */; name = "calculator.c: 518"; rLen = 0; rLoc = 12848; rType = 0; vrLen = 834; vrLoc = 12507; }; 276713EA0EBBA5980081DD3A /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6501F7391601A80164 /* calculator.c */; name = "calculator.c: 518"; rLen = 0; rLoc = 12848; rType = 0; vrLen = 821; vrLoc = 12507; }; 276C7002091D1AB7005A5B75 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6E01F7393A01A80164 /* scanner.l */; name = "scanner.l: 333"; rLen = 0; rLoc = 12226; rType = 0; vrLen = 958; vrLoc = 11505; }; 2773DCF40917EF3400DBDA9D /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 272C375F08C3FDAF009EA18F /* number_formatting.h */; name = "number_formatting.h: 8"; rLen = 0; rLoc = 164; rType = 0; vrLen = 164; vrLoc = 0; }; 2773DCF80917EF3400DBDA9D /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 272C375F08C3FDAF009EA18F /* number_formatting.h */; name = "number_formatting.h: 8"; rLen = 0; rLoc = 164; rType = 0; vrLen = 164; vrLoc = 0; }; 2773DD3209180D4300DBDA9D /* wcalc */ = { activeExec = 0; executables = ( 2773DD5009180D4300DBDA9D /* wcalc */, ); }; 2773DD5009180D4300DBDA9D /* wcalc */ = { isa = PBXExecutable; activeArgIndices = ( ); argumentStrings = ( ); autoAttachOnCrash = 1; breakpointsEnabled = 1; configStateDict = { }; customDataFormattersEnabled = 1; debuggerPlugin = GDBDebugging; disassemblyDisplayState = 0; dylibVariantSuffix = ""; enableDebugStr = 1; environmentEntries = ( ); executableSystemSymbolLevel = 0; executableUserSymbolLevel = 0; libgmallocEnabled = 0; name = wcalc; savedGlobals = { }; sourceDirectories = ( ); }; 277DB27D042F5173004ACA36 /* COPYING */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {487, 4774}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {487, 261}}"; }; }; 277DB27F042F51A5004ACA36 /* NEWS */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {704, 4578}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {621, 417}}"; }; }; 278131A50C7CDB3B00EF848E /* WcalcController.m:606 */ = { isa = PBXFileBreakpoint; actions = ( ); breakpointStyle = 0; continueAfterActions = 0; countType = 0; delayBeforeContinue = 0; fileReference = F5B29D7801F7395001A80164 /* WcalcController.m */; functionName = "-enterData:"; hitCount = 0; ignoreCount = 0; lineNumber = 606; location = Wcalc; modificationTime = 247178637.581654; state = 1; }; 278132170C7CF38500EF848E /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6A01F7392301A80164 /* ErrorController.m */; name = "ErrorController.m: 1"; rLen = 0; rLoc = 8; rType = 0; vrLen = 570; vrLoc = 0; }; 2781321D0C7CF3D300EF848E /* simpleCalc.c:45 */ = { isa = PBXFileBreakpoint; actions = ( ); breakpointStyle = 0; continueAfterActions = 0; countType = 0; delayBeforeContinue = 0; fileReference = 27BDF4C4059F712100CF1DF6 /* simpleCalc.c */; functionName = "simpleCalc()"; hitCount = 0; ignoreCount = 0; lineNumber = 45; location = Wcalc; modificationTime = 247178637.58166; state = 1; }; 278132280C7CF5DF00EF848E /* MyTextField.m:113 */ = { isa = PBXFileBreakpoint; actions = ( ); breakpointStyle = 0; continueAfterActions = 0; countType = 0; delayBeforeContinue = 0; fileReference = F5D446D10263B46801A80164 /* MyTextField.m */; functionName = "-keyUp:"; hitCount = 0; ignoreCount = 0; lineNumber = 113; location = Wcalc; modificationTime = 247178637.581666; state = 1; }; 2781326D0C7E07BB00EF848E /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 27BDF4C4059F712100CF1DF6 /* simpleCalc.c */; name = "simpleCalc.c: 110"; rLen = 0; rLoc = 2976; rType = 0; vrLen = 1208; vrLoc = 811; }; 2789AAE40EB178B0008DEB99 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5D446D10263B46801A80164 /* MyTextField.m */; name = "MyTextField.m: 124"; rLen = 0; rLoc = 3141; rType = 0; vrLen = 928; vrLoc = 2323; }; 2789AAE60EB178B0008DEB99 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 2789AAE70EB178B0008DEB99 /* gmp.h */; name = "gmp.h: 1607"; rLen = 2; rLoc = 61886; rType = 0; vrLen = 1766; vrLoc = 61000; }; 2789AAE70EB178B0008DEB99 /* gmp.h */ = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gmp.h; path = /opt/local/include/gmp.h; sourceTree = ""; }; 2789AAE90EB178B0008DEB99 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 089C165DFE840E0CC02AAC07 /* English */; name = "InfoPlist.strings: 7"; rLen = 0; rLoc = 258; rType = 0; vrLen = 258; vrLoc = 0; }; 2789AAEA0EB178B0008DEB99 /* PBXBookmark */ = { isa = PBXBookmark; fRef = 2789AAD90EB1772B008DEB99 /* NewWcalc.icns */; }; 2789AAEE0EB178B0008DEB99 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 2789AAEF0EB178B0008DEB99 /* gmp.h */; name = "gmp.h: 1607"; rLen = 2; rLoc = 61886; rType = 0; vrLen = 1766; vrLoc = 61000; }; 2789AAEF0EB178B0008DEB99 /* gmp.h */ = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = gmp.h; path = /opt/local/include/gmp.h; sourceTree = ""; }; 2789AAF30EB178B0008DEB99 /* PBXBookmark */ = { isa = PBXBookmark; fRef = 2789AAD90EB1772B008DEB99 /* NewWcalc.icns */; }; 2789AB560EB18869008DEB99 /* WcalcController.m:919 */ = { isa = PBXFileBreakpoint; actions = ( ); breakpointStyle = 0; continueAfterActions = 0; countType = 0; delayBeforeContinue = 0; fileReference = F5B29D7801F7395001A80164 /* WcalcController.m */; functionName = "-setPrefs:"; hitCount = 0; ignoreCount = 0; lineNumber = 919; location = Wcalc; modificationTime = 247178637.581677; state = 2; }; 2789AB640EB18A8E008DEB99 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D6501F7391601A80164 /* calculator.c */; name = "calculator.c: 943"; rLen = 0; rLoc = 23210; rType = 0; vrLen = 1089; vrLoc = 12179; }; 2789AB6D0EB18E9F008DEB99 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 2729A40109B1ECE5001F07F4 /* add_commas.c */; name = "add_commas.c: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1111; vrLoc = 0; }; 2789AB6E0EB18E9F008DEB99 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 2729A40109B1ECE5001F07F4 /* add_commas.c */; name = "add_commas.c: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 1111; vrLoc = 0; }; 2798434D0E084DE100CE1ED5 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 2704376B0C4584640024DB8D /* number.h */; name = "number.h: 19"; rLen = 17; rLoc = 311; rType = 0; vrLen = 921; vrLoc = 0; }; 279843660E08515400CE1ED5 /* scanner.yy.c */ = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = scanner.yy.c; path = "/Users/kyle/Wcalc_Development/Wcalc/build/Wcalc.build/Deployment 10.3.9/Wcalc.app.build/DerivedSources/scanner.yy.c"; sourceTree = ""; }; 2798437B0E0851D500CE1ED5 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 279843660E08515400CE1ED5 /* scanner.yy.c */; name = "scanner.yy.c: 3634"; rLen = 68; rLoc = 133960; rType = 0; vrLen = 870; vrLoc = 133325; }; 2798437D0E0851D500CE1ED5 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 279843660E08515400CE1ED5 /* scanner.yy.c */; name = "scanner.yy.c: 3634"; rLen = 68; rLoc = 133960; rType = 0; vrLen = 870; vrLoc = 133325; }; 2799DA4403FAD61400CA71DD /* help.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {774, 1834}}"; sepNavSelRange = "{335, 121}"; sepNavVisRange = "{0, 1156}"; sepNavVisRect = "{{0, 679}, {705, 449}}"; sepNavWindowFrame = "{{15, 183}, {750, 558}}"; }; }; 279AB4210D5CDB02002AFBEA /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5DD321702F8F43501A80164 /* conversion.h */; name = "ssize_t identify_unit(const char *unit);"; rLen = 41; rLoc = 417; rType = 0; vrLen = 564; vrLoc = 81; }; 27B38FB5085A077900C2FE3C /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7801F7395001A80164 /* WcalcController.m */; name = "WcalcController.m: 876"; rLen = 0; rLoc = 36682; rType = 0; vrLen = 1790; vrLoc = 25728; }; 27B4AFFD09C1EE4F00EE3874 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F574E09A01FD0FD701A80164 /* HistoryList.m */; name = "HistoryList.m: 50"; rLen = 0; rLoc = 1141; rType = 0; vrLen = 1353; vrLoc = 594; }; 27BDF4C4059F712100CF1DF6 /* simpleCalc.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {536, 2128}}"; sepNavSelRange = "{1065, 0}"; sepNavVisRect = "{{0, 299}, {480, 648}}"; }; }; 27BDF4C5059F712100CF1DF6 /* simpleCalc.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {742, 154}}"; sepNavSelRange = "{85, 0}"; sepNavVisRect = "{{0, 0}, {742, 154}}"; }; }; 27C1F2E80A61AF0C0072F397 /* WcalcController.m:747 */ = { isa = PBXFileBreakpoint; actions = ( ); breakpointStyle = 0; continueAfterActions = 0; countType = 0; delayBeforeContinue = 0; fileReference = F5B29D7801F7395001A80164 /* WcalcController.m */; functionName = "-setPrefs:"; hitCount = 0; ignoreCount = 0; lineNumber = 747; location = Wcalc; modificationTime = 247178637.581634; state = 1; }; 27C1F3530A622C980072F397 /* ThrottledSlider.m */ = { isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ThrottledSlider.m; path = /Users/kyle/Wcalc_Development/Wcalc/ThrottledSlider.m; sourceTree = ""; }; 27C1F3590A622F000072F397 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 2729A53609B256DA001F07F4 /* PersVarList.h */; name = "PersVarList.h: theWindow"; rLen = 0; rLoc = 164; rType = 0; vrLen = 302; vrLoc = 0; }; 27C1F3810A6232230072F397 /* ThrottledSlider.m:13 */ = { isa = PBXFileBreakpoint; actions = ( ); breakpointStyle = 0; continueAfterActions = 0; countType = 0; delayBeforeContinue = 0; fileReference = 27C1F3530A622C980072F397 /* ThrottledSlider.m */; functionName = "-sendAction:to:"; hitCount = 0; ignoreCount = 0; lineNumber = 13; modificationTime = 247178639.728423; state = 0; }; 27C40A7809B5DA910043C42F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 2729A53709B256DA001F07F4 /* PersVarList.m */; name = "PersVarList.m: 152"; rLen = 468; rLoc = 3677; rType = 0; vrLen = 1255; vrLoc = 3312; }; 27C40AAF09B5E58B0043C42F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F521994801FA927601A80164 /* ChangeLog */; name = "ChangeLog: 1824"; rLen = 0; rLoc = 43050; rType = 0; vrLen = 538; vrLoc = 0; }; 27C40B6709B623D00043C42F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F574E09901FD0FD701A80164 /* HistoryList.h */; name = "HistoryList.h: copyMe:"; rLen = 0; rLoc = 415; rType = 0; vrLen = 451; vrLoc = 0; }; 27C40B8909B626690043C42F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F521994301FA86B001A80164 /* VariableList.m */; name = "VariableList.m: 124"; rLen = 0; rLoc = 3398; rType = 0; vrLen = 1043; vrLoc = 2592; }; 27C40BBB09B628F50043C42F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F521994601FA8EC401A80164 /* VariableList.h */; name = "- (IBAction)copyMe:(id)sender;"; rLen = 31; rLoc = 537; rType = 0; vrLen = 573; vrLoc = 0; }; 27D39127059BEA850035F25F /* Wcalc.app */ = { activeExec = 0; executables = ( 27D3915B059BEA860035F25F /* Wcalc.app */, ); }; 27D3915B059BEA860035F25F /* Wcalc.app */ = { isa = PBXExecutable; activeArgIndices = ( ); argumentStrings = ( ); autoAttachOnCrash = 1; breakpointsEnabled = 1; configStateDict = { }; customDataFormattersEnabled = 1; debuggerPlugin = GDBDebugging; disassemblyDisplayState = 0; dylibVariantSuffix = ""; enableDebugStr = 1; environmentEntries = ( ); executableSystemSymbolLevel = 0; executableUserSymbolLevel = 0; libgmallocEnabled = 0; name = Wcalc.app; savedGlobals = { }; sourceDirectories = ( ); variableFormatDictionary = { }; }; 27DA4EAE0521141D00F8327E /* Source Control */ = { isa = PBXSourceControlManager; fallbackIsa = XCSourceControlManager; isSCMEnabled = 0; scmConfiguration = { repositoryName = "Wcalc-sf"; }; scmType = scm.cvs; }; 27DA4EAF0521141D00F8327E /* Code sense */ = { isa = PBXCodeSenseManager; indexTemplatePath = ""; }; 27E050E50918749700928DC2 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F574E09D01FD122F01A80164 /* historyManager.h */; name = "historyManager.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 397; vrLoc = 0; }; 27E050E60918749700928DC2 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F574E09D01FD122F01A80164 /* historyManager.h */; name = "historyManager.h: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 397; vrLoc = 0; }; 27EC73FD0992B6BB0097E39E /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5B29D7301F7394501A80164 /* variables.c */; name = "variables.c: 259"; rLen = 0; rLoc = 6125; rType = 0; vrLen = 863; vrLoc = 2475; }; 27EC73FE0992B6BB0097E39E /* PBXBookmark */ = { isa = PBXBookmark; fRef = F5B29D8301F73C2701A80164 /* w.png */; }; 27FAECD6093FAA8400D7EE3E /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5EF54D302022A7001A80164 /* theDelegate.h */; name = "theDelegate.h: 3"; rLen = 0; rLoc = 27; rType = 0; vrLen = 200; vrLoc = 0; }; 27FAECD7093FAA8400D7EE3E /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = F5EF54D202022A7001A80164 /* theDelegate.m */; name = "theDelegate.m: 1"; rLen = 0; rLoc = 8; rType = 0; vrLen = 155; vrLoc = 0; }; 27FAECF0093FAE5A00D7EE3E /* InspectorController.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {642, 609}}"; sepNavSelRange = "{225, 0}"; sepNavVisRect = "{{0, 0}, {642, 609}}"; }; }; 27FAECF1093FAE5A00D7EE3E /* InspectorController.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {902, 616}}"; sepNavSelRange = "{1173, 0}"; sepNavVisRect = "{{0, 330}, {642, 286}}"; }; }; 27FAED01093FAF2400D7EE3E /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 27FAECF1093FAE5A00D7EE3E /* InspectorController.m */; name = "InspectorController.m: 1"; rLen = 0; rLoc = 0; rType = 0; vrLen = 146; vrLoc = 0; }; 27FAED1B093FB0BB00D7EE3E /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 27FAECF0093FAE5A00D7EE3E /* InspectorController.h */; name = "InspectorController.h: 13"; rLen = 0; rLoc = 395; rType = 0; vrLen = 239; vrLoc = 0; }; 29B97313FDCFA39411CA2CEA /* Project object */ = { activeArchitecturePreference = i386; activeBuildConfigurationName = "Deployment Universal"; activeExecutable = 27D3915B059BEA860035F25F /* Wcalc.app */; activeTarget = 27D39127059BEA850035F25F /* Wcalc.app */; addToTargets = ( 2773DD3209180D4300DBDA9D /* wcalc */, 27D39127059BEA850035F25F /* Wcalc.app */, ); breakpoints = ( 27C1F2E80A61AF0C0072F397 /* WcalcController.m:747 */, 27C1F3810A6232230072F397 /* ThrottledSlider.m:13 */, 278131A50C7CDB3B00EF848E /* WcalcController.m:606 */, 2781321D0C7CF3D300EF848E /* simpleCalc.c:45 */, 278132280C7CF5DF00EF848E /* MyTextField.m:113 */, 272C359B08C1557A009EA18F /* WcalcController.m:430 */, 2789AB560EB18869008DEB99 /* WcalcController.m:919 */, ); codeSenseManager = 27DA4EAF0521141D00F8327E /* Code sense */; executables = ( 27D3915B059BEA860035F25F /* Wcalc.app */, 2773DD5009180D4300DBDA9D /* wcalc */, ); expressions = ( "[sender tag]", ); perUserDictionary = { "PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID; PBXFileTableDataSourceColumnWidthsKey = ( 20, 20, 210, 20, 110, 109, 20, ); PBXFileTableDataSourceColumnsKey = ( PBXBreakpointsDataSource_ActionID, PBXBreakpointsDataSource_TypeID, PBXBreakpointsDataSource_BreakpointID, PBXBreakpointsDataSource_UseID, PBXBreakpointsDataSource_LocationID, PBXBreakpointsDataSource_ConditionID, PBXBreakpointsDataSource_ContinueID, ); }; PBXConfiguration.PBXFileTableDataSource3.PBXBookmarksDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXBookmarksDataSource_NameID; PBXFileTableDataSourceColumnWidthsKey = ( 200, 200, 376.58349609375, ); PBXFileTableDataSourceColumnsKey = ( PBXBookmarksDataSource_LocationID, PBXBookmarksDataSource_NameID, PBXBookmarksDataSource_CommentsID, ); }; PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID; PBXFileTableDataSourceColumnWidthsKey = ( 20, 295.8799, 170.2085, ); PBXFileTableDataSourceColumnsKey = ( PBXErrorsWarningsDataSource_TypeID, PBXErrorsWarningsDataSource_MessageID, PBXErrorsWarningsDataSource_LocationID, ); }; PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; PBXFileTableDataSourceColumnWidthsKey = ( 22, 300, 454.58349609375, ); PBXFileTableDataSourceColumnsKey = ( PBXExecutablesDataSource_ActiveFlagID, PBXExecutablesDataSource_NameID, PBXExecutablesDataSource_CommentsID, ); }; PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, 445, 20, 53, 43, 43, 20, ); PBXFileTableDataSourceColumnsKey = ( PBXFileDataSource_FiletypeID, PBXFileDataSource_Filename_ColumnID, PBXFileDataSource_Built_ColumnID, PBXFileDataSource_ObjectSize_ColumnID, PBXFileDataSource_Errors_ColumnID, PBXFileDataSource_Warnings_ColumnID, PBXFileDataSource_Target_ColumnID, ); }; PBXConfiguration.PBXFileTableDataSource3.PBXSymbolsDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXSymbolsDataSource_SymbolNameID; PBXFileTableDataSourceColumnWidthsKey = ( 16, 200, 50, 200, ); PBXFileTableDataSourceColumnsKey = ( PBXSymbolsDataSource_SymbolTypeIconID, PBXSymbolsDataSource_SymbolNameID, PBXSymbolsDataSource_SymbolTypeID, PBXSymbolsDataSource_ReferenceNameID, ); }; PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, 404, 60, 20, 54, 43, 43, ); PBXFileTableDataSourceColumnsKey = ( PBXFileDataSource_FiletypeID, PBXFileDataSource_Filename_ColumnID, PBXTargetDataSource_PrimaryAttribute, PBXFileDataSource_Built_ColumnID, PBXFileDataSource_ObjectSize_ColumnID, PBXFileDataSource_Errors_ColumnID, PBXFileDataSource_Warnings_ColumnID, ); }; PBXPerProjectTemplateStateSaveDate = 247176163; PBXPrepackagedSmartGroups_v2 = ( { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; activationKey = OldTargetSmartGroup; clz = PBXTargetSmartGroup; description = "Displays all targets of the project."; globalID = 1C37FABC04509CD000000102; name = Targets; preferences = { image = Targets; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXTargetSmartGroup2; description = "Displays all targets of the project as well as nested build phases."; globalID = 1C37FBAC04509CD000000102; name = Targets; preferences = { image = Targets; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXExecutablesSmartGroup; description = "Displays all executables of the project."; globalID = 1C37FAAC04509CD000000102; name = Executables; preferences = { image = Executable; }; }, { " PBXTransientLocationAtTop " = bottom; absolutePathToBundle = ""; clz = PBXErrorsWarningsSmartGroup; description = "Displays files with errors or warnings."; globalID = 1C08E77C0454961000C914BD; name = "Errors and Warnings"; preferences = { fnmatch = ""; image = WarningsErrors; recursive = 1; regex = ""; root = ""; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXFilenameSmartGroup; description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter."; globalID = 1CC0EA4004350EF90044410B; name = "Implementation Files"; preferences = { canSave = 1; fnmatch = ""; image = SmartFolder; isLeaf = 0; recursive = 1; regex = "?*\\.[mcMC]"; root = ""; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXFilenameSmartGroup; description = "This group displays Interface Builder NIB Files."; globalID = 1CC0EA4004350EF90041110B; name = "NIB Files"; preferences = { canSave = 1; fnmatch = "*.nib"; image = SmartFolder; isLeaf = 0; recursive = 1; regex = ""; root = ""; }; }, { PBXTransientLocationAtTop = no; absolutePathToBundle = ""; clz = PBXFindSmartGroup; description = "Displays Find Results."; globalID = 1C37FABC05509CD000000102; name = "Find Results"; preferences = { image = spyglass; }; }, { PBXTransientLocationAtTop = no; absolutePathToBundle = ""; clz = PBXBookmarksSmartGroup; description = "Displays Project Bookmarks."; globalID = 1C37FABC05539CD112110102; name = Bookmarks; preferences = { image = Bookmarks; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = XCSCMSmartGroup; description = "Displays files with interesting SCM status."; globalID = E2644B35053B69B200211256; name = SCM; preferences = { image = PBXRepository; isLeaf = 0; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXSymbolsSmartGroup; description = "Displays all symbols for the project."; globalID = 1C37FABC04509CD000100104; name = "Project Symbols"; preferences = { image = ProjectSymbols; isLeaf = 1; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXFilenameSmartGroup; description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter."; globalID = PBXTemplateMarker; name = "Simple Filter SmartGroup"; preferences = { canSave = 1; fnmatch = "*.nib"; image = SmartFolder; isLeaf = 0; recursive = 1; regex = ""; root = ""; }; }, { PBXTransientLocationAtTop = bottom; absolutePathToBundle = ""; clz = PBXFilenameSmartGroup; description = "Filters items in a given group (potentially recursively) based on matching the name with the regular expression of the filter."; globalID = PBXTemplateMarker; name = "Simple Regular Expression SmartGroup"; preferences = { canSave = 1; fnmatch = ""; image = SmartFolder; isLeaf = 0; recursive = 1; regex = "?*\\.[mcMC]"; root = ""; }; }, ); PBXWorkspaceContents = ( { PBXProjectWorkspaceModule_StateKey_Rev39 = { PBXProjectWorkspaceModule_DEGV_Geometry = { _collapsingFrameDimension = 0; _indexOfCollapsedView = 0; _percentageOfCollapsedView = 0; isCollapsed = yes; sizes = ( "{{0, 0}, {513, 116}}", "{{0, 116}, {513, 421}}", ); }; PBXProjectWorkspaceModule_DataSourceSelectionKey_Rev6 = { BoundsStr = "{{0, 0}, {498, 690}}"; Rows = ( 0, ); VisibleRectStr = "{{0, 0}, {498, 99}}"; }; PBXProjectWorkspaceModule_EditorOpen = true; PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = { PBXSplitModuleInNavigatorKey = { Split0 = { bookmark = 277C267905A234BA00BF1623; history = ( 2711C66D059CCD3A00548DB5, 27BDF440059EC0BB00CF1DF6, 27BDF49F059EC32400CF1DF6, 27EF1EBE059F763500381F74, 27EF1ECA059F776A00381F74, 27EF1EDB059F77C300381F74, 27EF1EF6059F783B00381F74, 27EF1F1105A003DD00381F74, 27EF1F1A05A011F900381F74, 277C260005A08F6500BF1623, 277C260805A0912B00BF1623, 277C261805A091FD00BF1623, 277C262905A0D68E00BF1623, 277C263605A0D6D500BF1623, 277C263B05A0D6D700BF1623, 277C264A05A0D6E200BF1623, 277C264F05A0DADE00BF1623, 277C265705A0DD5F00BF1623, 277C267305A0E66300BF1623, 277C263105A0D6AB00BF1623, ); prevStack = ( 2711C66A059CCD2500548DB5, 2711C66F059CCD3A00548DB5, 2711C674059E9FC800548DB5, 2711C678059E9FDA00548DB5, 27BDF405059EBE2400CF1DF6, 27BDF438059EC09800CF1DF6, 27BDF4A1059EC32400CF1DF6, 27EF1EAD059F75CE00381F74, 27EF1EC0059F763500381F74, 27EF1ECC059F776A00381F74, 27EF1EF8059F783B00381F74, 277C25FD05A08F6000BF1623, 277C260205A08F6500BF1623, 277C260905A0912B00BF1623, 277C261505A091F900BF1623, 277C261905A091FD00BF1623, 277C262B05A0D68E00BF1623, 277C263305A0D6AB00BF1623, 277C263805A0D6D500BF1623, 277C263D05A0D6D700BF1623, 277C264205A0D6DA00BF1623, 277C264705A0D6DE00BF1623, 277C264C05A0D6E200BF1623, 277C265005A0DADE00BF1623, 277C265405A0DD5D00BF1623, 277C265805A0DD5F00BF1623, 277C267405A0E66300BF1623, ); }; SplitCount = 1; }; }; PBXProjectWorkspaceModule_GeometryKey_Rev15 = { PBXProjectWorkspaceModule_SGTM_Geometry = { _collapsingFrameDimension = 0; _indexOfCollapsedView = 0; _percentageOfCollapsedView = 0; sizes = ( "{{0, 0}, {217, 537}}", "{{217, 0}, {513, 537}}", ); }; }; PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {513, 116}}"; PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 116}, {513, 421}}"; PBXProjectWorkspaceModule_OldSuperviewFrame = "{{217, 0}, {513, 537}}"; PBXProjectWorkspaceModule_SGTM = { PBXBottomSmartGroupGIDs = ( 1C37FBAC04509CD000000102, 1C37FAAC04509CD000000102, 1C08E77C0454961000C914BD, 1CC0EA4004350EF90044410B, 1CC0EA4004350EF90041110B, 1C37FABC05509CD000000102, 1C37FABC05539CD112110102, E2644B35053B69B200211256, 1C37FABC04509CD000100104, ); PBXSmartGroupTreeModuleColumnData = { PBXSmartGroupTreeModuleColumnWidthsKey = ( 200, ); PBXSmartGroupTreeModuleColumnsKey_v4 = ( MainColumn, ); }; PBXSmartGroupTreeModuleOutlineStateKey_v7 = { PBXSmartGroupTreeModuleOutlineStateExpansionKey = ( 1C37FBAC04509CD000000102, ); PBXSmartGroupTreeModuleOutlineStateSelectionKey = ( ( 4, 1, ), ); PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 0}, {200, 519}}"; }; PBXTopSmartGroupGIDs = ( ); }; }; }, ); "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXBuildResultsModule" = { }; "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXCVSModule" = { }; "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugCLIModule" = { }; "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXDebugSessionModule" = { Debugger = { HorizontalSplitView = { _collapsingFrameDimension = 0; _indexOfCollapsedView = 0; _percentageOfCollapsedView = 0; isCollapsed = yes; sizes = ( "{{0, 0}, {283, 206}}", "{{283, 0}, {462, 206}}", ); }; VerticalSplitView = { _collapsingFrameDimension = 0; _indexOfCollapsedView = 0; _percentageOfCollapsedView = 0; isCollapsed = yes; sizes = ( "{{0, 0}, {745, 206}}", "{{0, 206}, {745, 216}}", ); }; }; LauncherConfigVersion = 8; }; "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXNavigatorGroup" = { PBXSplitModuleInNavigatorKey = { SplitCount = 1; }; }; "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = { PBXProjectWorkspaceModule_StateKey_Rev39 = { PBXProjectWorkspaceModule_DEGV_Geometry = { _collapsingFrameDimension = 0; _indexOfCollapsedView = 0; _percentageOfCollapsedView = 0; isCollapsed = yes; sizes = ( "{{0, 0}, {513, 116}}", "{{0, 116}, {513, 421}}", ); }; PBXProjectWorkspaceModule_DataSourceSelectionKey_Rev6 = { BoundsStr = "{{0, 0}, {498, 99}}"; Rows = ( 0, ); VisibleRectStr = "{{0, 0}, {498, 99}}"; }; PBXProjectWorkspaceModule_EditorOpen = true; PBXProjectWorkspaceModule_EmbeddedNavigatorGroup = { PBXSplitModuleInNavigatorKey = { Split0 = { bookmark = 277C265D05A0DD7600BF1623; history = ( 2711C66D059CCD3A00548DB5, 27BDF440059EC0BB00CF1DF6, 27BDF49F059EC32400CF1DF6, 27EF1EBE059F763500381F74, 27EF1ECA059F776A00381F74, 27EF1EDB059F77C300381F74, 27EF1EF6059F783B00381F74, 27EF1F1105A003DD00381F74, 27EF1F1A05A011F900381F74, 277C260005A08F6500BF1623, 277C260805A0912B00BF1623, 277C261805A091FD00BF1623, 277C262905A0D68E00BF1623, 277C263105A0D6AB00BF1623, 277C263605A0D6D500BF1623, 277C263B05A0D6D700BF1623, 277C264A05A0D6E200BF1623, 277C264F05A0DADE00BF1623, 277C265705A0DD5F00BF1623, 277C265305A0DD5D00BF1623, ); prevStack = ( 2711C66A059CCD2500548DB5, 2711C66F059CCD3A00548DB5, 2711C674059E9FC800548DB5, 2711C678059E9FDA00548DB5, 27BDF405059EBE2400CF1DF6, 27BDF438059EC09800CF1DF6, 27BDF4A1059EC32400CF1DF6, 27EF1EAD059F75CE00381F74, 27EF1EC0059F763500381F74, 27EF1ECC059F776A00381F74, 27EF1EF8059F783B00381F74, 277C25FD05A08F6000BF1623, 277C260205A08F6500BF1623, 277C260905A0912B00BF1623, 277C261505A091F900BF1623, 277C261905A091FD00BF1623, 277C262B05A0D68E00BF1623, 277C263305A0D6AB00BF1623, 277C263805A0D6D500BF1623, 277C263D05A0D6D700BF1623, 277C264205A0D6DA00BF1623, 277C264705A0D6DE00BF1623, 277C264C05A0D6E200BF1623, 277C265005A0DADE00BF1623, 277C265405A0DD5D00BF1623, 277C265805A0DD5F00BF1623, ); }; SplitCount = 1; }; }; PBXProjectWorkspaceModule_GeometryKey_Rev15 = { PBXProjectWorkspaceModule_SGTM_Geometry = { _collapsingFrameDimension = 0; _indexOfCollapsedView = 0; _percentageOfCollapsedView = 0; sizes = ( "{{0, 0}, {217, 537}}", "{{217, 0}, {513, 537}}", ); }; }; PBXProjectWorkspaceModule_OldDetailFrame = "{{0, 0}, {513, 116}}"; PBXProjectWorkspaceModule_OldEditorFrame = "{{0, 116}, {513, 421}}"; PBXProjectWorkspaceModule_OldSuperviewFrame = "{{217, 0}, {513, 537}}"; PBXProjectWorkspaceModule_SGTM = { PBXBottomSmartGroupGIDs = ( 1C37FBAC04509CD000000102, 1C37FAAC04509CD000000102, 1C08E77C0454961000C914BD, 1CC0EA4004350EF90044410B, 1CC0EA4004350EF90041110B, 1C37FABC05509CD000000102, 1C37FABC05539CD112110102, E2644B35053B69B200211256, 1C37FABC04509CD000100104, ); PBXSmartGroupTreeModuleColumnData = { PBXSmartGroupTreeModuleColumnWidthsKey = ( 200, ); PBXSmartGroupTreeModuleColumnsKey_v4 = ( MainColumn, ); }; PBXSmartGroupTreeModuleOutlineStateKey_v7 = { PBXSmartGroupTreeModuleOutlineStateExpansionKey = ( 29B97314FDCFA39411CA2CEA, 080E96DDFE201D6D7F000001, 29B97317FDCFA39411CA2CEA, 1C08E77C0454961000C914BD, ); PBXSmartGroupTreeModuleOutlineStateSelectionKey = ( ( 28, 22, 0, ), ); PBXSmartGroupTreeModuleOutlineStateVisibleRectKey = "{{0, 110}, {200, 519}}"; }; PBXTopSmartGroupGIDs = ( ); }; }; }; "PBXWorkspaceContents:PBXConfiguration.PBXModule.PBXRunSessionModule" = { LauncherConfigVersion = 3; Runner = { HorizontalSplitView = { _collapsingFrameDimension = 0; _indexOfCollapsedView = 0; _percentageOfCollapsedView = 0; isCollapsed = yes; sizes = ( "{{0, 0}, {491, 167}}", "{{0, 176}, {491, 267}}", ); }; VerticalSplitView = { _collapsingFrameDimension = 0; _indexOfCollapsedView = 0; _percentageOfCollapsedView = 0; isCollapsed = yes; sizes = ( "{{0, 0}, {405, 443}}", "{{414, 0}, {514, 443}}", ); }; }; }; PBXWorkspaceGeometries = ( { Frame = "{{0, 0}, {730, 537}}"; PBXProjectWorkspaceModule_GeometryKey_Rev15 = { }; RubberWindowFrame = "356 167 730 579 0 0 1152 746 "; }, ); "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXBuildResultsModule" = { Frame = "{{0, 0}, {570, 346}}"; PBXModuleWindowStatusBarHidden = YES; RubberWindowFrame = "501 123 570 367 0 0 1152 746 "; }; "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXCVSModule" = { Frame = "{{0, 0}, {482, 276}}"; RubberWindowFrame = "671 428 482 318 0 0 1152 746 "; }; "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugCLIModule" = { Frame = "{{0, 0}, {400, 201}}"; PBXModuleWindowStatusBarHidden = YES; RubberWindowFrame = "50 718 400 222 0 0 1152 746 "; }; "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXDebugSessionModule" = { DebugConsoleDrawerSize = "{100, 120}"; DebugConsoleVisible = Drawer; DebugConsoleWindowFrame = "{{200, 200}, {500, 300}}"; DebugSTDIOWindowFrame = "{{200, 200}, {500, 300}}"; Frame = "{{0, 0}, {745, 422}}"; RubberWindowFrame = "307 274 745 464 0 0 1152 746 "; }; "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXNavigatorGroup" = { Frame = "{{0, 0}, {750, 481}}"; PBXModuleWindowStatusBarHidden = YES; RubberWindowFrame = "15 239 750 502 0 0 1152 746 "; }; "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXProjectWorkspaceModule" = { Frame = "{{0, 0}, {730, 537}}"; PBXProjectWorkspaceModule_GeometryKey_Rev15 = { }; RubberWindowFrame = "356 167 730 579 0 0 1152 746 "; }; "PBXWorkspaceGeometries:PBXConfiguration.PBXModule.PBXRunSessionModule" = { Frame = "{{0, 0}, {745, 443}}"; PBXModuleWindowStatusBarHidden = YES; RubberWindowFrame = "455 165 745 464 0 0 1152 746 "; }; PBXWorkspaceStateSaveDate = 247176163; }; perUserProjectItems = { 270437A10C458C830024DB8D = 270437A10C458C830024DB8D /* PBXTextBookmark */; 27085D720EB3D3BE009B43DD = 27085D720EB3D3BE009B43DD /* PBXBookmark */; 27085D7A0EB3D5AE009B43DD = 27085D7A0EB3D5AE009B43DD /* PBXTextBookmark */; 27085D940EB3D881009B43DD = 27085D940EB3D881009B43DD /* PBXTextBookmark */; 27085D990EB40B1B009B43DD = 27085D990EB40B1B009B43DD /* PBXTextBookmark */; 27085DDF0EB41838009B43DD = 27085DDF0EB41838009B43DD /* PBXTextBookmark */; 27085DF90EB418EC009B43DD = 27085DF90EB418EC009B43DD /* PBXTextBookmark */; 27085E7F0EB4FC43009B43DD = 27085E7F0EB4FC43009B43DD /* PBXTextBookmark */; 27085E8F0EB4FE3E009B43DD = 27085E8F0EB4FE3E009B43DD /* PlistBookmark */; 27085E910EB4FE3E009B43DD = 27085E910EB4FE3E009B43DD /* PBXTextBookmark */; 27085EB40EB4FFB8009B43DD = 27085EB40EB4FFB8009B43DD /* PBXTextBookmark */; 27085F2D0EB51634009B43DD = 27085F2D0EB51634009B43DD /* PBXTextBookmark */; 271AB2710EBB881100250C1C = 271AB2710EBB881100250C1C /* PBXTextBookmark */; 271AB2720EBB881100250C1C = 271AB2720EBB881100250C1C /* PBXTextBookmark */; 271AB2730EBB881100250C1C = 271AB2730EBB881100250C1C /* PBXTextBookmark */; 2721CBBA0865FD2800E3BB4D = 2721CBBA0865FD2800E3BB4D /* PBXTextBookmark */; 2721CBC30865FD3C00E3BB4D = 2721CBC30865FD3C00E3BB4D /* PBXTextBookmark */; 2721CBE90865FDFE00E3BB4D = 2721CBE90865FDFE00E3BB4D /* PBXTextBookmark */; 2721CBFF086604FD00E3BB4D = 2721CBFF086604FD00E3BB4D /* PBXTextBookmark */; 2721CC090866055400E3BB4D = 2721CC090866055400E3BB4D /* PBXBookmark */; 2721CC4108660C9200E3BB4D = 2721CC4108660C9200E3BB4D /* PBXTextBookmark */; 2721CC49086652BA00E3BB4D = 2721CC49086652BA00E3BB4D /* PBXTextBookmark */; 2721CD220869C0C400E3BB4D = 2721CD220869C0C400E3BB4D /* PBXBookmark */; 2721CD280869C0C400E3BB4D = 2721CD280869C0C400E3BB4D /* PBXTextBookmark */; 2721CD2B0869C0C400E3BB4D = 2721CD2B0869C0C400E3BB4D /* PBXBookmark */; 2721CD2C0869C0C400E3BB4D = 2721CD2C0869C0C400E3BB4D /* PBXBookmark */; 2721CD2E0869C0C400E3BB4D = 2721CD2E0869C0C400E3BB4D /* PBXTextBookmark */; 2729A45C09B22FE2001F07F4 = 2729A45C09B22FE2001F07F4 /* PBXTextBookmark */; 2729A45D09B22FE2001F07F4 = 2729A45D09B22FE2001F07F4 /* PBXTextBookmark */; 2729A55E09B25AE9001F07F4 = 2729A55E09B25AE9001F07F4 /* PBXTextBookmark */; 2729A55F09B25AE9001F07F4 = 2729A55F09B25AE9001F07F4 /* PBXTextBookmark */; 272C35D908C16738009EA18F = 272C35D908C16738009EA18F /* PBXTextBookmark */; 272C35DD08C16738009EA18F = 272C35DD08C16738009EA18F /* PBXTextBookmark */; 272C35E408C16738009EA18F = 272C35E408C16738009EA18F /* PBXTextBookmark */; 272C35EB08C16738009EA18F = 272C35EB08C16738009EA18F /* PBXTextBookmark */; 272C35ED08C16738009EA18F = 272C35ED08C16738009EA18F /* PBXTextBookmark */; 272C35F008C16738009EA18F = 272C35F008C16738009EA18F /* PBXTextBookmark */; 272C35F308C16738009EA18F = 272C35F308C16738009EA18F /* PBXTextBookmark */; 272C35F608C16738009EA18F = 272C35F608C16738009EA18F /* PBXTextBookmark */; 272C35F708C16738009EA18F = 272C35F708C16738009EA18F /* PBXTextBookmark */; 272C35F908C16738009EA18F = 272C35F908C16738009EA18F /* PBXTextBookmark */; 272C35FB08C16738009EA18F = 272C35FB08C16738009EA18F /* PBXTextBookmark */; 272C35FC08C16738009EA18F = 272C35FC08C16738009EA18F /* PBXTextBookmark */; 272C35FD08C16738009EA18F = 272C35FD08C16738009EA18F /* PBXTextBookmark */; 272C363C08C17E7F009EA18F = 272C363C08C17E7F009EA18F /* PBXTextBookmark */; 272C373F08C21615009EA18F = 272C373F08C21615009EA18F /* PBXTextBookmark */; 272C374508C21615009EA18F = 272C374508C21615009EA18F /* PBXTextBookmark */; 272C374608C21615009EA18F = 272C374608C21615009EA18F /* PBXTextBookmark */; 2736561D094C69B80043391C = 2736561D094C69B80043391C /* PBXTextBookmark */; 27365622094C69B80043391C = 27365622094C69B80043391C /* PBXTextBookmark */; 2754E75508C0D6E1007F45CF = 2754E75508C0D6E1007F45CF /* PBXTextBookmark */; 2754E75608C0D6E1007F45CF = 2754E75608C0D6E1007F45CF /* PBXTextBookmark */; 2754E7E408C0E659007F45CF = 2754E7E408C0E659007F45CF /* PBXTextBookmark */; 2754E7E508C0E659007F45CF = 2754E7E508C0E659007F45CF /* PBXTextBookmark */; 2754E7E708C0E659007F45CF = 2754E7E708C0E659007F45CF /* PBXTextBookmark */; 2754E7E808C0E659007F45CF = 2754E7E808C0E659007F45CF /* PBXTextBookmark */; 2754E80108C0F6E5007F45CF = 2754E80108C0F6E5007F45CF /* PBXTextBookmark */; 2754E81108C10043007F45CF = 2754E81108C10043007F45CF /* PBXTextBookmark */; 2754E81208C10043007F45CF = 2754E81208C10043007F45CF /* PBXTextBookmark */; 2754E81308C10043007F45CF = 2754E81308C10043007F45CF /* PBXTextBookmark */; 2754E81408C10043007F45CF = 2754E81408C10043007F45CF /* PBXTextBookmark */; 2754E81508C10043007F45CF = 2754E81508C10043007F45CF /* PBXTextBookmark */; 2754E81708C10043007F45CF = 2754E81708C10043007F45CF /* PBXTextBookmark */; 2754E8CB08C126B6007F45CF = 2754E8CB08C126B6007F45CF /* PBXTextBookmark */; 275D2B270C4DDA3B0056D137 = 275D2B270C4DDA3B0056D137 /* PBXTextBookmark */; 275D2C930C50346B0056D137 = 275D2C930C50346B0056D137 /* PBXTextBookmark */; 275D2C940C50346B0056D137 = 275D2C940C50346B0056D137 /* PBXTextBookmark */; 275D2CC00C5137330056D137 = 275D2CC00C5137330056D137 /* PBXTextBookmark */; 275D2D690C5144DD0056D137 = 275D2D690C5144DD0056D137 /* PBXTextBookmark */; 275D2DA60C5148550056D137 = 275D2DA60C5148550056D137 /* PBXTextBookmark */; 2767136C0EBB886E0081DD3A = 2767136C0EBB886E0081DD3A /* PBXTextBookmark */; 276713750EBB895B0081DD3A = 276713750EBB895B0081DD3A /* PBXTextBookmark */; 276713760EBB89930081DD3A = 276713760EBB89930081DD3A /* PBXTextBookmark */; 2767137B0EBB89E30081DD3A = 2767137B0EBB89E30081DD3A /* PBXTextBookmark */; 2767137C0EBB8A270081DD3A = 2767137C0EBB8A270081DD3A /* PBXTextBookmark */; 2767137D0EBB8AB80081DD3A = 2767137D0EBB8AB80081DD3A /* PBXTextBookmark */; 276713BF0EBB9D1F0081DD3A /* PBXBookmark */ = 276713BF0EBB9D1F0081DD3A /* PBXBookmark */; 276713C00EBB9D1F0081DD3A /* PBXBookmark */ = 276713C00EBB9D1F0081DD3A /* PBXBookmark */; 276713CB0EBB9D9C0081DD3A /* PBXBookmark */ = 276713CB0EBB9D9C0081DD3A /* PBXBookmark */; 276713CF0EBB9FCA0081DD3A /* PBXBookmark */ = 276713CF0EBB9FCA0081DD3A /* PBXBookmark */; 276713D60EBBA1B70081DD3A /* PBXBookmark */ = 276713D60EBBA1B70081DD3A /* PBXBookmark */; 276713DE0EBBA4970081DD3A /* PBXBookmark */ = 276713DE0EBBA4970081DD3A /* PBXBookmark */; 276713DF0EBBA4970081DD3A /* PBXBookmark */ = 276713DF0EBBA4970081DD3A /* PBXBookmark */; 276713E00EBBA4970081DD3A /* PBXBookmark */ = 276713E00EBBA4970081DD3A /* PBXBookmark */; 276713E10EBBA4970081DD3A /* PBXTextBookmark */ = 276713E10EBBA4970081DD3A /* PBXTextBookmark */; 276713EA0EBBA5980081DD3A /* PBXTextBookmark */ = 276713EA0EBBA5980081DD3A /* PBXTextBookmark */; 276C7002091D1AB7005A5B75 = 276C7002091D1AB7005A5B75 /* PBXTextBookmark */; 2773DCF40917EF3400DBDA9D = 2773DCF40917EF3400DBDA9D /* PBXTextBookmark */; 2773DCF80917EF3400DBDA9D = 2773DCF80917EF3400DBDA9D /* PBXTextBookmark */; 278132170C7CF38500EF848E = 278132170C7CF38500EF848E /* PBXTextBookmark */; 2781326D0C7E07BB00EF848E = 2781326D0C7E07BB00EF848E /* PBXTextBookmark */; 2789AAE40EB178B0008DEB99 = 2789AAE40EB178B0008DEB99 /* PBXTextBookmark */; 2789AAE60EB178B0008DEB99 = 2789AAE60EB178B0008DEB99 /* PBXTextBookmark */; 2789AAE90EB178B0008DEB99 = 2789AAE90EB178B0008DEB99 /* PBXTextBookmark */; 2789AAEA0EB178B0008DEB99 = 2789AAEA0EB178B0008DEB99 /* PBXBookmark */; 2789AAEE0EB178B0008DEB99 = 2789AAEE0EB178B0008DEB99 /* PBXTextBookmark */; 2789AAF30EB178B0008DEB99 = 2789AAF30EB178B0008DEB99 /* PBXBookmark */; 2789AB640EB18A8E008DEB99 = 2789AB640EB18A8E008DEB99 /* PBXTextBookmark */; 2789AB6D0EB18E9F008DEB99 = 2789AB6D0EB18E9F008DEB99 /* PBXTextBookmark */; 2789AB6E0EB18E9F008DEB99 = 2789AB6E0EB18E9F008DEB99 /* PBXTextBookmark */; 2798434D0E084DE100CE1ED5 = 2798434D0E084DE100CE1ED5 /* PBXTextBookmark */; 2798437B0E0851D500CE1ED5 = 2798437B0E0851D500CE1ED5 /* PBXTextBookmark */; 2798437D0E0851D500CE1ED5 = 2798437D0E0851D500CE1ED5 /* PBXTextBookmark */; 279AB4210D5CDB02002AFBEA = 279AB4210D5CDB02002AFBEA /* PBXTextBookmark */; 27B38FB5085A077900C2FE3C = 27B38FB5085A077900C2FE3C /* PBXTextBookmark */; 27B4AFFD09C1EE4F00EE3874 = 27B4AFFD09C1EE4F00EE3874 /* PBXTextBookmark */; 27C1F3590A622F000072F397 = 27C1F3590A622F000072F397 /* PBXTextBookmark */; 27C40A7809B5DA910043C42F = 27C40A7809B5DA910043C42F /* PBXTextBookmark */; 27C40AAF09B5E58B0043C42F = 27C40AAF09B5E58B0043C42F /* PBXTextBookmark */; 27C40B6709B623D00043C42F = 27C40B6709B623D00043C42F /* PBXTextBookmark */; 27C40B8909B626690043C42F = 27C40B8909B626690043C42F /* PBXTextBookmark */; 27C40BBB09B628F50043C42F = 27C40BBB09B628F50043C42F /* PBXTextBookmark */; 27E050E50918749700928DC2 = 27E050E50918749700928DC2 /* PBXTextBookmark */; 27E050E60918749700928DC2 = 27E050E60918749700928DC2 /* PBXTextBookmark */; 27EC73FD0992B6BB0097E39E = 27EC73FD0992B6BB0097E39E /* PBXTextBookmark */; 27EC73FE0992B6BB0097E39E = 27EC73FE0992B6BB0097E39E /* PBXBookmark */; 27FAECD6093FAA8400D7EE3E = 27FAECD6093FAA8400D7EE3E /* PBXTextBookmark */; 27FAECD7093FAA8400D7EE3E = 27FAECD7093FAA8400D7EE3E /* PBXTextBookmark */; 27FAED01093FAF2400D7EE3E = 27FAED01093FAF2400D7EE3E /* PBXTextBookmark */; 27FAED1B093FB0BB00D7EE3E = 27FAED1B093FB0BB00D7EE3E /* PBXTextBookmark */; }; sourceControlManager = 27DA4EAE0521141D00F8327E /* Source Control */; userBuildSettings = { }; }; 29B97316FDCFA39411CA2CEA /* main.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {745, 664}}"; sepNavSelRange = "{0, 0}"; sepNavVisRange = "{0, 816}"; sepNavVisRect = "{{0, 201}, {742, 154}}"; sepNavWindowFrame = "{{15, 671}, {750, 502}}"; }; }; F521993F01F8D2B801A80164 /* main.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {728, 13678}}"; sepNavSelRange = "{10987, 34}"; sepNavVisRange = "{10768, 481}"; sepNavVisRect = "{{0, 1136}, {627, 403}}"; sepNavWindowFrame = "{{848, 248}, {750, 502}}"; }; }; F521994301FA86B001A80164 /* VariableList.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {888, 2000}}"; sepNavSelRange = "{3541, 29}"; sepNavVisRange = "{3642, 8}"; sepNavVisRect = "{{0, 1512}, {742, 154}}"; sepNavWindowFrame = "{{41, 138}, {750, 502}}"; }; }; F521994601FA8EC401A80164 /* VariableList.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {818, 319}}"; sepNavSelRange = "{537, 31}"; sepNavVisRect = "{{0, 0}, {642, 319}}"; sepNavWindowFrame = "{{28, 482}, {750, 502}}"; }; }; F521994801FA927601A80164 /* ChangeLog */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {621, 39074}}"; sepNavSelRange = "{43050, 0}"; sepNavVisRect = "{{0, 0}, {621, 417}}"; sepNavWindowFrame = "{{128, 42}, {750, 558}}"; }; }; F5293926023032E201A80164 /* string_manip.h */ = { uiCtxt = { sepNavWindowFrame = "{{15, 671}, {750, 502}}"; }; }; F5293927023032E201A80164 /* string_manip.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1472, 1582}}"; sepNavSelRange = "{1053, 0}"; sepNavVisRect = "{{0, 734}, {742, 255}}"; }; }; F574E09901FD0FD701A80164 /* HistoryList.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {642, 482}}"; sepNavSelRange = "{415, 0}"; sepNavVisRect = "{{0, 0}, {642, 482}}"; }; }; F574E09A01FD0FD701A80164 /* HistoryList.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {762, 1034}}"; sepNavSelRange = "{1893, 29}"; sepNavVisRange = "{1994, 8}"; sepNavVisRect = "{{0, 616}, {742, 154}}"; sepNavWindowFrame = "{{38, 650}, {750, 502}}"; }; }; F574E09D01FD122F01A80164 /* historyManager.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {627, 429}}"; sepNavSelRange = "{0, 0}"; sepNavVisRect = "{{0, 0}, {627, 429}}"; sepNavWindowFrame = "{{32, 676}, {750, 502}}"; }; }; F574E09E01FD122F01A80164 /* historyManager.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {745, 2422}}"; sepNavSelRange = "{1447, 0}"; sepNavVisRange = "{1319, 1380}"; sepNavVisRect = "{{0, 1192}, {627, 403}}"; }; }; F5A165F7030711ED01A80164 /* ConversionList.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {642, 609}}"; sepNavSelRange = "{383, 0}"; sepNavVisRect = "{{0, 0}, {642, 609}}"; sepNavWindowFrame = "{{38, 549}, {600, 411}}"; }; }; F5A165F8030711ED01A80164 /* ConversionList.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {745, 868}}"; sepNavSelRange = "{1585, 0}"; sepNavVisRange = "{0, 1326}"; sepNavVisRect = "{{0, 0}, {642, 609}}"; sepNavWindowFrame = "{{15, 219}, {778, 762}}"; }; }; F5B29D6101F7391001A80164 /* AboutBoxController.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {745, 664}}"; sepNavSelRange = "{34, 0}"; sepNavVisRange = "{0, 230}"; sepNavVisRect = "{{0, 0}, {642, 417}}"; }; }; F5B29D6201F7391001A80164 /* AboutBoxController.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {745, 664}}"; sepNavSelRange = "{225, 0}"; sepNavVisRange = "{0, 370}"; sepNavVisRect = "{{0, 0}, {627, 429}}"; sepNavWindowFrame = "{{38, 238}, {879, 764}}"; }; }; F5B29D6501F7391601A80164 /* calculator.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {628, 17892}}"; sepNavSelRange = "{12848, 0}"; sepNavVisRange = "{12507, 821}"; sepNavVisRect = "{{0, 9227}, {742, 154}}"; sepNavWindowFrame = "{{61, 141}, {750, 558}}"; }; }; F5B29D6601F7391601A80164 /* calculator.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {745, 2366}}"; sepNavSelRange = "{2268, 0}"; sepNavVisRange = "{1220, 1280}"; sepNavVisRect = "{{0, 168}, {748, 154}}"; sepNavWindowFrame = "{{130, 78}, {750, 558}}"; }; }; F5B29D6901F7392301A80164 /* ErrorController.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {627, 429}}"; sepNavSelRange = "{24, 7}"; sepNavVisRect = "{{0, 0}, {627, 429}}"; sepNavWindowFrame = "{{130, 566}, {750, 502}}"; }; }; F5B29D6A01F7392301A80164 /* ErrorController.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {642, 609}}"; sepNavSelRange = "{8, 0}"; sepNavVisRect = "{{0, 0}, {642, 609}}"; sepNavWindowFrame = "{{244, 609}, {750, 502}}"; }; }; F5B29D6D01F7393A01A80164 /* parser.y */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1454, 9450}}"; sepNavSelRange = "{18119, 0}"; sepNavVisRect = "{{0, 5208}, {742, 154}}"; sepNavWindowFrame = "{{38, 162}, {750, 558}}"; }; }; F5B29D6E01F7393A01A80164 /* scanner.l */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1118, 8036}}"; sepNavSelRange = "{446, 20}"; sepNavVisRect = "{{0, 215}, {742, 256}}"; sepNavWindowFrame = "{{15, 185}, {784, 556}}"; }; }; F5B29D7301F7394501A80164 /* variables.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {621, 3696}}"; sepNavSelRange = "{1440, 11}"; sepNavVisRect = "{{0, 840}, {621, 295}}"; sepNavWindowFrame = "{{917, 182}, {680, 813}}"; }; }; F5B29D7401F7394501A80164 /* variables.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {627, 826}}"; sepNavSelRange = "{197, 0}"; sepNavVisRect = "{{0, 0}, {627, 429}}"; sepNavWindowFrame = "{{37, 546}, {750, 502}}"; }; }; F5B29D7701F7395001A80164 /* WcalcController.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {745, 1554}}"; sepNavSelRange = "{1654, 0}"; sepNavVisRange = "{454, 1528}"; sepNavVisRect = "{{0, 657}, {648, 609}}"; sepNavWindowFrame = "{{15, 183}, {750, 558}}"; }; }; F5B29D7801F7395001A80164 /* WcalcController.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {745, 17094}}"; sepNavSelRange = "{39971, 0}"; sepNavVisRange = "{38445, 2615}"; sepNavVisRect = "{{0, 3378}, {648, 514}}"; sepNavWindowFrame = "{{515, 224}, {778, 762}}"; }; }; F5D446D00263B46801A80164 /* MyTextField.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {627, 429}}"; sepNavSelRange = "{99, 0}"; sepNavVisRect = "{{0, 0}, {627, 429}}"; sepNavWindowFrame = "{{743, 69}, {750, 558}}"; }; }; F5D446D10263B46801A80164 /* MyTextField.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {745, 1946}}"; sepNavSelRange = "{3141, 0}"; sepNavVisRange = "{2323, 928}"; sepNavVisRect = "{{0, 1098}, {742, 154}}"; sepNavWindowFrame = "{{190, 188}, {750, 558}}"; }; }; F5DD321602F8F43501A80164 /* conversion.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {7856, 15288}}"; sepNavSelRange = "{104812, 0}"; sepNavVisRect = "{{0, 13230}, {742, 154}}"; sepNavWindowFrame = "{{61, 141}, {750, 558}}"; }; }; F5DD321702F8F43501A80164 /* conversion.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {648, 1190}}"; sepNavSelRange = "{417, 41}"; sepNavVisRect = "{{0, 74}, {648, 286}}"; sepNavWindowFrame = "{{816, 166}, {750, 558}}"; }; }; F5DEAE8F021254A501A80164 /* definitions.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {1782, 1162}}"; sepNavSelRange = "{201, 0}"; sepNavVisRange = "{0, 2228}"; sepNavVisRect = "{{0, 0}, {627, 429}}"; sepNavWindowFrame = "{{187, 249}, {750, 502}}"; }; }; F5EF54D202022A7001A80164 /* theDelegate.m */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {627, 429}}"; sepNavSelRange = "{8, 0}"; sepNavVisRect = "{{0, 0}, {627, 429}}"; }; }; F5EF54D302022A7001A80164 /* theDelegate.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {627, 429}}"; sepNavSelRange = "{27, 0}"; sepNavVisRect = "{{0, 0}, {627, 429}}"; }; }; } wcalc-2.5/Wcalc.xcodeproj/kyle.mode10000644000175000017500000013027512115670002014314 00000000000000 ActivePerspectiveName Project AllowedModules BundleLoadPath MaxInstances n Module PBXSmartGroupTreeModule Name Groups and Files Outline View BundleLoadPath MaxInstances n Module PBXNavigatorGroup Name Editor BundleLoadPath MaxInstances n Module XCTaskListModule Name Task List BundleLoadPath MaxInstances n Module XCDetailModule Name File and Smart Group Detail Viewer BundleLoadPath MaxInstances 1 Module PBXBuildResultsModule Name Detailed Build Results Viewer BundleLoadPath MaxInstances 1 Module PBXProjectFindModule Name Project Batch Find Tool BundleLoadPath MaxInstances n Module PBXRunSessionModule Name Run Log BundleLoadPath MaxInstances n Module PBXBookmarksModule Name Bookmarks Tool BundleLoadPath MaxInstances n Module PBXClassBrowserModule Name Class Browser BundleLoadPath MaxInstances n Module PBXCVSModule Name Source Code Control Tool BundleLoadPath MaxInstances n Module PBXDebugBreakpointsModule Name Debug Breakpoints Tool BundleLoadPath MaxInstances n Module XCDockableInspector Name Inspector BundleLoadPath MaxInstances n Module PBXOpenQuicklyModule Name Open Quickly Tool BundleLoadPath MaxInstances 1 Module PBXDebugSessionModule Name Debugger BundleLoadPath MaxInstances 1 Module PBXDebugCLIModule Name Debug Console Description DefaultDescriptionKey DockingSystemVisible Extension mode1 FavBarConfig PBXProjectModuleGUID 27B38F970859DCBE00C2FE3C XCBarModuleItemNames XCBarModuleItems FirstTimeWindowDisplayed Identifier com.apple.perspectives.project.mode1 MajorVersion 31 MinorVersion 1 Name Default Notifications OpenEditors PerspectiveWidths -1 -1 Perspectives ChosenToolbarItems active-target-popup active-buildstyle-popup NSToolbarFlexibleSpaceItem buildOrClean build-and-runOrDebug run com.apple.ide.PBXToolbarStopButton toggle-editor Quick Model NSToolbarFlexibleSpaceItem com.apple.pbx.toolbar.searchfield ControllerClassBaseName IconName WindowOfProjectWithEditor Identifier perspective.project IsVertical Layout BecomeActive ContentConfiguration PBXBottomSmartGroupGIDs 1C37FBAC04509CD000000102 1C37FAAC04509CD000000102 1C08E77C0454961000C914BD 1C37FABC05509CD000000102 1C37FABC05539CD112110102 E2644B35053B69B200211256 1C37FABC04509CD000100104 1CC0EA4004350EF90044410B 1CC0EA4004350EF90041110B PBXProjectModuleGUID 1CE0B1FE06471DED0097A5F4 PBXProjectModuleLabel Files PBXProjectStructureProvided yes PBXSmartGroupTreeModuleColumnData PBXSmartGroupTreeModuleColumnWidthsKey 252 PBXSmartGroupTreeModuleColumnsKey_v4 MainColumn PBXSmartGroupTreeModuleOutlineStateKey_v7 PBXSmartGroupTreeModuleOutlineStateExpansionKey 29B97314FDCFA39411CA2CEA 080E96DDFE201D6D7F000001 29B97315FDCFA39411CA2CEA 29B97317FDCFA39411CA2CEA 29B97323FDCFA39411CA2CEA 1058C7A0FEA54F0111CA2CBB 19C28FACFE9D520D11CA2CBB 1C37FBAC04509CD000000102 1C37FAAC04509CD000000102 1C37FABC05509CD000000102 PBXSmartGroupTreeModuleOutlineStateSelectionKey 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey {{0, 0}, {252, 628}} PBXTopSmartGroupGIDs XCIncludePerspectivesSwitch XCSharingToken com.apple.Xcode.GFSharingToken GeometryConfiguration Frame {{0, 0}, {269, 646}} GroupTreeTableConfiguration MainColumn 252 RubberWindowFrame 390 335 963 687 0 0 1680 1028 Module PBXSmartGroupTreeModule Proportion 269pt Dock ContentConfiguration PBXProjectModuleGUID 1CE0B20306471E060097A5F4 PBXProjectModuleLabel number.h PBXSplitModuleInNavigatorKey Split0 PBXProjectModuleGUID 1CE0B20406471E060097A5F4 PBXProjectModuleLabel number.h _historyCapacity 0 bookmark 277E70E80D6A276A001C912C history 2721CD220869C0C400E3BB4D 2754E75508C0D6E1007F45CF 2754E80108C0F6E5007F45CF 2754E80A08C10043007F45CF 2754E80F08C10043007F45CF 272C35D908C16738009EA18F 272C35DD08C16738009EA18F 272C35E408C16738009EA18F 272C373F08C21615009EA18F 2773DCF40917EF3400DBDA9D 27E050E50918749700928DC2 276C7002091D1AB7005A5B75 27FAECD6093FAA8400D7EE3E 27FAECD7093FAA8400D7EE3E 27FAECFE093FAF2400D7EE3E 2736561D094C69B80043391C 2736561F094C69B80043391C 27EC73FD0992B6BB0097E39E 27EC73FE0992B6BB0097E39E 2729A45C09B22FE2001F07F4 27C40A7809B5DA910043C42F 27C40AAF09B5E58B0043C42F 27C40B6709B623D00043C42F 27C40B8909B626690043C42F 27C40BBB09B628F50043C42F 27B4AFFD09C1EE4F00EE3874 27C1F31F0A61C2890072F397 27C1F33B0A61F4840072F397 27C1F3590A622F000072F397 270437A10C458C830024DB8D 275D2B270C4DDA3B0056D137 275D2B2A0C4DDA3B0056D137 275D2CC00C5137330056D137 275D2D050C513D390056D137 275D2D160C513E300056D137 275D2D690C5144DD0056D137 275D2DA60C5148550056D137 275D2DB80C514AE60056D137 278132170C7CF38500EF848E 2781326C0C7E07BB00EF848E 2781326D0C7E07BB00EF848E 27239AD30C7F35C600204808 27239AE90C7F8EB400204808 279AB3E40D5CD6FC002AFBEA 279AB4210D5CDB02002AFBEA 277E70C70D6A22A2001C912C 277E70C80D6A22A2001C912C prevStack 27B38FB5085A077900C2FE3C 2721CBBA0865FD2800E3BB4D 2721CBC30865FD3C00E3BB4D 2721CBE90865FDFE00E3BB4D 2721CBFF086604FD00E3BB4D 2721CC090866055400E3BB4D 2721CC4108660C9200E3BB4D 2721CC49086652BA00E3BB4D 2721CD280869C0C400E3BB4D 2721CD2B0869C0C400E3BB4D 2721CD2C0869C0C400E3BB4D 2721CD2E0869C0C400E3BB4D 2754E75608C0D6E1007F45CF 2754E7E408C0E659007F45CF 2754E7E508C0E659007F45CF 2754E7E708C0E659007F45CF 2754E7E808C0E659007F45CF 2754E81108C10043007F45CF 2754E81208C10043007F45CF 2754E81308C10043007F45CF 2754E81408C10043007F45CF 2754E81508C10043007F45CF 2754E81708C10043007F45CF 2754E8CB08C126B6007F45CF 272C35EB08C16738009EA18F 272C35ED08C16738009EA18F 272C35F008C16738009EA18F 272C35F308C16738009EA18F 272C35F608C16738009EA18F 272C35F708C16738009EA18F 272C35F908C16738009EA18F 272C35FB08C16738009EA18F 272C35FC08C16738009EA18F 272C35FD08C16738009EA18F 272C363C08C17E7F009EA18F 272C374508C21615009EA18F 272C374608C21615009EA18F 2773DCF80917EF3400DBDA9D 27E050E60918749700928DC2 27FAED01093FAF2400D7EE3E 27FAED1B093FB0BB00D7EE3E 27365622094C69B80043391C 2729A45D09B22FE2001F07F4 2729A55E09B25AE9001F07F4 2729A55F09B25AE9001F07F4 275D2C930C50346B0056D137 275D2C940C50346B0056D137 277E70C90D6A22A2001C912C SplitCount 1 StatusBarVisibility GeometryConfiguration Frame {{0, 0}, {689, 546}} RubberWindowFrame 390 335 963 687 0 0 1680 1028 Module PBXNavigatorGroup Proportion 546pt ContentConfiguration PBXProjectModuleGUID 1CE0B20506471E060097A5F4 PBXProjectModuleLabel Detail GeometryConfiguration Frame {{0, 551}, {689, 95}} RubberWindowFrame 390 335 963 687 0 0 1680 1028 Module XCDetailModule Proportion 95pt Proportion 689pt Name Project ServiceClasses XCModuleDock PBXSmartGroupTreeModule XCModuleDock PBXNavigatorGroup XCDetailModule TableOfContents 277E70B90D6A0FF6001C912C 1CE0B1FE06471DED0097A5F4 277E70BA0D6A0FF6001C912C 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 ToolbarConfiguration xcode.toolbar.config.default ControllerClassBaseName IconName WindowOfProject Identifier perspective.morph IsVertical 0 Layout BecomeActive 1 ContentConfiguration PBXBottomSmartGroupGIDs 1C37FBAC04509CD000000102 1C37FAAC04509CD000000102 1C08E77C0454961000C914BD 1C37FABC05509CD000000102 1C37FABC05539CD112110102 E2644B35053B69B200211256 1C37FABC04509CD000100104 1CC0EA4004350EF90044410B 1CC0EA4004350EF90041110B PBXProjectModuleGUID 11E0B1FE06471DED0097A5F4 PBXProjectModuleLabel Files PBXProjectStructureProvided yes PBXSmartGroupTreeModuleColumnData PBXSmartGroupTreeModuleColumnWidthsKey 186 PBXSmartGroupTreeModuleColumnsKey_v4 MainColumn PBXSmartGroupTreeModuleOutlineStateKey_v7 PBXSmartGroupTreeModuleOutlineStateExpansionKey 29B97314FDCFA39411CA2CEA 1C37FABC05509CD000000102 PBXSmartGroupTreeModuleOutlineStateSelectionKey 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey {{0, 0}, {186, 337}} PBXTopSmartGroupGIDs XCIncludePerspectivesSwitch 1 XCSharingToken com.apple.Xcode.GFSharingToken GeometryConfiguration Frame {{0, 0}, {203, 355}} GroupTreeTableConfiguration MainColumn 186 RubberWindowFrame 373 269 690 397 0 0 1440 878 Module PBXSmartGroupTreeModule Proportion 100% Name Morph PreferredWidth 300 ServiceClasses XCModuleDock PBXSmartGroupTreeModule TableOfContents 11E0B1FE06471DED0097A5F4 ToolbarConfiguration xcode.toolbar.config.default.short PerspectivesBarVisible ShelfIsVisible SourceDescription file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' StatusbarIsVisible TimeStamp 0.0 ToolbarDisplayMode 2 ToolbarIsVisible ToolbarSizeMode 1 Type Perspectives UpdateMessage The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? WindowJustification 5 WindowOrderList 276C702E09208343005A5B75 /Users/kyle/Wcalc_Development/Wcalc/Wcalc.xcodeproj WindowString 390 335 963 687 0 0 1680 1028 WindowTools FirstTimeWindowDisplayed Identifier windowTool.build IsVertical Layout Dock ContentConfiguration PBXProjectModuleGUID 1CD0528F0623707200166675 PBXProjectModuleLabel number.h StatusBarVisibility GeometryConfiguration Frame {{0, 0}, {789, 186}} RubberWindowFrame 783 237 789 686 0 0 1680 1028 Module PBXNavigatorGroup Proportion 186pt BecomeActive ContentConfiguration PBXBuildLogShowsTranscriptDefaultKey {{0, 130}, {789, 324}} PBXProjectModuleGUID XCMainBuildResultsModuleGUID PBXProjectModuleLabel Build XCBuildResultsTrigger_Collapse 1021 XCBuildResultsTrigger_Open 1011 GeometryConfiguration Frame {{0, 191}, {789, 454}} RubberWindowFrame 783 237 789 686 0 0 1680 1028 Module PBXBuildResultsModule Proportion 454pt Proportion 645pt Name Build Results ServiceClasses PBXBuildResultsModule StatusbarIsVisible TableOfContents 276C702E09208343005A5B75 277E70BB0D6A0FF6001C912C 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID ToolbarConfiguration xcode.toolbar.config.build WindowString 783 237 789 686 0 0 1680 1028 WindowToolGUID 276C702E09208343005A5B75 WindowToolIsVisible FirstTimeWindowDisplayed Identifier windowTool.debugger IsVertical Layout Dock ContentConfiguration Debugger HorizontalSplitView _collapsingFrameDimension 0.0 _indexOfCollapsedView 0 _percentageOfCollapsedView 0.0 isCollapsed yes sizes {{0, 0}, {524, 350}} {{524, 0}, {525, 350}} VerticalSplitView _collapsingFrameDimension 0.0 _indexOfCollapsedView 0 _percentageOfCollapsedView 0.0 isCollapsed yes sizes {{0, 0}, {1049, 350}} {{0, 350}, {1049, 330}} LauncherConfigVersion 8 PBXProjectModuleGUID 1C162984064C10D400B95A72 PBXProjectModuleLabel Debug - GLUTExamples (Underwater) GeometryConfiguration DebugConsoleDrawerSize {100, 120} DebugConsoleVisible None DebugConsoleWindowFrame {{200, 200}, {500, 300}} DebugSTDIOWindowFrame {{200, 200}, {500, 300}} Frame {{0, 0}, {1049, 680}} RubberWindowFrame 511 307 1049 721 0 0 1680 1028 Module PBXDebugSessionModule Proportion 680pt Proportion 680pt Name Debugger ServiceClasses PBXDebugSessionModule StatusbarIsVisible TableOfContents 1CD10A99069EF8BA00B06720 271E0C350D68FBA7006D1356 1C162984064C10D400B95A72 271E0C360D68FBA7006D1356 271E0C370D68FBA7006D1356 271E0C380D68FBA7006D1356 271E0C390D68FBA7006D1356 271E0C3A0D68FBA7006D1356 271E0C3B0D68FBA7006D1356 ToolbarConfiguration xcode.toolbar.config.debug WindowString 511 307 1049 721 0 0 1680 1028 WindowToolGUID 1CD10A99069EF8BA00B06720 WindowToolIsVisible FirstTimeWindowDisplayed Identifier windowTool.find IsVertical Layout Dock Dock ContentConfiguration PBXProjectModuleGUID 1CDD528C0622207200134675 PBXProjectModuleLabel StatusBarVisibility GeometryConfiguration Frame {{0, 0}, {781, 212}} RubberWindowFrame 96 372 781 470 0 0 1680 1028 Module PBXNavigatorGroup Proportion 781pt Proportion 212pt ContentConfiguration PBXProjectModuleGUID 1CD0528E0623707200166675 PBXProjectModuleLabel Project Find GeometryConfiguration Frame {{0, 217}, {781, 212}} RubberWindowFrame 96 372 781 470 0 0 1680 1028 Module PBXProjectFindModule Proportion 212pt Proportion 429pt Name Project Find ServiceClasses PBXProjectFindModule StatusbarIsVisible TableOfContents 1C530D57069F1CE1000CFCEE 279AB41E0D5CDB01002AFBEA 279AB41F0D5CDB01002AFBEA 1CDD528C0622207200134675 1CD0528E0623707200166675 WindowString 96 372 781 470 0 0 1680 1028 WindowToolGUID 1C530D57069F1CE1000CFCEE WindowToolIsVisible Identifier MENUSEPARATOR FirstTimeWindowDisplayed Identifier windowTool.debuggerConsole IsVertical Layout Dock ContentConfiguration PBXProjectModuleGUID 1C78EAAC065D492600B07095 PBXProjectModuleLabel Debugger Console GeometryConfiguration Frame {{0, 0}, {440, 358}} RubberWindowFrame 287 95 440 400 0 0 1680 1028 Module PBXDebugCLIModule Proportion 358pt Proportion 359pt Name Debugger Console ServiceClasses PBXDebugCLIModule StatusbarIsVisible TableOfContents 2721CC52086652BA00E3BB4D 271E0C3C0D68FBA7006D1356 1C78EAAC065D492600B07095 WindowString 287 95 440 400 0 0 1680 1028 WindowToolGUID 2721CC52086652BA00E3BB4D WindowToolIsVisible FirstTimeWindowDisplayed Identifier windowTool.run IsVertical Layout Dock ContentConfiguration LauncherConfigVersion 3 PBXProjectModuleGUID 1CD0528B0623707200166675 PBXProjectModuleLabel Run Runner HorizontalSplitView _collapsingFrameDimension 0.0 _indexOfCollapsedView 0 _percentageOfCollapsedView 0.0 isCollapsed yes sizes {{0, 0}, {367, 168}} {{0, 173}, {367, 270}} VerticalSplitView _collapsingFrameDimension 0.0 _indexOfCollapsedView 0 _percentageOfCollapsedView 0.0 isCollapsed yes sizes {{0, 0}, {406, 443}} {{411, 0}, {517, 443}} GeometryConfiguration Frame {{0, 0}, {622, 544}} RubberWindowFrame 107 443 622 585 0 0 1680 1028 Module PBXRunSessionModule Proportion 544pt Proportion 544pt Name Run Log ServiceClasses PBXRunSessionModule StatusbarIsVisible TableOfContents 1C0AD2B3069F1EA900FABCE6 271E0C3D0D68FBA7006D1356 1CD0528B0623707200166675 271E0C3E0D68FBA7006D1356 ToolbarConfiguration xcode.toolbar.config.run WindowString 107 443 622 585 0 0 1680 1028 WindowToolGUID 1C0AD2B3069F1EA900FABCE6 WindowToolIsVisible Identifier windowTool.scm Layout Dock ContentConfiguration PBXProjectModuleGUID 1C78EAB2065D492600B07095 PBXProjectModuleLabel <No Editor> PBXSplitModuleInNavigatorKey Split0 PBXProjectModuleGUID 1C78EAB3065D492600B07095 SplitCount 1 StatusBarVisibility 1 GeometryConfiguration Frame {{0, 0}, {452, 0}} RubberWindowFrame 743 379 452 308 0 0 1280 1002 Module PBXNavigatorGroup Proportion 0pt BecomeActive 1 ContentConfiguration PBXProjectModuleGUID 1CD052920623707200166675 PBXProjectModuleLabel SCM GeometryConfiguration ConsoleFrame {{0, 259}, {452, 0}} Frame {{0, 7}, {452, 259}} RubberWindowFrame 743 379 452 308 0 0 1280 1002 TableConfiguration Status 30 FileName 199 Path 197.09500122070312 TableFrame {{0, 0}, {452, 250}} Module PBXCVSModule Proportion 262pt Proportion 266pt Name SCM ServiceClasses PBXCVSModule StatusbarIsVisible 1 TableOfContents 1C78EAB4065D492600B07095 1C78EAB5065D492600B07095 1C78EAB2065D492600B07095 1CD052920623707200166675 ToolbarConfiguration xcode.toolbar.config.scm WindowString 743 379 452 308 0 0 1280 1002 FirstTimeWindowDisplayed Identifier windowTool.breakpoints IsVertical Layout Dock ContentConfiguration PBXBottomSmartGroupGIDs 1C77FABC04509CD000000102 PBXProjectModuleGUID 1CE0B1FE06471DED0097A5F4 PBXProjectModuleLabel Files PBXProjectStructureProvided no PBXSmartGroupTreeModuleColumnData PBXSmartGroupTreeModuleColumnWidthsKey 168 PBXSmartGroupTreeModuleColumnsKey_v4 MainColumn PBXSmartGroupTreeModuleOutlineStateKey_v7 PBXSmartGroupTreeModuleOutlineStateExpansionKey 1C77FABC04509CD000000102 PBXSmartGroupTreeModuleOutlineStateSelectionKey 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey {{0, 0}, {168, 350}} PBXTopSmartGroupGIDs XCIncludePerspectivesSwitch GeometryConfiguration Frame {{0, 0}, {185, 368}} GroupTreeTableConfiguration MainColumn 168 RubberWindowFrame 349 280 744 409 0 0 1152 746 Module PBXSmartGroupTreeModule Proportion 185pt BecomeActive ContentConfiguration PBXProjectModuleGUID 1CA1AED706398EBD00589147 PBXProjectModuleLabel Detail GeometryConfiguration Frame {{190, 0}, {554, 368}} RubberWindowFrame 349 280 744 409 0 0 1152 746 Module XCDetailModule Proportion 554pt Proportion 368pt MajorVersion 2 MinorVersion 0 Name Breakpoints ServiceClasses PBXSmartGroupTreeModule XCDetailModule StatusbarIsVisible TableOfContents 27C1F3020A61B0220072F397 27C1F3030A61B0220072F397 1CE0B1FE06471DED0097A5F4 1CA1AED706398EBD00589147 ToolbarConfiguration xcode.toolbar.config.breakpoints WindowString 349 280 744 409 0 0 1152 746 WindowToolGUID 27C1F3020A61B0220072F397 WindowToolIsVisible FirstTimeWindowDisplayed Identifier windowTool.debugAnimator IsVertical Layout Dock BecomeActive ContentConfiguration PBXProjectModuleGUID 2721CC5A08672C4600E3BB4D PBXProjectModuleLabel StatusBarVisibility GeometryConfiguration Frame {{0, 0}, {700, 459}} RubberWindowFrame 533 177 700 500 0 0 1152 746 Module PBXNavigatorGroup Proportion 459pt Proportion 459pt Name Debug Visualizer ServiceClasses PBXNavigatorGroup StatusbarIsVisible TableOfContents 27C1F2F90A61AF940072F397 27C1F2FA0A61AF940072F397 2721CC5A08672C4600E3BB4D ToolbarConfiguration xcode.toolbar.config.debugAnimator WindowString 533 177 700 500 0 0 1152 746 WindowToolGUID 27C1F2F90A61AF940072F397 WindowToolIsVisible Identifier windowTool.bookmarks Layout Dock Module PBXBookmarksModule Proportion 100% Proportion 100% Name Bookmarks ServiceClasses PBXBookmarksModule StatusbarIsVisible 0 WindowString 538 42 401 187 0 0 1280 1002 Identifier windowTool.classBrowser Layout Dock BecomeActive 1 ContentConfiguration OptionsSetName Hierarchy, all classes PBXProjectModuleGUID 1CA6456E063B45B4001379D8 PBXProjectModuleLabel Class Browser - NSObject GeometryConfiguration ClassesFrame {{0, 0}, {374, 96}} ClassesTreeTableConfiguration PBXClassNameColumnIdentifier 208 PBXClassBookColumnIdentifier 22 Frame {{0, 0}, {630, 331}} MembersFrame {{0, 105}, {374, 395}} MembersTreeTableConfiguration PBXMemberTypeIconColumnIdentifier 22 PBXMemberNameColumnIdentifier 216 PBXMemberTypeColumnIdentifier 97 PBXMemberBookColumnIdentifier 22 PBXModuleWindowStatusBarHidden2 1 RubberWindowFrame 385 179 630 352 0 0 1440 878 Module PBXClassBrowserModule Proportion 332pt Proportion 332pt Name Class Browser ServiceClasses PBXClassBrowserModule StatusbarIsVisible 0 TableOfContents 1C0AD2AF069F1E9B00FABCE6 1C0AD2B0069F1E9B00FABCE6 1CA6456E063B45B4001379D8 ToolbarConfiguration xcode.toolbar.config.classbrowser WindowString 385 179 630 352 0 0 1440 878 WindowToolGUID 1C0AD2AF069F1E9B00FABCE6 WindowToolIsVisible 0 wcalc-2.5/missing0000754000175000017500000002403612115670004010771 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, 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. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing 0.4 - GNU automake" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. You can get \`$1Help2man' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 wcalc-2.5/graphics/0000775000175000017500000000000012451434213011253 500000000000000wcalc-2.5/graphics/Wred.png0000644000175000017500000000235312115670002012576 00000000000000‰PNG  IHDR0+ ÍűígAMAŮܲÚâPLTE˙˙˙˙˙Ě˙˙™˙˙f˙˙3˙˙˙Ě˙˙ĚĚ˙Ě™˙Ěf˙Ě3˙Ě˙™˙˙™Ě˙™™˙™f˙™3˙™˙f˙˙fĚ˙f™˙ff˙f3˙f˙3˙˙3Ě˙3™˙3f˙33˙3˙˙˙Ě˙™˙f˙3˙Ě˙˙Ě˙ĚĚ˙™Ě˙fĚ˙3Ě˙ĚĚ˙ĚĚĚĚĚ™ĚĚfĚĚ3ĚĚĚ™˙Ě™ĚĚ™™Ě™fĚ™3Ě™Ěf˙ĚfĚĚf™ĚffĚf3ĚfĚ3˙Ě3ĚĚ3™Ě3fĚ33Ě3Ě˙ĚĚĚ™ĚfĚ3Ě™˙˙™˙Ě™˙™™˙f™˙3™˙™Ě˙™Ě̙̙™Ěf™Ě3™Ě™™˙™™Ě™™™™™f™™3™™™f˙™fĚ™f™™ff™f3™f™3˙™3Ě™3™™3f™33™3™˙™Ě™™™f™3™f˙˙f˙Ěf˙™f˙ff˙3f˙fĚ˙fĚĚfĚ™fĚffĚ3fĚf™˙f™Ěf™™f™ff™3f™ff˙ffĚff™fffff3fff3˙f3Ěf3™f3ff33f3f˙fĚf™fff3f3˙˙3˙Ě3˙™3˙f3˙33˙3Ě˙3ĚĚ3Ě™3Ěf3Ě33Ě3™˙3™Ě3™™3™f3™33™3f˙3fĚ3f™3ff3f33f33˙33Ě33™33f333333˙3Ě3™3f333˙˙˙Ě˙™˙f˙3˙Ě˙ĚĚĚ™ĚfĚ3Ě™˙™Ě™™™f™3™f˙fĚf™fff3f3˙3Ě3™3f333˙Ě™f3îÝ»ŞwUD"îÝ»ŞwUD"îÝ»ŞwUD"îîîYOQtRNS@ćŘftEXtSoftwareGraphicConverter5]Hî‚IDATxśŚU;˛1ŰŽŽŽŽÎ÷?žűgăĎ";ĎE& $ äyơçżGÔ>˙ď:·qłŹĎ&ŕë‚Ćy“GřyŞ`1MŤ5@˛Ë ¦!ŘYIJ"@P«)Śžj;“şÔ‡S5A,A4öK„1Zo ŠG—bWÁŕ‹'/uŕ9ą¨ŃŔíŃf’‘ý/ÉŞgBŤDŮ_ˇ¤zFËÍ!FŐ2ŁQh( GŐ2álQŽ‘R5 ÁPmIýCŢŮ׳ďĘü´ť€w=€`ś|ˇdgwSÇ02ž“űr„e [¶,˝Ţ¦©ĂýAç7`Ť~ ű xň¦¨łfoěĘĎűŐź‚ÂĘڦňćéč$”•dç—„jmkţĽď¦ÓsúÍh¤ŔhăßÉ7Ň˙˙[Ă`]|žIEND®B`‚wcalc-2.5/graphics/TheW.icns0000644000175000017500000010050212115670003012710 00000000000000icnsBics#H@áĂáÇaĆqĆ3ä3ě;llx8 8 8 0@áĂáÇaĆqĆ3ä3ě;llx8 8 8 0is323ŽÝ‚»™f»ĚĚ‚™ÝŞfŞ€ÝîD"DU€ŞDî€3f ŞÝ"ŞÝ" ™ŞŞîwÝ3 ÝŞfîDU‚ ffîf™"Dî‚ ™"Şî™3†Ý€f„3"UŞ„D™î„ĚŞÝf‘ŽÝ‚»™f»ĚĚ‚™ÝŞfŞ€ÝîD"DU€ŞDî€3f ŞÝ"ŞÝ" ™ŞŞîwÝ3 ÝŞfîDU‚ ffîf™"Dî‚ ™"Şî™3†Ý€f„3"UŞ„D™î„ĚŞÝf‘ŽÝ‚»™f»ĚĚ‚™ÝŞfŞ€ÝîD"DU€ŞDî€3f ŞÝ"ŞÝ" ™ŞŞîwÝ3 ÝŞfîDU‚ ffîf™"Dî‚ ™"Şî™3†Ý€f„3"UŞ„D™î„ĚŞÝf‘s8mk˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ICN#xŔřŕřŕxŕ|ŕ<đ<đ>đ<ř8x8x0xpđ<ř8x8x0xpŕ~đ>ţđ<~đ|?đ|<đ|?ř|€řp€üx€üřŔüđŔţđŔţŕŔ~ŕŕ|Ŕŕ~Ŕđ?Ŕđ ?ŔđŔř€ř‡€|8‡|8‡pŹ>pŢ>pŢ>ŕţŕüŕüŕüŔüŔřŔřŔř€ř€đ€đ€đ` >ŕ~đ>ţđ<~đ|?đ|<đ|?ř|€řp€üx€üřŔüđŔţđŔţŕŔ~ŕŕ|Ŕŕ~Ŕđ?Ŕđ ?ŔđŔř€ř‡€|8‡|8‡pŹ>pŢ>pŢ>ŕţŕüŕüŕüŔüŔřŔřŔř€ř€đ€đ€đ`ih32 ˙¸îUîŞDŁ»Ý3ĚŽĚf™ŤDwUwŤ™€»‹D€»Ý‚DŤ€3’wŚÝŽî€"UĚ‹wŹ»€f™"ŤD™Š€ŞÝ€3U‹U€î‚"»‰Ý"„Ýf‰Ş„î‹w„"Ť™„»‡™€Ě„Uw„D‡D3…»Ş"U‚€Ý‡î€î3Ě…Ý"‡»€Ě‡™3ŞĚ…ŞĚ€Ş†™wŞ€†w‹f€D†»Ě€D…‰î€f…Dw€wŞĚDŠf€3…"3Ýw™Ş‹w„Ý‚3€Dfî‹w€D»‚€U"ŚŞ€…Ş‚»Ě»‘ĚĚ"ÝŞ3"ŽÝUDf»„D€™DÝŹDî‹U€™™“ÝfU€3ĚŹU€™™w†™€Ěî"€wD̆̀™wÝf""UŠ"»3î’"3U33’Ş™"U“‚Ě""“fŠ‚U“™D‰»‚”Ěw‰Ěf™fŠ•fŽĚ̏̕3—"wŚD™—ŞŚŞĚ™ŽUŞ˙˙¸îUîŞDŁ»Ý3ĚŽĚf™ŤDwUwŤ™€»‹D€»Ý‚DŤ€3’wŚÝŽî€"UĚ‹wŹ»€f™"ŤD™Š€ŞÝ€3U‹U€î‚"»‰Ý"„Ýf‰Ş„î‹w„"Ť™„»‡™€Ě„Uw„D‡D3…»Ş"U‚€Ý‡î€î3Ě…Ý"‡»€Ě‡™3ŞĚ…ŞĚ€Ş†™wŞ€†w‹f€D†»Ě€D…‰î€f…Dw€wŞĚDŠf€3…"3Ýw™Ş‹w„Ý‚3€Dfî‹w€D»‚€U"ŚŞ€…Ş‚»Ě»‘ĚĚ"ÝŞ3"ŽÝUDf»„D€™DÝŹDî‹U€™™“ÝfU€3ĚŹU€™™w†™€Ěî"€wD̆̀™wÝf""UŠ"»3î’"3U33’Ş™"U“‚Ě""“fŠ‚U“™D‰»‚”Ěw‰Ěf™fŠ•fŽĚ̏̕3—"wŚD™—ŞŚŞĚ™ŽUŞ˙˙¸îUîŞDŁ»Ý3ĚŽĚf™ŤDwUwŤ™€»‹D€»Ý‚DŤ€3’wŚÝŽî€"UĚ‹wŹ»€f™"ŤD™Š€ŞÝ€3U‹U€î‚"»‰Ý"„Ýf‰Ş„î‹w„"Ť™„»‡™€Ě„Uw„D‡D3…»Ş"U‚€Ý‡î€î3Ě…Ý"‡»€Ě‡™3ŞĚ…ŞĚ€Ş†™wŞ€†w‹f€D†»Ě€D…‰î€f…Dw€wŞĚDŠf€3…"3Ýw™Ş‹w„Ý‚3€Dfî‹w€D»‚€U"ŚŞ€…Ş‚»Ě»‘ĚĚ"ÝŞ3"ŽÝUDf»„D€™DÝŹDî‹U€™™“ÝfU€3ĚŹU€™™w†™€Ěî"€wD̆̀™wÝf""UŠ"»3î’"3U33’Ş™"U“‚Ě""“fŠ‚U“™D‰»‚”Ěw‰Ěf™fŠ•fŽĚ̏̕3—"wŚD™—ŞŚŞĚ™ŽUŞ˙h8mk ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙it32˙˙˙˙˙˙˙˙˙ĺÝ»ůD‹îUDîäî€ÝŠ™3âîw‚3‰™‚™ŕw„އĚ3„3®îDU™©f…î†îµĚw‚»§™Žf‰»©î…3¦Ě†3„™Šw©†U¤Ě‡wÝ‹3©™‡D˘ÝŞUÄŞˇÝĚŞŚ»¨wwµD‹w§Ě‰3¬"…î‹3¦ĚŠ3ˇÝ‡f†Ş´3Ż»‡Ş‡fŠŞĄŻw’î‰D´î D†D‰fUݤ»‹Ýźî‡‰Ş…™¨™Š™ˇŞ‡Ě’"¨wŠ»ˇU†‹D…3»¦DŠŞˇD†U‹‰Ł"ŠUˇĚ†Ş‹ÝŠÝ±UÝźU„Ť‰ˇ»ŽDźDÝŹf‰DˇŽ"žŞ‚wî"‰î U°3‚"™îŹî"™ Ź»ś3…wîîžî™›Ě†‘wUž»w›†Ě‘DŞ»"›D…UźîťÝ‘ݢ"’î‰DťÝ‘U™Ě…U“»Š™śf’Ý…wˇ3›î“UD…™”U‰D›™”Ý Ý”™wî›f„3ŞŠw–Ý…3•îÝś3„™3‰f–»…»–"‡w›î…ÝU‰D–„D—އw›U„€Ş"î–fî™†ŞŁfŤĚ–3»šD…îš»…Şfî›f›Ş†Ş™»…îw"î”îf—»„3‚w‡wŁw‡3—»„‚D‡3–"îśÝ‡3—»„Ě‚3wÝ“Ą3‡™–ŞŠ»îU‡U’"3ž™™•UU†»śî„wźŞ“î"î„îŞ‰ŞŞ„»ź»U“»‚"î…îŠUf„Ý Dž»‚»‡Ş‰"3ˇŞĚ’Şf‰3›î„»­w’U݉»‰»ŽŞ"ĄU…"–D‹»Žf™Ąw…™‘Ş™‹™wŽ3»Ą…"îU‘†™•»ĄU†"îŽî3Ťw†3Ž»„ĚĄ‡wŽ™’™‡ŞŤw¦wîŤD’ĚÝŚ3f¦ÝŻf‹î„ݧD‡"ŚĚ‚Ž3‡3ŠĚ„3¨»Ý‹™‚wŽf‡3Š"„™©‡‹w"‡3ŠU±‡"‹3€wĚ–"w«î33†î‰Ý®î€DŻÝ…™‰3–™‡Ě‰w»¸UŞw“"†Ě‚™ŻŞ…‡îî“»†"3‚3Ý®U†î†wšU†Ý†„»¸Ş…Ý›»†…î…î­î‡w…3ĄD…»„3ŻU†3Ą3†î„„™ŻŹ3‚f–w†™„·»‡Ý„Ě—»†U»„f°Ě‡»„îwˇD„Ý»w„D3†ÝÝ„3Ľ3U‚ww†™f„»˛U‡îUĚ»†D3ł»3UU™€»ˇ†3Ě™„̸"‚€UšÝ‡D3¸Ě„Uîf„Ş›D‡D„f¸3¬Dw·ŞŽD›Dw·"Ž™›wwÉî›w»·Ť"ś3޸Śś3D¸wŚ»śŞDî·î®™Źî¸DŠ3 UŤąwŠfźÝfŚDş»ŠŞź3Ťîë3Ś»Ľ"3đUw 3Ě™UˇfŠ3˝ĚˇĚŠfĘŞ®ŞľD†"̢UË™†ÝŁwËî†ÝŁ»wŔD…ݣ݇"Á™„3ŻĚÁÝ„Ą3…3Ă"»Ąf…wĂ…ŞĂÝ­3„îÄD3§»"ĹÝU¨U‚ŞĆĚDî¨UČ»fŞîU˙˙˙˙˙˙˙˙˙Ź˙˙˙˙˙˙˙˙˙ĺÝ»ůD‹îUDîäî€ÝŠ™3âîw‚3‰™‚™ŕw„އĚ3„3®îDU™©f…î†îµĚw‚»§™Žf‰»©î…3¦Ě†3„™Šw©†U¤Ě‡wÝ‹3©™‡D˘ÝŞUÄŞˇÝĚŞŚ»¨wwµD‹w§Ě‰3¬"…î‹3¦ĚŠ3ˇÝ‡f†Ş´3Ż»‡Ş‡fŠŞĄŻw’î‰D´î D†D‰fUݤ»‹Ýźî‡‰Ş…™¨™Š™ˇŞ‡Ě’"¨wŠ»ˇU†‹D…3»¦DŠŞˇD†U‹‰Ł"ŠUˇĚ†Ş‹ÝŠÝ±UÝźU„Ť‰ˇ»ŽDźDÝŹf‰DˇŽ"žŞ‚wî"‰î U°3‚"™îŹî"™ Ź»ś3…wîîžî™›Ě†‘wUž»w›†Ě‘DŞ»"›D…UźîťÝ‘ݢ"’î‰DťÝ‘U™Ě…U“»Š™śf’Ý…wˇ3›î“UD…™”U‰D›™”Ý Ý”™wî›f„3ŞŠw–Ý…3•îÝś3„™3‰f–»…»–"‡w›î…ÝU‰D–„D—އw›U„€Ş"î–fî™†ŞŁfŤĚ–3»šD…îš»…Şfî›f›Ş†Ş™»…îw"î”îf—»„3‚w‡wŁw‡3—»„‚D‡3–"îśÝ‡3—»„Ě‚3wÝ“Ą3‡™–ŞŠ»îU‡U’"3ž™™•UU†»śî„wźŞ“î"î„îŞ‰ŞŞ„»ź»U“»‚"î…îŠUf„Ý Dž»‚»‡Ş‰"3ˇŞĚ’Şf‰3›î„»­w’U݉»‰»ŽŞ"ĄU…"–D‹»Žf™Ąw…™‘Ş™‹™wŽ3»Ą…"îU‘†™•»ĄU†"îŽî3Ťw†3Ž»„ĚĄ‡wŽ™’™‡ŞŤw¦wîŤD’ĚÝŚ3f¦ÝŻf‹î„ݧD‡"ŚĚ‚Ž3‡3ŠĚ„3¨»Ý‹™‚wŽf‡3Š"„™©‡‹w"‡3ŠU±‡"‹3€wĚ–"w«î33†î‰Ý®î€DŻÝ…™‰3–™‡Ě‰w»¸UŞw“"†Ě‚™ŻŞ…‡îî“»†"3‚3Ý®U†î†wšU†Ý†„»¸Ş…Ý›»†…î…î­î‡w…3ĄD…»„3ŻU†3Ą3†î„„™ŻŹ3‚f–w†™„·»‡Ý„Ě—»†U»„f°Ě‡»„îwˇD„Ý»w„D3†ÝÝ„3Ľ3U‚ww†™f„»˛U‡îUĚ»†D3ł»3UU™€»ˇ†3Ě™„̸"‚€UšÝ‡D3¸Ě„Uîf„Ş›D‡D„f¸3¬Dw·ŞŽD›Dw·"Ž™›wwÉî›w»·Ť"ś3޸Śś3D¸wŚ»śŞDî·î®™Źî¸DŠ3 UŤąwŠfźÝfŚDş»ŠŞź3Ťîë3Ś»Ľ"3đUw 3Ě™UˇfŠ3˝ĚˇĚŠfĘŞ®ŞľD†"̢UË™†ÝŁwËî†ÝŁ»wŔD…ݣ݇"Á™„3ŻĚÁÝ„Ą3…3Ă"»Ąf…wĂ…ŞĂÝ­3„îÄD3§»"ĹÝU¨U‚ŞĆĚDî¨UČ»fŞîU˙˙˙˙˙˙˙˙˙Ź˙˙˙˙˙˙˙˙˙ĺÝ»ůD‹îUDîäî€ÝŠ™3âîw‚3‰™‚™ŕw„އĚ3„3®îDU™©f…î†îµĚw‚»§™Žf‰»©î…3¦Ě†3„™Šw©†U¤Ě‡wÝ‹3©™‡D˘ÝŞUÄŞˇÝĚŞŚ»¨wwµD‹w§Ě‰3¬"…î‹3¦ĚŠ3ˇÝ‡f†Ş´3Ż»‡Ş‡fŠŞĄŻw’î‰D´î D†D‰fUݤ»‹Ýźî‡‰Ş…™¨™Š™ˇŞ‡Ě’"¨wŠ»ˇU†‹D…3»¦DŠŞˇD†U‹‰Ł"ŠUˇĚ†Ş‹ÝŠÝ±UÝźU„Ť‰ˇ»ŽDźDÝŹf‰DˇŽ"žŞ‚wî"‰î U°3‚"™îŹî"™ Ź»ś3…wîîžî™›Ě†‘wUž»w›†Ě‘DŞ»"›D…UźîťÝ‘ݢ"’î‰DťÝ‘U™Ě…U“»Š™śf’Ý…wˇ3›î“UD…™”U‰D›™”Ý Ý”™wî›f„3ŞŠw–Ý…3•îÝś3„™3‰f–»…»–"‡w›î…ÝU‰D–„D—އw›U„€Ş"î–fî™†ŞŁfŤĚ–3»šD…îš»…Şfî›f›Ş†Ş™»…îw"î”îf—»„3‚w‡wŁw‡3—»„‚D‡3–"îśÝ‡3—»„Ě‚3wÝ“Ą3‡™–ŞŠ»îU‡U’"3ž™™•UU†»śî„wźŞ“î"î„îŞ‰ŞŞ„»ź»U“»‚"î…îŠUf„Ý Dž»‚»‡Ş‰"3ˇŞĚ’Şf‰3›î„»­w’U݉»‰»ŽŞ"ĄU…"–D‹»Žf™Ąw…™‘Ş™‹™wŽ3»Ą…"îU‘†™•»ĄU†"îŽî3Ťw†3Ž»„ĚĄ‡wŽ™’™‡ŞŤw¦wîŤD’ĚÝŚ3f¦ÝŻf‹î„ݧD‡"ŚĚ‚Ž3‡3ŠĚ„3¨»Ý‹™‚wŽf‡3Š"„™©‡‹w"‡3ŠU±‡"‹3€wĚ–"w«î33†î‰Ý®î€DŻÝ…™‰3–™‡Ě‰w»¸UŞw“"†Ě‚™ŻŞ…‡îî“»†"3‚3Ý®U†î†wšU†Ý†„»¸Ş…Ý›»†…î…î­î‡w…3ĄD…»„3ŻU†3Ą3†î„„™ŻŹ3‚f–w†™„·»‡Ý„Ě—»†U»„f°Ě‡»„îwˇD„Ý»w„D3†ÝÝ„3Ľ3U‚ww†™f„»˛U‡îUĚ»†D3ł»3UU™€»ˇ†3Ě™„̸"‚€UšÝ‡D3¸Ě„Uîf„Ş›D‡D„f¸3¬Dw·ŞŽD›Dw·"Ž™›wwÉî›w»·Ť"ś3޸Śś3D¸wŚ»śŞDî·î®™Źî¸DŠ3 UŤąwŠfźÝfŚDş»ŠŞź3Ťîë3Ś»Ľ"3đUw 3Ě™UˇfŠ3˝ĚˇĚŠfĘŞ®ŞľD†"̢UË™†ÝŁwËî†ÝŁ»wŔD…ݣ݇"Á™„3ŻĚÁÝ„Ą3…3Ă"»Ąf…wĂ…ŞĂÝ­3„îÄD3§»"ĹÝU¨U‚ŞĆĚDî¨UČ»fŞîU˙˙˙˙˙˙˙˙˙Źt8mk@˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙wcalc-2.5/graphics/w.png0000644000175000017500000000534012115670004012144 00000000000000‰PNG  IHDR€r›dŮŮgAMAÖŘÔOX2tEXtSoftwareAdobe ImageReadyqÉe< rIDATxÚbü˙˙?Ă(ą €FŃČ @üŠ™DÍP|a4‡$Pâ@,ĺ? R4O@J9 FĂrHFü4@İhN ×!ń˙ˇqĘ@„Šű 84eŔ(”Ă …DLqŹ+ ł@%ř Đ0‚ţąůqĘŕ „Ś  ‚DFţp¨ ~Ć•[†b[ç‘q„ů˙ÉŔCą1č0 K9bKnx/ €H)2†[;`‘~üÍ 4“q„ů0,0ĚŔPHHŚ3x €(Ś|˘ű’čĎ Ř/¤fbx €€ř"ęҡšF‚?q5Á €(ibmP łŕPi’ZťÁ@1A#°Ëő‡X;Ŕ‚â|8Ś{@ćµC©@Ii7XÇ=.ë€bBb$>óv€Âë§Đ'· äđÚ—$$Ś0)ÝÓ‡čc7Ä„Ą?IN)đa®Ă0L@¤Tżm€bÁQDř0č"’ay™řędž!ž0€„«8'fx(Ž’ŰĐmÄ š`€˘ÄĐC0;ç1XK¸Jý@”v+>@s ćńr ş©źHÎĆş €pˇ 쨄5)(¤ţZŔ@Á¤@Q;°ó°pĺ_±ý€'. g7 €hQ_* ńśBŇlÚ öQ‘@L ¦u·d(Ť;řBëvM<7ĚŚD‹\3[ĚTĚýi)1ń·í@´J­7@ĺp`ř‰Ř)`Ľ%@Ń*÷ ¶Ć`•Ŕ`ŘQű™ €´č ‰ŽÓgţ;‡˛± ŠT~"Ô]$”‰ČŔ~˝Ş•ÁÜ ˝HŚ:€b"2µ‘@Ă8 ň°mů6@Ä$€ ä-Őg<#´(Ťä°šŁZ— €čŃŠ誀’Ť/qŽ€ŘEĽD%€b"ŇŇ &ž.Şůidö@”Äć~˘'@Ѣß9؆M/™“‡J)°šn Rs©%a@ŘAť Ş zú“ÄJtŰ €HmH µÁ bęË´ď`/ĺYŁAtď €HLyIě …ľúZÖ›4HĐ„@1Ý? RQĂĐ.U ˘H@f }ňK€Ž ź[&j @Ń2 ô¬`yłzďĚ`•Ş-[˘ťqc™ g@r?‘Ő &2BLŞ÷‡:x zÄä†t¬›©U­aÉő @Q‚Hé2 Ä „Zô¨4ޱ€ŽE/Ő×'Ž!Ąîăg|C((9ĐĂáÜK“ľ=@Q’H­÷YŘ€§d#5hí7üłŹdw_ÖĹ,úŔŔ qŰ µ±Ąš[Ŕ@ŁuDďqz%*őPHťĄU—P×”ě„@Ôhi?`|CÄTH„dŚ | QÓlŔ €č1:5GĘ p°„’őt_ŠşÄDn` }Ńč@5ĚĄ ?M$ÓjűÍÄN6 *hÝj˝@…ú™Ü•Dčŕ˛fţ°€˘Ç ˝.¸ęL2űޤúëüBµy€˘&‚7ż€a`·['0Po^‚ÜR€^%«ĄĐ@V´š@Ů@ĺFgĂ–nh]Ő-ĂV 4(’É)¨ŐĽ@ë@L4b#ö AŽ@¤| ±ą‘JŤ\PÂŁůŞ*€˘E ¶¸ĺ‡&jÖc 4W upŚÖÝ?Ş ¨-)ą…źŠ-YćRŰžJ рЉ' ZuĂH­3©Ń—- qc‰ŢCč1Ž@´(>Ńí˘Fގőđ2)Ą?…îq`Ŕż#{µ<@´B ôź •C©X¤vÉ­Úč¸ß €h‰0Đo©ž˘Z@§đ€Ž‹m–(~10Đ~©ĄąmŹxsµ»ÎDkDJÉ’j > O>Đ!ŕ˘I €hŤ`óDž™ö>äč”>Đ«Ř z˘ ´Y(2~KłH­¨äšőůžčő' •LĘAÚ TňĎUi 4Řş…¤¶. @n!e küCS˝)‡K›Ň0 íá2ŮŔ0+Žh0Ž 8Y˘|ŕśBͰ D”*4Y@@LtL¤ÔÄÔĂüś¨‰]Kl äš”DŻ@Šă‰čđgxp€Š €š… 4Ú@ôDÔ\1Ľ€aŕĎëq` Ţ1B=$šů €[7؆ ®^EĂ MÔ 4(ĐŇ4T‚¸¶¤) R? Ŕ šnü &:—Ôj€r”<Ž„1ŰöxJ2B'±Ó´ű@u,`™E&˝KRÚ$¶ečrö@Ń‘rŰ2" ęJr’"4˘H—m_Do4qË(ˇHĚm•[0·ćP‰H—-@ 4J ˇáD¨±ä0€%)ç<€&nBzč’űh ˇÜ“@dWéĂ NȸÚ8âĐ€HDlęáqňl)SűJ:ş´ @,pÄÖqÄ\Xµaeş•hÄ4€ąßžJf}ŕ0¤Çčh @Ínąźž]Z€¨Đ0šG©@ą0T®pu` ~#n €)P!  4Đ ł ”,@Lp zn#…f –`Hż ş Đ@#JűĐĂ´ZŁŰ<@ 4”ëlą–·”Ňm@ taŹ–‘Цą@…Č_@OGÓ 8rëńÁÖýĺZJʍ]ËGףßi”Ă!Pëşvh('€ÁV É €LĘő?l@Ü ¶¬Q @&%0Ô@1 ˘@*H¤%ąBÂÁ4X9EşĂ -6ĐYE €†bŃůa”(0 ˇQM€l9‡–ÇŻŃ ™ @1 ˛0\şJ¤Ţˇ´p  @C± ă䤜#ô€a'~h¨u‡Ę@ )Űŕ´î ¦Ap„ŞC$Ű«yČ0Ŕkh¨%€Ă,h‡Đ`K úđâ`0Şi4ţAU@L0đ €Čîę€'€j)Ă©Q;(3@ ĄnÔPĚ-řÎDh  ÁŚ60Đîěz·kČ˝Âžć €;Z @!ěôŇěŔ`Š|€ü¦»ís,IEND®B`‚wcalc-2.5/src/0000775000175000017500000000000012451434214010243 500000000000000wcalc-2.5/src/gui/0000775000175000017500000000000012451434214011027 500000000000000wcalc-2.5/src/gui/WcalcService.m0000644000175000017500000000426712115670002013500 00000000000000// // WcalcService.m // Wcalc // // Created by Kyle Wheeler on 7/19/07. // Copyright 2007 Kyle Wheeler. All rights reserved. // #import "WcalcService.h" #include "calculator.h" /* for parseme() */ #include "variables.h" /* for putval() */ #include "historyManager.h" /* for addToHistory() */ #include "WcalcController.h" /* for access to the controller */ @implementation WcalcService /* This service returns the value; * this is inspired in a large part by the SimpleService example Apple provides */ - (void)doWcalcCalculateService:(NSPasteboard *)pboard userData:(NSString *)data error:(NSString **)error { NSString *pboardString; NSString *newString; NSArray *types; char * expression; extern char * errstring; types = [pboard types]; if (![types containsObject:NSStringPboardType] || !(pboardString = [pboard stringForType:NSStringPboardType])) { *error = NSLocalizedString(@"Error: Pasteboard doesn't contain a string.", @"Pasteboard couldn't give string."); return; } expression = strdup([pboardString UTF8String]); parseme(expression); //putval("a",last_answer,"last answer from WcalcService"); putval("WcalcServiceAnswer",last_answer,"last answer from WcalcService"); /* if it isn't an error (or if you want me to remember errors) record it in the history */ if (!errstring || (errstring && !strlen(errstring)) || conf.remember_errors) { addToHistory(expression, last_answer); } free(expression); if (errstring && strlen(errstring)) { extern int scanerror; scanerror = 0; *error = NSLocalizedString([NSString stringWithUTF8String:errstring], @"Couldn't perform service operation."); free(errstring); errstring = NULL; return; } newString = [NSString stringWithFormat:@"%s",pretty_answer]; if ([inspectorWindow isVisible]) { /* XXX: why does this not work??? */ [variableList reloadData]; [historyList reloadData]; } /* We now return the capitalized string... */ types = [NSArray arrayWithObject:NSStringPboardType]; [pboard declareTypes:types owner:nil]; [pboard setString:newString forType:NSStringPboardType]; return; } @end wcalc-2.5/src/gui/includes/0000775000175000017500000000000012451434214012635 500000000000000wcalc-2.5/src/gui/includes/MyTextField.h0000644000175000017500000000071712115670002015121 00000000000000/* MyTextField */ #include #include "WcalcController.h" #include "number.h" @interface MyTextField : NSTextField { IBOutlet WcalcController *mainController; IBOutlet NSTextField *AnswerField; /* "Simple Calculator" Variables */ char lastchar; char oper; Number cur_number; Number prev_number; } - (void)keyDown:(NSEvent*) theEvent; - (void)keyUp:(NSEvent*) theEvent; - (BOOL) acceptsFirstResponder; - (BOOL) refusesFirstResponder; @end wcalc-2.5/src/gui/includes/ErrorController.h0000644000175000017500000000041412115670002016052 00000000000000/* ErrorController */ #include @interface ErrorController : NSObject { IBOutlet id errorDialog; IBOutlet id errorMessage; } - (IBAction)closeAlert:(id)sender; - (IBAction)showAlert:(id)sender; - (IBAction)throwAlert:(NSString *)message; @end wcalc-2.5/src/gui/includes/WcalcController.h0000644000175000017500000000636412115670002016024 00000000000000/* WcalcController */ #ifndef WCALC_CONTROLLER_H #define WCALC_CONTROLLER_H #include #include "InspectorController.h" @interface WcalcController : NSObject { IBOutlet NSMenuItem *affectKeyboardMenu; IBOutlet NSMenuItem *baseMenu; IBOutlet NSMenuItem *saveMenuItem; IBOutlet NSMenuItem *saveAsMenuItem; IBOutlet NSMenuItem *sizeToggleMenu; IBOutlet NSMenuItem *conversionMenu; IBOutlet NSWindow *mainWindow; IBOutlet NSWindow *inspectorWindow; IBOutlet NSWindow *persVarsWindow; IBOutlet InspectorController *inspector; IBOutlet NSButton *capsLockKey; IBOutlet NSButton *shiftKey1; IBOutlet NSButton *shiftKey2; IBOutlet NSButton *historyDuplicates; IBOutlet NSButton *pickyVariables; IBOutlet NSButton *printPrefixes; IBOutlet NSButton *useRadians; IBOutlet NSButton *updateHistory; IBOutlet NSButton *strictSyntax; IBOutlet NSButton *decimalKey; IBOutlet NSButton *rememberErrors; IBOutlet NSButton *enterKey; IBOutlet NSButton *limitHistory; IBOutlet NSButton *precisionGuard; IBOutlet NSButton *printInts; IBOutlet NSButton *simpleCalculator; IBOutlet NSButton *printDelimiters; IBOutlet NSButton *livePrecision; IBOutlet NSButton *cModPref; IBOutlet NSButton *alternateInputPref; IBOutlet NSTextField *AnswerField; IBOutlet NSTextField *ExpressionField; IBOutlet NSTextField *limitHistoryLen; IBOutlet NSTextField *limitHistoryLenTag; IBOutlet NSTextField *bitsPref; IBOutlet NSTextField *sliderPref; IBOutlet NSTextField *altInputDecSep; IBOutlet NSTextField *altInputThouSep; IBOutlet NSDrawer *baseDrawer; IBOutlet NSStepper *bitsStepper; IBOutlet NSStepper *sliderStepper; IBOutlet NSMatrix *outputFormat; IBOutlet NSMatrix *outputFormat2; IBOutlet NSSlider *PrecisionSlider; IBOutlet id errorController; IBOutlet id historyList; IBOutlet id theKeyboard; IBOutlet id keypad; IBOutlet NSPanel *thePrefPanel; IBOutlet NSPanel *conversionWindow; IBOutlet NSPopUpButton *engineeringNotation; IBOutlet NSPopUpButton *roundingIndication; IBOutlet NSPopUpButton *convertType; IBOutlet NSTableView *variableList; IBOutlet NSTableView *convertFrom; IBOutlet NSTableView *convertTo; IBOutlet NSApplication *meta; bool just_answered; NSView *superview; } - (IBAction)clear:(id)sender; - (IBAction)enterData:(id)sender; - (IBAction)go:(id)sender; - (IBAction)setPrecision:(id)sender; - (IBAction)showKeyboardDrawer:(id)sender; - (IBAction)toggleSize:(id)sender; - (IBAction)menuFunction:(id)sender; - (IBAction)menuConstant:(id)sender; - (IBAction)setPrefs:(id)sender; - (IBAction)showPrefs:(id)sender; - (IBAction)displayPrefs:(id)sender; - (IBAction)showBaseDrawer:(id)sender; - (IBAction)shConversions:(id)sender; - (IBAction)convert:(id)sender; - (IBAction)open:(id)sender; - (IBAction)save:(id)sender; - (IBAction)saveAs:(id)sender; - (IBAction)closeWindow:(id)sender; - (IBAction)quit:(id)sender; - (IBAction)savePrefs:(id)sender; - (void)displayAnswer; - (void)displayErrno:(int)err forFile:(NSString*)filename; - (BOOL)validateMenuItem:(NSMenuItem *)anItem; - (void)openBDrawer: (id) sender; - (void)openIDrawer: (id) sender; @end #endif wcalc-2.5/src/gui/includes/simpleCalc.h0000644000175000017500000000026712115670002014777 00000000000000#ifndef SIMPLECALC_H #define SIMPLECALC_H void simpleEval(); char *simpleCalc(const unsigned char input, const char *expStr); void simpleClearEntry(); void simpleClearAll(); #endif wcalc-2.5/src/gui/includes/AboutBoxController.h0000644000175000017500000000034612115670002016510 00000000000000/* AboutBoxController */ #include @interface AboutBoxController : NSObject { IBOutlet NSWindow *aboutBox; IBOutlet NSTextField *version; } - (IBAction)closeIt:(id)sender; - (IBAction)openIt:(id)sender; @end wcalc-2.5/src/gui/includes/InspectorController.h0000644000175000017500000000061312115670002016730 00000000000000/* InspectorController */ #import @interface InspectorController : NSObject { IBOutlet NSPanel *inspectorWindow; IBOutlet NSMenuItem *affectInspectorMenu; IBOutlet NSTableView *variableList; IBOutlet NSTableView *historyList; } - (IBAction)closeIt:(id)sender; - (IBAction)openIt:(id)sender; - (IBAction)toggleIt:(id)sender; - (IBAction)onClose:(id)sender; @end wcalc-2.5/src/gui/includes/WcalcService.h0000644000175000017500000000050412115670002015267 00000000000000// // WcalcService.h // Wcalc // // Created by Kyle Wheeler on 7/19/07. // Copyright 2007 Kyle Wheeler. All rights reserved. // #import @interface WcalcService : NSObject { IBOutlet NSWindow *inspectorWindow; IBOutlet NSTableView *variableList; IBOutlet NSTableView *historyList; } @end wcalc-2.5/src/gui/includes/theDelegate.h0000644000175000017500000000031012115670003015124 00000000000000/* theDelegate */ #include @interface theDelegate : NSObject { IBOutlet NSWindow *mainWindow; } - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication*)theApp; @end wcalc-2.5/src/gui/includes/HistoryList.h0000644000175000017500000000070312115670002015213 00000000000000/* HistoryList */ #include #include "WcalcController.h" @interface HistoryList : NSObject { IBOutlet NSTextField *expressionField; IBOutlet NSTableView *theList; } - (IBAction)rowSelected:(id)sender; - (int)numberOfRowsInTableView:(NSTableView *)atv; - (id)tableView:(NSTableView *)atv objectValueForTableColumn:(NSTableColumn*)col row:(int)rowIndex; - (IBAction)clearHistory:(id)sender; - (IBAction)copyMe:(id)sender; @end wcalc-2.5/src/gui/includes/ConversionList.h0000644000175000017500000000060012115670002015673 00000000000000/* ConversionList */ #include @interface ConversionList : NSObject { IBOutlet NSTableView *toList; IBOutlet NSTableView *fromList; IBOutlet NSPopUpButton *theType; } - (int)numberOfRowsInTableView:(NSTableView *)atv; - (id)tableView:(NSTableView *)atv objectValueForTableColumn:(NSTableColumn*)col row:(int)rowIndex; - (IBAction)newType:(id)sender; @end wcalc-2.5/src/gui/includes/VariableList.h0000644000175000017500000000107512115670003015303 00000000000000/* VariableList */ #include @interface VariableList : NSObject { IBOutlet NSTableView *theList; } - (int)numberOfRowsInTableView:(NSTableView *)aTableView; - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn*) aTableColumn row:(int)rowIndex; - (void)tableView:(NSTableView*)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn*)aTableColumn row:(int)rowIndex; - (IBAction)newVariable:(id)sender; - (IBAction)delVariable:(id)sender; - (IBAction)clearVariables:(id)sender; - (IBAction)copyMe:(id)sender; @end wcalc-2.5/src/gui/includes/PersVarList.h0000644000175000017500000000045612115670004015143 00000000000000/* PersVarList */ #include #include "list.h" @interface PersVarList : NSObject { IBOutlet NSTableView *theList; IBOutlet NSWindow *theWindow; } - (IBAction)addVar:(id)sender; - (IBAction)clearVars:(id)sender; - (IBAction)delVar:(id)sender; - (IBAction)showList:(id)sender; @end wcalc-2.5/src/gui/includes/OldVariableList.h0000644000175000017500000000113112115670004015734 00000000000000/* * VariableList.h * Wcalc * * Created by Kyle Wheeler on Sun Jan 20 2002. * Copyright (c) 2001 Kyle Wheeler. All rights reserved. * */ #ifndef VARIABLELIST_H #define VARIABLELIST_H #import @interface NSTableDataSource : NSObject { } - (int)numberOfRowsInTableView:(NSTableView *)aTableView; - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn*) aTableColumn row:(int)rowIndex; - (void)tableView:(NSTableView*)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn*)aTableColumn row:(int)rowIndex; @end #endif VARIABLELIST_H wcalc-2.5/src/gui/ConversionList.m0000644000175000017500000000300412115731246014103 00000000000000#include "conversion.h" #include "ConversionList.h" @implementation ConversionList - (IBAction)newType:(id)sender { if ([toList selectedRow]>-1) [toList deselectAll:sender]; if ([fromList selectedRow]>-1) [fromList deselectAll:sender]; [toList reloadData]; [fromList reloadData]; } - (int)numberOfRowsInTableView:(NSTableView *)atv { switch ([theType indexOfSelectedItem]) { case LENGTH_C: return LENGTH_UNIT_COUNT; case AREA_C: return AREA_UNIT_COUNT; case VOLUME_C: return VOLUME_UNIT_COUNT; case MASS_C: return MASS_UNIT_COUNT; case SPEED_C: return SPEED_UNIT_COUNT; case POWER_C: return POWER_UNIT_COUNT; case FORCE_C: return FORCE_UNIT_COUNT; case ACCELERATION_C: return ACCELERATION_UNIT_COUNT; case TEMPERATURE_C: return TEMPERATURE_UNIT_COUNT; case ANGLE_C: return ANGLE_UNIT_COUNT; case PRESSURE_C: return PRESSURE_UNIT_COUNT; default: return 0; } } - (id)tableView:(NSTableView *)atv objectValueForTableColumn:(NSTableColumn*)col row:(int)rowIndex { int type = [theType indexOfSelectedItem]; static NSString * reamur = NULL; if (! reamur) { reamur = [NSString stringWithFormat:@"R%Caumur", 0x00e9]; [reamur retain]; } if (type != TEMPERATURE_C) { return [NSString stringWithUTF8String:conversions[type][rowIndex].name]; } else { switch (rowIndex) { case KELVIN: return @"Kelvin"; case CELSIUS: return @"Celsius"; case RANKINE: return @"Rankine"; case FARENHEIT: return @"Farenheit"; case REAUMUR: return reamur; default: return @"UNKNOWN"; } } } @end wcalc-2.5/src/gui/ErrorController.m0000644000175000017500000000101512115731241014252 00000000000000#include "ErrorController.h" @implementation ErrorController - (IBAction)closeAlert:(id)sender { [errorMessage setString:@""]; [errorDialog close]; } - (IBAction)showAlert:(id)sender { [errorDialog makeKeyAndOrderFront:self]; [errorDialog center]; } - (IBAction)throwAlert:(NSString *)message { [errorDialog makeKeyAndOrderFront:self]; [errorDialog center]; [errorMessage setEditable:true]; [errorMessage insertText:message]; [errorMessage insertText:@"\n"]; [errorMessage setEditable:false]; NSBeep(); } @end wcalc-2.5/src/gui/HistoryList.m0000644000175000017500000000364512115731236013431 00000000000000#include "historyManager.h" #include "HistoryList.h" @implementation HistoryList - (int)numberOfRowsInTableView:(NSTableView *)atv { return historyLength(); } /* returns the correct text for a given column and row */ - (id)tableView:(NSTableView *)atv objectValueForTableColumn:(NSTableColumn*)col row:(int)rowIndex { char * val; if ([[col identifier] isEqualToString:@"history"]) val = historynum(rowIndex,1); else val = historynum(rowIndex,2); if (! val) return @"BAD ROW (history manager)"; return [NSString stringWithUTF8String:val]; } - (IBAction)rowSelected:(id)sender { int row = [sender selectedRow]; // printf("selected: %i\n",[sender selectedRow]); if (row > -1) { [expressionField setStringValue:[NSString stringWithUTF8String:historynum([sender selectedRow],1)]]; } [expressionField selectText:self]; } - (IBAction)clearHistory:(id)sender { clearHistory(); [theList reloadData]; } - (IBAction)copyMe:(id)sender { NSPasteboard* pboard=[NSPasteboard generalPasteboard]; NSString *theString = @""; NSIndexSet* rowEnumerator=[theList selectedRowIndexes]; unsigned int theIndex=0; // Set the pasteboard types you want here. [pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self]; theIndex = [rowEnumerator firstIndex]; do { // Here, you'd look up the data in your data source instead, and add data to the pasteboard for one or more of the types. theString = [theString stringByAppendingFormat:@"%s\t%s\n", historynum(theIndex,1), historynum(theIndex,2)]; } while ((theIndex = [rowEnumerator indexGreaterThanIndex:theIndex]) != NSNotFound); [pboard setString:theString forType:NSStringPboardType]; } // ** Make sure we don't enable the copy menu item unless there is something to copy. - (BOOL)validateMenuItem:(id )menuItem { if ([menuItem tag]==666) { return ([theList numberOfSelectedRows]>0); } return YES; } @end wcalc-2.5/src/gui/main.m0000644000175000017500000000140212115731225012043 00000000000000// // main.m // Wcalc // // Created by Kyle Wheeler on Thu Jan 17 2002. // Copyright (c) 2001 Kyle Wheeler. All rights reserved. // #include #include "calculator.h" /* needed to set standard_output = 0 */ #include "variables.h" /* needed to run variable initialization */ #include "WcalcService.h" /* needed to init the service */ int main(int argc, const char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; WcalcService* wserv = [[WcalcService alloc] init]; int retval; initvar(); standard_output = 0; NSRegisterServicesProvider(wserv,@"Wcalc"); [NSApp setServicesProvider:wserv]; retval = NSApplicationMain(argc, argv); [pool release]; exit(0); return 0; } wcalc-2.5/src/gui/Makefile.in0000664000175000017500000002667012451433376013037 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' 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 = src/gui DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/readline.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/common/includes/config.h 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) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GMP_CPPFLAGS = @GMP_CPPFLAGS@ GMP_LDFLAGS = @GMP_LDFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPFR_CPPFLAGS = @MPFR_CPPFLAGS@ MPFR_LDFLAGS = @MPFR_LDFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = includes/WcalcController.h WcalcController.m \ includes/AboutBoxController.h AboutBoxController.m \ includes/ConversionList.h ConversionList.m \ includes/ErrorController.h ErrorController.m \ includes/HistoryList.h HistoryList.m \ includes/InspectorController.h InspectorController.m \ includes/MyTextField.h MyTextField.m \ includes/OldVariableList.h OldVariableList.m \ includes/PersVarList.h PersVarList.m \ includes/VariableList.h VariableList.m \ includes/WcalcService.h WcalcService.m \ includes/theDelegate.h theDelegate.m \ main.m \ includes/simpleCalc.h simpleCalc.c all: all-am .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 src/gui/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/gui/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(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): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: wcalc-2.5/src/gui/InspectorController.m0000644000175000017500000000215012115731217015133 00000000000000#import "InspectorController.h" @implementation InspectorController - (IBAction)closeIt:(id)sender { [inspectorWindow close]; } - (IBAction)openIt:(id)sender { NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; [prefs setObject:@"YES" forKey:@"historyShowing"]; [affectInspectorMenu setTitle:@"Hide Inspector"]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onClose:) name:NSWindowWillCloseNotification object:inspectorWindow]; [variableList reloadData]; [historyList reloadData]; [inspectorWindow setBecomesKeyOnlyIfNeeded:YES]; [inspectorWindow orderFront:self]; } - (IBAction)toggleIt:(id)sender { if ([inspectorWindow isVisible]) { [self closeIt:sender]; } else { [self openIt:sender]; } } - (IBAction)onClose:(id)sender { NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowWillCloseNotification object:inspectorWindow]; [prefs setObject:@"NO" forKey:@"historyShowing"]; [affectInspectorMenu setTitle:@"Show Inspector"]; } @end wcalc-2.5/src/gui/simpleCalc.c0000644000175000017500000000752412115731254013176 00000000000000#include "simpleCalc.h" #include "calculator.h" #include "number.h" #include "string_manip.h" #include // for isdigit #include // for strcmp/strlen/stpcpy/strdup #include // for calloc #include static char append = 1; static Number cur_number; static Number prev_number; static unsigned char operationPending = 0; void simpleCalcInit(); void simpleCalcEval(const unsigned char op) { Dprintf("op: %c\n", op); switch (op) { case '+': simple_exp(prev_number, prev_number, wplus, cur_number); break; case '-': simple_exp(prev_number, prev_number, wminus, cur_number); break; case '*': simple_exp(prev_number, prev_number, wmult, cur_number); break; case '/': simple_exp(prev_number, prev_number, wdiv, cur_number); break; default: num_set(prev_number, cur_number); break; } } char *simpleCalc(const unsigned char input, const char *expStr) { unsigned int expStrLen = strlen(expStr); simpleCalcInit(); Dprintf("simpleCalc: %c, %s\n", input, expStr); Dprintf(" ~ cur: %f, prev: %f\n", num_get_d(cur_number), num_get_d(prev_number)); switch (input) { case '+': case '-': case '*': case '/': { char * expdup = strdup(expStr); // Americanize the numbers if (conf.in_thou_delimiter != 0) { strstrip(conf.in_thou_delimiter, expdup); } else { strstrip(conf.thou_delimiter, expdup); } if (conf.in_dec_delimiter != 0 && conf.in_dec_delimiter != '.') { strswap(conf.in_dec_delimiter, '.', expdup); } else if (conf.dec_delimiter != '.') { strswap(conf.dec_delimiter, '.', expdup); } // ... and now, depending on the state... if (operationPending) { num_set_str(cur_number, expdup, 10); free(expdup); simpleCalcEval(operationPending); operationPending = input; append = 0; set_prettyanswer(prev_number); return strdup(pretty_answer); } else { num_set_str(prev_number, expdup, 10); free(expdup); operationPending = input; append = 0; return strdup(expStr); } } break; case '=': append = 0; { char * expdup = strdup(expStr); // Americanize the numbers if (conf.in_thou_delimiter != 0) { strstrip(conf.in_thou_delimiter, expdup); } else { strstrip(conf.thou_delimiter, expdup); } if (conf.in_dec_delimiter != 0 && conf.in_dec_delimiter != '.') { strswap(conf.in_dec_delimiter, '.', expdup); } else if (conf.dec_delimiter != '.') { strswap(conf.dec_delimiter, '.', expdup); } // ... and now, depending on the state... if (! operationPending) { num_set_str(prev_number, expdup, 10); free(expdup); } else { num_set_str(cur_number, expdup, 10); free(expdup); simpleCalcEval(operationPending); operationPending = 0; } } set_prettyanswer(prev_number); return NULL; // This should cause it to go through the displayAnswer logic break; default: if (input == conf.dec_delimiter || isdigit(input)) { char *newStr; if (append && (strcmp("0",expStr) || input == conf.dec_delimiter)) { newStr = malloc(expStrLen + 2); snprintf(newStr, expStrLen + 2, "%s%c", expStr, input); } else { newStr = malloc(2); snprintf(newStr, 2, "%c", input); append = 1; } return newStr; } } return NULL; } void simpleClearEntry() { simpleCalcInit(); num_set_ui(cur_number, 0); } void simpleCalcInit() { static int initialized = 0; if (!initialized) { num_init(cur_number); num_init(prev_number); num_init(last_answer); num_init_set_ui(cur_number, 0); num_init_set_ui(last_answer, 0); initialized = 1; } } void simpleClearAll() { simpleCalcInit(); num_set_ui(cur_number, 0); num_set_ui(last_answer, 0); num_set_ui(prev_number, 0); operationPending = 0; } wcalc-2.5/src/gui/VariableList.m0000644000175000017500000000702512115731227013511 00000000000000#include "variables.h" #include "calculator.h" #include "string_manip.h" #include "VariableList.h" #include "number.h" @implementation VariableList // needs to be REALLY fast - (int)numberOfRowsInTableView:(NSTableView *)aTableView { return numvars(); } // needs to be fast - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn*)col row:(int)rowIndex { struct variable *keyval; static struct variable *keyval_cache = NULL; static int rowIndex_cache = -1; if (rowIndex == rowIndex_cache) { rowIndex_cache = -1; keyval = keyval_cache; } else { rowIndex_cache = rowIndex; keyval = keyval_cache = getrealnvar(rowIndex); } if (! keyval) return @"BAD ROW (VariableList)"; if ([[col identifier] isEqualToString:@"value"]) { if (keyval->exp) return [NSString stringWithUTF8String:keyval->expression]; else return [NSString stringWithUTF8String:print_this_result(keyval->value)]; } else if ([[col identifier] isEqualToString:@"variable"]) { return [NSString stringWithUTF8String:(keyval->key)]; } else { return @"BAD COLUMN"; } } - (void)tableView:(NSTableView*)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn*)col row:(int)rowIndex { struct variable *theval = getrealnvar(rowIndex); NSString *ch = [col identifier]; // printf("Column %s, Row %i was %s,%s becomes %s\n", [ch UTF8String], rowIndex, theval->key, theval->value, [anObject UTF8String]); if ([ch isEqualToString:@"value"]) { char * input=strdup([anObject UTF8String]); if (justnumbers(input)) { Number la; num_init_set(la, last_answer); parseme(input); num_set(theval->value, last_answer); theval->exp = 0; num_set(last_answer, la); num_free(la); } else { theval->expression = input; theval->exp = 1; } } else if ([ch isEqualToString:@"variable"]) { free(theval->key); theval->key = strdup([anObject UTF8String]); strstrip(' ',theval->key); } } - (IBAction)newVariable:(id)sender { char varname[20]; int i=1; Number blank; num_init_set_ui(blank,0); sprintf(varname,"NewVariable%i",i); while(varexists(varname)) { ++i; sprintf(varname,"NewVariable%i",i); } putval(varname,blank,NULL); [theList reloadData]; } - (IBAction)delVariable:(id)sender { if ([theList selectedRow] > -1) { delnvar([theList selectedRow]); [theList reloadData]; } } - (IBAction)clearVariables:(id)sender { int i, total=numvars(); for (i=0; ikey, keyval->exp?keyval->expression:print_this_result(keyval->value)]; } } while ((theIndex = [rowEnumerator indexGreaterThanIndex:theIndex]) != NSNotFound); [pboard setString:theString forType:NSStringPboardType]; } // ** Make sure we don't enable the copy menu item unless there is something to copy. - (BOOL)validateMenuItem:(id )menuItem { if ([menuItem tag]==666) { return ([theList numberOfSelectedRows]>0); } return YES; } @end wcalc-2.5/src/gui/MyTextField.m0000644000175000017500000000620612115731251013323 00000000000000#include "MyTextField.h" #include "calculator.h" #include "variables.h" #include "simpleCalc.h" @implementation MyTextField - (void)keyDown:(NSEvent*) theEvent { printf("mtf keydown\n"); fflush(NULL); } - (void)keyUp:(NSEvent*) theEvent { static char * ret = NULL; int keycode = [theEvent keyCode]; //printf("mtf keyup\n"); fflush(NULL); if (! conf.simple_calc) { //printf("not simple_calc\n"); switch (keycode) { case 71: // the clear button [self setStringValue:@""]; //[self selectText:self]; break; case 81: // = // case 24: { char * temp; extern NSButton *e; extern NSTextField *ef; temp = strdup([[ef stringValue] UTF8String]); while (strlen(temp) && temp[strlen(temp)-1]=='=') { temp[strlen(temp)-1] = '\0'; } [ef setStringValue:[NSString stringWithUTF8String:temp]]; if (temp) free(temp); [e performClick:self]; break; } case 123: // leftarrow case 124: // rightarrow case 126: // uparrow case 125: // downarrow break; default: // printf("keyup %i => ", keycode); // fflush(NULL); // printf("%s\n", [[theEvent characters] UTF8String]); break; } } else { //printf("here, keycode: %i\n", keycode); switch(keycode) { case 123: // leftarrow case 124: // rightarrow case 126: // uparrow case 125: // downarrow break; case 71: if (! [[self stringValue] isEqualToString:@"0"]) { [self setStringValue:@"0"]; [self selectText:self]; simpleClearEntry(); } else if (! [[AnswerField stringValue] isEqualToString:@"0"]) { [AnswerField setStringValue:@"0"]; [self selectText:self]; simpleClearAll(); } break; case 76: // enter { char *expr = strdup([[self stringValue] UTF8String]); ret = simpleCalc('=', expr); if (ret) { [self setStringValue:[NSString stringWithUTF8String:ret]]; } else { [mainController displayAnswer]; [self setStringValue:[AnswerField stringValue]]; ret = strdup([[AnswerField stringValue] UTF8String]); } free(expr); break; } case 117: // delete case 51: // backspace if (! [[self stringValue] isEqualToString:@"0"]) { [self setStringValue:@"0"]; [self selectText:self]; simpleClearEntry(); } else { [AnswerField setStringValue:@"0"]; [self selectText:self]; simpleClearAll(); } if (ret) { free(ret); } ret = strdup("0"); break; default: { char thechar = [[theEvent characters] characterAtIndex:0]; char * expr; unsigned len = [[self stringValue] length]; if (ret) { expr = ret; } else { expr = strdup([[[self stringValue] substringToIndex:len-1] UTF8String]); } ret = simpleCalc(thechar,expr); if (ret) { [self setStringValue:[NSString stringWithUTF8String:ret]]; } else { [mainController displayAnswer]; [self setStringValue:[AnswerField stringValue]]; ret = strdup([[AnswerField stringValue] UTF8String]); } free(expr); break; } } } } - (BOOL) acceptsFirstResponder { return YES; } - (BOOL) refusesFirstResponder { return NO; } @end wcalc-2.5/src/gui/WcalcController.m0000644000175000017500000012220112115731234014215 00000000000000#include #include "calculator.h" #include "variables.h" #include "conversion.h" #include "ErrorController.h" #include "historyManager.h" #include "WcalcController.h" #include "string_manip.h" #include "files.h" #include "MyTextField.h" #include "simpleCalc.h" #include "list.h" #include "number.h" #define KEYPAD_HEIGHT 165 #define MIN_WINDOW_WIDTH 171 #define MIN_WINDOW_HEIGHT_TOGGLED 112 #define MIN_WINDOW_HEIGHT_UNTOGGLED 277 #define FIELD_WIDTH_DIFFERENCE 22 #define MAX_WINDOW_SIZE 10000 static char update_history = 0; NSButton *e; NSTextField *ef; static NSString *curFile = NULL; static pthread_mutex_t displayLock; @implementation WcalcController - (IBAction)toggleSize:(id)sender { static BOOL shrinking = TRUE; NSRect mainwindow = [mainWindow frame]; NSRect expr = [ExpressionField frame]; NSRect prec = [PrecisionSlider frame]; NSRect ans = [AnswerField frame]; NSSize w; NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; if (shrinking) { // if removing the keypad, change the window height mainwindow.size.height -= KEYPAD_HEIGHT; mainwindow.origin.y += KEYPAD_HEIGHT; // this is set in case the calc starts up toggled (under other // conditions it is not strictly necessary, because the ExpressionField // has achieved the correct size automatically expr.size.height = mainwindow.size.height - ans.size.height - prec.size.height - 57 /* the size of the rest of the window, including title bar */; [sizeToggleMenu setTitle:@"Show Keypad"]; } else { // if adding the keypad, change the window height mainwindow.size.height += KEYPAD_HEIGHT; mainwindow.origin.y -= KEYPAD_HEIGHT; mainwindow.size.width = MIN_WINDOW_WIDTH; [sizeToggleMenu setTitle:@"Hide Keypad"]; } expr.size.width = prec.size.width = mainwindow.size.width - FIELD_WIDTH_DIFFERENCE; if (shrinking) { [keypad removeFromSuperview]; expr.origin.y -= KEYPAD_HEIGHT; prec.origin.y -= KEYPAD_HEIGHT; } else { expr.origin.y += KEYPAD_HEIGHT; prec.origin.y += KEYPAD_HEIGHT; } [ExpressionField removeFromSuperview]; [PrecisionSlider removeFromSuperview]; if (sender != 0) { [mainWindow setFrame:mainwindow display:TRUE animate:TRUE]; } else { [mainWindow setFrame:mainwindow display:FALSE animate:FALSE]; } if (! shrinking) { [superview addSubview:keypad]; w.width = MIN_WINDOW_WIDTH; w.height = MIN_WINDOW_HEIGHT_UNTOGGLED + (ans.size.height - 21); [mainWindow setMinSize:w]; w.width = MIN_WINDOW_WIDTH; w.height = MAX_WINDOW_SIZE; [mainWindow setMaxSize:w]; [prefs setObject:@"NO" forKey:@"toggled"]; } else { w.width = MIN_WINDOW_WIDTH; w.height = MIN_WINDOW_HEIGHT_TOGGLED + (ans.size.height - 21); [mainWindow setMinSize:w]; w.width = MAX_WINDOW_SIZE; w.height = MAX_WINDOW_SIZE; [mainWindow setMaxSize:w]; [prefs setObject:@"YES" forKey:@"toggled"]; } [ExpressionField setFrame:expr]; [PrecisionSlider setFrame:prec]; [superview addSubview:ExpressionField]; [superview addSubview:PrecisionSlider]; [ExpressionField selectText:sender]; shrinking = ! shrinking; } - (IBAction)clear:(id)sender { if ([[ExpressionField stringValue] length]) { [ExpressionField setStringValue:@""]; [ExpressionField selectText:self]; } else if ([[AnswerField stringValue] length]) { [AnswerField setStringValue:@""]; [ExpressionField selectText:self]; } } - (IBAction)menuConstant:(id)sender { NSString *str = [ExpressionField stringValue]; NSString *str2 = @"error!"; switch ([sender tag]) { case 1: str2 = [NSString stringWithFormat:@"%C", 0x03c0]; break; case 2: str2 = @"e"; break; case 3: str2 = [NSString stringWithFormat:@"%C", 0x03b3]; break; case 4: str2 = @"g"; break; case 5: str2 = @"Cc"; break; case 8: str = @"K"; break; case 101: str2 = @"Z0"; break; case 102: str2 = [NSString stringWithFormat:@"%C0", 0x03b5]; break; case 103: str2 = [NSString stringWithFormat:@"%C0", 0x03bc]; break; case 104: str2 = @"G"; break; case 105: str2 = @"h"; break; case 106: str2 = @"c"; break; case 201: str2 = [NSString stringWithFormat:@"%CB", 0x03bc]; break; case 202: str2 = [NSString stringWithFormat:@"%CN", 0x03bc]; break; case 203: str2 = @"G0"; break; case 204: str2 = @"ec"; break; case 205: str2 = @"Kj"; break; case 206: str2 = @"Rk"; break; case 207: str2 = [NSString stringWithFormat:@"%C0", 0x03a6]; break; case 301: str2 = [NSString stringWithFormat:@"M%C", 0x03b1]; break; case 302: str2 = @"a0"; break; case 303: str2 = @"Md"; break; case 304: str2 = @"Me"; break; case 305: str2 = @"re"; break; case 306: str2 = @"eV"; break; case 307: str2 = @"Gf"; break; case 308: str2 = [NSString stringWithFormat:@"%C", 0x03b1]; break; case 309: str2 = @"Eh"; break; case 310: str2 = @"Mh"; break; case 311: str2 = [NSString stringWithFormat:@"m%C", 0x03bc]; break; case 312: str2 = @"Mn"; break; case 313: str2 = @"Mp"; break; case 314: str2 = [NSString stringWithFormat:@"R%C", 0x221E]; break; case 315: str2 = [NSString stringWithFormat:@"M%C", 0x03c4]; break; case 401: str2 = @"u"; break; case 402: str2 = @"Na"; break; case 403: str2 = @"k"; break; case 404: str2 = @"F"; break; case 405: str2 = @"c1"; break; case 406: str2 = @"n0"; break; case 407: str2 = @"R"; break; case 408: str2 = @"Vm"; break; case 409: str2 = @"c2"; break; case 410: str2 = [NSString stringWithFormat:@"%C", 0x03c3]; break; case 411: str2 = @"b"; break; case 6: str2 = @"random"; break; case 7: str2 = @"irandom"; break; default: return; } if ([str length]) { NSString *str3 = [NSString stringWithFormat:@"%C",0x00d7]; [ExpressionField setStringValue:[str stringByAppendingString:[str3 stringByAppendingString:str2]]]; } else { [ExpressionField setStringValue:str2]; } } - (IBAction)menuFunction:(id)sender { NSString *str = [[ExpressionField stringValue] stringByAppendingString:@")"]; NSString *str2; if ([str length] == 1) str = @""; switch ([sender tag]) { case 1: str2 = @"sin("; break; case 2: str2 = @"cos("; break; case 3: str2 = @"tan("; break; case 4: str2 = @"asin("; break; case 5: str2 = @"acos("; break; case 6: str2 = @"atan("; break; case 7: str2 = @"sinh("; break; case 8: str2 = @"cosh("; break; case 9: str2 = @"tanh("; break; case 10: str2 = @"asinh("; break; case 11: str2 = @"acosh("; break; case 12: str2 = @"atanh("; break; case 13: str2 = @"log("; break; case 14: str2 = @"ln("; break; case 15: str2 = @"round("; break; case 16: str2 = @"abs("; break; case 17: str2 = @"sqrt("; break; case 18: str2 = @"floor("; break; case 19: str2 = @"ceil("; break; case 20: str2 = @"cbrt("; break; case 21: str2 = @"logtwo("; break; case 22: str2 = @"cot("; break; case 23: str2 = @"acot("; break; case 24: str2 = @"coth("; break; case 25: str2 = @"acoth("; break; case 26: str2 = @"rand("; break; case 27: str2 = @"irand("; break; case 28: str2 = @"Gamma("; break; case 29: str2 = @"lnGamma("; break; case 30: str2 = @"zeta("; break; case 31: str2 = @"sec("; break; case 32: str2 = @"csc("; break; case 33: str2 = @"asec("; break; case 34: str2 = @"acsc("; break; case 35: str2 = @"sech("; break; case 36: str2 = @"csch("; break; case 37: str2 = @"asech("; break; case 38: str2 = @"acsch("; break; case 39: str2 = @"eint("; break; case 40: str2 = @"sinc("; break; case 41: str2 = @"exp("; break; case 42: str2 = @"fact("; break; case 43: str2 = @"comp("; break; default: return; } [ExpressionField setStringValue:[str2 stringByAppendingString:str]]; } - (void)awakeFromNib { NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSRect w; NSSize bounds; int prefsVersion; Dprintf("awakeFromNib\n"); prefsVersion = [prefs integerForKey:@"initialized"]; Dprintf("prefsVersion: %i\n", prefsVersion); if (prefsVersion < 1) { Dprintf("Upgrading prefs to v1\n"); [prefs setObject:@"-1" forKey:@"precision"]; [prefs setObject:@"NO" forKey:@"historyDuplicatesAllowed"]; [prefs setObject:@"NO" forKey:@"flagUndefinedVariables"]; [prefs setObject:@"YES" forKey:@"useRadians"]; [prefs setObject:@"0" forKey:@"outputFormat"]; [prefs setObject:@"YES" forKey:@"printPrefixes"]; [prefs setObject:@"NO" forKey:@"updateHistory"]; [prefs setObject:@"YES" forKey:@"strictSyntax"]; [prefs setObject:@"0" forKey:@"roundingIndication"]; [prefs setObject:@"NO" forKey:@"historyShowing"]; [prefs setObject:@"YES" forKey:@"rememberErrors"]; [prefs setObject:@"NO" forKey:@"baseShowing"]; [prefs setObject:@"YES" forKey:@"precisionGuard"]; [prefs setObject:@"NO" forKey:@"historyLimit"]; [prefs setObject:@"1000" forKey:@"historyLimitLength"]; [prefs setObject:@"NO" forKey:@"printInts"]; [prefs setObject:@"NO" forKey:@"simpleCalc"]; [prefs setObject:@"NO" forKey:@"printDelimiters"]; } if (prefsVersion < 2) { Dprintf("Upgrading prefs to v2\n"); [prefs setObject:@"YES" forKey:@"livePrecision"]; [prefs setObject:@"1024" forKey:@"internalPrecision"]; [prefs setObject:@"YES" forKey:@"cModStyle"]; } if (prefsVersion < 3) { Dprintf("Upgrading prefs to v3\n"); [prefs setObject:@"3" forKey:@"initialized"]; [prefs setObject:@"147" forKey:@"maxSliderPrecision"]; } if (prefsVersion < 4) { Dprintf("Upgrading prefs to v4\n"); [prefs setObject:@"4" forKey:@"initialized"]; [prefs setObject:@"1" forKey:@"engineeringNotation"]; } if (prefsVersion < 5) { Dprintf("Upgrading prefs to v5\n"); [prefs setObject:@"5" forKey:@"initialized"]; [prefs setObject:@"" forKey:@"alternateInputDecimalSeparator"]; [prefs setObject:@"" forKey:@"alternateInputThousandsSeparator"]; } conf.precision = [prefs integerForKey:@"precision"]; switch([prefs integerForKey:@"engineeringNotation"]) { case 1: conf.engineering = automatic; break; case 2: conf.engineering = never; break; case 3: conf.engineering = always; break; } conf.picky_variables = [prefs boolForKey:@"flagUndefinedVariables"]; conf.use_radians = [prefs boolForKey:@"useRadians"]; conf.output_format = [prefs integerForKey:@"outputFormat"]; conf.print_prefixes = [prefs boolForKey:@"printPrefixes"]; /* conf.strict_syntax = [prefs boolForKey:@"strictSyntax"]; */ conf.rounding_indication = [prefs integerForKey:@"roundingIndication"]; conf.precision_guard = [prefs boolForKey:@"precisionGuard"]; conf.print_ints = [prefs boolForKey:@"printInts"]; conf.print_commas = [prefs boolForKey:@"printDelimiters"]; conf.simple_calc = [prefs boolForKey:@"simpleCalc"]; conf.live_precision = [prefs boolForKey:@"livePrecision"]; [PrecisionSlider setMaxValue:[prefs floatForKey:@"maxSliderPrecision"]]; /* history preferences */ allow_duplicates = [prefs boolForKey:@"historyDuplicatesAllowed"]; update_history = [prefs boolForKey:@"updateHistory"]; conf.remember_errors = [prefs boolForKey:@"rememberErrors"]; conf.history_limit = [prefs boolForKey:@"historyLimit"]; conf.history_limit_len = [prefs integerForKey:@"historyLimitLen"]; { NSDictionary *temp = [prefs dictionaryForKey:@"persistentVariables"]; NSEnumerator *enumerator = [temp keyEnumerator]; id key; while ((key = [enumerator nextObject])) { putexp(strdup([key UTF8String]),strdup([[temp objectForKey:key] UTF8String]),"preloaded"); } } if ([prefs integerForKey:@"internalPrecision"] < 32) { [prefs setObject:@"1024" forKey:@"internalPrecision"]; } if ([prefs integerForKey:@"internalPrecision"] > 4096) { [prefs setObject:@"4096" forKey:@"internalPrecision"]; } init_numbers(); num_set_default_prec([prefs integerForKey:@"internalPrecision"]); Dprintf("preferences read\n"); [PrecisionSlider setIntValue:conf.precision]; Dprintf("precision slider\n"); just_answered = FALSE; /* Set up the character translation */ NSNumberFormatter *numFormat = [[[NSNumberFormatter alloc] init] autorelease]; if ([[numFormat decimalSeparator] length] > 0) { Dprintf("NSDecimalSeparator > 0\n"); conf.dec_delimiter = [[numFormat decimalSeparator] characterAtIndex:0]; } else { conf.dec_delimiter = '.'; } Dprintf("NSDecimalSeparator set (%c)\n", conf.dec_delimiter); if ([[numFormat groupingSeparator] length] > 0) { Dprintf("NSGroupingSeparator > 0\n"); conf.thou_delimiter = [[numFormat groupingSeparator] characterAtIndex:0]; } else { conf.thou_delimiter = 0; } Dprintf("NSGroupingSeparator set (%c)\n", conf.thou_delimiter); if ([[prefs stringForKey:@"alternateInputDecimalSeparator"] length] > 0) { conf.in_dec_delimiter = [[prefs stringForKey:@"alternateInputDecimalSeparator"] characterAtIndex:0]; Dprintf("alternate input dec sep (%c)\n", conf.in_dec_delimiter); } if ([[prefs stringForKey:@"alternateInputThousandsSeparator"] length] > 0) { conf.in_thou_delimiter = [[prefs stringForKey:@"alternateInputThousandsSeparator"] characterAtIndex:0]; Dprintf("alternate input thou sep (%c)\n", conf.in_thou_delimiter); } if (conf.in_dec_delimiter != 0) { [decimalKey setTitle:[NSString stringWithCString:&conf.in_dec_delimiter length:1]]; } else { [decimalKey setTitle:[numFormat decimalSeparator]]; Dprintf("decimalKey title set\n"); } /* reset the window to the saved setting */ superview = [keypad superview]; [keypad retain]; [PrecisionSlider retain]; [ExpressionField retain]; Dprintf("interface retained\n"); [mainWindow useOptimizedDrawing:TRUE]; [mainWindow setFrameAutosaveName:@"wcalc"]; Dprintf("frame autosave set\n"); w = [mainWindow frame]; if ([prefs boolForKey:@"toggled"]) { Dprintf("window is toggled\n"); w.size.height += KEYPAD_HEIGHT; w.origin.y -= KEYPAD_HEIGHT; [mainWindow setFrame:w display:TRUE animate:FALSE]; Dprintf("frame set\n"); [self toggleSize:0]; Dprintf("toggled\n"); } else { Dprintf("window not toggled\n"); w.size.width = MIN_WINDOW_WIDTH; [mainWindow setFrame:w display:TRUE animate:FALSE]; bounds.width = MIN_WINDOW_WIDTH; bounds.height = MIN_WINDOW_HEIGHT_UNTOGGLED; [mainWindow setMinSize:bounds]; bounds.width = MIN_WINDOW_WIDTH; bounds.height = MAX_WINDOW_SIZE; [mainWindow setMaxSize:bounds]; Dprintf("window size restored\n"); } // w = [mainWindow frame]; // bounds = [mainWindow minSize]; e = enterKey; ef = ExpressionField; /* this restores the drawer states */ if ([prefs boolForKey:@"historyShowing"]) { Dprintf("history showing\n"); [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(openIDrawer:) userInfo:nil repeats:NO]; Dprintf("history drawer displayed\n"); } if ([prefs boolForKey:@"baseShowing"]) { Dprintf("base showing\n"); [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(openBDrawer:) userInfo:nil repeats:NO]; Dprintf("base drawer displayed\n"); } Dprintf("done with drawers\n"); /* set the correct expression display for simple_calc */ if (conf.simple_calc) { Dprintf("simple calc\n"); [ExpressionField setStringValue:@"0"]; [AnswerField setStringValue:@"0"]; Dprintf("values zeroed\n"); simpleClearAll(); Dprintf("simple all cleared\n"); } num_init_set_ui(last_answer, 0); Dprintf("last answer cleared\n"); pthread_mutex_init(&displayLock,NULL); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(quit:) name:NSWindowWillCloseNotification object:mainWindow]; NSUpdateDynamicServices(); } - (void)openBDrawer: (id) sender { [baseDrawer open]; [baseMenu setTitle:@"Close Base Drawer"]; } - (void)openIDrawer: (id) sender { [inspector openIt:sender]; } - (IBAction)setPrecision:(id)sender { int last_pres=0; NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; last_pres = [prefs integerForKey:@"precision"]; if (last_pres == [PrecisionSlider intValue]) return; else last_pres = [PrecisionSlider intValue]; Dprintf("setPrecision: %i to %i\n",conf.precision,last_pres); conf.precision = last_pres; [prefs setObject:[NSString stringWithFormat:@"%i",conf.precision] forKey:@"precision"]; Dprintf("setPrecision - prefs set\n"); Dprintf("getting lock\n"); pthread_mutex_lock(&displayLock); Dprintf("locked\n"); { set_prettyanswer(last_answer); Dprintf("setPrecision - set_prettyanswer\n"); [self displayAnswer]; Dprintf("setPrecision - done\n"); } pthread_mutex_unlock(&displayLock); Dprintf("unlocked\n"); } - (IBAction)go:(id)sender { char * expression; extern char * errstring; expression = strdup([[ExpressionField stringValue] UTF8String]); parseme(expression); putval("a",last_answer,"previous answer"); /* if it isn't an error (or if you want me to remember errors) record it in the history */ if (!errstring || (errstring && !strlen(errstring)) || conf.remember_errors) { addToHistory(expression, last_answer); free(expression); } [self displayAnswer]; } - (void)displayAnswer { extern char * errstring; Dprintf("displayAnswer\n"); /* if there is an error, display it */ if (errstring && strlen(errstring)) { extern int scanerror; scanerror = 0; Dprintf("displayAnswer error %s\n",errstring); [errorController throwAlert:[NSString stringWithUTF8String:errstring]]; free(errstring); errstring = NULL; } /* display the answer */ Dprintf("displayAnswer - pretty_answer(%p)\n",pretty_answer); Dprintf("displayAnswer - %s\n",pretty_answer); [AnswerField setStringValue:[NSString stringWithFormat:@"%s",pretty_answer]]; [AnswerField setTextColor:(not_all_displayed?[NSColor redColor]:[NSColor blackColor])]; Dprintf("displayAnswer - changing size\n"); { // Make the Answerfield big enough to display the answer NSRect curFrame, newFrame; curFrame = [AnswerField frame]; Dprintf("displayAnswer - current size: %f x %f\n", curFrame.size.height, curFrame.size.width); newFrame = curFrame; // we set the height to a huge number because cellSizeForBounds only // works "within" the specified bound, which we want because we want to // limit the width. newFrame.size.height = DBL_MAX; newFrame.size = [[AnswerField cell] cellSizeForBounds:newFrame]; Dprintf("displayAnswer - needed size: %f x %f\n", newFrame.size.height, newFrame.size.width); if (curFrame.size.height != newFrame.size.height) { size_t newHeight = newFrame.size.height; int difference = newHeight - curFrame.size.height; NSRect windowFrame = [mainWindow frame]; int nonAnswerPixels = windowFrame.size.height - curFrame.size.height; NSSize ms = [mainWindow minSize]; newFrame = curFrame; newFrame.size.height = newHeight; ms.height += difference; windowFrame.size.height += difference; if (windowFrame.size.height < newFrame.size.height + nonAnswerPixels) { windowFrame.size.height = newFrame.size.height + nonAnswerPixels; } windowFrame.origin.y -= difference; curFrame = [ExpressionField frame]; [AnswerField setHidden:TRUE]; [ExpressionField setHidden:TRUE]; [mainWindow setFrame:windowFrame display:YES animate:YES]; windowFrame = [mainWindow frame]; /* At this point, the windowFrame may not be *quite* what I wanted it to be, screens being of finite size and all... so we have to recalculate the size that the AnswerField should be. */ newFrame.size.height = windowFrame.size.height - nonAnswerPixels; [mainWindow setMinSize:ms]; [AnswerField setFrame:newFrame]; [ExpressionField setFrame:curFrame]; [AnswerField setHidden:FALSE]; [ExpressionField setHidden:FALSE]; } } Dprintf("displayAnswer - refresh inspector\n"); // if the drawer is open, refresh the data. if ([inspectorWindow isVisible]) { [variableList reloadData]; [historyList reloadData]; } just_answered = TRUE; // refresh the prefs if necessary Dprintf("displayAnswer - refresh prefs\n"); if ([thePrefPanel isVisible]) [self displayPrefs:0]; Dprintf("displayAnswer - cleaning up\n"); [outputFormat2 selectCellWithTag:conf.output_format]; [ExpressionField selectText:self]; Dprintf("displayAnswer - done\n"); } - (IBAction)convert:(id)sender { int type = [convertType indexOfSelectedItem]; int from = [convertFrom selectedRow]; int to = [convertTo selectedRow]; if (type < 0 || type > MAX_TYPE) return; if (from < 0) return; if (to < 0) return; uber_conversion(last_answer, type, from, to, last_answer); set_prettyanswer(last_answer); [AnswerField setStringValue:[NSString stringWithUTF8String:(pretty_answer?pretty_answer:"Not Enough Memory")]]; putval("a",last_answer,"previous answer"); if ([inspectorWindow isVisible]) { [variableList reloadData]; } } - (IBAction)enterData:(id)sender { NSString * sent = [NSString stringWithString:[[sender attributedTitle] string]]; static short shiftdown = 0, capsdown = 0; int tag; Dprintf("enterData\n"); [ExpressionField setSelectable:FALSE]; tag = [sender tag]; switch (tag) { case 101: /* delete key on the onscreen keyboard */ if ([[ExpressionField stringValue] length] > 0) { unsigned len = [[ExpressionField stringValue] length]; [ExpressionField setStringValue:[[ExpressionField stringValue] substringToIndex:len-1]]; } break; case 100: /* clear key on the onscreen keypad */ if (!conf.simple_calc) { if ([[ExpressionField stringValue] length] > 0) { [ExpressionField setStringValue:@""]; [ExpressionField selectText:self]; } else if ([[AnswerField stringValue] length] > 0) { [AnswerField setStringValue:@""]; [ExpressionField selectText:self]; } } else { if (! [[ExpressionField stringValue] isEqualToString:@"0"]) { [ExpressionField setStringValue:@"0"]; [ExpressionField selectText:self]; simpleClearEntry(); } else { [AnswerField setStringValue:@"0"]; [ExpressionField selectText:self]; simpleClearAll(); } } break; case 102: /* caps lock key on onscreen keyboard */ if (capsdown) { [shiftKey1 setEnabled:true]; [shiftKey2 setEnabled:true]; capsdown = 0; } else { [shiftKey1 setEnabled:false]; [shiftKey2 setEnabled:false]; capsdown = 1; } break; case 103: /* shift key on onscreen keyboard */ if (shiftdown) { [shiftKey1 setState:NSOffState]; [shiftKey2 setState:NSOffState]; shiftdown = 0; } else { [shiftKey1 setState:NSOnState]; [shiftKey2 setState:NSOnState]; shiftdown = 1; } break; case 104: /* = key on onscreen keypad */ if (! conf.simple_calc) { [self go:sender]; } else { char * expr = strdup([[ExpressionField stringValue] UTF8String]); char * ret; ret = simpleCalc('=',expr); if (ret) { [ExpressionField setStringValue:[NSString stringWithUTF8String:ret]]; free(ret); } else { [self displayAnswer]; [ExpressionField setStringValue:[AnswerField stringValue]]; } free(expr); } break; case 105: /* the divide key on the onscreen keypad */ case 106: /* the minus key on the onscreen keypad */ case 107: /* the times key on the onscreen keypad */ default: if (! conf.simple_calc) { /* the real power of Wcalc */ if (just_answered == FALSE) { [ExpressionField setStringValue:[[ExpressionField stringValue] stringByAppendingString:sent]]; } else if ([sent isEqualToString:@"+"] || [sent isEqualToString:@"-"] || [sent isEqualToString:@"*"] || [sent isEqualToString:@"/"] || [sent isEqualToString:@"%"] || [sent isEqualToString:@"("] || [sent isEqualToString:@"&"] || [sent isEqualToString:@"|"] || [sent isEqualToString:[NSString stringWithFormat:@"%C",0x00f7]]) { [ExpressionField setStringValue:[[@"a" self] stringByAppendingString:sent]]; } else { [ExpressionField setStringValue:sent]; } if (shiftdown) { [shiftKey1 setState:NSOffState]; [shiftKey2 setState:NSOffState]; shiftdown = 0; } just_answered = FALSE; } else { /* stupid calculator */ char *ret, *expr; expr = strdup([[ExpressionField stringValue] UTF8String]); Dprintf("expr: %s\n",expr); switch (tag) { case 105: ret = simpleCalc('/', expr); break; case 106: ret = simpleCalc('-', expr); break; case 107: ret = simpleCalc('*', expr); break; default: ret = simpleCalc([sent characterAtIndex:0], expr); } free(expr); if (ret) { [ExpressionField setStringValue:[NSString stringWithUTF8String:ret]]; free(ret); } else { [self displayAnswer]; [ExpressionField setStringValue:[AnswerField stringValue]]; } } break; } [ExpressionField setEditable:TRUE]; } - (IBAction)shConversions:(id)sender { static char initialized = 0; if (! [conversionWindow isVisible]) { [conversionWindow makeKeyAndOrderFront:self]; if (! initialized) { [conversionWindow center]; initialized = 1; } } else { [conversionWindow close]; } } - (IBAction)showKeyboardDrawer:(id)sender { static char initialized = 0; if (! [theKeyboard isVisible]) { [theKeyboard setBecomesKeyOnlyIfNeeded:YES]; [theKeyboard orderFront:self]; if (! initialized) { [theKeyboard center]; initialized = 1; } } else { [theKeyboard close]; } } - (IBAction)showBaseDrawer:(id)sender { NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; if (! [baseDrawer state]) { [baseDrawer open]; [prefs setObject:@"YES" forKey:@"baseShowing"]; [baseMenu setTitle:@"Close Base Drawer"]; } else { [baseDrawer close]; [prefs setObject:@"NO" forKey:@"baseShowing"]; [baseMenu setTitle:@"Open Base Drawer"]; } } - (IBAction)setPrefs:(id)sender { short need_redraw = 0; short olde; NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; int tag = [sender tag]; switch (tag) { case 1: // Flag Undefined Variables olde = conf.picky_variables; conf.picky_variables = ([pickyVariables state]==NSOnState); if (olde != conf.picky_variables) { [prefs setObject:(conf.picky_variables?@"YES":@"NO") forKey:@"flagUndefinedVariables"]; } break; case 2: // Use Radians olde = conf.use_radians; conf.use_radians = ([useRadians state]==NSOnState); if (olde != conf.use_radians) { need_redraw = 2; [prefs setObject:(conf.use_radians?@"YES":@"NO") forKey:@"useRadians"]; } break; case 3: // Use Engineering Notation { int savedas = 1; olde = conf.engineering; printf("index: %i\n", [sender indexOfSelectedItem]); switch([sender indexOfSelectedItem]) { case 0: conf.engineering = automatic; savedas = 1; break; case 1: conf.engineering = never; savedas = 2; break; case 2: conf.engineering = always; savedas = 3; break; } if (olde != conf.engineering) { need_redraw = 1; printf("integet: %i\n", conf.engineering); [prefs setObject:[NSString stringWithFormat:@"%i",savedas] forKey:@"engineeringNotation"]; } } break; case 4: // Allow Duplicates in History olde = allow_duplicates; allow_duplicates = ([historyDuplicates state]==NSOnState); if (olde != allow_duplicates) { [prefs setObject:(allow_duplicates?@"YES":@"NO") forKey:@"historyDuplicatesAllowed"]; } break; case 5: // Output Format olde = conf.output_format; conf.output_format = [[sender selectedCell] tag]; if (olde != conf.output_format) { need_redraw = 1; [prefs setObject:[NSString stringWithFormat:@"%i",conf.output_format] forKey:@"outputFormat"]; [printPrefixes setEnabled:(conf.output_format!=DECIMAL_FORMAT)]; [engineeringNotation setEnabled:(conf.output_format==DECIMAL_FORMAT)]; } [outputFormat selectCellWithTag:conf.output_format]; [outputFormat2 selectCellWithTag:conf.output_format]; break; case 6: // Print Prefixes olde = conf.print_prefixes; conf.print_prefixes = ([sender state]==NSOnState); if (olde != conf.print_prefixes) { need_redraw = 1; [prefs setObject:(conf.print_prefixes?@"YES":@"NO") forKey:@"printPrefixes"]; } break; case 7: // Update History olde = update_history; update_history = ([sender state]==NSOnState); if (olde != update_history) { [prefs setObject:(update_history?@"YES":@"NO") forKey:@"updateHistory"]; } break; case 10: // Rounding Indication olde = conf.rounding_indication; conf.rounding_indication = [sender indexOfSelectedItem]; if (olde != conf.rounding_indication) { need_redraw = 1; [prefs setObject:[NSString stringWithFormat:@"%i",conf.rounding_indication] forKey:@"roundingIndication"]; } break; case 11: // Record errors in history olde = conf.remember_errors; conf.remember_errors = ([sender state]==NSOnState); if (olde != conf.remember_errors) { [prefs setObject:(conf.remember_errors?@"YES":@"NO") forKey:@"rememberErrors"]; } break; case 12: // Conservative precision olde = conf.precision_guard; conf.precision_guard = ([sender state]==NSOnState); if (olde != conf.precision_guard) { need_redraw = 2; [prefs setObject:(conf.precision_guard?@"YES":@"NO") forKey:@"precisionGuard"]; } break; case 13: // History length limit toggle olde = conf.history_limit; conf.history_limit = ([sender state]==NSOnState); [limitHistoryLen setEnabled:conf.history_limit]; [limitHistoryLenTag setEnabled:conf.history_limit]; if (olde != conf.history_limit) { [prefs setObject:(conf.history_limit?@"YES":@"NO") forKey:@"historyLimit"]; } break; case 14: // History length limit if ((unsigned)[sender intValue] != conf.history_limit_len) { conf.history_limit_len = [sender intValue]; [prefs setObject:[NSString stringWithFormat:@"%i",conf.history_limit_len] forKey:@"historyLimitLength"]; } break; case 15: // Print ints olde = conf.print_ints; conf.print_ints = ([sender state]==NSOnState); if (olde != conf.print_ints) { need_redraw = 1; [prefs setObject:(conf.print_ints?@"YES":@"NO") forKey:@"printInts"]; } break; case 16: // Simple calculator olde = conf.simple_calc; conf.simple_calc = ([sender state]==NSOnState); if (olde != conf.simple_calc) { [prefs setObject:(conf.simple_calc?@"YES":@"NO") forKey:@"simpleCalc"]; if (conf.simple_calc) { [ExpressionField setStringValue:@"0"]; [AnswerField setStringValue:@"0"]; simpleClearAll(); } else { [ExpressionField setStringValue:@""]; [AnswerField setStringValue:@""]; } /* disable irrelevant preferences */ [historyDuplicates setEnabled:!conf.simple_calc]; [limitHistory setEnabled:!conf.simple_calc]; [limitHistoryLen setEnabled:!conf.simple_calc]; [limitHistoryLenTag setEnabled:!conf.simple_calc]; [pickyVariables setEnabled:!conf.simple_calc]; [rememberErrors setEnabled:!conf.simple_calc]; [updateHistory setEnabled:!conf.simple_calc]; [useRadians setEnabled:!conf.simple_calc]; } break; case 17: olde = conf.print_commas; conf.print_commas = ([sender state]==NSOnState); if (olde != conf.print_commas) { need_redraw = 1; [prefs setObject:(conf.print_ints?@"YES":@"NO") forKey:@"printDelimiters"]; } break; case 18: if ((unsigned)[sender intValue] != num_get_default_prec()) { [bitsStepper takeIntValueFrom:sender]; num_set_default_prec([bitsStepper intValue]); // to handle limits placed on bitsStepper [prefs setObject:[NSString stringWithFormat:@"%lu",num_get_default_prec()] forKey:@"internalPrecision"]; } break; case 19: if ((unsigned)[bitsStepper intValue] != num_get_default_prec()) { num_set_default_prec([bitsStepper intValue]); need_redraw = 2; [bitsPref takeIntValueFrom:bitsStepper]; [prefs setObject:[NSString stringWithFormat:@"%lu",num_get_default_prec()] forKey:@"internalPrecision"]; } break; case 20: olde = conf.live_precision; conf.live_precision = ([sender state] == NSOnState); if (olde != conf.print_commas) { [prefs setObject:(conf.live_precision?@"YES":@"NO") forKey:@"livePrecision"]; [PrecisionSlider setContinuous:(conf.live_precision?true:false)]; } break; case 21: olde = conf.c_style_mod; conf.c_style_mod = ([sender state] == NSOnState); if (olde != conf.c_style_mod) { need_redraw = 2; [prefs setObject:(conf.c_style_mod?@"YES":@"NO") forKey:@"cModStyle"]; } break; case 22: if ((unsigned)[sliderStepper intValue] != [PrecisionSlider maxValue]) { unsigned long tmp = [sliderStepper intValue]; [PrecisionSlider setMaxValue:(double)tmp]; [sliderPref takeIntValueFrom:sliderStepper]; [prefs setObject:[NSString stringWithFormat:@"%lu",tmp] forKey:@"maxSliderPrecision"]; } break; case 23: if ((double)[sender intValue] != [PrecisionSlider maxValue]) { [sliderStepper takeIntValueFrom:sender]; // these handle limits placed on sliderStepper [sliderPref takeIntValueFrom:sliderStepper]; [PrecisionSlider setMaxValue:[sliderStepper doubleValue]]; [prefs setObject:[NSString stringWithFormat:@"%lu",[sliderStepper intValue]] forKey:@"maxSliderPrecision"]; } break; case 24: [altInputDecSep setEnabled:([sender state] == NSOnState)]; [altInputThouSep setEnabled:([sender state] == NSOnState)]; if ([sender state] != NSOnState) { [altInputDecSep setStringValue:@""]; [altInputThouSep setStringValue:@""]; conf.in_dec_delimiter = 0; conf.in_thou_delimiter = 0; [decimalKey setTitle:[NSString stringWithCString:&conf.dec_delimiter length:1]]; [prefs setObject:@"" forKey:@"alternateInputDecimalSeparator"]; [prefs setObject:@"" forKey:@"alternateInputThousandsSeparator"]; } break; case 25: if ([[sender stringValue] length] > 0) { conf.in_dec_delimiter = [[sender stringValue] characterAtIndex:0]; [decimalKey setTitle:[NSString stringWithCString:&conf.in_dec_delimiter length:1]]; [prefs setObject:[[sender stringValue] substringToIndex:1] forKey:@"alternateInputDecimalSeparator"]; } else { conf.in_dec_delimiter = 0; [decimalKey setTitle:[NSString stringWithCString:&conf.dec_delimiter length:1]]; [prefs setObject:@"" forKey:@"alternateInputDecimalSeparator"]; } break; case 26: if ([[sender stringValue] length] > 0) { conf.in_thou_delimiter = [[sender stringValue] characterAtIndex:0]; [prefs setObject:[[sender stringValue] substringToIndex:1] forKey:@"alternateInputThousandsSeparator"]; } else { conf.in_thou_delimiter = 0; [prefs setObject:@"" forKey:@"alternateInputThousandsSeparator"]; } break; default: return; } switch (need_redraw) { case 2: if (update_history) recalculate = 1; [self go:sender]; break; case 1: set_prettyanswer(last_answer); [AnswerField setStringValue:[NSString stringWithUTF8String:(pretty_answer?pretty_answer:"Not Enough Memory")]]; [AnswerField setTextColor:((not_all_displayed)?([NSColor redColor]):([NSColor blackColor]))]; break; } if ([inspectorWindow isVisible] || recalculate) { [historyList reloadData]; } [ExpressionField selectText:self]; } - (IBAction)showPrefs:(id)sender { //static char initialized = 0; [self displayPrefs:sender]; [thePrefPanel setBecomesKeyOnlyIfNeeded:TRUE]; [thePrefPanel orderFront:self]; // centering at first /*if (! initialized) { initialized=1; [thePrefPanel center]; }*/ // this should be redundant [thePrefPanel setFrameAutosaveName:@"wcalc_prefs"]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(savePrefs:) name:NSWindowWillCloseNotification object:thePrefPanel]; } - (IBAction)savePrefs:(id)sender { NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; Dprintf("synching the prefs to disk\n"); [prefs synchronize]; } - (IBAction)open:(id)sender { int result; NSArray *fileTypes = [NSArray arrayWithObjects:@"txt",@"text",@"wcalc", NSFileTypeForHFSTypeCode('TEXT'), nil]; NSOpenPanel *oPanel = [NSOpenPanel openPanel]; [oPanel setAllowsMultipleSelection:NO]; /* display the panel */ result = [oPanel runModalForDirectory:nil file:nil types:fileTypes]; /* if they clicked the OK button */ if (result == NSOKButton) { NSArray *filesToOpen = [oPanel filenames]; int i, count = [filesToOpen count]; /* loop through the files to open (there should only be one, but it's good to be able to handle multiple anyway */ for (i=0; iexp]; } else if ([[col identifier] isEqualToString:@"name"]) { return [NSString stringWithUTF8String:(cursor->name)]; } else { return @"BAD COLUMN"; } } - (void)tableView:(NSTableView*)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn*)col row:(int)rowIndex { struct pers_var *cursor = peekListElement(persVars, rowIndex); NSMutableDictionary *temp = [NSMutableDictionary dictionaryWithCapacity:listLen(persVars)]; ListIterator li = NULL; NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; if ([[col identifier] isEqualToString:@"value"]) { free(cursor->exp); cursor->exp = strdup([anObject UTF8String]); } else if ([[col identifier] isEqualToString:@"name"]) { free(cursor->name); cursor->name = strdup([anObject UTF8String]); strstrip(' ',cursor->name); } li = getListIterator(persVars); while ((cursor = (struct pers_var *)nextListElement(li)) != NULL) { [temp setObject:[NSString stringWithUTF8String:cursor->exp] forKey:[NSString stringWithUTF8String:cursor->name]]; } [prefs setObject:temp forKey:@"persistentVariables"]; } struct pers_var *getpersvar(char *key) { struct pers_var *cursor = NULL; ListIterator li = NULL; if (!persVars || key == NULL || *key == 0 || listLen(persVars) == 0) { return NULL; } li = getListIterator(persVars); while ((cursor = (struct pers_var *)nextListElement(li)) != NULL) { if (!strncmp(cursor->name, key, strlen(cursor->name)+1)) break; else cursor = NULL; } freeListIterator(li); return cursor; } int putpersvar(char *name, char *expr) { struct pers_var *cursor = NULL; if (name == NULL || *name == 0) { return -1; } cursor = getpersvar(name); if (!cursor) { cursor = calloc(1, sizeof(struct pers_var)); addToList(&persVars, cursor); } if (!cursor->name) { cursor->name = strdup(name); } else if (cursor->exp) { free(cursor->exp); } cursor->exp = strdup(expr); return 0; } int persvarexists(char* key) { struct pers_var *cursor = NULL; ListIterator li = NULL; if (!persVars || !strlen(key) || listLen(persVars) == 0) { return 0; } li = getListIterator(persVars); while ((cursor = (struct pers_var *)nextListElement(li)) != NULL) { if (!strncmp(cursor->name, key, strlen(cursor->name) + 1)) break; else cursor = NULL; } freeListIterator(li); return cursor ? 1 : 0; } - (IBAction)addVar:(id)sender { char varname[20]; int i=1; sprintf(varname,"NewVariable%i",i); while(persvarexists(varname)) { ++i; sprintf(varname,"NewVariable%i",i); } putpersvar(varname,"0"); [theList reloadData]; } - (IBAction)clearVars:(id)sender { while (listLen(persVars) > 0) { getListElement(persVars,0); } [theList reloadData]; } - (IBAction)delVar:(id)sender { if ([theList selectedRow] > -1) { getListElement(persVars,[theList selectedRow]); [theList reloadData]; } } - (IBAction)showList:(id)sender { if (persVars == NULL) { NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSDictionary *temp = [prefs dictionaryForKey:@"persistentVariables"]; NSEnumerator *enumerator = [temp keyEnumerator]; id key; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onClose:) name:NSWindowWillCloseNotification object:theWindow]; while ((key = [enumerator nextObject])) { putpersvar(strdup([key UTF8String]),strdup([[temp objectForKey:key] UTF8String])); } } [theWindow makeKeyAndOrderFront:self]; } - (IBAction)onClose:(id)sender { struct pers_var *cursor = NULL; NSMutableDictionary *temp = [NSMutableDictionary dictionaryWithCapacity:listLen(persVars)]; ListIterator li = NULL; NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowWillCloseNotification object:theWindow]; li = getListIterator(persVars); while ((cursor = (struct pers_var *)nextListElement(li)) != NULL) { [temp setObject:[NSString stringWithUTF8String:cursor->exp] forKey:[NSString stringWithUTF8String:cursor->name]]; } [prefs setObject:temp forKey:@"persistentVariables"]; freeListIterator(li); } @end wcalc-2.5/src/gui/OldVariableList.m0000644000175000017500000000233712115731221014143 00000000000000// // VariableList.m // Wcalc // // Created by Kyle Wheeler on Sun Jan 20 2002. // Copyright (c) 2001 Kyle Wheeler. All rights reserved. // #import "variables.h" #import "VariableList.h" @implementation NSTableDataSource // needs to be REALLY fast - (int)numberOfRowsInTableView:(NSTableView *)aTableView { extern int contents; printf("contents = %i\n",contents); return contents; } // needs to be fast - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn*) aTableColumn row:(int)rowIndex { extern struct variable *them; struct variable *cursor = them; int i; for (i=1;inext; } if ([[[aTableColumn headerCell] stringValue] isEqualToString:@"Value"]) { printf("Value = %s!\n",strchr(cursor->keyvalue,'=')+1); return [NSString stringWithUTF8String:(strchr(cursor->keyvalue,'=')+1)]; } else { char *temp = strchr(cursor->keyvalue,'='); NSString *foo; *temp=0; printf("Variable! = %s\n",temp2); foo = [NSString stringWithUTF8String:cursor->keyvalue]; *temp = '='; return foo; } } - (void)tableView:(NSTableView*)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn*)aTableColumn row:(int)rowIndex { printf("setvalue\n"); } @end wcalc-2.5/src/gui/AboutBoxController.m0000644000175000017500000000050512115731243014711 00000000000000#include "definitions.h" #include "AboutBoxController.h" @implementation AboutBoxController - (IBAction)closeIt:(id)sender { [aboutBox close]; } - (IBAction)openIt:(id)sender { [version setStringValue:[NSString stringWithFormat:@"Version %s",VERSION]]; [aboutBox makeKeyAndOrderFront:self]; [aboutBox center]; } @end wcalc-2.5/src/gui/Makefile.am0000644000175000017500000000120112115703232012767 00000000000000EXTRA_DIST = includes/WcalcController.h WcalcController.m \ includes/AboutBoxController.h AboutBoxController.m \ includes/ConversionList.h ConversionList.m \ includes/ErrorController.h ErrorController.m \ includes/HistoryList.h HistoryList.m \ includes/InspectorController.h InspectorController.m \ includes/MyTextField.h MyTextField.m \ includes/OldVariableList.h OldVariableList.m \ includes/PersVarList.h PersVarList.m \ includes/VariableList.h VariableList.m \ includes/WcalcService.h WcalcService.m \ includes/theDelegate.h theDelegate.m \ main.m \ includes/simpleCalc.h simpleCalc.c wcalc-2.5/src/common/0000775000175000017500000000000012451434214011533 500000000000000wcalc-2.5/src/common/conversion.c0000644000175000017500000031541312330535204014006 00000000000000/* vim:expandtab * conversion.c * Wcalc * * Created by Kyle Wheeler on Wed Jul 31 2002. * Copyright (c) 2002 Kyle Wheeler. All rights reserved. * */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* for calloc() */ #include /* for strcmp() */ #include "number.h" #include "calculator.h" #include "conversion.h" /* The conversion tables */ const char *conversion_names[] = { "Lengths", "Areas", "Volumes", "Angles", "Masses", "Speeds", "Forces", "Accelerations", "Temperatures", "Angles", "Pressures", "Metric", NULL }; /* based on Meters */ const struct conversion lengths[] = { {"1e-10", "Angstroms", {"Ă…","angstrom","angstroms",NULL}}, {/* the following value is from wikipedia. An AU is 149,597,870,691 meters (plus or minus 30). */ "149597870691", "Astronomical Units", {"AU","ua","astronomical_unit","astronomical_units",NULL}}, {"5.291772108e-11", "Atomic Unit", {"au","atomic_unit","a0","b",NULL}}, {"10e-18", "Attometers", {"am","attometer","attometers",NULL}}, {"0.008466667", "Barley Corn", {"barley_corn",NULL}}, {/* 1 cable length = 720 feet, 1 foot = 12 inches, 1 inch = 0.0254 meters. So, 1 cable lenght = 720*12*0.0254 meters */ "219.456", "Cable Lengths (U.S.)", {"cable_length","cable_lengths",NULL}}, {/* 1 cable length = 0.1 NM, 1 NM = 1852 meters. So, 1 cable length = 185.2 meters EXACTLY */ "185.2", "Cable Lengths (International)", {"cable_length.international","cable_lengths.international",NULL}}, {/* 1 cable length = 608 feet, 1 foot = 12 inches, 1 inch = 0.0254 meters. So, 1 cable length = 608*12*0.0254 meters */ "185.3184", "Cable Lengths (Imperial)", {"cable_length.Imp","cable_lengths.Imp",NULL}}, {/* 1 calibre = 1 inch (copy the value from there) */ "0.0254", "Calibre", {"cal","calibre","calibres",NULL}}, {"1e-2", "Centimeters", {"cm","centimeter","centimeters",NULL}}, {/* 1 Chain = 66 feet, 1 foot = 12 inches, 1 inch = 1/39.37 meters EXACTLY. So, 1 chain = 66*12/39.37 meters */ "2.0116840233680467360934721869443738887477774955549911099822199644399288798577597155194310388620777241554483108966217932435864871729743459486918973837947675895351790703581407162814325628651257302514605029210058420116840233680467360934721869443738887477774955549911099822199644399288798577597155194310388620777241554483108966217932435864871729743459486918973837947675895351790703581407162814325628651257302514605029210058420116840233680467360934721869443738887477774955549911099822199644399288798577597155194310388620777241554483108966217932435864871729743459486918973837947675895351790703581407162814325628651257302514605029210058420116840233680467360934721869443738887477774955549911099822199644399288798577597155194310388620777241554483108966217932435864871729743459486918973837947675895351790703581407162814325628651257302514605029210058420116840233680467360934721869443738887477774955549911099822199644399288798577597155194310388620777241554483108966217932435864871729743459486918973837947675895351790703581407162814325628651257302514605029210058420116840233680467360934721869443738887477774955549911099822199644399288798577597155194310388620777241554483108966217932435864871729743459486918973837947675895351790703581407162814325621e1", "Chains (Gunter's)", {"ch","chain","chains","chain_gunter","chain_surveyor",NULL}}, {/* 1 chain = 100 feet, 1 foot = 12 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 chain = 100*12*0.0254 meters */ "30.48", "Chains (Ramsden's)", {"chain_ramsden","chain_engineer",NULL}}, {/* 1 cubit = 18 inches, 1 inch = 0.0254 meters EXACTLY. So 1 cubit = 18*0.0254 meters */ "0.4572", "Cubits", {"cubit","cubits",NULL}}, {"10", "Decameters", {"dam","decameter","decameters",NULL}}, {"0.1", "Decimeters", {"dm","decimeter","decimeters",NULL}}, {/* 1 ell = 45 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 ell = 45*0.0254 meters. */ "1.143", "ell", {"ell",NULL}}, {"1e18", "Exameters", {"Em","exameter","exameters",NULL}}, {/* 1 fathom = 1/1000 NM, 1 NM = 1852 meters. (or 6 ft) */ "1.852", "Fathoms", {"fth","fath","fathom","fathoms",NULL}}, {"1e-15", "Fermis (femtometer)", {"fm","fermi","fermis","femtometer","femtometers",NULL}}, {/* 1 finger = 7/8 inches, 1 inch = 0.0254 meters EXACTLY. So 1 finger = 7/8*0.0254 meters */ "2.2225e-2", "Fingers", {"finger","fingers",NULL}}, {/* 1 finger = 4.5 inches, 1 inch = 0.0254 meters EXACTLY. So 1 finger = 4.5*0.0254 meters */ "0.1143", "Fingers (cloth)", {"finger_cloth","fingers_cloth",NULL}}, {/* 1 foot = 12 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 foot = 12*0.0254 = 0.3048 meters EXACTLY (international) */ "0.3048", "Feet", {"ft","feet","foot","'",NULL}}, {/* 1 foot = 12 inches, 1 inch = 1/39.37 meters EXACTLY (US Survey). So, 1 foot = 12/39.37 meters. */ "3.0480060960121920243840487680975361950723901447802895605791211582423164846329692659385318770637541275082550165100330200660401320802641605283210566421132842265684531369062738125476250952501905003810007620015240030480060960121920243840487680975361950723901447802895605791211582423164846329692659385318770637541275082550165100330200660401320802641605283210566421132842265684531369062738125476250952501905003810007620015240030480060960121920243840487680975361950723901447802895605791211582423164846329692659385318770637541275082550165100330200660401320802641605283210566421132842265684531369062738125476250952501905003810007620015240030480060960121920243840487680975361950723901447802895605791211582423164846329692659385318770637541275082550165100330200660401320802641605283210566421132842265684531369062738125476250952501905003810007620015240030480060960121920243840487680975361950723901447802895605791211582423164846329692659385318770637541275082550165100330200660401320802641605283210566421132842265684531369062738125476250952501905003810007620015240030480060960121920243840487680975361950723901447802895605791211582423164846329692659385318770637541275082550165100330200660401320802641605283210566421132842265684531369062738125476250942e-1", "Feet (U.S. Survey)", {"feet.US","foot.US",NULL}}, {/* 1 furlong = 660 feet, 1 foot = 12 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 furlong = 660*12*0.0254 meters */ "201.168", "Furlongs", {"fur","furlong","furlongs",NULL}}, {/* 1 gm = 6082 feet, 1 foot = 12 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 gm = 6082*12*0.0254 meters */ "1853.7936", "Geographic Mile", {"geographic_mile","geographic_miles",NULL}}, {"1e9", "Gigameters", {"Gm","gigameter","gigameters",NULL}}, {/* 1 hand = 4 inches, 1 inch = 0.0254 meters EXACTLY. So 1 hand = 4*0.0254 meters */ "0.1016", "Hands", {"hand","hands",NULL}}, {"1e-2", "Hectometers", {"hm","hectometer","hectometers",NULL}}, {/* 1 inch = 0.0254 meters EXACTLY. (international) */ "0.0254", "Inches", {"in","inch","inches","\"",NULL}}, {/* 1 inch = 1/39.37 meters EXACTLY. (US Survey) */ "39.37", "Inches (U.S. Survey)", {"inch.US","inches.US","\"",NULL}}, {"1e3", "Kilometers", {"km","kilometer","kilometers",NULL}}, {/* 1 league = 3 miles, 1 mile = 5280 feet, aka 63360 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 league = 3*63360*0.0254 meters */ "4828.032", "Leagues", {"lea","league","leagues",NULL}}, {"299792458", "Light-second", {"lightsecond","light-second",NULL}}, {"17987547480", "Light-minute", {"lightminute","light-minute",NULL}}, {"1079252848800", "Light-hour", {"lighthour","light-hour",NULL}}, {"25902068371200", "Light-day", {"lightday","light-day",NULL}}, {/* this value is from wikipedia; 1 lightyear is exactly 360.25 light-days */ "9460730472580800","Light-years", {"ly","LY","lightyear","lightyears","light-year","light-years",NULL}}, {/* 1 line = 1/12 inch, 1 inch = 0.0254 meters EXACTLY. */ "2.1166666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666677e-3", "Lines", {"ln","line","lines",NULL}}, {/* 1 link = 1 foot (international/engineer), so copy value from foot */ "0.3048", "Links", {"lnk","link","links","link_ramsden","link_engineer",NULL}}, {/* 1 link = 33/50 foot, 1 foot = 12 inches, 1 inch = 1/39.37 meters EXACTLY. So, 1 link = 33/50*12/39.37 meters */ "2.0116840233680467360934721869443738887477774955549911099822199644399288798577597155194310388620777241554483108966217932435864871729743459486918973837947675895351790703581407162814325628651257302514605029210058420116840233680467360934721869443738887477774955549911099822199644399288798577597155194310388620777241554483108966217932435864871729743459486918973837947675895351790703581407162814325628651257302514605029210058420116840233680467360934721869443738887477774955549911099822199644399288798577597155194310388620777241554483108966217932435864871729743459486918973837947675895351790703581407162814325628651257302514605029210058420116840233680467360934721869443738887477774955549911099822199644399288798577597155194310388620777241554483108966217932435864871729743459486918973837947675895351790703581407162814325628651257302514605029210058420116840233680467360934721869443738887477774955549911099822199644399288798577597155194310388620777241554483108966217932435864871729743459486918973837947675895351790703581407162814325628651257302514605029210058420116840233680467360934721869443738887477774955549911099822199644399288798577597155194310388620777241554483108966217932435864871729743459486918973837947675895351790703581407162814325638e-1", "Links (Surveyor's)", {"link_gunter","link_surveyor",NULL}}, {"1e6", "Megameters", {"Mm","megameter","megameters",NULL}}, {"1", "Meters", {"m","meter","meters",NULL}}, {/* 1 mickey = 1/200 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 mickey = 1/(39.37*200) = 1/7874 meters */ "1.2700025400050800101600203200406400812801625603251206502413004826009652019304038608077216154432308864617729235458470916941833883667767335534671069342138684277368554737109474218948437896875793751587503175006350012700025400050800101600203200406400812801625603251206502413004826009652019304038608077216154432308864617729235458470916941833883667767335534671069342138684277368554737109474218948437896875793751587503175006350012700025400050800101600203200406400812801625603251206502413004826009652019304038608077216154432308864617729235458470916941833883667767335534671069342138684277368554737109474218948437896875793751587503175006350012700025400050800101600203200406400812801625603251206502413004826009652019304038608077216154432308864617729235458470916941833883667767335534671069342138684277368554737109474218948437896875793751587503175006350012700025400050800101600203200406400812801625603251206502413004826009652019304038608077216154432308864617729235458470916941833883667767335534671069342138684277368554737109474218948437896875793751587503175006350012700025400050800101600203200406400812801625603251206502413004826009652019304038608077216154432308864617729235458470916941833883667767335534671069342138684277368554737109474218948437896e-4", "Mickeys", {"mickey",NULL}}, {/* 1 microinch = 1e-6 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 microinch = 1e-6*0.0254 meters */ "2.54e-8", "Microinches", {"mci","microinch","microinches",NULL}}, {"1e-6", "Micrometers", {"µm","micrometer","micrometers",NULL}}, {"1e-6", "Microns", {"µ","micron","microns",NULL}}, {/* 1 mil = 1.000e-3 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 mil = 1e-3*0.0254 meters */ "2.54e-5", "Mils", {"mils","mil","thou","thous",NULL}}, {/* 1 mile = 5280 feet, aka 63360 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 mile = 63360*0.0254 = approx 1.609344e3 meters */ "1609.344", "Miles", {"mi","mile","miles",NULL}}, {/* 1 mile = 8000 links, 1 link = 33/50 feet, 1 foot = 12 inches, 1 inch = 1/39.37 meters EXACTLY. So, 1 mile = 8000*33/50*12/39.37 meters */ "1.6093472186944373888747777495554991109982219964439928879857759715519431038862077724155448310896621793243586487172974345948691897383794767589535179070358140716281432562865125730251460502921005842011684023368046736093472186944373888747777495554991109982219964439928879857759715519431038862077724155448310896621793243586487172974345948691897383794767589535179070358140716281432562865125730251460502921005842011684023368046736093472186944373888747777495554991109982219964439928879857759715519431038862077724155448310896621793243586487172974345948691897383794767589535179070358140716281432562865125730251460502921005842011684023368046736093472186944373888747777495554991109982219964439928879857759715519431038862077724155448310896621793243586487172974345948691897383794767589535179070358140716281432562865125730251460502921005842011684023368046736093472186944373888747777495554991109982219964439928879857759715519431038862077724155448310896621793243586487172974345948691897383794767589535179070358140716281432562865125730251460502921005842011684023368046736093472186944373888747777495554991109982219964439928879857759715519431038862077724155448310896621793243586487172974345948691897383794767589535179070358140716281432562865125730251460502e3", "Miles (U.S. Survey)", {"mile.US",NULL}}, {"1e-3", "Millimeters", {"mm","millimeter","millimeters",NULL}}, {/* 1 NL = 3 NM, 1 NM = 1852 meters EXACTLY. */ "5556", "Nautical Leagues", {"NL","nl","nautical_league","nautical_leagues",NULL}}, {"1852", "Nautical Miles", {"nmi","n_mile","n_miles","naut_mi","NM","n.m.","nautical_mile","nautical_miles",NULL}}, {/* 1 NM(adm) = 6080 feet, 1 foot = 12 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 NM(adm) = 6080*12*0.0254 meters */ "1853.184", "Nautical Miles (Admiralty)",{"nautical_mile_admiralty","nautical_miles_admiralty",NULL}}, {"1e-9", "Nanometers", {"nm","nanometer","nanometers",NULL}}, {/* 1 pace = 2.5 feet, 1 foot = 12 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 pace = 2.5*12*0.0254 meters */ "0.762", "Paces", {"pace","paces",NULL}}, {/* 1 palm = 3 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 palm = 3*0.0254 meters */ "0.0762", "Palms", {"palm","palms",NULL}}, {/* Accordingto wikipedia, a parsec is AU/(tan 1"), where 1" is 1 arcsecond. Since an arcminute is one sixtieth of a degree, an arcsecond is one 3600th of a degree (1/(60*60)). 1/tan(1/3600) is 206264.80624548 (or so). Since an AU is 149,597,870,691 meters (plus/minus 30), that makes a parsec equal to... */ "3.0856775812815532551662293307624661169222692502222270426081550857417878384638999664699494407044042861602932526374318282499488847652952634794645249141496980063074636858211454807681864726160105407307641779418881311355100588628419722041218901230894205020947799677195720827607257117521428907774778761405872034835465103085631243748951756567312805730872050305047898113261823840201264119675037598195042586352981308836070658938595405030339374553212392440123798481742099013358058995563100552008571554273559596511759202860948271101418509640612111277024400471208264695880181534297105712763766329751662367524228052400468732985263042049136985383758443443380079254183864371360974040014983302470733443592542873383270001285046347408234028157433258037566336348468957134529293451389011373577259268212813972619554240216664384144944608982944614500982419232106751210208167706334127233172935836463139828831751573494313836207461334598375683284660892786805672511641013972755087507259833750048075706711919506474598156162153778257464270314209204366432992995467924164800500074633057880739313620879317654923853591805278058571465232061488212786096086032554448490686544572188808938011635920419618939912850107913457825562320650694313831446304849437714222898707245175e16", "Parsec", {"pc","psc","parsec","parsecs",NULL}}, {"1e15", "Petameters", {"Pm","petameter","petameters",NULL}}, {/* 1 pica = 1/6 inch, 1 inch = 0.0254 meters EXACTLY. So, 1 pica = 0.0254/6 meters */ "4.2333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333353e-3", "Pica", {"pi","pica","picas",NULL}}, {"4.512e-3", "Pica (French)", {"pica_french",NULL}}, {"4.2175e-3", "Pica (American)", {"pica_american",NULL}}, {"1e-12", "Picometer", {"pm","picometer","picometers",NULL}}, {/* 1 point = 1/72 inches, 1 inch = 0.0254 meters EXACTLY. So, 1point = 0.0254/72 meters */ "3.5277777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777763e-4", "Points (DTP)", {"pt","point","points","point_dtp","points_dtp",NULL}}, {"3.513666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666e-4", "Points (Johnson)", {"johnson_point","johnson_points","points_johnson","point_johnson",NULL}}, {"1.879857552e-4", "Points (Trebuchet)", {"trebuchet_point","trebuchet_points","points_trebuchet","point_trebuchet",NULL}}, {"3.45e-4", "Points (Fournier)", {"fournier_point","fournier_points","point_fournier","points_fournier",NULL}}, {"3.759715104e-4", "Points (Didot)", {"didot_point","didot_points","point_didot","points_didot",NULL}}, {/* 1 quarter = 1/4 yard, 1 yard = 3 feet, 1 foot = 12 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 quarter = 0.25*3*12*0.0254 meters */ "0.1524", "Quarters", {"quarter","quarters",NULL}}, {/* 1 rod = 25 links, 1 link = 33/50 foot, 1 foot = 12 inches, 1 inch = 1/39.37 meters EXACTLY. So, 1 rod = 25*33/50*12/39.37 meters*/ "5.0292100584201168402336804673609347218694437388874777749555499110998221996443992887985775971551943103886207772415544831089662179324358648717297434594869189738379476758953517907035814071628143256286512573025146050292100584201168402336804673609347218694437388874777749555499110998221996443992887985775971551943103886207772415544831089662179324358648717297434594869189738379476758953517907035814071628143256286512573025146050292100584201168402336804673609347218694437388874777749555499110998221996443992887985775971551943103886207772415544831089662179324358648717297434594869189738379476758953517907035814071628143256286512573025146050292100584201168402336804673609347218694437388874777749555499110998221996443992887985775971551943103886207772415544831089662179324358648717297434594869189738379476758953517907035814071628143256286512573025146050292100584201168402336804673609347218694437388874777749555499110998221996443992887985775971551943103886207772415544831089662179324358648717297434594869189738379476758953517907035814071628143256286512573025146050292100584201168402336804673609347218694437388874777749555499110998221996443992887985775971551943103886207772415544831089662179324358648717297434594869189738379476758953517907035814052e0", "Rods", {"rd","rod","rods","pole","poles","perch","perches",NULL}}, {/* 1 rope = 20 feet, 1 foot = 12 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 rope = 20*12*0.0254 meters */ "6.096", "Ropes", {"rope","ropes",NULL}}, {/* 1 span = 6 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 span = 6*0.0254 meters */ "0.1524", "Spans", {"span","spans",NULL}}, {/* 1 span = 9 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 span = 9*0.0254 meters */ "0.2286", "Spans (cloth)", {"span_cloth","spans_cloth",NULL}}, {"1e12", "Spat", {"S","spat","spats",NULL}}, {/* 1 stick = 2 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 stick = 2*0.0254 meters */ "0.0508", "Sticks", {"stick","sticks",NULL}}, {"1e12", "Stigma", {"stigma","stigmas","pm",NULL}}, {/* 1 telegraph mile = 6087 feet, 1 foot = 12 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 telegraph mile = 6087*12*0.0254 meters */ "1.8553176e3", "Telegraph Mile", {"telegraph_mile","telegraph_miles",NULL}}, {"1e12", "Terameters", {"Tm","terameter","terameters",NULL}}, {/* 1 twip = 1/1440 inch, 1 inch = 0.0254 meters EXACTLY. So, 1 twip = 0.0254/1440 meters */ "1.7638888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888893e-5", "Twips", {"twip","twips",NULL}}, {"0.8359", "Varas", {"vara","varas",NULL}}, {"1.0021e-13", "X Unit (aka. Siegbahn)",{"xu","xunit","xunits","siegbahn","siegbahns",NULL}}, {/* 1 yard = 3 feet, 1 foot = 12 inches, 1 inch = 0.0254 meters EXACTLY. So, 1 yard = 3*12*0.0254 meters */ "0.9144", "Yards", {"yd","yard","yards",NULL}}, {"1e-24", "Yoctometers", {"ym","yoctometer","yoctometers",NULL}}, {"1e24", "Yottameters", {"Ym","yottameter","yottameters",NULL}}, {"1e-21", "Zeptometers", {"zm","zeptometer","zeptometers",NULL}}, {"1e21", "Zettameters", {"Zm","zettameter","zettameters",NULL}}, {NULL,NULL,{NULL}} }; /* based on square meters */ const struct conversion areas[] = { {"4046.8564224",/* EXACT */ "Acre", {"ac","A","acre","acres",NULL}}, {"3344.51", "Acre (Commercial)", {"commercial_acre","commercial_acres","acre_commercial","acres_commercial",NULL}}, {"6555", "Acre (Irish)", {"irish_acre","irish_acres","acre_irish","acres_irish",NULL}}, {"4046.873", "Acre (U.S. Survey)", {"survey_acre","survey_acres","acre_survey","acres_survey",NULL}}, {"100", "Are", {"a","are","ares",NULL}}, {"1e-28", "Barn", {"b","barn","barns",NULL}}, {/* 1 barony = 4000 acres, 1 acre = 4046.8564224 sq.m. EXACTLY. So, 1 barony = 4000*4046.8564224 sq.m. */ "1.61874256896e7", "Barony", {"barony","baronies",NULL}}, {/* estimate... */ "2.023221770682737240319370214656998546438306899547039215588833471320921126417471625370063492421868196787881732426840489464859900344367864146821099843183000038506071225552856842016409065783018158657272198517585250776863236643965216228988156338408792150936839914223551771012803563652400545572335254633969696071915e1", "Base boxe (tin plated steel)", {"base_boxe",NULL}}, {/* 1 board = 1inch x 1ft */ "7.74192e-3", "Board", {"bd","board",NULL}}, {/* (1 sq.ft.)(1 bhp)/(240 BTU(IT)/h) */ "12.958174", "Boiler Horsepower Equivalent Direct Radiation", {"bhp_EDR",NULL}}, {/* estimate... */ "3.305999986112183332250900563641124112558303300929789325905802207264226740664221594002750604630606542223660019712530364281515847019980891998125961680246092111352514042012279280725466865507524133144949184887277902155429993354271259285945652071796744450693961944931539190805938593793207959026039247786833451175548", "Bin (Taiwan)", {"bin","bins",NULL}}, {"3.305999986112183332250900563641124112558303300929789325905802207264226740664221594002750604630606542223660019712530364281515847019980891998125961680246092111352514042012279280725466865507524133144949184887277902155429993354271259285945652071796744450693961944931539190805938593793207959026039247786833451175548e0", "Bu (Japan)", {"bu.JP",NULL}}, {"4.410000059935411421183026945326372834220286611137416097234852550714893241410574459123776977064897518619480425367063529901504324339934038355394105297799988993678993564571415494611534079547367772947225780508895232355968395512690233633682393537001126240867341684697236269205893939385683827627936222183839342584823e2", "Cantero (Ecuador)", {"cantero",NULL}}, {"3.59999992883365115038623756679406629216561690371584415565930818480619801965401056179783277117848271209262157970079531953156885860207229291215190314829252358363842940138069833403135660496662831986569486645100890753605376190657495222069254109056024640636625690269104873222487000576803257426119544521134092701997e2", "Cao (Vietnam)", {"cao",NULL}}, {"1", "Centaire", {"ca","centiare","cetaires",NULL}}, {/* 1 circular inch = pi/4 sq.in. */ "5.067075e-4", "Circular Inch", {"circ_in","circular_inch","circular_inches",NULL}}, {/* 1 circular mil = pi/4 sq.mil. */ "5.067075e-10", "Circular Mil", {"circ_mil","circular_mil","circular_mils",NULL}}, {"5.067075e-10", "Circular Thou", {"circ_thou","circular_thou","circular_thous",NULL}}, {"6.555004219518634722507932857010961029789315628092761379337154926794186297011997686958690831577225289899557638948505674888113915664699717672899027971926028031857770636361722081931551470838347892427381355396853421535580827673563136471057017764092463340400959555792402922725306907214324010437841874146580084196008e3", "Colpa (Ireland)", {"colpa","colpas","colps","collops",NULL}}, {/* 1 cord = 192 bd */ "1.48644864", "Cord", {"cord","cords",NULL}}, {"1000", "Dunam", {"dunam",NULL}}, {"10000", "Hectare", {"ha","hectare","hectares",NULL}}, {/* 1 hide = 100 ac */ "4.0468564224e5", "Hide", {"hide","hides",NULL}}, {"7.168000005668004433796468337287356843034890464043065497687985566426709337293379097745799211651433314333710137544755094384672582410127590322307529625065049207134742281152149431268892610091244243875809771852194031378781046051473273764968402646532970250415978387899093934066229923308357507962660603791257315711045e2", "Labor (Canada)", {"labors.CA",NULL}}, {"7.168921877767936226749335695305580159433126660761736049601417183348095659875996457041629760850310008857395925597874224977856510186005314437555358724534986713906111603188662533215234720992028343666961913197519929140832595217006200177147918511957484499557130203720106288751107174490699734278122232063773250664306e5", "Labor (US)", {"labors.US","labor","labors",NULL}}, {"6.988954745473511146111813427835229588488453222252157033414157323551558106922540222024191932798651551889692523435503146609191829178151272114341768042056107046884822359922353705123688337167291843685021311282890873797138692585607803314474402282414219495851725972132993458092415670182855642827043568966350969542482e3", "Manzana (Costa Rica)", {"manzana","manzanas","manzanas.CR",NULL}}, {"9.999991104214131450062517606242864838417933904310996673964505814384485749445248909030705287556278200876729118378199394098140286543147032514097349550021498149182329015582451579743307156659731248424704585777615237492772173981803175795555072327681214571297252684797596160974187394671424264738587448046139476038248e3", "Manzana (Argentina)", {"manzanas.AR",NULL}}, {"1.600000158147460645992839873719252674174717360835176739671488187373111373372316682382570568362205129117517401162779204399662355171520805286869609395540636978434616897660801372719958407217850103883113211836546692049334100348517466398606720871708803080712533383940520740051042092923494189069242888800589890028205e3", "Rai (Thailand)", {"rai",NULL}}, {/* 1 rood = 1/4 acre, 1 acre = 4046.8564224 sq.m. EXACTLY So, 1 rood = 4046.8564224/4 sq.m. */ "1.0117141056e3", "Rood", {"rood","roods",NULL}}, {"3.59999992883365115038623756679406629216561690371584415565930818480619801965401056179783277117848271209262157970079531953156885860207229291215190314829252358363842940138069833403135660496662831986569486645100890753605376190657495222069254109056024640636625690269104873222487000576803257426119544521134092701997e2", "Sao (Vietnam)", {"sao",NULL}}, {"8.739999699024072597190560766011724964742017758167155430033351139059983759394245689275735294816373843754411729159745185002836032927872224764814179414791183782725927225713959562415556771860748079295857315156852256912567858020497911975184241066306223516990790845003392717450313012372857755891348934195345436654664", "Scruple (ancient Rome)", {"scruples.Rome",NULL}}, {"2.589988110336e6", "Section (US Survey)", {"sec","section","sections",NULL}}, {"9.290304353801154091418566889239602606869718848771024165861935609221250172644061708533453769824659381700018944674839184623380412865536832977961034392239792131671373970973612140722292639402112370615553355591170239284285000921522078762441451988952221740340250382150498762303665022427996846032920281509378670060128", "Square", {"sq","square","squares",NULL}}, {"8.360999920994321177587907040397686158370354160310125387631941962891131827421185224020767584796398398862318224957265861381726680680533099908465805581899964265632298314865067225899053221068136943617382439384628403896864201799676638681907600379359485425105095734056968052946366383381171988090307127138649016114877e1", "Square (Sri Lanka)", {"sq.SL",NULL}}, {"1e-36", "Square Attometer", {"sq.am.","am2","square_attometer",NULL}}, {"6.451600000025805371469845509191320707435529442123245191140166144103673088731225441279514880831979513788959750813070571019621127355870604679843533668010227339185504432925734940505033877235572640058484439547273739780365859541347322329319040875363552976419152218301495776911823523529142004795473690535005333951172e-8", "Square Caliber", {"sq.cal.","cal2","square_caliber",NULL}}, {"1e-4", "Square Centimeter", {"sq.cm.","cm2","square_centimeter",NULL}}, {"404.68564224", "Square Chain", {"sq.chain","chain2","square_chain",NULL}}, {"3.629024956115121479274781435318412530929479925610046753027408418176592990668264764512352827840701682245111697958272531341770230097648193034695161500021667325726687609305971817060116874144668763388228163064633134230769827737668372006218311369490336855293849998545641518734165007769944620370522491497465088272311e-4", "Square Digit", {"sq.digit.","square_digit",NULL}}, {"1e2", "Square Decameter", {"sq.dam.","dam2","square_decameter",NULL}}, {"1e-2", "Square Decimeter", {"sq.dm.","dm2","square_decimeter",NULL}}, {"1e36", "Square Exameter", {"sq.Em.","Em2","square_exameter",NULL}}, {"1e-30", "Square Femtometer", {"sq.fm.","fm2","square_femtometer",NULL}}, {"9.290303999976199816213594024505880622266235765981699256234837482841961280186241242536366837724159960778754603941227262392924018289593397791368431306698621324939571609514158812968601329784961443484290814502159924128111609616044488463423363629132934679087173040863377016714275964833344984500370552446953699258831e-2", "Square Foot", {"sq.ft","sq.ft.IN","ft2",NULL}}, {"9.290341199944321962239728391079895381007507748698769587339156653622117423009029788869627721462743024004179490771308932469255347683139050331331702733192442260292701268222885912435703348136322134671641093162915840707221524442743393444595634067094523114407626461543917038191866957480866104752883111755511144193929e-2", "Square Foot (U.S. Survey)", {"sq.ft.US",NULL}}, {"1e18", "Square Gigameter", {"sq.Gm.","Gm2","square_gigameter",NULL}}, {"1e4", "Square Hectometer", {"sq.hm.","hm2","square_hectometer",NULL}}, {"6.451599999999928578716062176854032557323871669709217231070812650300131239545160671903373783364761529184604934013347379882062581226598819665644930809227374390428023740508140794058426495017818320040469733924648818019814139126101116987142699372767211608266628889752537217536490567427263879494854143719603846218604e-4", "Square Inch", {"sq.in","sq.in.IN","in2","square_inch",NULL}}, {"6.45162583333375249212597612369649690590669930475143890753797286751901735797328249972043220454036172672105543331756798712291379892548324552912891079113363578200382356940299355312792546055537686633488182355297146467925717147321189284121397085636435723290004199447084773018499262702741902422391746036979637780008e-4", "Square Inch (U.S. Survey)", {"sq.in.US",NULL}}, {"1e6", "Square Kilometer", {"sq.km.","km2","square_kilometer",NULL}}, {"4.0468564224e-2", "Square Link", {"sq.lnk.","square_link",NULL}}, {"1e12", "Square Megameter", {"sq.Mm.","Mm2","square_megameter",NULL}}, {"1", "Square Meter", {"sq.m.","square_meter","square_meters","m2",NULL}}, {"6.4516e-10", "Square Mil", {"sq.mil.","mil2","square_mil",NULL}}, {"2.589988110336e6", "Square Mile", {"sq.mi.","square_mile","square_miles",NULL}}, {"2.589998e6", "Square Mile (U.S. Survey)", {"sq.mi.US","square_mile.US","square_miles.US",NULL}}, {"1e-6", "Square Millimeter", {"sq.mm.","mm2","square_millimeter",NULL}}, {"1e-12", "Square Micrometer", {"sq.µm.","µm2","square_micrometer",NULL}}, {"1e-18", "Square Nanometer", {"sq.nm.","nm2","square_nanometer",NULL}}, {"1e30", "Square Petameter", {"sq.Pm.","Pm2","square_petameter",NULL}}, {"1e-24", "Square Picometer", {"sq.pm.","pm2","square_picometer",NULL}}, {"25.29285264", "Square Rod", {"sq.rd.","rd2","square_rod",NULL}}, {"25.29285264", "Square Pole", {"sq.pole","pole2","square_pole",NULL}}, {"25.29285264", "Square Perch", {"sq.perch","perch2","square_perch",NULL}}, {"1e24", "Square Terameter", {"sq.Tm.","Tm2","square_terameter",NULL}}, {"6.4516e-10", "Square Thou", {"sq.thou","mil2","square_thou",NULL}}, {"1e-48", "Square Yoctometer", {"sq.ym.","ym2","square_yoctometer",NULL}}, {"1e48", "Square Yottameter", {"sq.Ym.","Ym2","square_yottameter",NULL}}, {"1e-42", "Square Zeptometer", {"sq.zm.","zm2","square_zeptometer",NULL}}, {"1e42", "Square Zettameter", {"sq.Zm.","Zm2","square_zettameter",NULL}}, {"0.83612736", "Square Yard", {"sq.yd.","yd2","square_yard",NULL}}, {"1000", "Stremma", {"stremma","stremmas",NULL}}, {/* 1 township = 36 sq.mi.(US) */ "9.323994e7", "Township", {"twp","township","townships",NULL}}, {/* 1 yardland = 30 acres */ "1.21405692672e5", "Yardland", {"yardland","yardlands",NULL}}, {NULL,NULL,{NULL}} }; /* based on cubic meters */ const struct conversion volumes[] = { {"9.46352946e-4", "#2.5 can", {"2.5can",NULL}}, {"3.785411784e-3", "#10 can", {"10can",NULL}}, {"102.79015312896", "Acre-inch", {"ac.in.","acre_inch","acre_inches",NULL}}, {"1233.48183754752", "Acre-foot", {"ac.ft.","acre_foot","acre_feet",NULL}}, {"1e-21", "Attoliter", {"al","aL","attoliter","attoliters",NULL}}, {/* 3 bu (Imp) */ "109.10616e-3", "Bag", {"bag",NULL}}, {/* 105 qt US */ "115.628198985075e-3", "Barrel (U.S. dry)", {"bbl","bl.US","barrel.US","barrels.US",NULL}}, {/* 31.5 gal US */ "119.240471196e-3", "Barrel (U.S. fluid)", {"fl.bl.US","fluid_barrel.US","fluid_barrels.US",NULL}}, {/* 42 gal (US) */ "158.987.294.928e-3", "Barrel (petroleum)", {"bl","bl.petrol","barrel.petrol","barrels.petrol",NULL}}, {/* 36 gal Imp */ "163.65924e-3", "Barrel (Imperial)", {"bl.Imp","barrel.Imp","barrels.Imp",NULL}}, {/* 282 cu. in. */ "4.621152048e-3", "Beer Gallon", {"beer_gal","beer_gallon",NULL}}, {/* 10 fl.oz. */ "284.130625e-6", "Breakfast Cup", {"breakfast_cup",NULL}}, {/* 144 cu.in. */ "2.359737216e-3", "Board Foot", {"bd_ft","fbm","BF","board_feet",NULL}}, {/* 4 gal (Imp) */ "18.18436e-3", "Bucket", {"bkt","bucket","buckets",NULL}}, {/* 2150.42 cu.in. */ "35.23907016688e-3", "Bushel (U.S. dry level)", {"bu.USlvl","bushel.USlvl",NULL}}, {/* 8 gal Imp. */ "36.36872e-3", "Bushel (Imperial)", {"bu.Imp","bushel.Imp",NULL}}, {/* 1.25 bu (US lvl) */ "44.0488377086e-3", "Bushel (U.S. dry heaped)", {"bu.US","bushel.US",NULL}}, {/* 126 gal (US.fl.) */ "0.476961884784", "Butt", {"butt","butts",NULL}}, {"1e-5", "Centiliter", {"cl","cL","centiliter","centiliters",NULL}}, {"1.232593620345297455720952457494033544533373789699499794656285986149681595299792021394950518524218500664033568694139341334679893333411134037499605108242281057079990961138502682597151008112501276987632104114117951307487179636796225960779054312078955923059540650966697302213477139425532668523277142534521745167648e-6", "Coffeespoon", {"coffeespoon","coffeespoons",NULL}}, {"1.000294685410741114246915054245905202113032996728842296055257383264619987013613069045568076424301273063504348088220559504362338689167130603830071293351980113434063071578892230315074771833285106977873840849283091091490651752710249437379790457846635698447513366385554038047948391165840769943644113517553355986187e-6", "Cooking Milliliter", {"cooking_milliliter","cooking_milliliters",NULL}}, {/* 4 bu (Imp) */ "145.47488e-3", "Coomb", {"coomb","coombs",NULL}}, {/* 8ftx4ftx4ft */ "3.624556363776", "Cord (firewood)", {"cd","cord","cords",NULL}}, {/* 16 cu.ft. */ "0.453069545472", "Cord Foot (timber)", {"cd_ft","cord_foot","cord_feet",NULL}}, {"1e-6", "Cubic Centimeter", {"cc","cm3","cu.cm.","cubic_centimeter","cubic_centimeters",NULL}}, {"1e-3", "Cubic Decimeter", {"dm3","cu.dm.","cubic_decimeter","cubic_decimeters",NULL}}, {"1e54", "Cubic Exameter", {"Em3","cu.Em.","cubic_exameter","cubic_exameters",NULL}}, {"6.116438863872", "Cubic Fathom", {"fm3","cu.fm.","cubic_fathom","cubic_fathoms",NULL}}, {"1e-45", "Cubic Femtometer", {"cubic_femtometer","cubic_femtometers",NULL}}, {"28.316846592e-3", "Cubic Foot", {"ft3","cu.ft.","cubic_foot","cubic_feet",NULL}}, {"1e27", "Cubic Gigameter", {"Gm3","cu.Gm.","cubic_gigameter","cubic_gigameters",NULL}}, {"16.387064e-6", "Cubic Inch", {"i3","cu.in.","cubic_inch","cubic_inches",NULL}}, {"1e9", "Cubic Kilometer", {"km3","cu.km.","cubic_kilometer","cubic_kilometers",NULL}}, {"1", "Cubic Meter", {"m3","cu.m.","cubic_meter","cubic_meters",NULL}}, {"1e18", "Cubic Megameter", {"Mm3","cu.Mm.","cubic_megameter","cubic_megameter",NULL}}, {"1e-18", "Cubic Micrometer", {"µm3","cu.µm.","cubic_micrometer","cubic_micrometers",NULL}}, {"4.168181825440579584e9","Cubic Mile", {"mi3","cu.mi.","cubic_mile","cubic_miles",NULL}}, {"1e-9", "Cubic Millimeter", {"mm3","cu.mm.","cubic_millimeter","cubic_millimeters",NULL}}, {"1e-27", "Cubic Nanometer", {"nm3","cu.nm.","cubic_nanometer","cubic_nanometers",NULL}}, {"1e45", "Cubic Petameter", {"Pm3","cu.Pm.","cubic_petameter","cubic_petameters",NULL}}, {"1e-36", "Cubic Picometer", {"pm3","cu.pm.","cubic_picometer","cubic_picometers",NULL}}, {"1e36", "Cubic Terameter", {"Tm3","cu.Tm.","cubic_terameter","cubic_terameters",NULL}}, {/* 27 cu.ft. */ "0.764554857984", "Cubic Yard", {"yd3","cu.yd.","cubic_yard","cubic_yards",NULL}}, {"1e72", "Cubic Yottameters", {"Ym3","cu.Ym.","cubic_yottameter","cubic_yottameters",NULL}}, {"1e63", "Cubic Zettameters", {"Zm3","cu.Zm.","cubic_zettameter","cubic_zettameters",NULL}}, {/* 8 fl.oz. */ "227.3045e-6", "Cup (Canadian)", {"cup.CA",NULL}}, {/* 8 US fl.oz. */ "236.5882365e-6", "Cup (US)", {"c","cups","cup",NULL}}, {"250e-6", "Cup (metric)", {"cup.metric",NULL}}, {/* 1/96 US fl.oz. */ "0.308057599609375e-6","Dash (U.S.)", {"ds","dash","dashes","dash.US",NULL}}, {/* 1/384 gi */ "0.36996175130208e-6", "Dash (Imperial)", {"dash.Imp",NULL}}, {"1e-2", "Decaliter", {"dal","daL","decaliter","decaliters",NULL}}, {"1e-4", "Deciliter", {"dl","dL","deciliter","deciliters",NULL}}, {/* 1/12 gi */ "11.838776041e-6", "Dessertspoon", {"dessertspoon",NULL}}, {/* 1/20 mL */ "5e-5", "Drop", {"drops","drop",NULL}}, {/* 1/360 US fl.oz. */ "0.0821486932291e-6", "Drop (U.S.)", {"gtt","drop.US","drops.US",NULL}}, {/* 1/12 mL */ "0.08e-6", "Drop (medical)", {"drop_medical","drops_medical",NULL}}, {/* 1/288 fl.oz. */ "0.098656467013e-6", "Drop (Imperial)", {"drop.Imp","drops.Imp",NULL}}, {"1e15", "Exaliter", {"El","EL","exaliter","exaliters",NULL}}, {"1e-18", "Femtoliter", {"fl","fL","femtoliter","femtoliters",NULL}}, {/* 1/5 gal */ "0.7570823568e-3", "Fifth", {"fifths","fifth",NULL}}, {/* 9 US gal */ "34.068706056e-3", "Firkin", {"firkin",NULL}}, {/* 1/8 fl.oz. */ "3.5516328125e-6", "Fluid Drachm", {"fl.dr.","fluid_drachm",NULL}}, {/* 1/8 US fl.oz. */ "3.6966911953125e-6", "Fluid Dram", {"fl.dram","fluid_dram",NULL}}, {/* 1/128 gal */ "29.5735295625e-6", "Fluid Ounce (U.S.)", {"fl.oz.","fl.oz.US",NULL}}, {/* 1/160 gal */ "28.4130625e-6", "Fluid Ounce (Imperial)", {"fl.oz.UK",NULL}}, {/* 1/24 fl.oz. */ "1.1838776041e-6", "Fluid Scruple", {"fl.s.","fluid_scruple","fluid_scruples",NULL}}, {/* 231 cu. in. */ "3.785411784e-3", "Gallon (U.S. fluid)", {"gal","gallon","gallons","gal.USfl","gallon.USfl",NULL}}, {/* 1/8 bu */ "4.40488377086e-3", "Gallon (U.S. dry)", {"gal.USdry","gallon.USdry",NULL}}, {"4.54609e-3", "Gallon (Imperial)", {"gal.Imp","gallon.Imp",NULL}}, {"1e6", "Gigaliter", {"Gl","GL","gigaliter","gigaliters",NULL}}, {/* 4 US fl.oz. */ "118.29411825e-6", "Gill (U.S.)", {"gi","gill","gills","gill.US",NULL}}, {/* 5 fl.oz. */ "142.0653125e-6", "Gill (Imperial)", {"gill.Imp",NULL}}, {"0.1", "Hectoliter", {"hl","hL","hectoliter","hectoliters",NULL}}, {/* 2 fl.bl. (US) */ "238.480942392e-3", "Hogshead (U.S.)", {"hhd","hhd.US","hogshead","hogshead.US","hogsheads","hogsheads.US",NULL}}, {/* 2 bl (Imp) */ "327.31848e-3", "Hogshead (Imperial)", {"hhd.Imp","hogshead.Imp","hogsheads.Imp",NULL}}, {"44.36029434375e-6", "Jigger", {"jigger","jiggers",NULL}}, {"81.82962e-3", "Kilderkin", {"kilderkin",NULL}}, {"1", "Kiloliter", {"kl","kL","kiloliter","kiloliters",NULL}}, {"1e-9", "Lambda", {"lambda","lambdas",NULL}}, {/* 80 bu (Imp) */ "2.9094976", "Last", {"last","lasts",NULL}}, {"1e-3", "Liter", {"l","liter","liters",NULL}}, {/* 50 cu.ft. */ "1.4158423296", "Load", {"load","loads",NULL}}, {"44.36029434375e-6", "Measure", {"measure","measures",NULL}}, {"1e3", "Megaliter", {"Ml","ML","megaliter","megaliters",NULL}}, {"1e-9", "Microliter", {"µl","microliter","microliters",NULL}}, {"1e-6", "Milliliter", {"ml","mL","milliliter","milliliters",NULL}}, {/* 1 minim = 1/480 fluid ounce */ "0.0591938802083333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333e-6", "Minim (Imperial)", {"minim","minims","minim.Imp",NULL}}, {"0.061611519921875e-6","Minim (U.S.)", {"minim.US",NULL}}, {"1e-12", "Nanoliter", {"nl","nL","nanoliter","nanoliters",NULL}}, {"7.103515625e-5", "Nipperkin (US)", {"nipperkin","nipperkins",NULL}}, {/* 5 fl.oz. */ "142.0653125e-6", "Noggin", {"nog","noggin",NULL}}, {/* 8 bu (Imp) */ "290.94976e-3", "Pail", {"pail","pails",NULL}}, {"1e-15", "Picoliter", {"pl","pL","picoliter","picoliters",NULL}}, {/* 1/8 gal */ "473.176473e-6", "Pint (U.S. fluid)", {"pt","pint","pints","pint.USfl",NULL}}, {/* 1/64 bu */ "0.5506104713575e-3", "Pint (U.S. dry)", {"pint.USdry",NULL}}, {/* 1/8 gal */ "0.56826125e-3", "Pint (Imperial)", {"pint.Imp",NULL}}, {/* 1/4 US lvl bu */ "8.80976754172e-3", "Peck (U.S.)", {"pk","peck","pecks","pk.US","peck.US",NULL}}, {/* 2 gal */ "9.09218e-3", "Peck (Imperial)", {"pk.Imp","peck.Imp",NULL}}, {/* 16.5ftx1.5ftx1ft */ "0.700841953152", "Perch", {"per","perch","perches",NULL}}, {"1e12", "Petaliter", {"Pl","PL","petaliter","petaliters",NULL}}, {"0.61611519921875e-6", "Pinch (U.S.)", {"pinch","pinches","pinch.US",NULL}}, {"0.7399235026041e-6", "Pinch (Imperial)", {"pinch.Imp",NULL}}, {/* 126 gal (US.fl.) */ "0.476961884784", "Pipe", {"pipe","pipes",NULL}}, {/* 3/4 US fl.oz. */ "22.180147171875e-6", "Pony", {"pony","ponies",NULL}}, {/* 1/2 gal (Imp) */ "2.273045e-3", "Pottle", {"pottle",NULL}}, {/* 1/4 gal */ "0.946352946e-3", "Quart (U.S. fluid)", {"qt","quart","quarts","qt.USfl","quart.USfl",NULL}}, {/* 1/32 bu */ "1.101220942715e-3", "Quart (U.S. dry)", {"qt.USdry","quart.USdry",NULL}}, {/* 1/4 gal */ "1.1365225e-3", "Quart (Imperial)", {"qt.Imp","quart.Imp",NULL}}, {/* 8 bu (Imp) */ "290.94976e-3", "Quarter", {"qtr","quarter","quarters",NULL}}, {/* 1/2 gal (Imp) */ "2.273045e-3", "Quatern", {"pottle",NULL}}, {/* 3 bu (US lvl) */ "105.71721050064e-3", "Sack (U.S.)", {"sack","sack.US",NULL}}, {/* 3 bu (Imp) */ "109.10616e-3", "Sack (Imperial)", {"sack.Imp",NULL}}, {/* 8 bu (US lvl) */ "281.91256133504e-3", "Seam", {"seam","seams",NULL}}, {"1", "Stere", {"st","stere","steres",NULL}}, {/* 2 bu (US lvl) */ "70.47814033376e-3", "Strike (U.S.)", {"strike","strike.US",NULL}}, {/* 2 bu (Imp) */ "72.73744e-3", "Strike (Imperial)", {"strike.Imp",NULL}}, {/* 1 US fl.oz. */ "29.5735295625e-6", "Shot", {"shot","shots",NULL}}, {/* 1/2 fl.oz. */ "14.20653125e-6", "Tablespoon (Canadian)", {"tbsp.CA",NULL}}, {/* 1/2 US fl.oz. */ "14.7867647825e-6", "Tablespoon (US)", {"tbsp","tbsp.US","tablespoon","tablespoons",NULL}}, {"15e-6", "Tablespoon (metric)", {"tbsp.metric",NULL}}, {/* 5/8 fl.oz. */ "17.7581640625e-6", "Tablespoon (Imperial)", {"tbsp.Imp",NULL}}, {/* 1/6 fl.oz. */ "4.735510416667e-6", "Teaspoon (Canadian)", {"tsp.CA",NULL}}, {"4.928921595e-6", "Teaspoon (U.S.)", {"tsp","tsp.US","teaspoon","teaspoons",NULL}}, {"5e-6", "Teaspoon (metric)", {"tsp.metric",NULL}}, {/* 1/24 gi */ "5.9193880208e-6", "Teaspoon (Imperial)", {"tsp.Imp",NULL}}, {"1e9", "Teraliter", {"Tl","TL","teraliter","teraliters",NULL}}, {/* 1 cu.ft. */ "28.316846592e-3", "Timber Foot", {"timber_foot","timber_feet",NULL}}, {/* 35 cu.ft. */ "0.99108963072", "Ton (Displacement)", {"displacement_ton","displacement_tons","ton.displacement",NULL}}, {/* 28 bu (Imp) */ "1.01832416", "Ton (Water)", {"water_ton","water_tons","ton.water",NULL}}, {/* 40 cu.ft. */ "1.13267386368", "Ton (Freight)", {"freight_ton","freight_tons","ton.freight",NULL}}, {/* 100 cu.ft. */ "2.8316846592", "Ton (Register)", {"register_ton","register_tons","ton.register",NULL}}, {/* 252 gal (US.fl.) */ "0.953923769568", "Tun", {"tun","tuns",NULL}}, {/* 40 bu (US lvl) */ "1.4095628066752", "Wey", {"wey","weys",NULL}}, {"1e-27", "Yoctoliter", {"yl","yL","yoctoliter","yoctoliters",NULL}}, {"1e21", "Yottaliter", {"Yl","YL","yottaliter","yottaliters",NULL}}, {"1e-24", "Zeptoliter", {"zl","zL","zeptoliter","zeptoliters",NULL}}, {"1e18", "Zettaliter", {"Zl","ZL","zettaliter","zettaliters",NULL}}, {NULL,NULL,{NULL}} }; /* based on the radian */ const struct conversion angles[] = { {/* 2pi/6400 */ "9.8174770424681038701957605727484465131161543730472056905467018509619262696444031207126088291941158374442127703540072082721682644048455694741417481504015034920321378209435578784548738894467154841574436388400342989560420191514864007305836973914725059660801517716358135894076697707756668550226882785664803893343956447362130465047528780088414190366105136496643448750354079079650639578793254592248172237794783039698929987248534130816168185394118534534954627326949373835923979746429772652850873068219123410307302292576270520096438168592074850773037209443120654490711579350536759161773512021088077114668910375017753973289486275868305354461180925286676161835045888778163279794692079674542845337258740289341360688123628504031936277001075567494175930461603436266209600354687499949155564060970616616650503009956094514357979590884457578822132917021407351935349630344062598057461027705860412761919394286802160853237445421575898608397848736339496323555862304748680683055641630350837706656310246144099872163013131216815476787533296433227464560504793182124007196936001103182905281117925706231684101553805477608722859861714288826692209248463422909901928995496533596824429832420779353726720637528990677223094057775750401823800111365864378272193185717336e-4", "Angular Mil", {"angular_mil",NULL}}, {/* 1°/60 */ "2.9088820866572159615394846141476878557381198142362090934953190669516818576724157394704026160575158036871741541789650987473091153792135020664123698223411862198613741691684615936162589302064342175281314485451953478388272649337737483646173918196955573232830079323365373598244947468964938829696854158715497449879690799218409026680749268174344945293660781184190651481586393801377967282605408768073532514902157937688571848073639742464049832709368454677023593282059073729162660665608821526770629057250110640091052531133709783732277975879133289117936950946109823552803430918677558270155114672914985811753751222227482658752440378035053438358868422307163307210383967045381712531760616199864546766595182307952995759444038075268721859852170538516792868284919536671469511216203703688638685647694997516044593484431435411661623582484283727058409753191528104277140631213055584609618082283217900077605746455348788400959243087874340328414177403359850762535070312518127609794264186770618579750017850709362925085337224064241622751861717461697026536445864646555261391684741067609749712923829838883461956015942363735917884403470900393093987925470643825156127109776750695355386617013564252956065374082663904362398239340963082021866699663959815784353536508892e-4", "Arcminute", {"arcminute",NULL}}, {/* 1°/3600 */ "4.8481368110953599358991410235794797595635330237270151558255317782528030961206928991173376934291930061452902569649418312455151922986891701106872830372353103664356236152807693226937648836773903625468857475753255797313787748896229139410289863661592622054716798872275622663741579114941564716161423597859162416466151332030681711134582113623908242156101301973651085802643989668963278804342347946789220858170263229480953080122732904106749721182280757795039322136765122881937767776014702544617715095416851066818420885222849639553796626465222148529894918243516372588005718197795930450258524454858309686256252037045804431254067296725089063931447370511938845350639945075636187552934360333107577944325303846588326265740063458781203099753617564194654780474865894452449185360339506147731142746158329193407655807385725686102705970807139545097349588652546840461901052021759307682696803805363166796009577425581314001598738479790567214023629005599751270891783854196879349657106977951030966250029751182271541808895373440402704586436195769495044227409774410925435652807901779349582854873049731472436593359903939559863140672451500655156646542451073041926878516294584492258977695022607088260108956804439840603997065568271803369777832773266359640589227514762e-6", "Arcsecond", {"arcsecond",NULL}}, {/* 1 gr/100 */ "1.570796326794896619231321691639751442098584699687552910487472296153908203143104499314017412671058533991074043256641153323546922304775291115862679704064240558725142051350969260552779822311474477465190982214405487832966723064237824116893391582635600954572824283461730174305227163324106696803630124570636862293503303157794087440760460481414627045857682183946295180005665265274410233260692073475970755804716528635182879795976546093058690966305896552559274037231189981374783675942876362445613969091505974564916836681220328321543010697473197612368595351089930471851385269608588146588376192337409233834702566000284063572631780413892885671378894804586818589360734220450612476715073274792685525396139844629461771009978056064510980432017209079906814887385654980259353605674999999186489024975529865866408048159297512229727673454151321261154126672342517630965594085505001568919376443293766604190710308588834573651799126745214377734365579781431941176893796875978890928890266085613403306500963938305597954608210099469047628600532742931639432968076690913984115150976017650926484497886811299706945624860887641739565757787428621227075347975414766558430863927944537549190877318732469659627530200463850835569504924412006429180801781853830052355090971477e-4", "Centesimal Minute of Arc", {"centesimal_minute",NULL}}, {/* 1 gr/10000 */ "1.5707963267948966192313216916397514420985846996875529104874722961539082031431044993140174126710585339910740432566411533235469223047752911158626797040642405587251420513509692605527798223114744774651909822144054878329667230642378241168933915826356009545728242834617301743052271633241066968036301245706368622935033031577940874407604604814146270458576821839462951800056652652744102332606920734759707558047165286351828797959765460930586909663058965525592740372311899813747836759428763624456139690915059745649168366812203283215430106974731976123685953510899304718513852696085881465883761923374092338347025660002840635726317804138928856713788948045868185893607342204506124767150732747926855253961398446294617710099780560645109804320172090799068148873856549802593536056749999991864890249755298658664080481592975122297276734541513212611541266723425176309655940855050015689193764432937666041907103085888345736517991267452143777343655797814319411768937968759788909288902660856134033065009639383055979546082100994690476286005327429316394329680766909139841151509760176509264844978868112997069456248608876417395657577874286212270753479754147665584308639279445375491908773187324696596275302004638508355695049244120064291808017818538300523550909714765e-6", "Centesimal Second of Arc", {"centesimal_second",NULL}}, {/* pi/180 */ "1.7453292519943295769236907684886127134428718885417254560971914401710091146034494436822415696345094822123044925073790592483854692275281012398474218934047117319168245015010769561697553581238605305168788691271172087032963589602642490187704350918173343939698047594019224158946968481378963297818112495229298469927814479531045416008449560904606967176196468710514390888951836280826780369563245260844119508941294762613143108844183845478429899625621072806214155969235444237497596399365292916062377434350066384054631518680225870239366785527479973470762170567665894131682058551206534962093068803748991487052250733336489595251464226821032063015321053384297984326230380227229027519056369719918728059957109384771797455666422845161233115911302323110075720970951722002881706729722222213183211388616998509626756090658861246996974149490570236235045851914916862566284378727833350765770849369930740046563447873209273040575545852724604197048506442015910457521042187510876565876558512062371147850010710425617755051202334438544973651117030477018215921867518787933156835010844640565849827754297903330077173609565418241550730642082540235856392755282386295093676265866050417213231970208138551773639224449598342617438943604577849213120019798375889470612121905324e-2", "Degree", {"degree","°",NULL}}, {/* 2pi/400 */ "1.5707963267948966192313216916397514420985846996875529104874722961539082031431044993140174126710585339910740432566411533235469223047752911158626797040642405587251420513509692605527798223114744774651909822144054878329667230642378241168933915826356009545728242834617301743052271633241066968036301245706368622935033031577940874407604604814146270458576821839462951800056652652744102332606920734759707558047165286351828797959765460930586909663058965525592740372311899813747836759428763624456139690915059745649168366812203283215430106974731976123685953510899304718513852696085881465883761923374092338347025660002840635726317804138928856713788948045868185893607342204506124767150732747926855253961398446294617710099780560645109804320172090799068148873856549802593536056749999991864890249755298658664080481592975122297276734541513212611541266723425176309655940855050015689193764432937666041907103085888345736517991267452143777343655797814319411768937968759788909288902660856134033065009639383055979546082100994690476286005327429316394329680766909139841151509760176509264844978868112997069456248608876417395657577874286212270753479754147665584308639279445375491908773187324696596275302004638508355695049244120064291808017818538300523550909714774e-2", "Gradian", {"grad","gradian","gon","gradians",NULL}}, {/* 45° */ "7.853981633974483096156608458198757210492923498437764552437361480769541015715522496570087063355292669955370216283205766617734611523876455579313398520321202793625710256754846302763899111557372387325954911072027439164833615321189120584466957913178004772864121417308650871526135816620533484018150622853184311467516515788970437203802302407073135229288410919731475900028326326372051166303460367379853779023582643175914398979882730465293454831529482762796370186155949906873918379714381812228069845457529872824584183406101641607715053487365988061842976755449652359256926348042940732941880961687046169173512830001420317863158902069464428356894474022934092946803671102253062383575366373963427626980699223147308855049890280322554902160086045399534074436928274901296768028374999995932445124877649329332040240796487561148638367270756606305770633361712588154827970427525007844596882216468833020953551542944172868258995633726071888671827898907159705884468984379894454644451330428067016532504819691527989773041050497345238143002663714658197164840383454569920575754880088254632422489434056498534728124304438208697828788937143106135376739877073832792154319639722687745954386593662348298137651002319254177847524622060032145904008909269150261775454857391e-1", "Octant", {"octant",NULL}}, {/* 60° */ "1.0471975511965977461542144610931676280657231331250352736583148641026054687620696662093449417807056893273826955044274355490312815365168607439084531360428270391500947009006461737018532148743163183101273214762703252219778153761585494112622610550904006363818828556411534495368181088827377978690867497137579081956688687718627249605069736542764180305717881226308634533371101768496068221737947156506471705364776857567885865306510307287057939775372643683728493581541266542498557839619175749637426460610039830432778911208135522143620071316487984082457302340599536479009235130723920977255841282249394892231350440001893757150878536092619237809192632030578790595738228136337416511433821831951236835974265630863078473399853707096739869546781393866045432582571033201729024037833333327909926833170199105776053654395316748198184489694342141741027511148950117539770627236700010459462509621958444027938068723925563824345327511634762518229103865209546274512625312506525939525935107237422688710006426255370653030721400663126984190670218286210929553120511272759894101006506784339509896652578741998046304165739250944930438385249524141513835653169431777056205759519630250327939182124883131064183534669759005570463366162746709527872011879025533682367273143194", "Sextant", {"sextant",NULL}}, {/* 30° */ "5.2359877559829887307710723054658381403286156656251763682915743205130273438103483310467247089035284466369134775221371777451564076825843037195422656802141351957504735045032308685092660743715815915506366073813516261098890768807927470563113052754520031819094142782057672476840905444136889893454337485687895409783443438593136248025348682713820901528589406131543172666855508842480341108689735782532358526823884287839429326532551536435289698876863218418642467907706332712492789198095878748187132303050199152163894556040677610718100356582439920412286511702997682395046175653619604886279206411246974461156752200009468785754392680463096189045963160152893952978691140681687082557169109159756184179871328154315392366999268535483699347733906969330227162912855166008645120189166666639549634165850995528880268271976583740990922448471710708705137555744750587698853136183500052297312548109792220139690343619627819121726637558173812591145519326047731372563126562532629697629675536187113443550032131276853265153607003315634920953351091431054647765602556363799470505032533921697549483262893709990231520828696254724652191926247620707569178265847158885281028797598151251639695910624415655320917673348795027852316830813733547639360059395127668411836365715972e-1", "Sign", {"sign",NULL}}, {"1", "Radian", {"rad","radian","radians",NULL}}, {/* 90° */ "1.5707963267948966192313216916397514420985846996875529104874722961539082031431044993140174126710585339910740432566411533235469223047752911158626797040642405587251420513509692605527798223114744774651909822144054878329667230642378241168933915826356009545728242834617301743052271633241066968036301245706368622935033031577940874407604604814146270458576821839462951800056652652744102332606920734759707558047165286351828797959765460930586909663058965525592740372311899813747836759428763624456139690915059745649168366812203283215430106974731976123685953510899304718513852696085881465883761923374092338347025660002840635726317804138928856713788948045868185893607342204506124767150732747926855253961398446294617710099780560645109804320172090799068148873856549802593536056749999991864890249755298658664080481592975122297276734541513212611541266723425176309655940855050015689193764432937666041907103085888345736517991267452143777343655797814319411768937968759788909288902660856134033065009639383055979546082100994690476286005327429316394329680766909139841151509760176509264844978868112997069456248608876417395657577874286212270753479754147665584308639279445375491908773187324696596275302004638508355695049244120064291808017818538300523550909714782", "Quadrant", {"quadrant",NULL}}, {NULL,NULL,{NULL}} }; /* based on the gram */ const struct conversion masses[] = { {"9.10938188e-28", "Atomic Mass Unit", {"atomic_mass_unit","atomic_mass_units",NULL}}, {"1.66053873e-24", "Atomic Mass Unit (Unified)", {"atomic_mass_unit.unified","atomic_mass_units.unified",NULL}}, {"1e-18", "Attogram", {"ag","attogram","attograms",NULL}}, {/* 60 kg */ "60e3", "Bag (Coffee)", {"bag.coffee","bags.coffee",NULL}}, {/* 94 lb. av */ "42.63768278e3", "Bag (Portland Cement)", {"bag.portland","bags.portland",NULL}}, {/* 22.5 sh tn */ "20411.65665e3", "Barge", {"barge","barges",NULL}}, {/* 3 1/6 gr */ "205.196548333e-3","Carat", {"ct","carat","carats",NULL}}, {"200e-3", "Carat (metric)", {"kt","carat.metric","carats.metric",NULL}}, {"45.359237e3", "Cental", {"cental","centals",NULL}}, {"1e-2", "Centigram", {"cg","centigram","centigrams",NULL}}, {/* 8 lb. av */ "3.62873896e3", "Clove", {"clove","cloves",NULL}}, {"89.9349e-3", "Crith", {"crith","criths",NULL}}, {"1.66053873e-24", "Dalton", {"Da","dalton","daltons",NULL}}, {"10", "Decagram", {"dag","decagram","decagrams",NULL}}, {"1e-1", "Decigram", {"dg","decigram","decigrams",NULL}}, {/* 12 11/32 gr */ "1.7718451953125", "Dram (Avoirdupois)", {"dr.Av","dr","dram","drams","dram.Av","drams.Av",NULL}}, {/* 60 gr */ "3.8879346", "Dram (Apothecary)", {"dr.Ap","dram.Ap","drams.Ap",NULL}}, {"9.10938188e-31", "Electron Rest Mass", {"me","electron_rest_mass","electron_rest_masses",NULL}}, {"1e18", "Exagram", {"Eg","exagram","exagrams",NULL}}, {"1e-15", "Femtogram", {"fg","femtogram","femtograms",NULL}}, {"1e-6", "Gamma", {"gamma","gammas",NULL}}, {"14.593903e3", "Geepound", {"geepound","geepounds",NULL}}, {"1e9", "Gigagram", {"Gg","gigagram","gigagrams",NULL}}, {"64.79891e-3", "Grain", {"gr","grain","grains",NULL}}, {"1", "Gram", {"g","gram","grams",NULL}}, {"1e3", "Grave", {"grave","graves",NULL}}, {"100", "Hectogram", {"hg","hectogram","hectograms",NULL}}, {"9.80665", "hyl (CGS unit)", {"hyl_CGS",NULL}}, {"9.80665e3", "hyl (MKS unit)", {"hyl_MKS",NULL}}, {/* 100 lb av */ "45.359237e3", "Hundredweight (Short)", {"sh.Cwt","sh.cwt","hundredweight.short","hundredweights.short",NULL}}, {/* 112 lb av */ "50.80234544e3", "Hundredweight (Long)", {"l.Cwt","l.cwt","hundredweight.long","hundredweights.long",NULL}}, {"1e3", "Kilogram", {"kg","kilogram","kilograms",NULL}}, {/* 1000 lb av */ "453.59237e3", "Kip", {"kip","kips",NULL}}, {/* 8 oz t */ "248.8278144", "Mark", {"mark","marks",NULL}}, {"1e6", "Megagram", {"Mg","megagram","megagrams",NULL}}, {"1e-6", "Microgram", {"µg","mcg","microgram","micrograms",NULL}}, {"1e-3", "Milligram", {"mg","milligram","milligrams",NULL}}, {/* 1/20 gr */ "3.2399455e-3", "Mite", {"mite","mites",NULL}}, {/* 1/20 g */ "50e-3", "Mite (metric)", {"mite.metric","mites.metric",NULL}}, {"1e-9", "Nanogram", {"ng","nanogram","nanograms",NULL}}, {/* 1/12 lb */ "28.349523125", "Ounce (Avoirdupois)", {"oz","ounce","ounces","oz.Av","oz.av",NULL}}, {/* 1/12 lb t */ "31.1034768", "Ounce (Apothecary)", {"ounce.Ap","ounces.Ap","oz.Ap","oz.Tr",NULL}}, {/* 1/20 oz t */ "1.55517384", "Pennyweight", {"dwt","pwt","pennyweight","pennyweights",NULL}}, {"1e15", "Petagram", {"Pg","petagram","petagrams",NULL}}, {"1e-12", "Picogram", {"pg","picogram","picograms",NULL}}, {/*5760 grains */ "0.3732417216e3", "Pound (Troy)", {"lb_t","lb.Tr","#",NULL}}, {/* 7000 grains */ "0.45359237e3", "Pound (Avoirdupois)", {"lb","lb_av","lb.Av","lbs","pounds","pound",NULL}}, {"500", "Pound (metric)", {"lb.metric","pound.metric","pounds.metric",NULL}}, {"100e3", "Quintal (metric)", {"q","quintal","quintals",NULL}}, {/*1/4 long ton */ "254.0017272e3", "Quarter (Long)", {"qtr.long","quarter.long","quarters.long",NULL}}, {"12.70058636e3", "Quarter (Imperial)", {"qtr","Q","Qr","quarter","quarters",NULL}}, {/* 20 gr */ "1.2959782", "Scruple (Avoirdupois)", {"s.Av","scruple.Av","scruples.Av",NULL}}, {/* 1/700 lb.av. */ "647.9891e-3", "Sheet", {"sheet","sheets",NULL}}, {"14.593903e3", "Slug", {"slug","slugs",NULL}}, {/* 14 lb av */ "6.35029318e3", "Stone", {"stone","stones",NULL}}, {"1e12", "Teragram", {"Tg","teragram","teragrams",NULL}}, {"29.16666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666", "Ton (Short Assay)", {"AT","AT.s","assay_ton.short",NULL}}, {"32.66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666", "Ton (Long Assay)", {"AT.l","assay_ton.long",NULL}}, {/* 2000 lb */ "907.18474e3", "Ton (Short)", {"sh.tn","T","short_ton","short_tons",NULL}}, {/* 2240 lb */ "1016.0469088e3", "Ton (Long)", {"long.tn.","L.T.","LT","ton","tons","long_ton","long_tons",NULL}}, {"1000e3", "Tonne / Metric Ton", {"MT","t","metric_ton","metric_tons","tonne","tonnes",NULL}}, {/* 252 lb */ "114.30527724e3", "Wey", {"wey","weys",NULL}}, {"1e-24", "Yoctogram", {"yg","yoctogram","yoctograms",NULL}}, {"1e24", "Yottagram", {"Yg","yottagram","yottagrams",NULL}}, {"1e-21", "Zeptogram", {"zg","zeptogram","zeptograms",NULL}}, {"1e21", "Zettagram", {"Zg","zettagram","zettagrams",NULL}}, {NULL,NULL,{NULL}} }; /* based on meter per second */ const struct conversion speeds[] = { {"100", "Centimeters/second", {"cm/s",NULL}}, {"1", "Meters/second", {"m/s",NULL}}, {"3.048e-1", "Feet/second", {"f/s","feet_per_second",NULL}}, {"5.08e-3", "Feet/minute", {"f/m","feet_per_minute",NULL}}, {"8.4666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666e-5", "Feet/hour", {"fph","f/h","feet_per_hour",NULL}}, {"1.663095e-4", "Furlongs/fortnight", {"furlong_per_fortnight",NULL}}, {"3.352799999999999999664720000000000000033527999999999999996647200000000000000335279999999999999966472000000000000003352799999999999999664720000000000000033527999999999999996647200000000000000335279999999999999966472000000000000003352799999999999999664720000000000000033527999999999999996647200000000000000335283", "Furlongs/minute", {"fur/m",NULL}}, {"4.2333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333e-4", "inches/minute", {"ipm","in/m","inches_per_minute",NULL}}, {"2.54e-2", "inches/second", {"ips","in/s","inches_per_minute",NULL}}, {"2.7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777e-1", "Kilometers/hour", {"km/h","kph","kilometer/hr","kilometers/hr","kilometer/hour","kilometers/hour",NULL}}, {"0.5144444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444", "Knots", {"k","knot","knots",NULL}}, {"0.514773", "Knots (Admiralty)", {"knot.admiralty","knots.admiralty",NULL}}, {"5.587898399999999857732106736000003622140562501439907780301278713339947913529443958364926121540356820028980945582515362062145125469158881897785105555214866882391212564229489174319728114717205621819722199299944868469872805823403648757038363736143102645803259277796606637849018787298395000363981675382863290733015e-2", "Leagues/day", {"leagues/day","league/day",NULL}}, {"331.5", "Mach (dry air, 273 kelvin)", {"M","Ma","mach","machs",NULL}}, {"1.609344e3", "Miles/second", {"mps","mile/s","miles/s","mile/second","miles/second",NULL}}, {"26.8224", "Miles/minute", {"mpm","mile/m","miles/m","mile/minute","miles/minute",NULL}}, {"0.44704", "Miles/hour", {"mph","mile/hr","miles/hr","mile/hour","miles/hour",NULL}}, {NULL,NULL,{NULL}} }; /* based on Watts */ const struct conversion powers[] = { {"1.68875e-3", "Atmosphere Cubic Centimeter/minute",{"atm.ccm.","atmosphere_cubic_centimeter/minute",NULL}}, {"0.101325", "Atmosphere Cubic Centimeter/second",{"atm.ccs.","atmosphere_cubic_centimeter/second",NULL}}, {"47.82007468224", "Atmosphere Cubic foot/minute", {"atm.cfm.","atmosphere_cubic_foot/minute",NULL}}, {"2.8692044809344e3", "Atmosphere Cubic foot/second", {"atm.cfs.","atmosphere_cubic_foot/second",NULL}}, {"1e-18", "Attowatt", {"aW","attowatt","attowatts",NULL}}, {"0.293071", "BTU/hour", {"BTU/hr",NULL}}, {"1.05505585262e3", "BTU/s", {"BTU/s",NULL}}, {"4.1868", "Calorie/second", {"cal/s","calorie_per_second",NULL}}, {"1e-2", "Centiwatt", {"cW","centiwatt","centiwatts",NULL}}, {"10", "Decawatt", {"daW","decawatt","decawatts",NULL}}, {"0.1", "Deciwatt", {"dW","deciwatt","deciwatts",NULL}}, {"1e-7", "Ergs/sec", {"ergs/s",NULL}}, {"1e18", "Exawatt", {"EW","exawatt","exawatts",NULL}}, {"1e-15", "Femtowatt", {"fW","femtowatt","femtowatts",NULL}}, {"3.766161e-4", "Foot-lbs/hour", {"ft-lbf/h","ft-lb/h","foot-pound_per_hour","foot-pounds_per_hour",NULL}}, {"2.259696580552334e-2", "Foot-lbs/minute", {"ft-lbf/m","ft-lb/m","foot-pound_per_minute","foot-pounds_per_minute",NULL}}, {"1.3558179483314004", "Foot-lbs/sec", {"ft-lbf/s","ft-lb/s","foot-pound_per_second","foot-pounds_per_second",NULL}}, {"100", "Hectowatt", {"hW","hectowatt","hectowatts",NULL}}, {"735.49875", "Horsepower (metric)", {"hp","horse","horsepower","horsepower.metric",NULL}}, {"736", "Horsepower (European electrical)", {"horsepower.ee",NULL}}, {"745.69987158227022", "Horsepower (Imperial mechanical)", {"horsepower.ImpMech",NULL}}, {"746", "Horsepower (Imperial electrical)", {"horsepower.ImpElec",NULL}}, {"9.810657e3", "Horsepower (Boiler)", {"horsepower.boiler","boiler_horsepower",NULL}}, {"1e3", "Kilowatt", {"kW","kilowatt","kilowatts",NULL}}, {"1.68875", "Liter-atmosphere/minute", {"L-atm/min","liter-atmosphere_per_minute",NULL}}, {"101.325", "Liter-atmosphere/sec", {"L-atm/s","liter-atmosphere_per_second",NULL}}, {"1.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333e-4", "Lusec", {"lusec","lusecs",NULL}}, {"1e9", "Gigawatts", {"GW","gigawatt","gigawatts",NULL}}, {"1e6", "Megawatt", {"MW","megawatt","megawatts",NULL}}, {"1e-6", "Microwatt", {"µW","microwatt","microwatts",NULL}}, {"1e-3", "Milliwatt", {"mW","milliwatt","milliwatts",NULL}}, {"1e-9", "Nanowatt", {"nW","nanowatt","nanowatts",NULL}}, {"1e15", "Petawatt", {"PW","petawatt","petawatts",NULL}}, {"1e-12", "Picowatt", {"pW","picowatt","picowatts",NULL}}, {"980.665", "Poncelet", {"p","poncelet","poncelets",NULL}}, {"70.337057", "Square Foot Equivalent Direct Radiation",{"sq.ft.EDR",NULL}}, {"1e12", "Terawatt", {"TW","terawatt","terawatts",NULL}}, {"844.2", "Ton of A.C.", {"ton_of_a.c.",NULL}}, {"3.516853e3", "Ton of Refrigeration", {"ton_of_refrigeration",NULL}}, {"3.938875e3", "Ton of Refrigeration (Imperial)", {"ton_of_refrigeration.Imp",NULL}}, {"1", "Watts (joules/sec)", {"W","watt","watts","J/s",NULL}}, {"1e-24", "Yoctowatt", {"yW","yoctowatt","yoctowatts",NULL}}, {"1e24", "Yottawatt", {"YW","yottawatt","yottawatts",NULL}}, {"1e-21", "Zeptowatt", {"zW","zeptowatt","zeptowatts",NULL}}, {"1e21", "Zettawatt", {"ZW","zettawatt","zettawatts",NULL}}, {NULL,NULL,{NULL}} }; /* based on Newtons */ const struct conversion forces[] = { {"1e-5", "Dyne", {"dyn","dyne","dynes",NULL}}, {"9.80665", "Grave-force", {"Gf","grave_force","graves_force",NULL}}, {"9.80665e-3", "Gravet", {"gravet",NULL}}, {"9.80665", "Kilopond", {"kp","kilopond","kiloponds",NULL}}, {"9.80665", "Kilogram-force", {"kgf","kilogram_force","kilograms_force",NULL}}, {"4.4482216152605e3", "Kip (kilopound-force)",{"kip","kipf","klbf","kips","kilopound","kilopounds",NULL}}, {"9.80665e-3", "Milligrave-force", {"gf","milligrave_force","milligraves_force",NULL}}, {"1", "Newton", {"N","newton","newtons",NULL}}, {"0.2780138509537812", "Ounce-force", {"ozf","ounce_force","ounces_force",NULL}}, {"4.4482216152605", "Pound", {"lbf","pound_force","pounds_force",NULL}}, {"0.138254954376", "Poundal", {"pdl","pl","poundal","poundals",NULL}}, {"1e3", "Sthene", {"sn","sthene","sthenes",NULL}}, {"8.896443230521e3", "Ton-force", {"tnf","ton_force","tons_force",NULL}}, {NULL,NULL,{NULL}} }; /* based on meters per square second */ const struct conversion accelerations[] = { {"3.28084", "Celo", {"celo","celos",NULL}}, {"10000", "Centigal", {"centigal","centigals",NULL}}, {"100", "Centimeter/square second", {"cm/s/s","cm/s^2",NULL}}, {"1000", "Decigal", {"Dg","decigal","decigals",NULL}}, {"3.280839895","Foot/square second", {"f/s/s","f/s^2",NULL}}, {"11811.023622047","Foot/hour/second", {"f/h/s",NULL}}, {"196.8503937","Foot/minute/second", {"f/m/s",NULL}}, {"0.101972", "G-unit (G)", {"G","G-units",NULL}}, {"100", "Galileo", {"Gal","gal","galileo","galileos",NULL}}, {"0.101971621","Grav", {"grav","gravs",NULL}}, {"39.370079", "Inch/square second", {"in/s/s","in/s^2",NULL}}, {"2362.204724409","Inch/minute/second", {"in/m/s",NULL}}, {"3.6", "Kilometer/hour/second", {"km/h/s",NULL}}, {"0.001", "Kilometer/square second", {"km/s/s","km/s^2",NULL}}, {"1.943844492","Knot/second", {"k/s",NULL}}, {"0.1", "Leo", {"leo","leos",NULL}}, {"1", "Meter/square second", {"m/s/s","m/s^2",NULL}}, {"134.216178", "Mile/hour/minute", {"mi/h/m",NULL}}, {"2.236936292","Mile/hour/second", {"mi/h/s",NULL}}, {"0.037282271","Mile/minute/second", {"mi/m/s",NULL}}, {"0.000621371","Mile/square second", {"mi/s/s","mi/s^2",NULL}}, {"100000", "Milligal", {"mGal","milligals",NULL}}, {"1000", "Millimeter/square second", {"mm/s/s","mm/s^2",NULL}}, {NULL,NULL,{NULL}} }; /* based on none */ const struct conversion metric[] = { {"10e-18", "Atto", {"a","atto",NULL}}, {"1e-2", "Centi", {"c","centi",NULL}}, {"10", "Deca", {"da","deca",NULL}}, {"0.1", "Deci", {"d","deci",NULL}}, {"1e18", "Exa", {"E","exa",NULL}}, {"1e-15", "Femto", {"f","femto",NULL}}, {"1e9", "Giga", {"G","giga",NULL}}, {"1e-2", "Hecto", {"h","hecto",NULL}}, {"1e3", "Kilo", {"k","kilo",NULL}}, {"1e6", "Mega", {"M","mega",NULL}}, {"1", "none", {"none",NULL}}, {"1e-6", "Micro", {"µ","micro",NULL}}, {"1e-3", "Milli", {"m","milli",NULL}}, {"1e-9", "Nano", {"n","nano",NULL}}, {"1e15", "Peta", {"P","peta",NULL}}, {"1e-12", "Pico", {"p","pico",NULL}}, {"1e12", "Tera", {"T","tera",NULL}}, {"1e-24", "Yocto", {"y","yocto",NULL}}, {"1e24", "Yotta", {"Y","yotta",NULL}}, {"1e-21", "Zepto", {"z","zepto",NULL}}, {"1e21", "Zetta", {"Z","zetta",NULL}}, {NULL,NULL,{NULL}} }; /* based on the Pascal */ const struct conversion pressures[] = { {"98.0665e3", "Atmosphere (technical)", {"atm.Tech","atmosphere.Tech",NULL}}, {"101325", "Atmosphere (standard)", {"atm","atmosphere",NULL}}, {"1e-18", "Attopascal", {"aPa","attopascal","attopascals",NULL}}, {"1e5", "Bar", {"bar",NULL}}, {"0.1", "Barye", {"barye","baryes",NULL}}, {"98.0638", "Centimeter of Water (3.98°C)",{"cmH2O","centimeter_of_water","centimeters_of_water",NULL}}, {"1.33322387415e3","Centimeter of Mercury", {"cmHg","centimeter_of_mercury","centimeters_of_mercury",NULL}}, {"1e-2", "Centipascal", {"cPa","centipascal","centipascals",NULL}}, {"10", "Decapascal", {"daPa","decapascal","decapascals",NULL}}, {"0.1", "Decipascal", {"dPa","decipascal","decipascals",NULL}}, {"1e18", "Exapascal", {"EPa","exapascal","exapascals",NULL}}, {"1e-15", "Femtopascal", {"fPa","femtopascal","femtopascals",NULL}}, {"2.98898e3", "Foot of Water (3.98°C)", {"ftH2O","foot_of_water","feet_of_water",NULL}}, {"40.6366636840919e3","Foot of Mercury", {"ftHg","foot_of_mercury","feet_of_mercury",NULL}}, {"1e9", "Gigapascal", {"GPa","gigapascal","gigapascals",NULL}}, {"100", "Hectopascal", {"hPa","hectopascal","hectopascals",NULL}}, {"249.082", "Inch of Water (3.98°C)", {"inH2O","inch_of_water","inches_of_water",NULL}}, {"3.386388640341e3","Inch of Mercury", {"inHg","inch_of_mercury","inches_of_mercury",NULL}}, {"9.80665e6", "Kilogram-force/sq.mm.", {"kgf/mm2","kilogram-force_per_square_millimeter",NULL}}, {"1e3", "Kilopascal", {"kPa","kilopascal","kilopascals",NULL}}, {"6.894757e6", "kip/sq.in.", {"kip/sq.in.","kip_per_square_inch",NULL}}, {"1e6", "Megapascal", {"MPa","megapascal","megapascals",NULL}}, {"1e-6", "Micropascal", {"µPa","micropascal","micropascals",NULL}}, {"133.322387415","Millimeter of Mercury", {"mmHg","millimeter_of_mercury","millimeters_of_mercury",NULL}}, {"9.80638", "Millimeter of Water (3.98°C)",{"mmH2O","millimeter_of_water","millimeters_of_water",NULL}}, {"1e-3", "Millipascal", {"mPa","millipascal","millipascals",NULL}}, {"1e-9", "Nanopascal", {"nPa","nanopascal","nanopascals",NULL}}, {"1", "Pascal", {"Pa","pascal","pascals",NULL}}, {"1e15", "Petapascal", {"PPa","petapascal","petapascals",NULL}}, {"1e-12", "Picopascal", {"pPa","picopascal","picopascals",NULL}}, {"1e3", "Pièze", {"pz","pieze",NULL}}, {"1.488164", "Poundal/sq.ft.", {"pdl/sq.ft.","poundal_per_sqare_foot",NULL}}, {"47.880259", "Pound/sq.ft.", {"psf","lb/sq.ft.","pound_per_square_foot",NULL}}, {"6.894757e3", "Pound/sq.in.", {"psi","lb/sq.ft.","pound_per_square_inch",NULL}}, {"95.760518e3", "Short Ton/sq.ft.", {"ST/sq.ft","short_ton_per_square_foot",NULL}}, {"1e12", "Terapascal", {"TPa","terapascal","terapascals",NULL}}, {"133.3223684", "Torr", {"torr",NULL}}, {"1e-24", "Yoctopascal", {"yPa","yoctopascal","yoctopascals",NULL}}, {"1e24", "Yottapascal", {"YPa","yottapascal","yottapascals",NULL}}, {"1e-21", "Zeptopascal", {"zPa","zeptopascal","zeptopascals",NULL}}, {"1e21", "Zettapascal", {"ZPa","zettapascal","zettapascals",NULL}}, {NULL,NULL,{NULL}} }; const struct conversion temperatures[] = { {"", "Kelvin", {"kelvin", "Kelvin", "K", NULL}}, {"", "Celsius", {"celsius", "Celsius", "C", NULL}}, {"", "Rankine", {"rankine", "Rankine", NULL}}, {"", "Farenheit", {"farenheit", "Farenheit", "F", NULL}}, {"", "Reaumur", {"reaumur", "Reaumur", "R", NULL}}, {NULL,NULL,{NULL}} }; const char * from_temperatures[] = { "[%1.15f]", // kelvin "[%1.15f + 273.15]", // celsius "[%1.15f / 1.8]", // rankine "[(%1.15f - 32)/1.8 + 273.15]", // farenheit "[((5/4) * %1.15f) + 273.15]" // reaumur }; const char * to_temperatures[] = { "%s", // kelvin "%s - 273.15", // celsius "%s * 1.8", // rankine "1.8*(%s-273.15)+32", // farenheit "(%s-273.15)*(4/5)" // reaumur }; /* time, energy */ const struct conversion *conversions[] = { lengths, areas, volumes, masses, speeds, powers, forces, accelerations, temperatures, angles, pressures, metric, NULL }; /* returns the category number of the unit */ ssize_t identify_unit(const char *unit) { ssize_t cat_num; for (cat_num = 0; conversions[cat_num] != NULL; cat_num++) { size_t unit_num; const struct conversion *category = conversions[cat_num]; for (unit_num = 0; category[unit_num].name != NULL; unit_num++) { size_t abbrev_num; for (abbrev_num = 0; category[unit_num].aka[abbrev_num] != NULL; abbrev_num++) { if (!strcmp(category[unit_num].aka[abbrev_num], unit)) { return cat_num; } } } } return -1; } ssize_t identify_units(const char *unit1, const char *unit2) { ssize_t cat_num; ssize_t u1 = -1, u2 = -1; for (cat_num = 0; conversions[cat_num] != NULL; cat_num++) { size_t unit_num; const struct conversion *category = conversions[cat_num]; for (unit_num = 0; category[unit_num].name != NULL; unit_num++) { size_t abbrev_num; for (abbrev_num = 0; category[unit_num].aka[abbrev_num] != NULL; abbrev_num++) { if (!strcmp(category[unit_num].aka[abbrev_num], unit1)) { if (u2 == -1) { u1 = cat_num; } else if (u2 == cat_num) { return u2; } else { return -1; } } else if (!strcmp(category[unit_num].aka[abbrev_num], unit2)) { if (u1 == -1) { u2 = cat_num; } else if (u1 == cat_num) { return u1; } else { return -1; } } } } } if (-1 == u1) { return -3; } else if (-1 == u2) { return -4; } return -2; } ssize_t unit_id(const int utype, const char *unit) { size_t unit_num; for (unit_num = 0; (conversions[utype])[unit_num].name != NULL; unit_num++) { size_t abbrev_num; for (abbrev_num = 0; (conversions[utype])[unit_num].aka[abbrev_num] != NULL; abbrev_num++) { if (!strcmp((conversions[utype])[unit_num].aka[abbrev_num], unit)) { return (ssize_t)unit_num; } } } return -1; } void uber_conversion (Number output, const int utype, const int fromunit, const int tounit, Number value) { if (utype != TEMPERATURE_C) { const struct conversion *ltable = conversions[utype]; Number tofac, fromfac; /* Moving to a more precise model... * * The essential computation is: * * value * (tofac/fromfac) * * (it used to be : * *((fromfac)/(tofac)) */ (void)num_init_set_str(tofac, ltable[tounit].factor, 10); (void)num_init_set_str(fromfac, ltable[fromunit].factor, 10); switch (utype) { case LENGTH_C: case METRIC_C: case AREA_C: case VOLUME_C: case ANGLE_C: case MASS_C: case SPEED_C: case FORCE_C: case POWER_C: case PRESSURE_C: num_div(fromfac, fromfac, tofac); num_mul(output, fromfac, value); break; case ACCELERATION_C: default: num_div(tofac, tofac, fromfac); num_mul(output, tofac, value); } num_free(tofac); num_free(fromfac); } else { Number temp; num_init(temp); /* convert to kelvin */ switch (fromunit) { case KELVIN: break; case CELSIUS: num_set_d(temp, 273.15); num_add(value, value, temp); break; case RANKINE: num_set_d(temp, 1.8); num_div(value, value, temp); break; case FARENHEIT: num_sub_ui(value, value, 32); num_set_d(temp, 1.8); num_div(value, value, temp); num_set_d(temp, 273.15); num_add(value, value, temp); break; case REAUMUR: num_set_d(temp, (5.0 / 4.0)); num_mul(value, value, temp); num_set_d(temp, 273.15); num_add(value, value, temp); break; } /* convert from kelvin */ switch (tounit) { case KELVIN: break; case CELSIUS: num_set_d(temp, 273.15); num_sub(output, value, temp); break; case RANKINE: num_set_d(temp, 1.8); num_mul(output, value, temp); break; case FARENHEIT: num_set_d(temp, 273.15); num_sub(value, value, temp); num_set_d(temp, 1.8); num_mul(value, value, temp); num_add_ui(output, value, 32); break; case REAUMUR: num_set_d(temp, 273.15); num_sub(value, value, temp); num_set_d(temp, (4.0 / 5.0)); num_mul(output, value, temp); break; } num_free(temp); /* The old way *//* * //char stage1[100]; * //char composite[100]; * //sprintf(stage1,from_temperatures[fromunit],value); * //sprintf(composite,to_temperatures[tounit],stage1); * //return parseme(composite); */ } } /* vim:set expandtab: */ wcalc-2.5/src/common/historyManager.c0000644000175000017500000001214112255100457014611 00000000000000/* * historyManager.c * Wcalc * * Created by Kyle Wheeler on Mon Jan 21 2002. * Copyright (c) 2001 Kyle Wheeler. All rights reserved. * */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* System Headers */ #include #include #include /* might make readline happy */ #include /* Internal Headers */ #include "number.h" #include "historyManager.h" #include "calculator.h" #ifdef HAVE_READLINE_HISTORY # if defined(HAVE_READLINE_HISTORY_H) # include # elif defined(HAVE_HISTORY_H) # include # else /* ! defined(HAVE_HISTORY_H) */ extern void add_history(); extern int write_history(); extern int read_history(); # endif /* defined(HAVE_READLINE_HISTORY_H) */ /* no history */ #endif /* HAVE_READLINE_HISTORY */ /* Configuration Variables */ short allow_duplicates = 0; short recalculate = 0; /* Data Types */ struct entry { char *exp; Number ans; unsigned int calc : 1; }; /* Private Variables */ static struct entry *history = NULL; static size_t histlen = 0; /* Private Functions */ static int all_calculated(void); static void clear_calculated(void); void clearHistory() { /*{{{*/ unsigned int i; for (i = 0; i < histlen; i++) { free(history[i].exp); num_free(history[i].ans); } if (histlen) { free(history); histlen = 0; } } /*}}}*/ void addToHistory(char *expression, Number answer) { /*{{{*/ #if defined(HAVE_READLINE_HISTORY) add_history(expression); #endif if (!histlen) { /* this is the beginning of a new history record */ if (!conf.history_limit || (conf.history_limit_len > 0)) { history = malloc(sizeof(struct entry)); if (!history) { return; } history->exp = strdup(expression); if (!history->exp) { free(history); return; } num_init_set(history->ans, answer); histlen = 1; } } else { /* a history exists */ // eliminate duplicates if (allow_duplicates || strcmp(history[histlen - 1].exp, expression)) { if (!conf.history_limit || (histlen < conf.history_limit_len)) { /* history not too long, just add a new entry */ struct entry *temp = realloc(history, sizeof(struct entry) * (histlen + 1)); if (!temp) { // if it couldn't be realloced, try malloc and memcpy temp = malloc(sizeof(struct entry) * (histlen + 1)); if (!temp) { return; } memcpy(temp, history, sizeof(struct entry) * histlen); free(history); } history = temp; if (expression) { history[histlen].exp = strdup(expression); } else { history[histlen].exp = NULL; } num_init_set(history[histlen].ans, answer); /* why is this if statement here? */ if (!temp[histlen].exp) { return; } ++histlen; } else { /* history too long */ unsigned long i; if (history[0].exp) { free(history[0].exp); } for (i = 0; i < histlen - 1; ++i) { history[i].exp = history[i + 1].exp; num_set(history[i].ans, history[i + 1].ans); history[i].calc = history[i + 1].calc; } if (expression) { history[histlen - 1].exp = strdup(expression); } else { history[histlen - 1].exp = NULL; } num_set(history[histlen - 1].ans, answer); return; } } } } /*}}}*/ char *historynum(int step, int col) { /*{{{*/ if (col == 1) { return history[step].exp; } else { static char *temp; if (recalculate) { parseme(history[step].exp); num_set(history[step].ans, last_answer); history[step].calc = 1; if (all_calculated()) { recalculate = 0; clear_calculated(); } } assert(standard_output == 0); temp = print_this_result(history[step].ans, 0, NULL, NULL); return (temp ? temp : "Not Enough Memory"); } } /*}}}*/ static int all_calculated(void) { /*{{{*/ unsigned long i, ret = 0; for (i = 0; i < histlen; ++i) { if (history[i].calc) { ++ret; } } return (ret == histlen); } /*}}}*/ static void clear_calculated(void) { /*{{{*/ unsigned long i; for (i = 0; i < histlen; ++i) { history[i].calc = 0; } } /*}}}*/ size_t historyLength(void) { /*{{{*/ return histlen; } /*}}}*/ /* vim:set expandtab: */ wcalc-2.5/src/common/add_commas.c0000644000175000017500000000701112115731215013701 00000000000000#if HAVE_CONFIG_H # include "config.h" #endif /* System Headers */ #if !defined(HAVE_CONFIG_H) || HAVE_STRING_H # include #endif #include /* for calloc() */ #include /* Internal Headers */ #include "add_commas.h" #include "calculator.h" /* this function returns a copy of the input string with delimiters * appropriate for the specified base. */ /*@null@*/ char *add_commas(const char *input, const int base) { char *tmpstring, *delimiter; unsigned int skip, prefix, ctr; char separator; char dec_delim = conf.dec_delimiter; size_t preflen; size_t fromcurs, tocurs; char *exponent_chars; const size_t input_len = strlen(input); Dprintf("add_commas: %s, %i\n", input, base); if (NULL == input) { return NULL; } if (0 == isdigit(*input)) { return NULL; } delimiter = strchr(input, dec_delim); if (NULL == delimiter) { dec_delim = 0; delimiter = strrchr(input, 0); } Dprintf("add_commas: input: %s\n", input); switch (base) { default: case DECIMAL_FORMAT: skip = 3; prefix = 0; separator = conf.thou_delimiter; exponent_chars = "eE"; break; case HEXADECIMAL_FORMAT: skip = 2; prefix = 2; separator = ' '; exponent_chars = "@"; break; case OCTAL_FORMAT: skip = 4; prefix = 1; separator = conf.thou_delimiter; exponent_chars = "eE"; break; case BINARY_FORMAT: skip = 8; prefix = 2; separator = conf.thou_delimiter; exponent_chars = "eE"; break; } if (0 == conf.print_prefixes) { prefix = 0; } if (*input == '-') { prefix++; } // the meat of the function preflen = (size_t)(delimiter - input); if (preflen < (size_t)(skip + prefix)) { return NULL; } Dprintf("tmpstring is alloc'd to be %lu long\n", preflen + strlen(input)); tmpstring = calloc(preflen + strlen(input), sizeof(char)); if (tmpstring == NULL) { return NULL; } ctr = (unsigned int)((delimiter - (input + prefix)) % skip); if (ctr == 0) { ctr = skip; } fromcurs = 0; tocurs = 0; while (fromcurs < input_len && input[fromcurs] != dec_delim && strchr(exponent_chars, input[fromcurs]) == NULL) { Dprintf("from: %s to: %s \n", input + fromcurs, tmpstring); tmpstring[tocurs++] = input[fromcurs++]; if (prefix != 0) { prefix--; continue; } if ((--ctr == 0) && (separator != '\0')) { tmpstring[tocurs++] = separator; } if (ctr == 0) { ctr = skip; } } Dprintf("tmpstring[tocurs-1] == %c\n", tmpstring[tocurs - 1]); Dprintf(" input[fromcurs-1] == %c\n", input[fromcurs - 1]); if (tmpstring[tocurs - 1] == separator) { tmpstring[tocurs - 1] = dec_delim; } if ((input[fromcurs] == 'e') || (input[fromcurs] == 'E')) { tmpstring[tocurs++] = input[fromcurs]; } if (fromcurs < input_len) { fromcurs++; while (fromcurs < input_len) { tmpstring[tocurs++] = input[fromcurs++]; } } return tmpstring; } /* vim:set expandtab: */ wcalc-2.5/src/common/files.c0000644000175000017500000002476512255064040012733 00000000000000/* * files.c * Wcalc * * Created by Kyle Wheeler on Sat Mar 22 2003. * Copyright (c) 2003 Kyle Wheeler. All rights reserved. * */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* System Headers */ #include /* for open() */ #include /* for close() */ #include /* for errno */ #include /* for open flags */ #include /* for open flags */ #include /* for strlen() */ #include /* for free() */ #include /* for assert() */ #ifdef HAVE_PATH_MAX # ifdef HAVE_LIMITS_H # include /* for PATH_MAX */ # endif #endif /* Internal Headers */ #include "historyManager.h" #include "string_manip.h" #include "calculator.h" #include "variables.h" #include "output.h" #include "files.h" /* this is for communicating with the scanner */ char *open_file = NULL; static inline void tristrncat(char *dest, size_t len, const char *one, const char *two, const char *three) { size_t i; size_t written = 0; strncpy(dest, one, len); for (i = 0; i < len; i++) { if (dest[i] == 0) { break; } } written = i; strncat(dest, two, len - written); for (i = written; i < len; i++) { if (dest[i] == 0) { break; } } written = i; strncat(dest, three, len - written); } int openDotFile(const char *dotFileName, int flags) { /*{{{*/ char *filename = NULL; const char *home = getenv("HOME"); int namelen; int fd; if (!home) { return -1; } assert(dotFileName); namelen = strlen(home) + strlen(dotFileName) + 3; #ifdef HAVE_PATH_MAX if (namelen > PATH_MAX) { return -2; } #endif filename = malloc(sizeof(char) * namelen + 1); tristrncat(filename, namelen, home, "/.", dotFileName); fd = open(filename, flags, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); free(filename); if (fd < 0) { return -3; } else { return fd; } } /*}}}*/ int saveState(char *filename) { /*{{{ */ int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); int return_error = 0; free(filename); if (fd >= 0) { // success size_t hindex; int retval; size_t num_vars = numvars(); /* save variables */ for (hindex = 0; hindex < num_vars; hindex++) { struct variable *keyval = getrealnvar(hindex); char *cptr; if (!keyval) { continue; } if (!strcmp(keyval->key, "a")) { continue; } retval = write(fd, keyval->key, strlen(keyval->key)); if (retval < (int)strlen(keyval->key)) { return_error = errno; break; } retval = write(fd, "=", 1); if (retval < 1) { return_error = errno; break; } if (keyval->exp) { const size_t len = strlen(keyval->expression) + 3; cptr = malloc(len); tristrncat(cptr, len, "'", keyval->expression, "'"); } else { cptr = strdup(print_this_result(keyval->value, standard_output, NULL, NULL)); } retval = write(fd, cptr, strlen(cptr)); if (retval < (int)strlen(cptr)) { return_error = errno; free(cptr); break; } free(cptr); if (keyval->description) { const size_t len = strlen(keyval->expression) + 4; cptr = malloc(len); tristrncat(cptr, len, " '", keyval->description, "'"); retval = write(fd, cptr, strlen(cptr)); if (retval < (int)strlen(cptr)) { return_error = errno; free(cptr); break; } free(cptr); } retval = write(fd, "\n", 1); if (retval < 1) { return_error = errno; break; } } /* save history */ for (hindex = 0; hindex < historyLength() && return_error == 0; hindex++) { char *history_entry = historynum(hindex, 1); retval = write(fd, history_entry, strlen(history_entry)); if (retval < (int)strlen(history_entry)) { return_error = errno; break; } retval = write(fd, " # = ", 5); if (retval < 5) { return_error = errno; break; } history_entry = historynum(hindex, 2); retval = write(fd, history_entry, strlen(history_entry)); if (retval < (int)strlen(history_entry)) { return_error = errno; break; } retval = write(fd, "\n", 1); if (retval < 1) { return_error = errno; break; } } if (close(fd) != 0) { return_error = errno; } } else { // failure return_error = errno; } return return_error; } /*}}} */ int loadStateFD(int fd, const int into_history) { /*{{{*/ assert(fd >= 0); int return_error = 0; int standard_output_save = standard_output; standard_output = 0; char *linebuf; int retval; unsigned int linelen = 0, maxlinelen = 99; linebuf = calloc(sizeof(char), 100); retval = read(fd, linebuf + linelen, 1); while (retval == 1) { while (retval == 1 && linebuf[linelen] != '\n') { linelen++; if (linelen == maxlinelen) { char *newlinebuf = realloc(linebuf, sizeof(char) * (maxlinelen + 100)); if (newlinebuf) { maxlinelen += 100; linebuf = newlinebuf; } else { return_error = errno; retval = -1; break; } } retval = read(fd, linebuf + linelen, 1); } linebuf[linelen] = 0; if (conf.verbose) { display_stateline(linebuf); } stripComments(linebuf); while (linebuf[strlen(linebuf) - 1] == ' ') { linebuf[strlen(linebuf) - 1] = 0; } if (strlen(linebuf)) { extern char *errstring; char *safe; safe = strdup(linebuf); parseme(safe); putval("a", last_answer, "previous answer"); if ((!errstring || (errstring && !strlen(errstring)) || conf.remember_errors) && into_history) { addToHistory(linebuf, last_answer); } free(safe); } linelen = 0; memset(linebuf, 0, maxlinelen); if (retval == 1) { retval = read(fd, linebuf + linelen, 1); } } free(linebuf); standard_output = standard_output_save; return return_error; } /*}}}*/ int loadState(const char *filename, const int into_history) { /*{{{ */ int fd, return_error = 0; fd = open(filename, O_RDONLY); if (fd < 0) { return_error = errno; } { int tmp = loadStateFD(fd, into_history); if (tmp != 0) { return_error = tmp; } } if (close(fd) != 0) { return_error = errno; } return return_error; } /*}}} */ int storeVar(const char *variable) { /*{{{ */ int fd, retval = 0, return_error = 0; if (!varexists(variable)) { report_error("Variable is not defined."); return -1; } fd = openDotFile("wcalc_preload", O_WRONLY | O_CREAT | O_APPEND); switch (fd) { case -1: report_error("HOME environment variable unset."); break; case -2: report_error("HOME environment variable is too long."); break; default: { // success struct answer keyval = getvar_full(variable); char *cptr; retval = write(fd, variable, strlen(variable)); if (retval < (int)strlen(variable)) { return_error = errno; goto exit_storeVar; } retval = write(fd, "=", 1); if (retval < 1) { return_error = errno; goto exit_storeVar; } if (keyval.exp) { const size_t len = strlen(keyval.exp) + 4; cptr = malloc(len); tristrncat(cptr, len, "'", keyval.exp, "' "); } else { cptr = strdup(print_this_result(keyval.val, standard_output, NULL, NULL)); } retval = write(fd, cptr, strlen(cptr)); if (retval < (int)strlen(cptr)) { return_error = errno; free(cptr); goto exit_storeVar; } free(cptr); if (keyval.desc) { const size_t len = strlen(keyval.desc) + 3; cptr = malloc(len); tristrncat(cptr, len, "'", keyval.desc, "'"); retval = write(fd, cptr, strlen(cptr)); if (retval < (int)strlen(cptr)) { return_error = errno; free(cptr); goto exit_storeVar; } free(cptr); } retval = write(fd, "\n", 1); if (retval < 1) { return_error = errno; goto exit_storeVar; } retval = close(fd); if (retval == -1) { return_error = errno; goto exit_storeVar; } } } exit_storeVar: return return_error; } /*}}} */ /* vim:set expandtab: */ wcalc-2.5/src/common/includes/0000775000175000017500000000000012451434214013341 500000000000000wcalc-2.5/src/common/includes/number.h0000664000175000017500000004064112450207063014726 00000000000000#ifndef NUMBER_H #define NUMBER_H #ifdef HAVE_CONFIG_H # include "config.h" #else # ifndef HAVE_LIBMPFR # define HAVE_LIBMPFR # endif #endif #ifdef HAVE_LIBMPFR # if HAVE_LIMITS_H # include /* MPFR uses ULONG_MAX on some systems */ # endif # ifndef S_SPLINT_S /* splint barfs on the gmp.h header */ # include # include # endif # define Number mpfr_t # define NUM_PREC_MIN MPFR_PREC_MIN # define NUM_PREC_MAX MPFR_PREC_MAX # define num_init(n) mpfr_init(n) # define num_init_set(n1, n2) mpfr_init_set((n1), (n2), GMP_RNDN) # define num_init_set_d(n, d) mpfr_init_set_d((n), (d), GMP_RNDN) # define num_init_set_ui(n, ui) mpfr_init_set_ui((n), (ui), GMP_RNDN) # define num_init_set_str(n, str, base) mpfr_init_set_str((n), (str), (base), GMP_RNDN) # define num_free(n) mpfr_clear(n) typedef mp_exp_t num_exp_t; # define num_get_d(n) mpfr_get_d((n), GMP_RNDN) # define num_get_ui(n) mpfr_get_ui((n), GMP_RNDN) # define num_get_str(a, b, c, d, e) mpfr_get_str(a, b, c, d, e, GMP_RNDN) # define num_free_str(a) mpfr_free_str(a) # define num_set(n1, n2) mpfr_set((n1), (n2), GMP_RNDN) # define num_set_d(n, d) mpfr_set_d((n), (d), GMP_RNDN) # define num_set_ui(n, ui) mpfr_set_ui((n), (ui), GMP_RNDN) # define num_set_str(n, str, base) mpfr_set_str((n), (str), (base), GMP_RNDN) # define num_set_nan(n) mpfr_set_nan(n) # define num_set_inf(n, s) mpfr_set_inf(n, s) # define num_add(ret, n1, n2) mpfr_add((ret), (n1), (n2), GMP_RNDN) # define num_sub(ret, n1, n2) mpfr_sub((ret), (n1), (n2), GMP_RNDN) # define num_add_ui(ret, n, ui) mpfr_add_ui((ret), (n), (ui), GMP_RNDN) # define num_sub_ui(ret, n, ui) mpfr_sub_ui((ret), (n), (ui), GMP_RNDN) # define num_mul(ret, n1, n2) mpfr_mul((ret), (n1), (n2), GMP_RNDN) # define num_mul_si(ret, n, si) mpfr_mul_si((ret), (n), (si), GMP_RNDN) # define num_mul_ui(ret, n, ui) mpfr_mul_ui((ret), (n), (ui), GMP_RNDN) # define num_sqr(ret, n) mpfr_sqr((ret), (n), GMP_RNDN) # define num_sqrt(ret, n) mpfr_sqrt((ret), (n), GMP_RNDN) # define num_cbrt(ret, n) mpfr_cbrt((ret), (n), GMP_RNDN) # define num_div(ret, n1, n2) mpfr_div((ret), (n1), (n2), GMP_RNDN) # define num_div_ui(ret, n, ui) mpfr_div_ui((ret), (n), (ui), GMP_RNDN) # define num_rint(ret, n) mpfr_rint((ret), (n), GMP_RNDN) # define num_rintz(ret, n) mpfr_rint((ret), (n), GMP_RNDZ) # define num_floor(ret, n) mpfr_floor((ret), (n)) # define num_ceil(ret, n) mpfr_ceil((ret), (n)) # define num_pow(ret, n, exp) mpfr_pow((ret), (n), (exp), GMP_RNDN) # define num_pow_si(ret, n, exp) mpfr_pow_si((ret), (n), (exp), GMP_RNDN) # define num_exp(ret, n) mpfr_exp((ret), (n), GMP_RNDN) # define num_factorial(ret, op) mpfr_fac_ui((ret), (op), GMP_RNDN) # define num_log10(ret, n) mpfr_log10((ret), (n), GMP_RNDN) # define num_log2(ret, n) mpfr_log2((ret), (n), GMP_RNDN) # define num_log(ret, n) mpfr_log((ret), (n), GMP_RNDN) # define num_sin(ret, n) mpfr_sin((ret), (n), GMP_RNDN) # define num_cos(ret, n) mpfr_cos((ret), (n), GMP_RNDN) # define num_tan(ret, n) mpfr_tan((ret), (n), GMP_RNDN) # define num_asin(ret, n) mpfr_asin((ret), (n), GMP_RNDN) # define num_acos(ret, n) mpfr_acos((ret), (n), GMP_RNDN) # define num_atan(ret, n) mpfr_atan((ret), (n), GMP_RNDN) # define num_sinh(ret, n) mpfr_sinh((ret), (n), GMP_RNDN) # define num_cosh(ret, n) mpfr_cosh((ret), (n), GMP_RNDN) # define num_tanh(ret, n) mpfr_tanh((ret), (n), GMP_RNDN) # define num_asinh(ret, n) mpfr_asinh((ret), (n), GMP_RNDN) # define num_acosh(ret, n) mpfr_acosh((ret), (n), GMP_RNDN) # define num_atanh(ret, n) mpfr_atanh((ret), (n), GMP_RNDN) # define num_acoth(ret, n) do { \ mpfr_pow_si((n), (n), -1, GMP_RNDN); \ mpfr_atanh((ret), (n), GMP_RNDN); \ } while (0) # define num_asech(ret, n) do { \ mpfr_pow_si((n), (n), -1, GMP_RNDN); \ mpfr_acosh((ret), (n), GMP_RNDN); \ } while (0) # define num_acsch(ret, n) do { \ mpfr_pow_si((n), (n), -1, GMP_RNDN); \ mpfr_asinh((ret), (n), GMP_RNDN); \ } while (0) extern gmp_randstate_t randstate; # define num_random(n) mpfr_urandomb((n), randstate) # define num_zeta(ret, n) mpfr_zeta((ret), (n), GMP_RNDN); # define num_sinc(ret, n) do { \ if(mpfr_zero_p((n))) { \ mpfr_set_ui((ret), 1, GMP_RNDN); \ } else { \ mpfr_sin((ret), (n), GMP_RNDN); \ mpfr_div((ret), (ret), (n), GMP_RNDN); \ } \ } while (0) # define num_const_pi(n) mpfr_const_pi((n), GMP_RNDN) # define num_const_euler(n) mpfr_const_euler((n), GMP_RNDN) # define num_out_str(fd, base, n) mpfr_out_str((fd), (base), 0, (n), GMP_RNDN) # define num_is_nan(n) mpfr_nan_p(n) # define num_is_inf(n) mpfr_inf_p(n) # define num_is_zero(n) mpfr_zero_p(n) # define num_is_equal(n1, n2) mpfr_equal_p((n1), (n2)) # define num_is_greater(n1, n2) mpfr_greater_p((n1), (n2)) # define num_is_greaterequal(n1, n2) mpfr_greaterequal_p((n1), (n2)) # define num_is_less(n1, n2) mpfr_less_p((n1), (n2)) # define num_is_lessequal(n1, n2) mpfr_lessequal_p((n1), (n2)) # define num_sign(n) mpfr_sgn(n) # define num_neg(ret, n) mpfr_neg((ret), (n), GMP_RNDN) # define num_abs(ret, n) mpfr_abs((ret), (n), GMP_RNDN) # define num_cmp_si(n, si) mpfr_cmp_si((n), (si)) typedef mp_prec_t num_prec_t; # define num_get_default_prec() mpfr_get_default_prec() # define num_set_default_prec(prec) mpfr_set_default_prec(prec) # ifdef HAVE_MPFR_22 # define num_const_catalan(n) mpfr_const_catalan((n), GMP_RNDN) # define num_cot(ret, n) mpfr_cot((ret), (n), GMP_RNDN) # define num_sec(ret, n) mpfr_sec((ret), (n), GMP_RNDN) # define num_csc(ret, n) mpfr_csc((ret), (n), GMP_RNDN) # define num_coth(ret, n) mpfr_coth((ret), (n), GMP_RNDN) # define num_sech(ret, n) mpfr_sech((ret), (n), GMP_RNDN) # define num_csch(ret, n) mpfr_csch((ret), (n), GMP_RNDN) # define num_eint(ret, n) mpfr_eint((ret), (n), GMP_RNDN) # define num_gamma(ret, n) mpfr_gamma((ret), (n), GMP_RNDN) # define num_lngamma(ret, n) mpfr_lngamma((ret), (n), GMP_RNDN) # else // ifdef HAVE_MPFR_22 # define num_const_catalan(n) num_set_str((n), W_CATALAN, 0) # define num_cot(ret, n) do { \ mpfr_tan((ret), (n), GMP_RNDN); \ mpfr_pow_si((ret), (n), -1, GMP_RNDN); \ } while (0) # define num_sec(ret, n) do { \ mpfr_cos((ret), (n), GMP_RNDN); \ mpfr_pow_si((ret), (n), -1, GMP_RNDN); \ } while (0) # define num_csc(ret, n) do { \ mpfr_sin((ret), (n), GMP_RNDN); \ mpfr_pow_si((ret), (n), -1, GMP_RNDN); \ } while (0) # define num_coth(ret, n) do { \ mpfr_tanh((ret), (n), GMP_RNDN); \ mpfr_pow_si((ret), (n), -1, GMP_RNDN); \ } while (0) # define num_sech(ret, n) do { \ mpfr_cosh((ret), (n), GMP_RNDN); \ mpfr_pow_si((ret), (n), -1, GMP_RNDN); \ } while (0) # define num_csch(ret, n) do { \ mpfr_sinh((ret), (n), GMP_RNDN); \ mpfr_pow_si((ret), (n), -1, GMP_RNDN); \ } while (0) # endif // ifdef HAVE_MPFR_22 # define num_bor(ret, n1, n2) do { \ mpz_t intfirst, intsecond, intoutput; \ mpz_init(intfirst); \ mpz_init(intsecond); \ mpz_init(intoutput); \ mpfr_get_z(intfirst, (n1), GMP_RNDZ); \ mpfr_get_z(intsecond, (n2), GMP_RNDZ); \ mpz_ior(intoutput, intfirst, intsecond); \ mpfr_set_z((ret), intoutput, GMP_RNDN); \ mpz_clear(intfirst); \ mpz_clear(intsecond); \ mpz_clear(intoutput); \ } while (0) # define num_band(ret, n1, n2) do { \ mpz_t intfirst, intsecond, intoutput; \ mpz_init(intfirst); \ mpz_init(intsecond); \ mpz_init(intoutput); \ mpfr_get_z(intfirst, (n1), GMP_RNDZ); \ mpfr_get_z(intsecond, (n2), GMP_RNDZ); \ mpz_and(intoutput, intfirst, intsecond); \ mpfr_set_z((ret), intoutput, GMP_RNDN); \ mpz_clear(intfirst); \ mpz_clear(intsecond); \ mpz_clear(intoutput); \ } while (0) # define num_bxor(ret, n1, n2) do { \ mpz_t intfirst, intsecond, intoutput; \ mpz_init(intfirst); \ mpz_init(intsecond); \ mpz_init(intoutput); \ mpfr_get_z(intfirst, (n1), GMP_RNDZ); \ mpfr_get_z(intsecond, (n2), GMP_RNDZ); \ mpz_xor(intoutput, intfirst, intsecond); \ mpfr_set_z((ret), intoutput, GMP_RNDN); \ mpz_clear(intfirst); \ mpz_clear(intsecond); \ mpz_clear(intoutput); \ } while (0) # define num_trunc(ret, n) mpfr_trunc((ret), (n)) # define num_comp(ret, n) do { \ mpz_t integer, intoutput; \ mpz_init(integer); \ mpz_init(intoutput); \ mpfr_get_z(integer, (n), GMP_RNDZ); \ mpz_com(intoutput, integer); \ mpfr_set_z((ret), intoutput, GMP_RNDN); \ mpz_clear(integer); \ mpz_clear(intoutput); \ } while (0) /* this is because binary not doesn't make sense when your integer can be * arbitrarily big */ # ifdef _MPFR_H_HAVE_INTMAX_T # define num_bnot(ret, n) mpfr_set_uj((ret), ~mpfr_get_uj((n), GMP_RNDN), GMP_RNDN) # else # define num_bnot(ret, n) mpfr_set_ui((ret), ~mpfr_get_ui((n), GMP_RNDN), GMP_RNDN) # endif #else /* this is to reimplement mpfr using doubles */ # include /* for DBL_MANT_DIG, according to C89 */ # include /* for size_t, according to C89 */ # include /* for FILE* */ struct numberstruct { double value; unsigned int nan; }; typedef struct numberstruct Number[1]; # define NUM_PREC_MIN DBL_MANT_DIG # define NUM_PREC_MAX DBL_MANT_DIG typedef int num_exp_t; typedef long int num_prec_t; void num_init(Number n); void num_init_set(Number n1, const Number n2); void num_init_set_d(Number n, const double d); void num_init_set_ui(Number n, const unsigned int ui); int num_init_set_str(Number n, const char *str, const int base); void num_set(Number n1, const Number n2); void num_set_d(Number n, const double d); void num_set_ui(Number n, const unsigned int ui); int num_set_str(Number n, const char *str, const int base); void num_set_nan(Number n); void num_mul(Number ret, const Number n1, const Number n2); void num_mul_si(Number ret, const Number n, const int si); void num_mul_ui(Number ret, const Number n, const unsigned int ui); void num_sqr(Number ret, const Number n); void num_sqrt(Number ret, const Number n); void num_cbrt(Number ret, const Number n); void num_pow(Number ret, const Number n, const Number exp); void num_pow_si(Number ret, const Number n, const int exp); void num_exp(Number ret, const Number n); void num_factorial(Number ret, unsigned int op); void num_log10(Number ret, const Number n); void num_log2(Number ret, const Number n); void num_log(Number ret, const Number n); void num_sin(Number ret, const Number n); void num_cos(Number ret, const Number n); void num_tan(Number ret, const Number n); void num_asin(Number ret, const Number n); void num_acos(Number ret, const Number n); void num_atan(Number ret, const Number n); void num_sinh(Number ret, const Number n); void num_cosh(Number ret, const Number n); void num_tanh(Number ret, const Number n); void num_asinh(Number ret, const Number n); void num_acosh(Number ret, const Number n); void num_atanh(Number ret, const Number n); void num_acoth(Number ret, const Number n); void num_asech(Number ret, const Number n); void num_acsch(Number ret, const Number n); void num_add(Number ret, const Number n1, const Number n2); void num_sub(Number ret, const Number n1, const Number n2); void num_add_ui(Number ret, const Number n, const unsigned int ui); void num_sub_ui(Number ret, const Number n, const unsigned int ui); void num_div(Number ret, const Number n1, const Number n2); void num_div_ui(Number ret, const Number n, const unsigned int ui); void num_rint(Number ret, const Number n); void num_rintz(Number ret, const Number n); void num_floor(Number ret, const Number n); void num_ceil(Number ret, const Number n); int num_random(Number n); # define num_zeta(ret, n) num_unimplemented() void num_sinc(Number ret, const Number n); void num_const_pi(Number n); void num_const_euler(Number n); void num_const_catalan(Number n); void num_out_str(FILE *fd, const int base, const Number n); int num_is_nan(const Number n); int num_is_inf(const Number n); int num_is_zero(const Number n); int num_is_equal(const Number n1, const Number n2); int num_is_greater(const Number n1, const Number n2); int num_is_greaterequal(const Number n1, const Number n2); int num_is_less(const Number n1, const Number n2); int num_is_lessequal(const Number n1, const Number n2); int num_sign(const Number n); void num_neg(Number ret, const Number n); void num_abs(Number ret, const Number n); int num_cmp_si(const Number n, const int si); void num_free(Number); double num_get_d(const Number); unsigned int num_get_ui(const Number); char *num_get_str(char *str, num_exp_t *expptr, const int b, const size_t n, const Number op); # define num_free_str(a) free(a); num_prec_t num_get_default_prec(); # define num_set_default_prec(prec) /* num_set_default_prec doesn't exist */ void num_cot(Number ret, const Number n); void num_sec(Number ret, const Number n); void num_csc(Number ret, const Number n); void num_coth(Number ret, const Number n); void num_sech(Number ret, const Number n); void num_csch(Number ret, const Number n); # define num_lngamma(ret, n) num_unimplemented() # define num_gamma(ret, n) num_unimplemented() # define num_eint(ret, n) num_unimplemented() void num_comp(Number ret, const Number n); void num_bnot(Number ret, const Number n); void num_band(Number ret, const Number n1, const Number n2); void num_bxor(Number ret, const Number n1, const Number n2); void num_bor(Number ret, const Number n1, const Number n2); #endif // ifdef HAVE_LIBMPFR void init_numbers(void); int is_int(const Number); #endif /* NUMBER_H */ /* vim:set expandtab: */ wcalc-2.5/src/common/includes/output.h0000664000175000017500000000232712450344037015000 00000000000000/* */ #ifndef WCALC_OUTPUT_H #define WCALC_OUTPUT_H /* These functions should be implemented in any frontend. */ #include "variables.h" // for variable_t #include "list.h" // for List void display_prefs(void); void show_answer(char *err, int uncertain, char *answer); void display_output_format(int format); void display_status(const char *format, ...); void display_err(const char *format, ...); void display_interactive_help(void); void display_command_help(void); void display_val(const char *name); void display_var(variable_t *v, unsigned count, unsigned digits); void display_expvar_explanation(const char *str, const char *exp, List subvars, const char *desc); void display_valvar_explanation(const char *str, Number *val, const char *desc); void display_explanation(const char *exp, ...); void display_stateline(const char *buf); void display_consts(void); #endif // ifndef WCALC_OUTPUT_H /* vim:set expandtab: */ wcalc-2.5/src/common/includes/number_formatting.h0000664000175000017500000000102212450207063017146 00000000000000#ifndef WCALC_NUMBER_FORMATTING_H #define WCALC_NUMBER_FORMATTING_H #include "number.h" char *num_to_str_complex(const Number num, const int base, const enum engineering_modes engr, const int prec, const int prefix, char *truncated_flag); #endif // ifndef WCALC_NUMBER_FORMATTING_H /* vim:set expandtab: */ wcalc-2.5/src/common/includes/variables.h0000664000175000017500000000353112450207063015403 00000000000000#ifndef KBW_VARIABLES #define KBW_VARIABLES #ifdef HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STRING_H # include #else # if !HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); #endif #include #include "number.h" typedef struct variable { char *key; char *expression; char *description; Number value; unsigned int exp : 1; struct variable *next; } variable_t; typedef struct answer { Number val; char *exp; char *desc; unsigned int err : 1; } answer_t; // requires a working Number void getvarval(Number out, const char *key); // requires a working Number int putval(const char *key, const Number value, const char *desc); int putexp(const char *key, const char *value, const char *desc); int varexists(const char *key); void initvar(void); void delnvar(const size_t n); void cleanupvar(void); size_t numvars(void); void printvariables(void); // this returns a char ** that must be freed. DO NOT free its contents char **listvarnames(void); /* ****************************** * NOTE! * If you use these functions, they return * fully functioning Number structures that must be * num_free()'d when you're done with 'em. */ /* getvar returns only the value, or an error if it doesn't have one */ struct answer getvar(const char *key); /* getvar returns whatever is known about the variable, or an error if * it doesn't exist */ struct answer getvar_full(const char *key); /* THIS function, however, exposes the innards of the variable system. * do not under any circumstance un-initialize the Number */ struct variable *getrealnvar(const size_t n); #endif // ifndef KBW_VARIABLES /* vim:set expandtab: */ wcalc-2.5/src/common/includes/uint32_max.h0000644000175000017500000000052612115730142015420 00000000000000#ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef HAVE_INTTYPES_H # include /* for UINT32_MAX */ #endif #ifdef HAVE_STDINT_H # include /* for UINT32_MAX */ #endif #ifndef UINT32_MAX # define UINT32_MAX 4294967295U #endif /* vim:set expandtab: */ wcalc-2.5/src/common/includes/Makefile.in0000664000175000017500000003333112451433376015341 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' 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 = src/common/includes DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/config.h.in $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/readline.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h 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 HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # 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 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GMP_CPPFLAGS = @GMP_CPPFLAGS@ GMP_LDFLAGS = @GMP_LDFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPFR_CPPFLAGS = @MPFR_CPPFLAGS@ MPFR_LDFLAGS = @MPFR_LDFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_HEADERS = \ add_commas.h \ calculator.h \ conversion.h \ definitions.h \ evalvar.h \ explain.h \ extract_vars.h \ files.h \ historyManager.h \ iscmd.h \ isconst.h \ isfunc.h \ list.h \ number_formatting.h \ number.h \ output.h \ string_manip.h \ uint32_max.h \ variables.h all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .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 src/common/includes/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/common/includes/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(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): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status src/common/includes/config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 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 $(HEADERS) config.h 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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr 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 -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: all install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ cscopelist-am ctags ctags-am distclean distclean-generic \ distclean-hdr 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-generic pdf pdf-am ps ps-am tags \ tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: wcalc-2.5/src/common/includes/explain.h0000664000175000017500000000027712451425323015101 00000000000000#ifndef WCALC_EXPLAIN #define WCALC_EXPLAIN struct name_with_exp { const char *names[10]; const char *explanation; }; void explain(const char *str); #endif /* vim:set expandtab: */ wcalc-2.5/src/common/includes/list.h0000664000175000017500000000202712450207063014405 00000000000000/* * * This file is the header of a basic, generic list (well, technically, a * queue) object implementation. * */ #ifndef WCALC_PACKETLIST #define WCALC_PACKETLIST struct _list; typedef struct _list *List; struct _list_iterator; typedef struct _list_iterator *ListIterator; /* this is for the memory pools */ void lists_init(void); void lists_cleanup(void); /* List operations */ void addToList(List *, void *); void addToListHead(List *, void *); void *getHeadOfList(List /*@null@*/); void *peekListElement(List /*@null@*/, size_t); void *getListElement(List, size_t); void *peekAheadInList(List); size_t listLen(List /*@null@*/); void removeFromList(List, void *); void freeList(List *); /* ListIterator operations */ ListIterator getListIterator(List); void *currentListElement(ListIterator); void *nextListElement(ListIterator); void resetListIterator(ListIterator); void freeListIterator(ListIterator); #endif // ifndef WCALC_PACKETLIST /* vim:set expandtab: */ wcalc-2.5/src/common/includes/files.h0000664000175000017500000000114112450207063014530 00000000000000/* * files.h * Wcalc * * Created by Kyle Wheeler on Sat Mar 22 2003. * Copyright (c) 2003 Kyle Wheeler. All rights reserved. * */ #ifndef WCALC_FILES #define WCALC_FILES int openDotFile(const char *dotFileName, int flags); int saveState(char *filename); // filename is freed by saveState int loadState(const char *filename, const int into_history); int loadStateFD(int fd, const int into_history); // same as loadState, but takes an FD int storeVar(const char *variable); #endif // ifndef WCALC_FILES /* vim:set expandtab: */ wcalc-2.5/src/common/includes/extract_vars.h0000664000175000017500000000021012450207063016127 00000000000000#ifndef WCALC_EXTRACT_VARS #define WCALC_EXTRACT_VARS #include "list.h" List extract_vars(char *str); #endif /* vim:set expandtab: */ wcalc-2.5/src/common/includes/historyManager.h0000644000175000017500000000071212115730072016422 00000000000000/* * historyManager.h * Wcalc * * Created by Kyle Wheeler on Mon Jan 21 2002. * Copyright (c) 2001 Kyle Wheeler. All rights reserved. * */ #ifndef WCALC_HISTORY_MANAGER #include "number.h" void clearHistory(void); void addToHistory(char *, Number); char *historynum(int, int); size_t historyLength(void); extern short allow_duplicates; extern short recalculate; #endif // ifndef WCALC_HISTORY_MANAGER /* vim:set expandtab: */ wcalc-2.5/src/common/includes/iscmd.h0000664000175000017500000000025212450207063014527 00000000000000#ifndef WCALC_ISCMD #define WCALC_ISCMD #include "explain.h" extern const struct name_with_exp commands[]; int iscmd(const char *str); #endif /* vim:set expandtab: */ wcalc-2.5/src/common/includes/string_manip.h0000664000175000017500000000135612450207063016130 00000000000000/* * string_manip.h * Wcalc * * Created by Kyle Wheeler on Fri Mar 01 2002. * Copyright (c) 2001 Kyle Wheeler. All rights reserved. * */ #ifndef KBW_STRING_MANIP #define KBW_STRING_MANIP void strstrip(const char, char *); /* this replaces all instances of sw in str with ap */ void strswap(const char sw, const char ap, char *str); /* this replaces all instances of sw in str with ap, and all instances of ap in str with sw */ void strswap2(const char sw, const char ap, char *str); unsigned int count_digits(const char *); int justnumbers(const char *); void stripComments(char *); #endif // ifndef KBW_STRING_MANIP /* vim:set expandtab: */ wcalc-2.5/src/common/includes/conversion.h0000664000175000017500000000447212450207063015625 00000000000000/* * conversion.h * Wcalc * * Created by Kyle Wheeler on Wed Jul 31 2002. * Copyright (c) 2002 Kyle Wheeler. All rights reserved. * */ #ifndef WCALC_CONVERSIONS #define WCALC_CONVERSIONS #include /* for ssize_t */ #include /* also for ssize_t */ #include "number.h" void uber_conversion(Number output, const int utype, const int fromunit, const int tounit, Number value); ssize_t identify_unit(const char *unit); ssize_t identify_units(const char *unit1, const char *unit2); ssize_t unit_id(const int utype, const char *unit); struct conversion { char *factor; char *name; char *aka[9]; }; struct conv_req { char *u1; char *u2; }; /* Conversion Types */ #define MAX_TYPE 11 #define LENGTH_C 0 /*-*/ #define AREA_C 1 /*-*/ #define VOLUME_C 2 /*-*/ #define MASS_C 3 /*-*/ #define SPEED_C 4 /*-*/ #define POWER_C 5 /*-*/ #define FORCE_C 6 /*-*/ #define ACCELERATION_C 7 /*-*/ #define TEMPERATURE_C 8 /*-*/ #define ANGLE_C 9 /*-*/ #define PRESSURE_C 10 /*-*/ #define METRIC_C 11 /**/ /* Astronomical Units */ #define MAX_ASTRONOMICAL_UNIT 5 #define A_METERS 0 #define A_KILOMETERS 1 #define A_MILES 2 #define LIGHT_YEAR 4 #define PARSEC 5 /* Length Units */ #define LENGTH_UNIT_COUNT 87 /* Area Units */ #define AREA_UNIT_COUNT 74 /* Volume Units */ #define VOLUME_UNIT_COUNT 136 /* Angle Units */ #define ANGLE_UNIT_COUNT 12 /* Mass Units */ #define MASS_UNIT_COUNT 66 /* Speed Units */ #define SPEED_UNIT_COUNT 17 /* Power Units */ #define POWER_UNIT_COUNT 45 /* Force Units */ #define FORCE_UNIT_COUNT 13 /* Acceleration Units */ #define ACCELERATION_UNIT_COUNT 23 /* Pressure Units */ #define PRESSURE_UNIT_COUNT 41 /* Temperature Units */ #define TEMPERATURE_UNIT_COUNT 5 #define KELVIN 0 #define CELSIUS 1 #define RANKINE 2 #define FARENHEIT 3 #define REAUMUR 4 extern const struct conversion *conversions[MAX_TYPE + 2]; extern const char *conversion_names[MAX_TYPE + 2]; #endif // ifndef WCALC_CONVERSIONS /* vim:set expandtab: */ wcalc-2.5/src/common/includes/calculator.h0000664000175000017500000000740412450207063015567 00000000000000/* * calculator.h * Wcalc * * Created by Kyle Wheeler on Thu Feb 07 2002. * Copyright (c) 2001 Kyle Wheeler. All rights reserved. * */ #ifndef WCALC_CALCULATOR_H #define WCALC_CALCULATOR_H #ifdef HAVE_CONFIG_H # include "config.h" #endif #ifdef EBUG # include # define Dprintf(fmt, ...) \ fprintf(stderr, "[%s:%d] " fmt, __FILE__, __LINE__, ## __VA_ARGS__); \ fflush(stderr); #else # define Dprintf(...) ; #endif #include "definitions.h" #include "number.h" enum functions { wnot, wbnot, wsin, wcos, wtan, wcot, wsec, wcsc, wasin, wacos, watan, wacot, wasec, wacsc, wsinh, wcosh, wtanh, wcoth, wsech, wcsch, wasinh, wacosh, watanh, wacoth, wasech, wacsch, wlog, wlogtwo, wln, wround, wneg, wabs, wsqrt, wfloor, wceil, wrand, wirand, wexp, wfact, wcomp, weint, wgamma, wlngamma, wzeta, wsinc, wcbrt }; enum operations { wplus, wminus, wmult, wdiv, wmod, wpow, wor, wbor, wbxor, wand, wband, wequal, wnequal, wgt, wlt, wrshft, wlshft, wgeq, wleq, wnone }; enum commands {redisplay, nothing}; enum engineering_modes {always, never, automatic}; void parseme(const char *); void report_error(const char *fmt, ...); void set_prettyanswer(const Number num); char *print_this_result(const Number result, int output, char *nad, char **es); void uber_function(Number output, const enum functions func, Number input); void simple_exp(Number output, const Number first, const enum operations op, const Number second); int seed_random(void); char *output_string(const unsigned int); struct _conf { unsigned long history_limit_len; int precision; char thou_delimiter; char dec_delimiter; char in_thou_delimiter; char in_dec_delimiter; enum engineering_modes engineering : 2; unsigned int picky_variables : 1; unsigned int use_radians : 1; unsigned int output_format : 4; unsigned int print_prefixes : 1; unsigned int rounding_indication : 4; unsigned int remember_errors : 1; unsigned int precision_guard : 1; unsigned int history_limit : 1; unsigned int print_equal : 1; unsigned int print_ints : 1; unsigned int simple_calc : 1; unsigned int verbose : 1; unsigned int print_commas : 1; unsigned int live_precision : 1; unsigned int c_style_mod : 1; unsigned int color_ui : 1; }; /* configuration */ extern struct _conf conf; /* results */ extern Number last_answer; extern char *pretty_answer; /* communication with parser */ extern char compute; extern unsigned int sig_figs; /* communication with the frontend */ extern char standard_output; extern char not_all_displayed; #define DECIMAL_FORMAT 0 #define OCTAL_FORMAT 1 #define HEXADECIMAL_FORMAT 2 #define BINARY_FORMAT 3 #define NO_ROUNDING_INDICATION 0 #define SIMPLE_ROUNDING_INDICATION 1 #define SIG_FIG_ROUNDING_INDICATION 2 #endif // ifndef WCALC_CALCULATOR_H /* vim:set expandtab: */ wcalc-2.5/src/common/includes/evalvar.h0000664000175000017500000000021712450207063015071 00000000000000#ifndef WCALC_EVALVAR #define WCALC_EVALVAR char *evalvar(const char *); char *evalvar_noparse(const char *); #endif /* vim:set expandtab: */ wcalc-2.5/src/common/includes/isfunc.h0000664000175000017500000000025112450207063014716 00000000000000#ifndef WCALC_ISFUNC #define WCALC_ISFUNC #include "explain.h" extern const struct name_with_exp funcs[]; int isfunc(const char *str); #endif /* vim:set expandtab: */ wcalc-2.5/src/common/includes/add_commas.h0000664000175000017500000000023712450207063015522 00000000000000#ifndef WCALC_ADD_COMMAS_H #define WCALC_ADD_COMMAS_H char *add_commas(const char *input, const int base); #endif /* vim:set expandtab: */ wcalc-2.5/src/common/includes/isconst.h0000664000175000017500000000033712451425332015120 00000000000000#ifndef WCALC_ISCONST #define WCALC_ISCONST #include "explain.h" extern const struct name_with_exp consts[]; int isconst(const char *str); void printconsts(void); #endif // ifndef WCALC_ISCONST /* vim:set expandtab: */ wcalc-2.5/src/common/includes/config.h.in0000664000175000017500000001116412451433426015313 00000000000000/* src/common/includes/config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the header file. */ #undef HAVE_FLOAT_H /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_HISTORY_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `gmp' library (-lgmp). */ #undef HAVE_LIBGMP /* Define to 1 if you have the `gmp2' library (-lgmp2). */ #undef HAVE_LIBGMP2 /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Have libmpfr */ #undef HAVE_LIBMPFR /* Define if you have a readline compatible library */ #undef HAVE_LIBREADLINE /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the `modf' function. */ #undef HAVE_MODF /* MPFR version 2.2 or better */ #undef HAVE_MPFR_22 /* Have PATH_MAX */ #undef HAVE_PATH_MAX /* Define to 1 if you have the `pow' function. */ #undef HAVE_POW /* Define to 1 if you have the header file. */ #undef HAVE_READLINE_H /* Define if your readline library has \`add_history' */ #undef HAVE_READLINE_HISTORY /* Define to 1 if you have the header file. */ #undef HAVE_READLINE_HISTORY_H /* Define to 1 if you have the header file. */ #undef HAVE_READLINE_READLINE_H /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #undef HAVE_REALLOC /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strrchr' function. */ #undef HAVE_STRRCHR /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #undef YYTEXT_POINTER /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to rpl_realloc if the replacement function should be used. */ #undef realloc /* Define to `unsigned int' if does not define. */ #undef size_t wcalc-2.5/src/common/includes/Makefile.am0000644000175000017500000000052112252654212015312 00000000000000noinst_HEADERS = \ add_commas.h \ calculator.h \ conversion.h \ definitions.h \ evalvar.h \ explain.h \ extract_vars.h \ files.h \ historyManager.h \ iscmd.h \ isconst.h \ isfunc.h \ list.h \ number_formatting.h \ number.h \ output.h \ string_manip.h \ uint32_max.h \ variables.h wcalc-2.5/src/common/includes/definitions.h0000644000175000017500000006055212223615543015756 00000000000000/* * definitions.h * Wcalc * * Created by Kyle Wheeler on Thu Feb 07 2002. * Copyright (c) 2001 Kyle Wheeler. All rights reserved. * */ #ifndef WCALC_DEFINITIONS #define WCALC_DEFINITIONS #define W_EXTRA 5 #define RAND_FILE "/dev/random" #define DEFAULT_BASE 10 #define W_PI "3.14159265358979323846264338327950288419716939937510582097" #define W_E "2.718281828459045235360287471352662497757247093699959574966967627724076630353" \ "547594571382178525166427427466391932003059921817413596629043572900334295260" \ "595630738132328627943490763233829880753195251019011573834187930702154089149" \ "934884167509244761460668082264800168477411853742345442437107539077744992069" \ "551702761838606261331384583000752044933826560297606737113200709328709127443" \ "747047230696977209310141692836819025515108657463772111252389784425056953696" \ "770785449969967946864454905987931636889230098793127736178215424999229576351" \ "482208269895193668033182528869398496465105820939239829488793320362509443117" \ "301238197068416140397019837679320683282376464804295311802328782509819455815" \ "301756717361332069811250996181881593041690351598888519345807273866738589422" \ "879228499892086805825749279610484198444363463244968487560233624827041978623" \ "209002160990235304369941849146314093431738143640546253152096183690888707016" \ "768396424378140592714563549061303107208510383750510115747704171898610687396" \ "965521267154688957035035402123407849819334321068170121005627880235193033224" \ "745015853904730419957777093503660416997329725088687696640355570716226844716" \ "256079882651787134195124665201030592123667719432527867539855894489697096409" \ "754591856956380236370162112047742722836489613422516445078182442352948636372" \ "141740238893441247963574370263755294448337998016125492278509257782562092622" \ "648326277933386566481627725164019105900491644998289315056604725802778631864" \ "155195653244258698294695930801915298721172556347546396447910145904090586298" \ "496791287406870504895858671747985466775757320568128845920541334053922000113" \ "786300945560688166740016984205580403363795376452030402432256613527836951177" \ "883863874439662532249850654995886234281899707733276171783928034946501434558" \ "897071942586398772754710962953741521115136835062752602326484728703920764310" \ "059584116612054529703023647254929666938115137322753645098889031360205724817" \ "658511806303644281231496550704751025446501172721155519486685080036853228183" \ "152196003735625279449515828418829478761085263981395599006737648292244375287" \ "184624578036192981971399147564488262603903381441823262515097482798777996437" \ "308997038886778227138360577297882412561190717663946507063304527954661855096" \ "666185664709711344474016070462621568071748187784437143698821855967095910259" \ "686200235371858874856965220005031173439207321139080329363447972735595527734" \ "907178379342163701205005451326383544000186323991490705479778056697853358048" \ "966906295119432473099587655236812859041383241160722602998330535370876138939" \ "639177957454016137223618789365260538155841587186925538606164779834025435128" \ "439612946035291332594279490433729908573158029095863138268329147711639633709" \ "240031689458636060645845925126994655724839186564209752685082307544254599376" \ "917041977780085362730941710163434907696423722294352366125572508814779223151" \ "974778060569672538017180776360346245927877846585065605078084421152969752189" \ "087401966090665180351650179250461950136658543663271254963990854914420001457" \ "476081930221206602433009641270489439039717719518069908699860663658323227870" \ "937650226014929101151717763594460202324930028040186772391028809786660565118" \ "326004368850881715723866984224220102495055188169480322100251542649463981287" \ "367765892768816359831247788652014117411091360116499507662907794364600585194" \ "199856016264790761532103872755712699251827568798930276176114616254935649590" \ "379804583818232336861201624373656984670378585330527583333793990752166069238" \ "053369887956513728559388349989470741618155012539706464817194670834819721448" \ "889879067650379590366967249499254527903372963616265897603949857674139735944" \ "102374432970935547798262961459144293645142861715858733974679189757121195618" \ "738578364475844842355558105002561149239151889309946342841393608038309166281" \ "881150371528496705974162562823609216807515017772538740256425347087908913729" \ "172282861151591568372524163077225440633787593105982676094420326192428531701" \ "878177296023541306067213604600038966109364709514141718577701418060644363681" \ "546444005331608778314317444081194942297559931401188868331483280270655383300" \ "469329011574414756313999722170380461709289457909627166226074071874997535921" \ "275608441473782330327033016823719364800217328573493594756433412994302485023" \ "573221459784328264142168487872167336701061509424345698440187331281010794512" \ "722373788612605816566805371439612788873252737389039289050686532413806279602" \ "593038772769778379286840932536588073398845721874602100531148335132385004782" \ "716937621800490479559795929059165547050577751430817511269898518840871856402" \ "603530558373783242292418562564425502267215598027401261797192804713960068916" \ "382866527700975276706977703643926022437284184088325184877047263844037953016" \ "690546593746161932384036389313136432713768884102681121989127522305625675625" \ "470172508634976536728860596675274086862740791285657699631378975303466061666" \ "980421826772456053066077389962421834085988207186468262321508028828635974683" \ "965435885668550377313129658797581050121491620765676995065971534476347032085" \ "321560367482860837865680307306265763346977429563464371670939719306087696349" \ "532884683361303882943104080029687386911706666614680001512114344225602387447" \ "432525076938707777519329994213727721125884360871583483562696166198057252661" \ "220679754062106208064988291845439530152998209250300549825704339055357016865" \ "312052649561485724925738620691740369521353373253166634546658859728665945113" \ "644137033139367211856955395210845840724432383558606310680696492485123263269" \ "951460359603729725319836842336390463213671011619282171115028280160448805880" \ "238203198149309636959673583274202498824568494127386056649135252670604623445" \ "054922758115170931492187959271800194096886698683703730220047531433818109270" \ "803001720593553052070070607223399946399057131158709963577735902719628506114" \ "651483752620956534671329002599439766311454590268589897911583709341937044115" \ "512192011716488056694593813118384376562062784631049034629395002945834116482" \ "411496975832601180073169943739350696629571241027323913874175492307186245454" \ "322203955273529524024590380574450289224688628533654221381572213116328811205" \ "214648980518009202471939171055539011394331668151582884368760696110250517100" \ "739276238555338627255353883096067164466237092264680967125406186950214317621" \ "166814009759528149390722260111268115310838731761732323526360583817315103459" \ "573653822353499293582283685100781088463434998351840445170427018938199424341" \ "009057537625776757111809008816418331920196262341628816652137471732547772778" \ "348877436651882875215668571950637193656539038944936642176400312152787022236" \ "646363575550356557694888654950027085392361710550213114741374410613444554419" \ "210133617299628569489919336918472947858072915608851039678195942983318648075" \ "608367955149663644896559294818785178403877332624705194505041984774201418394" \ "773120281588684570729054405751060128525805659470304683634459265255213700806" \ "875200959345360731622611872817392807462309468536782310609792159936001994623" \ "799343421068781349734695924646975250624695861690917857397659519939299399556" \ "754271465491045686070209901260681870498417807917392407194599632306025470790" \ "177452751318680998228473086076653686685551646770291133682756310722334672611" \ "370549079536583453863719623585631261838715677411873852772292259474337378569" \ "553845624680101390572787101651296663676445187246565373040244368414081448873" \ "295784734849000301947788802046032466084287535184836495919508288832320652212" \ "810419044804724794929134228495197002260131043006241071797150279343326340799" \ "596053144605323048852897291765987601666781193793237245385720960758227717848" \ "336161358261289622611812945592746276713779448758675365754486140761193112595" \ "851265575973457301533364263076798544338576171533346232527057200530398828949" \ "903425956623297578248873502925916682589445689465599265845476269452878051650" \ "172067478541788798227680653665064191097343452887833862172615626958265447820" \ "567298775642632532159429441803994321700009054265076309558846589517170914760" \ "743713689331946909098190450129030709956622662030318264936573369841955577696" \ "378762491885286568660760056602560544571133728684020557441603083705231224258" \ "722343885412317948138855007568938112493538631863528708379984569261998179452" \ "336408742959118074745341955142035172618420084550917084568236820089773945584" \ "267921427347756087964427920270831215015640634134161716644806981548376449157" \ "390012121704154787259199894382536495051477137939914720521952907939613762110" \ "723849429061635760459623125350606853765142311534966568371511660422079639446" \ "662116325515772907097847315627827759878813649195125748332879377157145909106" \ "484164267830994972367442017586226940215940792448054125536043131799269673915" \ "754241929660731239376354213923061787675395871143610408940996608947141834069" \ "836299367536262154524729846421375289107988438130609555262272083751862983706" \ "678722443019579379378607210725427728907173285487437435578196651171661833088" \ "112912024520404868220007234403502544820283425418788465360259150644527165770" \ "004452109773558589762265548494162171498953238342160011406295071849042778925" \ "855274303522139683567901807640604213830730877446017084268827226117718084266" \ "433365178000217190344923426426629226145600433738386833555534345300426481847" \ "398921562708609565062934040526494324426144566592129122564889356965500915430" \ "642613425266847259491431423939884543248632746184284665598533231221046625989" \ "014171210344608427161661900125719587079321756969854401339762209674945418540" \ "711844643394699016269835160784892451405894094639526780735457970030705116368" \ "251948770118976400282764841416058720618418529718915401968825328930914966534" \ "575357142731848201638464483249903788606900807270932767312758196656394114896" \ "171683298045513972950668760474091542042842999354102582911350224169076943166" \ "857424252250902693903481485645130306992519959043638402842926741257342244776" \ "558417788617173726546208549829449894678735092958165263207225899236876845701" \ "782303809656788311228930580914057261086588484587310165815116753332767488701" \ "482916741970151255978257270740643180860142814902414678047232759768426963393" \ "577354293018673943971638861176420900406866339885684168100387238921448317607" \ "011668450388721236436704331409115573328018297798873659091665961240202177855" \ "885487617616198937079438005666336488436508914480557103976521469602766258359" \ "905198704230017946553679" #define W_AVOGADROS_CONSTANT "6.0221415e23" #define W_BOLTZMANN_CONSTANT "1.3806505e-23" #define W_COULOMB_CONSTANT "8987551787.37" #define W_ELEMENTARY_CHARGE "1.60217653e-19" #define W_MOLAR_GAS_CONSTANT "8.314472" #define W_GRAVITATIONAL_CONSTANT "6.6742e-11" /* m^3 kg^-1 s^-2 */ #define W_GRAVITATIONAL_ACCELLERATION "9.80665" /* m s^-2 */ #define W_SPEED_OF_LIGHT "299792458" #define W_PERMEABILITY_OF_FREE_SPACE "1.25663706144e-6" /* 4pi*pow(10,-7) */ #define W_PERMITTIVITY_OF_FREE_SPACE "8.854187817e-12" /* F m^-1 */ #define W_PLANCK_CONSTANT "6.6260693e-34" #define W_BOHR_MAGNETON "927.400949e-26" /* J T^-1 */ #define W_NUCLEAR_MAGNETON "5.05078343e-27" /* J T^-1 */ #define W_WIEN_DISPLACEMENT "2.8977685e-3" /* m K */ #define W_BOHR_RADIUS "5.291772108e-11" /* m */ #define W_FARADAY_CONSTANT "96485.3383" /* C mol^-1 */ #define W_MOLAR_VOLUME_OF_IDEAL_GAS "22.413996e-3" /* m^3 mol^-1 */ #define W_ELECTRON_VOLT "1.60217653e-19" /* J */ #define W_STEFAN_BOLTZMANN "5.670400e-8" #define W_FINE_STRUCTURE "7.297352568e-3" #define W_EULER "0.57721566490153286060651209008240243104215933593992359880576723488486772677766467093694706329174674951463144724980708248096050401448654283622417399764492353625350033374293733773767394279259525824709491600873520394816567" /* http://primes.utm.edu/glossary/page.php?sort=Gamma */ #define W_ELECTRON_RADIUS "2.817940325e-15" /* m */ #define W_JOSEPHSON_CONSTANT "483597.879e9" /* Hz V^-1 */ #define W_VON_KLITZING_CONSTANT "25812.807449" /* omega */ #define W_RYDBERG_CONSTANT "10973731.568525" /* m^-1 */ #define W_HARTREE_ENERGY "4.35974417e-18" /* J */ #define W_FERMI_COUPLING_CONSTANT "1.16638e-5" /* GeV^-2 */ #define W_MUON_MASS "1.88353140e-28" /* kg */ #define W_TAU_MASS "3.16777e-27" /* kg */ #define W_ELECTRON_MASS "9.1093826e-31" /* kg */ #define W_PROTON_MASS "1.67262171e-27" /* kg */ #define W_NEUTRON_MASS "1.67492728e-27" /* kg */ #define W_DEUTERON_MASS "3.34358335e-27" /* kg */ #define W_ATOMIC_MASS "1.66053886e-27" /* kg */ #define W_HELION_MASS "5.00641214e-27" /* kg */ #define W_ALPHA_PARTICLE_MASS "6.6446565e-27" /* kg */ #define W_LOSCHMIDT_CONSTANT "2.6867773e25" /* m^-3 */ #define W_FIRST_RADIATION_CONSTANT "3.74177138e-16" /* W m^2 */ #define W_SECOND_RADIATION_CONSTANT "1.4387752e-2" /* m K */ #define W_CONDUCTANCE_QUANTUM "7.748091733e-5" /* S */ #define W_IMPEDANCE_OF_VACUUM "376.730313461" /* ohms */ #define W_MAGNETIC_FLUX_QUANTUM "2.06783372e-15" /* Wb */ #define W_CATALAN "0.9159655941772190150546035149323841107741493742816721342664981196217630197762547694793565129261151062485744226191961995790358988033258590594315947374811584069953320287733194605190387274781640878659090247064841521630002287276409423882599577415088163974702524820115607076448838078733704899008647751132259971343385815193110992038743101834993784779390390353488916999900473822093605334185626171594509860056" #define SUPPORTED_SYMBOLS \ "+ - () {} [] * %% / ! ^ > >= < <= == != && || << >> | & ~\n" \ "not ** or and equals eq ne xor\n\n" \ "sin cos tan cot asin acos atan acot\n" \ "sinh cosh tanh coth asinh acosh atanh acoth\n" \ "log ln logtwo round abs ceil floor sqrt cbrt comp\n" \ "Gamma lnGamma zeta sinc\n" \ "\n" \ "e pi Na k Cc ec R G g Me Mp Mn Md u amu c h mu0 epsilon0\n" \ "muB muN b ao F Vm NAk eV sigma alpha gamma re Kj Rk Rinf\n" \ "Eh Gf Mmu Mt Mh Malpha n0 c1 c2 G0 Phi0 K\n" \ "random irandom rand irand\n" #endif // ifndef WCALC_DEFINITIONS /* vim:set expandtab: */ wcalc-2.5/src/common/list.c0000664000175000017500000003027712265571147012615 00000000000000#ifdef HAVE_CONFIG_H # include "config.h" #endif /* System Headers */ #include /* for free() */ #include /* for memset() */ /* Internal Headers */ #include "list.h" /* structures for constructing the list */ struct _listheader { struct _listheader *next; void *payload; struct _listheader *pool_next; }; struct _list { struct _listheader *head; struct _listheader *tail; unsigned long len; struct _list *pool_next; struct _list *pool_prev; }; struct _list_iterator { struct _listheader *cur; List l; }; struct cleanup { struct cleanup *next; void *data; }; static List lPool = NULL; static List lPoolUsed = NULL; static unsigned long long lPoolSize = 0; /* for exponential growth */ static struct cleanup *lCleanupPool = NULL; static inline List get_l(void); static void fill_l_pool(void); static struct _listheader *lhPool = NULL; static unsigned long long lhPoolSize = 0; /* for exponential growth */ static struct cleanup *lhCleanupPool = NULL; static inline struct _listheader *get_lh(void); static void fill_lh_pool(void); static void poolReturn(struct _listheader *lh); /* This sets up the memory pool(s) */ void lists_init(void) { /*{{{ */ fill_lh_pool(); fill_l_pool(); } /*}}} */ /* This clean up the memory pool(s) */ void lists_cleanup(void) { /*{{{ */ struct cleanup *freec; while (lhCleanupPool != NULL) { freec = lhCleanupPool; struct _listheader *freeme = freec->data; lhCleanupPool = lhCleanupPool->next; free(freeme); free(freec); } while (lCleanupPool != NULL) { freec = lCleanupPool; List freeme = freec->data; lCleanupPool = lCleanupPool->next; free(freeme); free(freec); } } /*}}} */ /* This returns a struct to the pool */ void poolReturn(struct _listheader *lh) { /*{{{ */ memset(lh, 0, sizeof(struct _listheader)); lh->pool_next = lhPool; lhPool = lh; } /*}}} */ /* This fills the list header memory pool with 1024 items (or doubles the pool * size) */ static void fill_lh_pool(void) { /*{{{ */ struct _listheader *tlist; struct _listheader *temp; struct cleanup *ch; size_t newobjcount; size_t i; newobjcount = (lhPoolSize == 0) ? 1024 : lhPoolSize; tlist = calloc(newobjcount, sizeof(struct _listheader)); ch = calloc(1, sizeof(struct cleanup)); ch->data = tlist; ch->next = lhCleanupPool; lhCleanupPool = ch; for (i = 0; i < newobjcount; ++i) { temp = &(tlist[i]); temp->pool_next = lhPool; lhPool = temp; } lhPoolSize += newobjcount; } /*}}} */ /* This fills the list item memory pool with 2 items (or doubles the pool * size) */ static void fill_l_pool(void) { /*{{{ */ size_t i, newobjcount; List temp; List tlist; struct cleanup *ch; newobjcount = (lPoolSize == 0) ? 2 : lPoolSize; tlist = calloc(newobjcount, sizeof(struct _list)); ch = calloc(1, sizeof(struct cleanup)); ch->data = tlist; ch->next = lCleanupPool; lCleanupPool = ch; for (i = 0; i < newobjcount; ++i) { temp = &(tlist[i]); temp->pool_next = lPool; lPool = temp; } lPoolSize += newobjcount; } /*}}} */ /* This frees up the memory allocated by the list */ void freeList(List *lst) { /*{{{ */ List thelist; if (!lst) { return; } thelist = *lst; if (!thelist) { return; } while (thelist->len > 0 && thelist->head != NULL) { struct _listheader *h = thelist->head; thelist->head = h->next; thelist->len--; poolReturn(h); } if (lPoolUsed == thelist) { lPoolUsed = thelist->pool_next; } if (thelist->pool_next) { thelist->pool_next->pool_prev = thelist->pool_prev; } if (thelist->pool_prev) { thelist->pool_prev->pool_next = thelist->pool_next; } thelist->pool_next = lPool; thelist->pool_prev = NULL; lPool = thelist; *lst = NULL; } /*}}} */ /* this fetches a new list header from the pool */ static inline struct _listheader *get_lh(void) /*{{{ */ { struct _listheader *lh; if (NULL == lhPool) { fill_lh_pool(); } lh = lhPool; lhPool = lh->pool_next; lh->pool_next = NULL; return lh; } /*}}} */ /* this fetches a new list from the pool */ static inline List get_l(void) { /*{{{ */ List l; if (NULL == lPool) { fill_l_pool(); } l = lPool; lPool = l->pool_next; l->pool_next = lPoolUsed; if (lPoolUsed) { lPoolUsed->pool_prev = l; } lPoolUsed = l; lPoolUsed->pool_prev = NULL; return l; } /*}}} */ /* This adds "addme" to the end of the list */ void addToList(List *lst, void *addme) { /*{{{ */ List list; struct _listheader *pl; pl = get_lh(); pl->payload = addme; pl->next = NULL; if (!lst) { return; } list = *lst; if (!list) { list = *lst = get_l(); list->tail = list->head = pl; list->len = 1; } else { if (list->tail) { list->tail->next = pl; list->tail = pl; list->len++; } else { list->tail = list->head = pl; list->len = 1; } } } /*}}} */ /* This adds "addme" to the head of the list */ void addToListHead(List *lst, void *addme) { /*{{{ */ List list; struct _listheader *pl; pl = get_lh(); pl->payload = addme; pl->next = NULL; if (!lst) { return; } list = *lst; if (!list) { list = *lst = get_l(); list->tail = list->head = pl; list->len = 1; } else { if (list->head) { pl->next = list->head; list->head = pl; list->len++; } else { list->tail = list->head = pl; list->len = 1; } } } /*}}} */ /* This removes the front of the list from the list and returns it */ void *getHeadOfList(List list) { /*{{{ */ void *payload; struct _listheader *pl; if (!list || !list->head) { return NULL; } payload = list->head->payload; pl = list->head; list->head = list->head->next; poolReturn(pl); list->len--; if (list->len == 0) { list->head = list->tail = NULL; } return payload; } /*}}} */ /* This returns the n'th element of the list, as if the list was an array */ void *peekListElement(List list, size_t n) { /*{{{ */ struct _listheader *pl; size_t counter; if (!list || !list->head || (list->len <= n)) { return NULL; } pl = list->head; for (counter = 1; counter <= n; counter++) { if (pl->next == NULL) { return NULL; } pl = pl->next; } return pl->payload; } /*}}} */ /* This returns the n'th element of the list, as if the list was an array, * and removes it from the list */ void *getListElement(List list, size_t n) { /*{{{ */ struct _listheader *pl; void *payload = NULL; struct _listheader *returnme; if (!list || !list->head || (list->len <= n)) { return NULL; } pl = list->head; if (n > 0) { size_t counter; for (counter = 1; counter < n; counter++) { if (pl->next == NULL) { return NULL; } pl = pl->next; } if (pl->next) { payload = pl->next->payload; returnme = pl->next; pl->next = pl->next->next; poolReturn(returnme); } } else { payload = pl->payload; returnme = pl; list->head = pl->next; if (list->tail == returnme) { list->tail = NULL; } } list->len--; return payload; } /*}}} */ /* This returns the head of the list */ inline void *peekAheadInList(List list) { /*{{{ */ if (list && list->head) { return list->head->payload; } return NULL; } /*}}} */ /* This tells you how many items there are in the list */ inline size_t listLen(List list) { /*{{{ */ if (list) { return list->len; } else { return 0; } } /*}}} */ /* This returns a list iterator to a list */ ListIterator getListIterator(List list) { /*{{{ */ ListIterator li; if (!list) { return NULL; } li = malloc(sizeof(struct _list_iterator)); li->cur = list->head; li->l = list; return li; } /*}}} */ /* This returns the value of the current element in the list Iterator */ void *currentListElement(ListIterator li) { /*{{{ */ if (!li || !(li->cur)) { return NULL; } return li->cur->payload; } /*}}} */ /* This iterates a list iterator */ void *nextListElement(ListIterator li) { /*{{{ */ void *payload; if (!li || !(li->cur)) { return NULL; } payload = li->cur->payload; li->cur = li->cur->next; return payload; } /*}}} */ /* This sets the iterator back to the beginning */ void resetListIterator(ListIterator li) { /*{{{ */ if (li) { li->cur = li->l->head; } } /*}}} */ /* This frees up a list iterator */ void freeListIterator(ListIterator li) { /*{{{ */ if (li) { free(li); } } /*}}} */ /* This searches the list for a specific value, and removes it */ void removeFromList(List list, void *item) { /*{{{*/ struct _listheader *pl; if (!list || !list->head) { return; } pl = list->head; if (pl->payload == item) { if (list->head == list->tail) { list->head = list->tail = NULL; list->len = 0; } else { list->len--; list->head = list->head->next; } poolReturn(pl); } else { while (pl->next && pl->next != list->tail) { if (pl->next->payload == item) { break; } if (pl->next->next == NULL) { return; } pl = pl->next; } if (pl->next && (pl->next->payload == item)) { struct _listheader *returnme = pl->next; pl->next = pl->next->next; poolReturn(returnme); } } } /*}}}*/ /* vim:set expandtab: */ wcalc-2.5/src/common/parser.h0000664000175000017500000001501312450331132013112 00000000000000/* A Bison parser, made by GNU Bison 3.0.2. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2013 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ #ifndef YY_YY__SVN_SRC_COMMON_PARSER_H_INCLUDED # define YY_YY__SVN_SRC_COMMON_PARSER_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int yydebug; #endif /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { DEC_CMD = 258, OCT_CMD = 259, HEX_CMD = 260, BIN_CMD = 261, DISPLAY_PREFS_CMD = 262, RADIAN_CMD = 263, REMEMBER_CMD = 264, LISTVAR_CMD = 265, STORE_CMD = 266, CMOD_CMD = 267, PRINT_HELP_CMD = 268, PREFIX_CMD = 269, INT_CMD = 270, VERBOSE_CMD = 271, DELIM_CMD = 272, ASSERT_CMD = 273, ENG_CMD = 274, HLIMIT_CMD = 275, ROUNDING_INDICATION_CMD = 276, PRECISION_CMD = 277, BITS_CMD = 278, BASE_CMD = 279, GUARD_CMD = 280, CONVERT_CMD = 281, EOLN = 282, OPEN_PARENTHESES = 283, CLOSE_PARENTHESES = 284, OPEN_BRACE = 285, CLOSE_BRACE = 286, OPEN_BRACKET = 287, CLOSE_BRACKET = 288, WPLUS = 289, WMINUS = 290, WMULT = 291, WDIV = 292, WMOD = 293, EQUALS_SIGN = 294, WPOW = 295, WEXP = 296, WSQR = 297, WOR = 298, WAND = 299, WEQUAL = 300, WNEQUAL = 301, WGT = 302, WLT = 303, WGEQ = 304, WLEQ = 305, WLSHFT = 306, WRSHFT = 307, WBOR = 308, WBAND = 309, WBXOR = 310, WBNOT = 311, WNOT = 312, WLOG = 313, WLN = 314, WROUND = 315, WABS = 316, WSQRT = 317, WCEIL = 318, WFLOOR = 319, WCBRT = 320, WLOGTWO = 321, WBANG = 322, WSIN = 323, WCOS = 324, WTAN = 325, WASIN = 326, WACOS = 327, WATAN = 328, WSINH = 329, WCOSH = 330, WTANH = 331, WASINH = 332, WACOSH = 333, WATANH = 334, WCOT = 335, WACOT = 336, WCOTH = 337, WACOTH = 338, WRAND = 339, WIRAND = 340, WFACT = 341, WCOMP = 342, WSEC = 343, WCSC = 344, WASEC = 345, WACSC = 346, WSECH = 347, WCSCH = 348, WASECH = 349, WACSCH = 350, WEINT = 351, WGAMMA = 352, WLNGAMMA = 353, WZETA = 354, WSINC = 355, NUMBER = 356, VARIABLE = 357, STRING = 358, OPEN_CMD = 359, SAVE_CMD = 360, ASSIGNMENT = 361, IDSEP_CMD = 362, DSEP_CMD = 363, ITSEP_CMD = 364, TSEP_CMD = 365, WNEG = 366 }; #endif /* Tokens. */ #define DEC_CMD 258 #define OCT_CMD 259 #define HEX_CMD 260 #define BIN_CMD 261 #define DISPLAY_PREFS_CMD 262 #define RADIAN_CMD 263 #define REMEMBER_CMD 264 #define LISTVAR_CMD 265 #define STORE_CMD 266 #define CMOD_CMD 267 #define PRINT_HELP_CMD 268 #define PREFIX_CMD 269 #define INT_CMD 270 #define VERBOSE_CMD 271 #define DELIM_CMD 272 #define ASSERT_CMD 273 #define ENG_CMD 274 #define HLIMIT_CMD 275 #define ROUNDING_INDICATION_CMD 276 #define PRECISION_CMD 277 #define BITS_CMD 278 #define BASE_CMD 279 #define GUARD_CMD 280 #define CONVERT_CMD 281 #define EOLN 282 #define OPEN_PARENTHESES 283 #define CLOSE_PARENTHESES 284 #define OPEN_BRACE 285 #define CLOSE_BRACE 286 #define OPEN_BRACKET 287 #define CLOSE_BRACKET 288 #define WPLUS 289 #define WMINUS 290 #define WMULT 291 #define WDIV 292 #define WMOD 293 #define EQUALS_SIGN 294 #define WPOW 295 #define WEXP 296 #define WSQR 297 #define WOR 298 #define WAND 299 #define WEQUAL 300 #define WNEQUAL 301 #define WGT 302 #define WLT 303 #define WGEQ 304 #define WLEQ 305 #define WLSHFT 306 #define WRSHFT 307 #define WBOR 308 #define WBAND 309 #define WBXOR 310 #define WBNOT 311 #define WNOT 312 #define WLOG 313 #define WLN 314 #define WROUND 315 #define WABS 316 #define WSQRT 317 #define WCEIL 318 #define WFLOOR 319 #define WCBRT 320 #define WLOGTWO 321 #define WBANG 322 #define WSIN 323 #define WCOS 324 #define WTAN 325 #define WASIN 326 #define WACOS 327 #define WATAN 328 #define WSINH 329 #define WCOSH 330 #define WTANH 331 #define WASINH 332 #define WACOSH 333 #define WATANH 334 #define WCOT 335 #define WACOT 336 #define WCOTH 337 #define WACOTH 338 #define WRAND 339 #define WIRAND 340 #define WFACT 341 #define WCOMP 342 #define WSEC 343 #define WCSC 344 #define WASEC 345 #define WACSC 346 #define WSECH 347 #define WCSCH 348 #define WASECH 349 #define WACSCH 350 #define WEINT 351 #define WGAMMA 352 #define WLNGAMMA 353 #define WZETA 354 #define WSINC 355 #define NUMBER 356 #define VARIABLE 357 #define STRING 358 #define OPEN_CMD 359 #define SAVE_CMD 360 #define ASSIGNMENT 361 #define IDSEP_CMD 362 #define DSEP_CMD 363 #define ITSEP_CMD 364 #define TSEP_CMD 365 #define WNEG 366 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE YYSTYPE; union YYSTYPE { #line 56 "../../../svn/src/common/parser.y" /* yacc.c:1909 */ /* the types that we use in the tokens */ enum functions function; enum operations operation; Number number; long integer; enum commands cmd; char * variable; char character; struct conv_req conver; #line 287 "../../../svn/src/common/parser.h" /* yacc.c:1909 */ }; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif extern YYSTYPE yylval; int yyparse (void); #endif /* !YY_YY__SVN_SRC_COMMON_PARSER_H_INCLUDED */ wcalc-2.5/src/common/Makefile.in0000664000175000017500000005605612451433376013544 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' 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 = src/common DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am parser.h \ parser.c scanner.c $(top_srcdir)/config/depcomp \ $(top_srcdir)/config/ylwrap ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/readline.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/common/includes/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar 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 = libwcalc_a_AR = $(AR) $(ARFLAGS) libwcalc_a_LIBADD = am_libwcalc_a_OBJECTS = add_commas.$(OBJEXT) calculator.$(OBJEXT) \ conversion.$(OBJEXT) evalvar.$(OBJEXT) explain.$(OBJEXT) \ extract_vars.$(OBJEXT) files.$(OBJEXT) \ historyManager.$(OBJEXT) iscmd.$(OBJEXT) isconst.$(OBJEXT) \ isfunc.$(OBJEXT) list.$(OBJEXT) number.$(OBJEXT) \ number_formatting.$(OBJEXT) parser.$(OBJEXT) scanner.$(OBJEXT) \ string_manip.$(OBJEXT) variables.$(OBJEXT) libwcalc_a_OBJECTS = $(am_libwcalc_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@ -I$(top_builddir)/src/common/includes depcomp = $(SHELL) $(top_srcdir)/config/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 = LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS) AM_V_LEX = $(am__v_LEX_@AM_V@) am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@) am__v_LEX_0 = @echo " LEX " $@; am__v_LEX_1 = YLWRAP = $(top_srcdir)/config/ylwrap am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ -e s/c++$$/h++/ -e s/c$$/h/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) AM_V_YACC = $(am__v_YACC_@AM_V@) am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) am__v_YACC_0 = @echo " YACC " $@; am__v_YACC_1 = SOURCES = $(libwcalc_a_SOURCES) DIST_SOURCES = $(libwcalc_a_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) 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@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GMP_CPPFLAGS = @GMP_CPPFLAGS@ GMP_LDFLAGS = @GMP_LDFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPFR_CPPFLAGS = @MPFR_CPPFLAGS@ MPFR_LDFLAGS = @MPFR_LDFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = includes AM_YFLAGS = -d AM_CPPFLAGS = -I$(top_srcdir)/src/common/includes \ -I$(top_builddir)/src/common \ -I$(top_srcdir)/src/common \ @GMP_CPPFLAGS@ @MPFR_CPPFLAGS@ AM_LDFLAGS = @GMP_LDFLAGS@ @MPFR_LDFLAGS@ noinst_LIBRARIES = libwcalc.a BUILT_SOURCES = parser.h libwcalc_a_SOURCES = \ add_commas.c \ calculator.c \ conversion.c \ evalvar.c \ explain.c \ extract_vars.c \ files.c \ historyManager.c \ iscmd.c \ isconst.c \ isfunc.c \ list.c \ number.c \ number_formatting.c \ parser.y \ scanner.l \ string_manip.c \ variables.c all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .l .o .obj .y $(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 src/common/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/common/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(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) parser.h: parser.c @if test ! -f $@; then rm -f parser.c; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) parser.c; else :; fi libwcalc.a: $(libwcalc_a_OBJECTS) $(libwcalc_a_DEPENDENCIES) $(EXTRA_libwcalc_a_DEPENDENCIES) $(AM_V_at)-rm -f libwcalc.a $(AM_V_AR)$(libwcalc_a_AR) libwcalc.a $(libwcalc_a_OBJECTS) $(libwcalc_a_LIBADD) $(AM_V_at)$(RANLIB) libwcalc.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add_commas.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calculator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conversion.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evalvar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/explain.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extract_vars.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/files.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/historyManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iscmd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isconst.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isfunc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/number.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/number_formatting.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scanner.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_manip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/variables.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) '$<'` .l.c: $(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) .y.c: $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) # 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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." -rm -f parser.c -rm -f parser.h -rm -f scanner.c -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) 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-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) all check install 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-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 # 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: wcalc-2.5/src/common/isconst.c0000664000175000017500000001643112451425313013306 00000000000000#ifdef HAVE_CONFIG_H # include "config.h" #endif /* System Headers */ #include /* Internal Headers */ #include "isconst.h" #warning this is all in utf8... should probably use iconv const struct name_with_exp consts[] = { { { "e", NULL }, "The base of the natural logarithm function. Arbitrary precision. Occasionally called Euler's Number (after Leonhard Eulter) or Napier's Constant (after John Napier)." }, { { "pi", "pI", "Pi", "PI", "\317\200", NULL }, "The ratio of a circle's circumference to its diameter. Arbitrary precision." }, { { "random", NULL }, "A random number between 0 and 2^32." }, { { "irandom", NULL }, "A random integer between 0 and 2^32." }, { { "Na", "NA", NULL }, "Avogadro's Constant. The number of molecules in one mole." }, { { "k", NULL }, "Boltzmann's Constant. The physical constant relating temperature to energy." }, { { "Cc", NULL }, "Coulomb force constant. Equal to 1/(4*pi*epsilonzero)." /* W_Cc */ }, { { "ec", NULL }, "Elementary charge. The electric charge carried by a single proton." /* W_ec */ }, { { "R", NULL }, "Molar Gas Constant. Used in equations of state to relate various groups of state functions to one another." /* W_R */ }, { { "G", NULL }, "The universal gravitational constant. Appears in Einstein's theory of general relativity." /* W_G */ }, { { "g", NULL }, "The gravitational acceleration of Earth at sea-level." /* W_g */ }, { { "Me", NULL }, "The mass of an electron in kilograms." /* W_Me */ }, { { "Mp", NULL }, "The mass of a proton in kilograms." /* W_Mp */ }, { { "Mn", NULL }, "The mass of a neutron in kilograms." /* W_Mn */ }, { { "Md", NULL }, "The mass of a deuteron in kilograms." /* W_Md */ }, { { "u", "amu", NULL }, "Atomic mass unit. One twelfth of the mean mass of an atop of carbon 12 in its nuclear and electronic ground state." /* W_u */ }, { { "c", NULL }, "The speed of light." /* W_c */ }, { { "h", NULL }, "Planck Constant. Used to describe the sizes of quanta, central to the theory of quantum mechanics." /* W_h */ }, { { "mu0", "muzero", "muZERO", "\302\2650", "\302\265zero", "\302\265ZERO", "\316\2740", "\316\274zero", "\316\274ZERO", NULL }, "Permeability of free space. Also known as the magnetic constant." }, { { "epsilonzero", "epsilonZERO", "epsilon0", "EPSILONzero", "EPSILONZERO", "EPSILON0", "\316\265zero", "\316\265ZERO", "\316\2650", NULL }, "Permittivity of free space. The ratio of D/E in vacuum." /* W_epsilon0 */ }, { { "\302\265B", "\316\274B", "muB", NULL }, "Bohr magneton. A physical constant of magnetic moment." /* W_muB */ }, { { "\302\265N", "\316\274N", "muN", NULL }, "Nuclear magneton. A physical constant of magnetic moment." /* W_muN */ }, { { "b", NULL }, "Wein displacement constant. Defines the relationship between the thermodynamic temperature of a black body and the wavelength at which the intensity of the radiation is the greatest." /* W_b */ }, { { "a0", NULL }, "Bohr radius. A single electron orbiting at the lowest possible energy in a hydrogen atom orbits at this distance." /* W_a0 */ }, { { "F", NULL }, "Faraday constant. The amount of electric charge in one mole of electrons." /* W_F */ }, { { "Vm", "NAk", NULL }, "Molar volume of ideal gas." /* W_Vm */ }, { { "eV", NULL }, "Electron volt. The amount of kinetic energy gained by a single unbound electron when it passes through an electrostatic potential difference of one volt, in vacuum." /* W_eV */ }, { { "sigma", "\317\203", NULL }, "Stefan-Boltzmann constant. The constant of proportionality between the total energy radiated per unit surface area of a black body in unit time and the fourth power of the thermodynamic temperature, as per the Stefan-Boltzmann law." /* W_sigma */ }, { { "alpha", "\316\261", NULL }, "Fine-structure constant. The fundamental physical constant characterizing the strength of the electromagnetic interaction." /* W_alpha */ }, { { "gamma", "GAMMA", "\316\263", NULL }, "Euler-Mascheroni constant. Used mainly in number theory, defined as the limiting difference between the harmonic series and the natural logarithm." /* W_gamma */ }, { { "re", NULL }, "Electron radius, also known as the Compton radius or the Thomson scattering length based on a classical relativistic model of the electron." /* W_re */ }, { { "Kj", NULL }, "Josephson Constant. The inverse of the magnetic flux quantum." /* W_Kj */ }, { { "Rk", NULL }, "von Klitzing constant. Named after Klaus von Klitzing, the basic resistance unit." /* W_Rk */ }, { { "Rinf", "R\342\210\236", NULL }, "The \"infinity\" Rydberg constant, named after physicist Janne Rydberg. Used to calculate the Rydberg constant of any other chemical element." /* W_Rinf */ }, { { "Eh", NULL }, "Hartree energy. The atomic unit of energy, named after physicist Douglas Hartree." /* W_Eh */ }, { { "Gf", NULL }, "Fermi Coupling Constant." /* W_Gf */ }, { { "Mmu", "M\302\265", "M\316\274", NULL }, "The mass of a muon in kilograms." /* W_Mmu */ }, { { "Mt", "Mtau", "M\317\204", NULL }, "The tau mass in kilograms." /* W_Mt */ }, { { "Mh", NULL }, "The mass of a helion in kilograms." /* W_Mh */ }, { { "Malpha", "M\316\261", NULL }, "The mass of an alpha particle in kilograms." /* W_Malpha */ }, { { "n0", "nzero", "nZERO", NULL }, "Loschmidt constant. The number of molecules in a cubic meter of ideal gas. Equal to the Avogadro constant divided by molar volume." /* W_n0 */ }, { { "c1", NULL }, "First radiation constant." /* W_c1 */ }, { { "c2", NULL }, "Second radiation constant." /* W_c2 */ }, { { "G0", "Gzero", "GZERO", NULL }, "Conductance quantum." /* W_G0 */ }, { { "Z0", "Zzero", "ZZERO", NULL }, "Characteristic impedance of vacuum, the characteristic impedance of electromagnetic radiation in vacuum. Equal to mu0*c." /* W_Z0 */ }, { { "Phi0", "Phizero", "PhiZERO", "\316\2460", "\316\246zero", "\316\246ZERO", NULL }, "Magnetic flux quantum. The quantum of magnetic flux passing through a superconductor." /* W_Phi0 */ }, { { "\302\274", NULL }, "A special symbol for 0.25." /* W_quarter */ }, { { "\302\275", NULL }, "A special symbol for 0.5." /* W_half */ }, { { "\302\276", NULL }, "A special symbol for 0.75." /* W_threequarters */ }, { { "K", NULL }, "Catalan's constant commonly appears in estimates of combinatorial functions and in certain classes of sums and definite integrals." /* W_K */ }, { { "@NaN@", NULL }, "Not-a-number. This is a \"special\" number that has specific (unusual) mathematical consequences." /* W_NaN */ }, { { "@Inf@", NULL }, "This represents infinity. This is a \"special\" number that has specific (unusual) mathematical consequences." /* W_Inf */ }, { { 0 }, NULL } }; int isconst(const char *str) { /*{{{*/ unsigned i, j; for (i = 0; consts[i].explanation; i++) { for (j = 0; consts[i].names[j]; j++) { if (strcmp(consts[i].names[j], str) == 0) { return 1; } } } return 0; } /*}}}*/ /* vim:set expandtab: */ wcalc-2.5/src/common/number_formatting.c0000664000175000017500000005717712451433203015357 00000000000000#if HAVE_CONFIG_H # include "config.h" #endif /* System Headers */ #if !defined(HAVE_CONFIG_H) || HAVE_STRING_H # include #endif #include /* for snprintf() */ #include /* for calloc() */ #include /* for ssize_t */ /* Internal Headers */ #include "number.h" #include "calculator.h" #include "string_manip.h" #include "number_formatting.h" static size_t zero_strip(char *num); static void add_prefix(char *num, size_t length, int base); static char *engineering_formatted_number(const char *digits, num_exp_t exp, const int precision, const int base, const int prefix, char *truncated_flag); static char *full_precision_formatted_number(const char *digits, num_exp_t exp, const int base, const int prefix); static char *automatically_formatted_number(const char *digits, num_exp_t exp, const int precision, const int base, const int prefix, char *truncated_flag); static char *precision_formatted_number(const char *digits, num_exp_t exp, const int precision, const int base, const int prefix); /* this function takes a number (mpfr_t) and prints it. * This is a blatant ripoff of mpfr's mpfr_out_str(), because it formats things * (sorta) the way I want them formatted, though this prints things out to a * string, and does all the fancy presentation stuff we've come to expect from * wcalc. */ char *num_to_str_complex(const Number num, const int base, enum engineering_modes engr, const int prec, const int prefix, char *truncated_flag) { /*{{{*/ char *s, *retstr; num_exp_t e; Dprintf("num_to_str_complex: base: %i, engr: %i, prec: %i, prefix: %i\n", base, engr, prec, prefix); if (num_is_nan(num)) { return (char *)strdup("@NaN@"); } if (num_is_inf(num)) { if (num_sign(num) > 0) { return (char *)strdup("@Inf@"); } else { return (char *)strdup("-@Inf@"); } } if (num_is_zero(num)) { if (num_sign(num) >= 0) { return (char *)strdup("0"); } else { return (char *)strdup("-0"); } } s = num_get_str(NULL, &e, base, 0, num); /* s is the string * e is the number of integers (the exponent) if positive * * Now, if there's odd formatting involved, make mpfr do the rounding, * so we know it's "correct": */ if (prec > -1) { if (engr == never) { size_t significant_figures = 0; Dprintf("prec > -1 && engr == never\n"); /*printf("e: %li\n", (long)e); * printf("s: %s\n", s); * printf("prec: %i\n", prec); */ significant_figures = ((e > 0) ? e : 0) + prec; Dprintf("sig figs = %zu\n", significant_figures); if (significant_figures < 2) { /* MPFR-defined minimum (why?) */ num_free_str(s); s = num_get_str(NULL, &e, base, 2, num); Dprintf("s=%s, e = %i\n", s, (int)e); if (s[1] > '4') { /* XXX: LAME! */ unsigned foo; foo = s[0] - '0'; foo++; snprintf(s, 3, "%u", foo); Dprintf("s = %s\n", s); e = 1; } } else { num_free_str(s); s = num_get_str(NULL, &e, base, significant_figures, num); } } else { int left_digits = 0; Number temp; Dprintf("engr == auto || engr == always\n"); /* first, count how many figures to the left of the decimal */ num_init_set(temp, num); while (num_get_d(temp) >= 1.0) { num_div_ui(temp, temp, base); left_digits++; } num_free(temp); if (left_digits == 0) { left_digits = 1; } Dprintf("left_digits = %i, asking for %i\n", left_digits, left_digits + prec); num_free_str(s); s = num_get_str(NULL, &e, base, ((left_digits + prec) < 2) ? 2 : (left_digits + prec), num); } } Dprintf("post-mpfr e: %li s: %s\n", (long int)e, s); *truncated_flag = 0; if (-2 == prec) { retstr = full_precision_formatted_number(s, e, base, prefix); } else { if (conf.print_ints) { Dprintf("due to print_ints, engr:=never\n"); engr = never; } switch (engr) { case always: Dprintf("ALWAYS print engineering\n"); retstr = engineering_formatted_number(s, e, prec, base, prefix, truncated_flag); break; case never: Dprintf("NEVER print engineering\n"); if (-1 == prec) { Dprintf(" -> decided on non-engineering auto-formatting (%i)\n", (int)e); retstr = automatically_formatted_number(s, e, prec, base, prefix, truncated_flag); } else { Dprintf(" -> decided on non-engineering precision formatting (%i)\n", (int)e); retstr = precision_formatted_number(s, e, prec, base, prefix); } break; default: case automatic: Dprintf("AUTOMATICALLY decide on engineering formatting\n"); if ((e >= 10) || (e <= -10)) { Dprintf(" -> decided on engineering formatting\n"); retstr = engineering_formatted_number(s, e, prec, base, prefix, truncated_flag); } else { Dprintf (" -> decided on non-engineering formatting (%i)\n", (int)e); retstr = automatically_formatted_number(s, e, prec, base, prefix, truncated_flag); } } } num_free_str(s); Dprintf("return string: %s\n", retstr); return retstr; } /*}}}*/ char *precision_formatted_number(const char *digits, num_exp_t exp, const int precision, const int base, const int prefix) { /*{{{*/ size_t length; size_t full_length; size_t decimal_count = 0; size_t print_limit; char *retstring, *curs; size_t d_index = 0; length = strlen(digits); /* testing against both zero and length because length is unsigned */ if ((exp > 0) && ((size_t)exp > length)) { length = exp; } length += 3; if (length < (size_t)(precision + 3)) { // leading zero, decimal, and null length = (size_t)(precision + 3); } Dprintf("Precision Formatted Number\n"); Dprintf("digits: %s(%u), exp: %i, base: %i, prefix: %i, precision: %i\n", digits, (unsigned)length, (int)exp, base, prefix, precision); // ten extra, 'cuz of the *possible* exponent full_length = length + 10; curs = retstring = (char *)calloc(full_length, sizeof(char)); Dprintf("length: %lu, full_length: %lu\n", length, full_length); // now, copy the digits into the output string, carefully // copy over the negative sign if (digits[d_index] == '-') { snprintf(curs++, length--, "%c", digits[d_index++]); } // copy in a prefix if (prefix) { char *nc; add_prefix(curs, length, base); nc = strchr(curs, '\0'); length -= nc - curs; curs = nc; } // copy in the integers Dprintf("exp = %i\n", (int)exp); if (exp > 0) { snprintf(curs++, length--, "%c", digits[d_index++]); exp--; // leading digit while (exp > 0 && digits[d_index] && length > 0) { snprintf(curs++, length--, "%c", digits[d_index++]); exp--; } for (; exp > 0; exp--) { snprintf(curs++, length--, "0"); } } else { snprintf(curs++, length--, "0"); } if (precision > 0) { // the decimal snprintf(curs++, length--, "."); Dprintf("the integers: %s\n", retstring); Dprintf("l: %lu, fl: %lu, dc: %u, p: %i, e: %i\n", length, full_length, (unsigned)decimal_count, (int)precision, (int)exp); // everything after this is affected by decimalcount // copy in the leading zeros while (exp < 0 && (ssize_t)decimal_count <= precision && length > 0) { snprintf(curs++, length--, "0"); exp++; decimal_count++; } Dprintf("l: %lu, fl: %lu, dc: %u, p: %i, e: %i\n", length, full_length, (unsigned)decimal_count, (int)precision, (int)exp); // copy in the rest of the mantissa (the decimals) Dprintf("leading zeros: %s\n", retstring); // this variable exists because snprintf's return value is unreliable, // and can be larger than the number of digits printed print_limit = ((length < (precision - decimal_count + 1)) ? length + 1 : (precision - decimal_count + 1)); snprintf(curs, print_limit, "%s", &digits[d_index]); } else if (strlen(retstring) == 1) { /* this must be able to print `Eh` and other small numbers */ Dprintf("all digits\n"); // the decimal snprintf(curs++, length--, "."); Dprintf("l: %lu, fl: %lu, dc: %u, p: %i, e: %i\n", length, full_length, (unsigned)decimal_count, (int)precision, (int)exp); // everything after this is affected by decimalcount // copy in the leading zeros while (exp < 0 && length > 0) { snprintf(curs++, length--, "0"); exp++; decimal_count++; } Dprintf("l: %lu, fl: %lu, dc: %u, p: %i, e: %i\n", length, full_length, (unsigned)decimal_count, (int)precision, (int)exp); // copy in the rest of the mantissa (the decimals) Dprintf("leading zeros: %s\n", retstring); // this variable exists because snprintf's return value is unreliable, // and can be larger than the number of digits printed print_limit = ((length < (precision - decimal_count + 1)) ? length : (precision - decimal_count + 1)); snprintf(curs, print_limit, "%s", &digits[d_index]); /* Now remove trailing zeroes */ Dprintf("last character: %c\n", retstring[strlen(retstring) - 1]); { size_t last = strlen(retstring) - 1; while (retstring[last] == '0' && last > 0) { retstring[last] = 0; last--; } } } Dprintf("retstring='%s' (%zu)\n", retstring, strlen(retstring)); return retstring; } /*}}}*/ char *full_precision_formatted_number(const char *digits, num_exp_t exp, const int base, const int prefix) { /*{{{*/ size_t length; size_t full_length; size_t decimal_count = 0; //size_t printed; char *retstring, *curs; size_t d_index = 0; length = strlen(digits); /* testing against both zero and length because length is unsigned */ if ((exp > 0) && ((size_t)exp > length)) { length = exp; } length += 3; /* the null, the (possible) sign, and the decimal */ Dprintf("Full Precision Formatted Number\n"); Dprintf("digits: %s(%u), exp: %i, base: %i, prefix: %i\n", digits, (unsigned)length, (int)exp, base, prefix); Dprintf("strlen(digits): %u\n", (unsigned)strlen(digits)); // ten extra, 'cuz of the *possible* exponent full_length = length + 10; curs = retstring = (char *)calloc(sizeof(char), full_length); Dprintf("length: %lu, full_length: %lu\n", length, full_length); // now, copy the digits into the output string, carefully // copy over the negative sign if (digits[d_index] == '-') { snprintf(curs++, length--, "%c", digits[d_index++]); } // copy in a prefix if (prefix) { char *nc; add_prefix(curs, length, base); nc = strchr(curs, '\0'); length -= nc - curs; curs = nc; } Dprintf("ready for ints: %s\n", retstring); // copy over the integers if (exp > 0) { snprintf(curs++, length--, "%c", digits[d_index++]); exp--; // leading digit while (exp > 0 && digits[d_index] && length > 0) { snprintf(curs++, length--, "%c", digits[d_index++]); exp--; } for (; exp > 0; exp--) { snprintf(curs++, length--, "0"); } } else { snprintf(curs++, length--, "0"); } // the decimal snprintf(curs++, length--, "."); Dprintf("the integers: %s\n", retstring); Dprintf("length: %lu, full_length: %lu\n", length, full_length); // XXX: Currently, this function is not used for decimals, so... // the leading decimal zeros while (exp < 0 && length > 0) { snprintf(curs++, length--, "0"); exp++; decimal_count++; } // the rest of the mantissa (the decimals) // this variable exists because snprintf's return value is unreliable. // and can be larger than the number of digits printed //printed = ((length - 1 < strlen(&digits[d_index])) ? length - 1 : strlen(&digits[d_index])); snprintf(curs, length, "%s", &digits[d_index]); //length -= printed; //decimal_count += printed; // strip off the trailing 0's zero_strip(retstring); // copy in an exponent if necessary if (exp != 0) { curs = strchr(retstring, '\0'); Dprintf("space left: %lu\n", full_length - (curs - retstring)); snprintf(curs, full_length - (curs - retstring), (base <= 10 ? "e%ld" : "@%ld"), (long)exp); } return retstring; } /*}}}*/ char *automatically_formatted_number(const char *digits, num_exp_t exp, const int precision, const int base, const int prefix, char *truncated_flag) { /*{{{*/ size_t length; size_t full_length; size_t decimal_count = 0; //size_t printed; char *retstring, *curs; size_t d_index = 0; const long original_exp = exp - 1; length = strlen(digits); /* testing against both zero and length because length is unsigned */ if ((exp > 0) && ((size_t)exp > length)) { length = exp; } length += 3; /* the null, the (possible) sign, and the decimal */ Dprintf("Automatically Formatted Number\n"); Dprintf("digits: %s(%u), exp: %i, base: %i, prefix: %i\n", digits, (unsigned)length, (int)exp, base, prefix); Dprintf("strlen(digits): %u\n", (unsigned)strlen(digits)); // ten extra, 'cuz of the *possible* exponent full_length = length + 10; curs = retstring = (char *)calloc(sizeof(char), full_length); Dprintf("length: %lu, full_length: %lu\n", length, full_length); // now, copy the digits into the output string, carefully // copy over the negative sign if (digits[d_index] == '-') { snprintf(curs++, length--, "%c", digits[d_index++]); Dprintf("copied negative sign: %s\n", retstring); } // copy in a prefix if (prefix) { char *nc; add_prefix(curs, length, base); nc = strchr(curs, '\0'); length -= nc - curs; curs = nc; Dprintf("added prefix: %s\n", retstring); } Dprintf("ready for ints: %s\n", retstring); // copy over the integers if (exp > 0) { snprintf(curs++, length--, "%c", digits[d_index++]); exp--; // leading digit while (exp > 0 && digits[d_index] && length > 0) { snprintf(curs++, length--, "%c", digits[d_index++]); exp--; } for (; exp > 0; exp--) { snprintf(curs++, length--, "0"); } } else { snprintf(curs++, length--, "0"); } // the decimal snprintf(curs++, length--, "."); Dprintf("the integers: %s\n", retstring); Dprintf("length: %lu, full_length: %lu\n", length, full_length); // XXX: Currently, this function is not used for decimals, so... // the leading decimal zeros while (exp < 0 && length > 0) { snprintf(curs++, length--, "0"); exp++; decimal_count++; } // the rest of the mantissa (the decimals) // this variable exists because snprintf's return value is unreliable. // and can be larger than the number of digits printed //printed = ((length - 1 < strlen(digits + d_index)) ? length - 1 : strlen(digits + d_index)); snprintf(curs, length, "%s", digits + d_index); //length -= printed; //decimal_count += printed; if (precision == -1) { char *period; // strip off the trailing 0's zero_strip(retstring); /* XXX: This is a stupid hack; the idea is just to get the mpfr output * to match the double output. */ period = strchr(retstring, '.'); Dprintf("retstring: %s\n", retstring); Dprintf("period: %s\n", period); if (period && (strlen(period) > 10)) { period[30] = 0; // Arbitrary cutoff to avoid huge outputs for repeating decimals *truncated_flag = 1; zero_strip(retstring); } } else if (precision >= 0) { char *period = strchr(retstring, '.'); Dprintf("period: %s\n", period); if (period != NULL) { if (precision == 0) { // this removes extraneous periods *period = 0; } period++; if (strlen(period) > (size_t)precision) { Dprintf("truncating down to precision...\n"); period[precision] = 0; *truncated_flag = 1; } } } // copy in an exponent if necessary if (exp != 0) { curs = strchr(retstring, '\0'); Dprintf("space left: %lu\n", full_length - (curs - retstring)); snprintf(curs, full_length - (curs - retstring), (base <= 10 ? "e%ld" : "@%ld"), original_exp); } return retstring; } /*}}}*/ char *engineering_formatted_number(const char *digits, num_exp_t exp, const int precision, const int base, const int prefix, char *truncated_flag) { /*{{{*/ size_t length; size_t full_length; char *retstring, *curs; size_t d_index = 0; length = strlen(digits); /* testing against both zero and length because length is unsigned */ if ((exp > 0) && ((size_t)exp > length)) { length = exp; } length += 3; /* the null, the (possible) sign, and the decimal */ Dprintf("Engineering Formatted Number\n"); Dprintf("digits: %s(%u), exp: %i, prec: %i, prefix: %i\n", digits, (unsigned)length, (int)exp, precision, prefix); // ten extra, 'cuz of the exponent full_length = length + 10; curs = retstring = (char *)calloc(sizeof(char), full_length); Dprintf("length: %lu, full_length: %lu\n", length, full_length); // now, copy the digits into the output string, carefully // copy over the negative sign if (digits[d_index] == '-') { snprintf(curs++, length--, "%c", digits[d_index++]); } // copy in a prefix if (prefix) { char *nc; add_prefix(curs, length, base); nc = strchr(curs, '\0'); length -= nc - curs; curs = nc; } // copy over the integer snprintf(curs++, length--, "%c", digits[d_index++]); exp--; // the decimal snprintf(curs++, length--, "."); Dprintf("the integers: %s\n", retstring); Dprintf("length: %lu, full_length: %lu\n", length, full_length); // now, add in the rest of the digits // note that the digits are already correctly rounded and I've already // allocated enough space, because of how I asked mpfr for the original // digit string. snprintf(curs, length + 1, "%s", &digits[d_index]); Dprintf("the decimals: %s\n", retstring); // strip off the trailing 0's if (-1 == precision) { char *period; zero_strip(retstring); /* XXX: This is a stupid hack; the idea is just to get the mpfr output * to match (roughly) the double output. */ period = strchr(retstring, '.'); Dprintf("retstring: %s\n", retstring); Dprintf("period: %s\n", period); if (period && (strlen(period) > 10)) { period[10] = 0; *truncated_flag = 1; zero_strip(retstring); } } else { char *period = strchr(retstring, '.') + 1; Dprintf("period: %s\n", period); if (period && ((int)strlen(period) > precision)) { Dprintf("truncating down to precision...\n"); period[precision] = 0; *truncated_flag = 1; } } // copy in an exponent curs = strchr(retstring, '\0'); Dprintf("space left: %lu\n", full_length - (curs - retstring)); snprintf(curs, full_length - (curs - retstring), (base <= 10 ? "e%+ld" : "@%+ld"), (long)exp); return retstring; } /*}}}*/ /* this function removes zeros and decimals from the back end of a number, * and returns how many characters it stripped */ size_t zero_strip(char *num) { /*{{{*/ size_t curs = strlen(num) - 1; size_t count = 0; while ('0' == num[curs]) { num[curs--] = '\0'; count++; } if ('.' == num[curs]) { num[curs] = '\0'; count++; } return count; } /*}}}*/ /* this function prints a prefix for the specified base into the specified * string */ void add_prefix(char *num, size_t length, int base) { /*{{{*/ switch (base) { case 16: snprintf(num, length, "0x"); return; case 10: return; case 8: snprintf(num, length, "0"); return; case 2: snprintf(num, length, "0b"); return; } } /*}}}*/ /* vim:set expandtab: */ wcalc-2.5/src/common/scanner.c0000644000175000017500000045207512451267045013271 00000000000000 #line 3 "../../../svn/src/common/scanner.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ /* C99 requires __STDC__ to be defined as 1. */ #if defined (__STDC__) #define YY_USE_CONST #endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart(yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif extern int yyleng; extern FILE *yyin, *yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void yyrestart (FILE *input_file ); void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); void yy_delete_buffer (YY_BUFFER_STATE b ); void yy_flush_buffer (YY_BUFFER_STATE b ); void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); void yypop_buffer_state (void ); static void yyensure_buffer_stack (void ); static void yy_load_buffer_state (void ); static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); void *yyalloc (yy_size_t ); void *yyrealloc (void *,yy_size_t ); void yyfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ #define yywrap(n) 1 #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; typedef int yy_state_type; extern int yylineno; int yylineno = 1; extern char *yytext; #define yytext_ptr yytext static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 189 #define YY_END_OF_BUFFER 190 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[822] = { 0, 0, 0, 190, 188, 1, 2, 106, 45, 112, 116, 188, 98, 99, 110, 109, 187, 134, 182, 111, 185, 183, 127, 113, 126, 35, 188, 180, 180, 180, 70, 55, 180, 95, 180, 180, 180, 54, 180, 180, 102, 188, 103, 114, 180, 68, 62, 46, 180, 56, 63, 180, 51, 180, 180, 180, 180, 180, 180, 180, 180, 61, 180, 180, 100, 115, 101, 117, 188, 188, 188, 188, 188, 1, 123, 45, 120, 0, 178, 107, 187, 182, 0, 0, 44, 187, 182, 185, 0, 0, 0, 187, 183, 183, 0, 129, 132, 122, 130, 128, 0, 0, 0, 180, 179, 180, 52, 180, 80, 89, 180, 180, 180, 81, 180, 180, 77, 180, 60, 57, 84, 180, 59, 58, 83, 0, 0, 0, 50, 50, 47, 180, 180, 78, 0, 71, 90, 180, 180, 0, 3, 0, 4, 8, 13, 0, 0, 20, 0, 25, 0, 0, 0, 18, 69, 180, 180, 180, 180, 180, 180, 180, 180, 87, 88, 180, 180, 180, 180, 72, 53, 180, 180, 122, 180, 180, 180, 180, 180, 162, 180, 180, 86, 180, 123, 180, 180, 118, 180, 76, 180, 180, 180, 180, 180, 180, 180, 118, 105, 108, 0, 92, 93, 94, 110, 111, 0, 74, 75, 0, 47, 73, 0, 0, 0, 182, 0, 0, 44, 187, 182, 0, 185, 185, 0, 185, 186, 184, 187, 183, 183, 0, 183, 0, 0, 180, 180, 180, 180, 180, 180, 180, 82, 180, 82, 85, 83, 180, 180, 0, 180, 180, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 22, 0, 0, 30, 0, 0, 0, 0, 0, 164, 180, 180, 180, 61, 120, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 136, 138, 140, 180, 180, 180, 166, 180, 180, 180, 180, 180, 160, 64, 66, 67, 180, 180, 180, 104, 180, 180, 180, 139, 180, 135, 180, 137, 125, 180, 64, 66, 67, 0, 0, 91, 0, 0, 65, 0, 0, 134, 165, 121, 119, 124, 133, 131, 43, 187, 0, 182, 185, 185, 0, 186, 186, 0, 184, 0, 187, 183, 183, 0, 0, 180, 180, 180, 180, 180, 36, 180, 83, 91, 180, 180, 79, 79, 180, 180, 0, 0, 3, 0, 0, 0, 0, 4, 17, 0, 0, 0, 8, 0, 0, 13, 0, 0, 16, 0, 0, 20, 0, 22, 23, 25, 0, 29, 0, 0, 0, 0, 142, 144, 146, 180, 180, 180, 180, 180, 180, 180, 180, 145, 141, 143, 169, 168, 173, 0, 180, 148, 180, 0, 150, 0, 152, 174, 180, 180, 172, 180, 180, 180, 180, 180, 180, 180, 180, 180, 170, 180, 0, 180, 151, 180, 0, 159, 135, 147, 165, 0, 149, 177, 0, 0, 0, 0, 0, 0, 187, 185, 0, 186, 186, 0, 186, 184, 0, 184, 183, 181, 183, 97, 96, 180, 75, 89, 175, 180, 180, 180, 90, 0, 0, 0, 0, 0, 42, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 16, 0, 19, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 154, 156, 158, 74, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 157, 153, 155, 180, 0, 140, 0, 136, 0, 0, 0, 180, 180, 167, 171, 180, 180, 180, 180, 86, 180, 163, 0, 180, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 0, 186, 183, 0, 180, 85, 180, 180, 0, 0, 38, 0, 0, 31, 37, 37, 0, 0, 0, 0, 17, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 0, 0, 24, 0, 0, 0, 0, 29, 32, 41, 33, 33, 0, 142, 144, 146, 145, 141, 143, 180, 180, 180, 180, 180, 180, 142, 180, 0, 136, 144, 146, 0, 180, 122, 180, 180, 161, 64, 48, 145, 139, 0, 141, 0, 143, 0, 0, 186, 0, 181, 180, 91, 5, 3, 37, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 7, 7, 34, 34, 0, 21, 21, 0, 23, 0, 0, 26, 0, 0, 32, 0, 180, 180, 180, 180, 180, 180, 168, 180, 154, 158, 49, 176, 157, 153, 155, 0, 186, 65, 180, 180, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 11, 0, 40, 0, 0, 15, 0, 0, 0, 25, 0, 0, 0, 0, 0, 39, 140, 0, 186, 180, 180, 0, 0, 0, 0, 0, 0, 10, 0, 0, 40, 40, 0, 19, 0, 23, 30, 26, 0, 0, 29, 0, 186, 180, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 65, 0, 17, 0, 0, 0, 0, 0, 0, 27, 186, 0, 9, 8, 13, 0, 28, 12, 0, 0, 0, 30, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 1, 5, 1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 20, 20, 20, 20, 20, 20, 21, 1, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 36, 43, 44, 45, 46, 47, 36, 36, 48, 49, 50, 51, 52, 53, 54, 1, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 1, 85, 1, 1, 86, 87, 88, 1, 1, 89, 90, 1, 1, 1, 1, 1, 1, 1, 1, 91, 1, 1, 1, 1, 92, 1, 1, 93, 1, 1, 1, 94, 1, 95, 1, 1, 1, 96, 97, 98, 99, 100, 1, 1, 1, 101, 1, 1, 1, 1, 102, 103, 104, 1, 105, 1, 106, 1, 1, 1, 1, 107, 108, 109, 1, 1, 1, 110, 111, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 112, 113, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 114, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[115] = { 0, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 5, 6, 7, 8, 8, 8, 8, 9, 1, 9, 1, 1, 10, 8, 8, 8, 8, 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 7, 2, 8, 8, 8, 8, 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 1, 1, 1, 7, 7, 1, 1, 1 } ; static yyconst flex_int16_t yy_base[840] = { 0, 0, 0, 1425, 4185, 1420, 4185, 1398, 0, 4185, 1410, 1407, 4185, 4185, 1402, 4185, 102, 4185, 110, 115, 119, 127, 126, 1389, 128, 4185, 119, 153, 162, 175, 182, 204, 201, 213, 227, 253, 261, 287, 302, 300, 4185, 315, 4185, 4185, 348, 369, 392, 413, 409, 439, 394, 253, 196, 436, 459, 480, 481, 507, 503, 453, 520, 538, 532, 538, 4185, 1326, 4185, 4185, 138, 51, 58, 81, 98, 1396, 4185, 0, 4185, 1388, 4185, 4185, 595, 604, 425, 1380, 0, 612, 621, 629, 639, 191, 647, 672, 680, 695, 704, 4185, 4185, 4185, 4185, 4185, 1318, 1319, 166, 189, 4185, 701, 709, 717, 724, 211, 732, 744, 766, 788, 790, 796, 808, 819, 824, 835, 853, 855, 877, 882, 732, 1268, 131, 1285, 872, 893, 908, 907, 912, 924, 1281, 929, 240, 958, 947, 1295, 61, 265, 131, 991, 224, 270, 1304, 178, 727, 276, 224, 1290, 1299, 4185, 297, 978, 994, 970, 995, 1014, 1037, 1056, 1027, 341, 356, 1071, 1067, 1083, 1070, 1097, 1102, 1106, 1143, 1152, 1135, 1144, 1167, 1175, 1183, 1212, 1220, 1238, 400, 1257, 1241, 1259, 1238, 1284, 1286, 1291, 1306, 1314, 1319, 1331, 1336, 1348, 1353, 4185, 4185, 4185, 546, 4185, 4185, 4185, 4185, 4185, 351, 4185, 4185, 410, 4185, 4185, 299, 337, 462, 526, 1345, 289, 0, 1415, 1423, 1432, 1440, 1448, 564, 651, 1457, 277, 1472, 1483, 1491, 664, 713, 1292, 1311, 1458, 1478, 1476, 1496, 1498, 1515, 1518, 1535, 1537, 4185, 4185, 4185, 1570, 1574, 1255, 1593, 1597, 1275, 1273, 152, 1342, 1269, 1268, 200, 1276, 1620, 801, 1273, 1262, 240, 1268, 1253, 1249, 1249, 1247, 1242, 1256, 1641, 1295, 811, 1240, 1237, 1224, 1214, 1209, 1214, 1223, 1207, 1645, 1609, 1632, 1644, 1661, 1664, 1694, 1649, 1686, 1699, 1713, 1718, 1730, 1747, 1756, 1767, 1789, 1800, 1811, 1809, 1828, 1859, 1867, 1875, 1726, 1877, 1892, 1904, 1925, 415, 1940, 1941, 1955, 1910, 1919, 1958, 1984, 1989, 2004, 1989, 1970, 2036, 2047, 2066, 2068, 2019, 4185, 4185, 4185, 1246, 1212, 4185, 1239, 1205, 4185, 1231, 1201, 4185, 4185, 4185, 4185, 4185, 4185, 4185, 1248, 2063, 898, 1005, 2095, 2125, 1061, 1310, 2133, 2143, 2148, 121, 2168, 2178, 2197, 1228, 1227, 2184, 2172, 2202, 2214, 2216, 2227, 2236, 2247, 483, 2259, 2252, 2283, 4185, 2294, 2305, 1187, 1182, 1180, 1160, 1228, 1170, 280, 1161, 1146, 1134, 288, 1144, 2327, 1131, 1126, 1140, 1116, 1122, 1106, 1119, 1092, 1109, 1090, 4185, 1095, 1084, 1087, 247, 1077, 1063, 1064, 1076, 2330, 2339, 2351, 2313, 2358, 2363, 2386, 2398, 2410, 2421, 2432, 2452, 2454, 2474, 2479, 2471, 2493, 1114, 2497, 2519, 2523, 1109, 2541, 1108, 2552, 2561, 2563, 2580, 2591, 2600, 2427, 2625, 2632, 2648, 2667, 2649, 2690, 2682, 2700, 2705, 1107, 2716, 2724, 2727, 1104, 2741, 2754, 2771, 2778, 1102, 2795, 2808, 1070, 1037, 1065, 1033, 1061, 1031, 2798, 2847, 1170, 2443, 2864, 1200, 1232, 2872, 2890, 2924, 2944, 2954, 2973, 4185, 4185, 2960, 2825, 2951, 2978, 2981, 2999, 2990, 2997, 1028, 2671, 1027, 2852, 272, 4185, 289, 444, 1030, 1028, 1089, 1013, 1015, 1010, 1015, 1013, 4185, 1006, 999, 990, 4185, 987, 973, 980, 1043, 454, 988, 972, 500, 980, 1033, 973, 1029, 961, 3020, 3036, 3038, 3039, 3053, 3050, 3067, 3078, 3076, 3087, 3096, 3113, 3133, 3144, 3156, 3160, 3168, 3183, 3186, 3202, 1008, 3204, 1005, 3231, 1000, 996, 990, 3236, 3242, 3254, 3260, 3275, 3284, 3306, 3299, 3317, 3332, 3341, 983, 3348, 984, 3359, 973, 970, 961, 960, 931, 898, 921, 892, 919, 889, 3416, 3424, 1667, 3433, 3441, 2206, 3447, 3449, 3455, 3467, 882, 2894, 1754, 870, 3084, 2112, 945, 405, 3513, 873, 872, 888, 877, 4185, 937, 879, 862, 870, 864, 856, 854, 833, 904, 903, 848, 4185, 900, 826, 812, 4185, 819, 830, 815, 819, 433, 0, 4185, 4185, 877, 803, 3479, 3491, 3515, 3524, 3544, 3549, 3551, 3218, 3324, 3528, 3564, 3576, 4185, 3581, 852, 3349, 4185, 4185, 850, 3593, 3610, 3615, 3452, 3641, 3643, 3657, 4185, 3660, 848, 4185, 842, 4185, 840, 2152, 3711, 2230, 2241, 3678, 3705, 854, 4185, 849, 4185, 823, 807, 802, 810, 785, 767, 760, 765, 740, 737, 744, 730, 723, 731, 724, 735, 721, 715, 3161, 4185, 767, 4185, 765, 694, 0, 762, 699, 697, 682, 694, 684, 453, 680, 0, 681, 3717, 3718, 3726, 3734, 3773, 3774, 3782, 3790, 4185, 4185, 3791, 3803, 4185, 4185, 4185, 2916, 3859, 569, 3842, 3825, 0, 736, 735, 696, 679, 673, 643, 626, 623, 639, 684, 4185, 614, 599, 607, 4185, 589, 653, 591, 3406, 2920, 577, 577, 570, 4185, 565, 574, 574, 550, 555, 4185, 3830, 3064, 3892, 3874, 3869, 565, 575, 531, 544, 528, 527, 4185, 522, 527, 0, 587, 512, 4185, 510, 4185, 512, 4185, 492, 482, 536, 3365, 3935, 3908, 3901, 502, 467, 462, 438, 438, 419, 431, 412, 398, 343, 336, 3471, 3965, 3917, 318, 4185, 326, 315, 300, 288, 287, 269, 4185, 764, 252, 4185, 3537, 4185, 203, 4185, 249, 92, 81, 45, 4185, 4185, 4024, 4034, 4043, 4052, 4062, 4071, 4075, 4084, 4089, 4096, 4104, 4114, 4124, 4134, 4144, 4154, 4164, 4174 } ; static yyconst flex_int16_t yy_def[840] = { 0, 821, 1, 821, 821, 821, 821, 821, 822, 821, 821, 823, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 824, 824, 824, 824, 824, 31, 31, 31, 31, 31, 31, 31, 31, 821, 821, 821, 821, 31, 31, 31, 31, 31, 31, 46, 46, 46, 46, 46, 31, 31, 47, 46, 47, 31, 31, 46, 46, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 822, 821, 823, 821, 821, 821, 821, 821, 825, 826, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 827, 821, 46, 46, 46, 46, 827, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 31, 821, 821, 821, 31, 31, 31, 47, 47, 47, 821, 47, 827, 47, 46, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 827, 46, 46, 47, 47, 47, 46, 46, 31, 827, 827, 31, 47, 46, 47, 47, 47, 47, 46, 46, 47, 47, 46, 46, 31, 31, 31, 31, 827, 31, 31, 31, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 825, 825, 826, 821, 821, 821, 821, 821, 821, 821, 821, 828, 821, 821, 821, 821, 821, 821, 821, 47, 47, 47, 47, 47, 47, 47, 47, 47, 821, 821, 821, 31, 31, 821, 31, 31, 821, 821, 821, 829, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 31, 46, 47, 47, 47, 47, 46, 31, 47, 31, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 31, 31, 31, 46, 46, 46, 31, 31, 827, 31, 31, 31, 46, 46, 46, 46, 46, 46, 31, 31, 46, 46, 46, 46, 31, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 825, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 830, 821, 821, 821, 821, 821, 31, 31, 31, 31, 46, 46, 46, 46, 827, 46, 46, 46, 821, 46, 46, 821, 821, 821, 821, 829, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 46, 46, 46, 31, 46, 46, 46, 31, 46, 46, 46, 46, 46, 46, 46, 47, 47, 821, 47, 47, 47, 821, 47, 821, 47, 47, 47, 47, 47, 47, 31, 31, 31, 31, 31, 31, 31, 46, 46, 46, 821, 46, 46, 31, 821, 31, 31, 31, 31, 821, 31, 31, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 31, 31, 31, 31, 31, 31, 31, 31, 821, 821, 821, 821, 831, 821, 821, 821, 821, 821, 832, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 833, 821, 31, 31, 31, 31, 46, 47, 47, 47, 47, 47, 47, 46, 46, 31, 31, 31, 31, 31, 31, 31, 821, 31, 821, 46, 821, 821, 821, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 821, 46, 821, 46, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 46, 46, 46, 46, 821, 821, 821, 821, 821, 821, 831, 831, 821, 821, 821, 821, 821, 821, 832, 821, 821, 821, 821, 821, 821, 821, 834, 835, 821, 821, 836, 821, 821, 821, 821, 821, 821, 821, 821, 837, 821, 821, 833, 821, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 821, 47, 821, 47, 821, 821, 821, 47, 47, 47, 31, 31, 31, 31, 821, 31, 821, 821, 821, 821, 821, 821, 821, 821, 821, 31, 31, 838, 821, 831, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 834, 821, 835, 821, 836, 836, 821, 821, 821, 821, 821, 821, 821, 837, 821, 31, 31, 31, 31, 31, 31, 31, 31, 821, 821, 31, 31, 821, 821, 821, 821, 821, 827, 31, 46, 838, 838, 831, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 839, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 46, 821, 821, 46, 46, 821, 821, 821, 821, 821, 821, 821, 821, 821, 839, 839, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 46, 46, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 46, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 0, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821 } ; static yyconst flex_int16_t yy_nxt[4300] = { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 21, 21, 4, 22, 23, 24, 25, 26, 27, 27, 28, 27, 29, 30, 31, 32, 27, 27, 33, 27, 34, 35, 27, 36, 37, 27, 27, 27, 38, 27, 39, 40, 41, 42, 43, 4, 44, 45, 46, 27, 47, 48, 49, 50, 51, 27, 52, 53, 54, 55, 56, 57, 27, 58, 59, 60, 61, 27, 27, 62, 27, 63, 64, 65, 66, 67, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 68, 69, 70, 71, 72, 80, 253, 80, 820, 80, 80, 80, 80, 80, 254, 80, 83, 81, 81, 81, 81, 84, 85, 477, 86, 477, 87, 87, 87, 87, 91, 82, 92, 204, 93, 93, 93, 93, 95, 96, 88, 98, 99, 819, 100, 102, 206, 205, 94, 101, 207, 818, 208, 209, 102, 200, 210, 211, 102, 82, 103, 103, 103, 103, 103, 89, 104, 102, 88, 103, 103, 103, 103, 103, 102, 104, 94, 212, 213, 104, 258, 102, 103, 103, 103, 103, 103, 90, 104, 103, 103, 103, 103, 103, 259, 104, 102, 103, 226, 226, 226, 226, 104, 102, 103, 103, 103, 107, 103, 106, 381, 109, 103, 103, 103, 103, 382, 104, 105, 103, 103, 110, 115, 245, 104, 270, 103, 108, 244, 198, 105, 199, 102, 200, 103, 201, 202, 203, 271, 520, 105, 596, 105, 111, 105, 105, 105, 386, 103, 112, 115, 105, 105, 104, 113, 105, 387, 255, 105, 105, 103, 103, 103, 105, 496, 817, 105, 116, 103, 279, 128, 105, 117, 264, 114, 118, 119, 105, 105, 120, 265, 596, 357, 105, 121, 122, 130, 123, 280, 102, 217, 124, 105, 358, 103, 347, 393, 105, 129, 105, 105, 816, 105, 105, 105, 521, 105, 136, 394, 103, 104, 105, 105, 131, 130, 178, 105, 105, 266, 105, 815, 276, 256, 105, 257, 277, 105, 125, 267, 126, 127, 105, 105, 102, 268, 278, 595, 105, 597, 137, 132, 105, 133, 498, 503, 105, 499, 105, 102, 814, 105, 617, 105, 504, 104, 154, 813, 105, 334, 135, 139, 140, 141, 142, 143, 105, 812, 144, 145, 104, 138, 146, 105, 811, 147, 148, 103, 149, 150, 151, 340, 152, 341, 153, 810, 808, 105, 105, 342, 343, 335, 134, 102, 105, 155, 156, 807, 821, 105, 103, 163, 164, 103, 103, 157, 158, 159, 102, 105, 105, 160, 161, 162, 104, 105, 115, 103, 337, 105, 105, 103, 336, 344, 345, 346, 520, 105, 214, 104, 214, 105, 105, 215, 215, 215, 215, 255, 105, 165, 105, 105, 166, 105, 115, 103, 103, 103, 806, 105, 338, 169, 167, 105, 105, 175, 168, 105, 105, 105, 105, 170, 805, 105, 105, 669, 176, 171, 103, 103, 215, 215, 215, 215, 172, 173, 102, 804, 803, 105, 105, 339, 174, 105, 105, 177, 105, 703, 182, 103, 105, 105, 802, 520, 598, 179, 180, 104, 105, 105, 105, 105, 801, 191, 615, 753, 105, 192, 616, 105, 105, 754, 103, 103, 105, 193, 800, 670, 617, 105, 183, 105, 105, 105, 670, 181, 105, 105, 103, 520, 184, 105, 105, 130, 215, 215, 215, 215, 105, 796, 185, 103, 103, 795, 187, 105, 103, 103, 103, 188, 105, 186, 105, 189, 329, 105, 105, 794, 793, 620, 105, 130, 102, 190, 621, 330, 194, 105, 105, 105, 792, 105, 225, 225, 225, 225, 105, 331, 105, 105, 772, 791, 105, 104, 105, 105, 332, 790, 196, 105, 789, 105, 195, 788, 670, 787, 105, 670, 105, 80, 786, 80, 105, 80, 80, 80, 80, 781, 80, 105, 80, 780, 81, 81, 81, 81, 80, 333, 80, 779, 219, 219, 219, 219, 778, 80, 82, 80, 777, 220, 220, 220, 220, 85, 776, 222, 775, 223, 223, 223, 223, 774, 224, 221, 224, 773, 772, 225, 225, 225, 225, 88, 770, 769, 82, 227, 227, 227, 227, 225, 225, 225, 225, 768, 767, 227, 227, 227, 227, 227, 227, 221, 232, 232, 232, 232, 80, 255, 80, 88, 228, 228, 228, 228, 80, 766, 80, 670, 229, 229, 229, 229, 765, 227, 227, 227, 227, 227, 227, 91, 764, 92, 94, 230, 230, 230, 230, 231, 670, 231, 103, 103, 232, 232, 232, 232, 763, 94, 103, 103, 272, 232, 232, 232, 232, 762, 103, 103, 728, 727, 94, 756, 273, 103, 103, 274, 274, 274, 274, 755, 103, 103, 103, 752, 751, 94, 750, 749, 105, 748, 105, 105, 235, 103, 103, 696, 105, 747, 693, 105, 691, 105, 236, 744, 105, 105, 237, 105, 353, 105, 354, 105, 105, 105, 105, 103, 103, 105, 243, 105, 743, 105, 105, 105, 105, 742, 356, 741, 105, 740, 275, 105, 105, 739, 105, 738, 105, 103, 103, 103, 103, 737, 736, 105, 105, 103, 103, 735, 105, 261, 261, 261, 261, 105, 356, 734, 105, 103, 103, 274, 274, 274, 274, 733, 238, 240, 105, 670, 103, 103, 105, 732, 731, 103, 103, 105, 730, 105, 105, 670, 239, 729, 728, 105, 103, 103, 105, 727, 105, 720, 105, 719, 105, 240, 105, 105, 105, 718, 105, 715, 105, 714, 103, 103, 103, 103, 105, 705, 105, 105, 626, 105, 105, 702, 105, 701, 241, 700, 699, 105, 103, 698, 105, 105, 105, 105, 103, 103, 105, 697, 105, 103, 103, 696, 694, 105, 693, 691, 689, 105, 105, 103, 105, 105, 688, 105, 350, 350, 350, 350, 687, 105, 105, 105, 686, 105, 103, 105, 105, 105, 685, 242, 684, 105, 105, 683, 105, 105, 135, 105, 602, 682, 105, 105, 681, 680, 679, 105, 821, 105, 668, 105, 105, 105, 105, 105, 105, 667, 105, 337, 105, 337, 334, 334, 105, 105, 103, 103, 329, 105, 105, 247, 105, 329, 105, 660, 105, 105, 105, 105, 659, 248, 105, 105, 105, 658, 105, 105, 105, 105, 250, 105, 657, 105, 260, 105, 105, 103, 103, 656, 105, 105, 654, 105, 105, 646, 105, 251, 105, 261, 261, 261, 261, 103, 103, 645, 105, 105, 105, 644, 642, 105, 105, 350, 350, 350, 350, 640, 105, 105, 105, 627, 626, 624, 105, 105, 623, 105, 105, 622, 619, 286, 105, 105, 618, 103, 614, 613, 105, 105, 612, 105, 283, 105, 105, 105, 103, 103, 611, 105, 262, 610, 105, 609, 284, 608, 105, 105, 285, 607, 263, 287, 105, 288, 105, 103, 103, 105, 105, 471, 471, 471, 471, 295, 606, 105, 105, 605, 105, 103, 604, 603, 602, 105, 105, 289, 600, 290, 599, 105, 591, 588, 103, 103, 577, 576, 575, 105, 105, 574, 573, 291, 292, 105, 572, 105, 293, 570, 105, 568, 294, 105, 564, 551, 550, 105, 105, 105, 301, 546, 105, 297, 105, 525, 105, 524, 523, 522, 105, 105, 105, 105, 105, 105, 296, 105, 105, 519, 518, 105, 105, 298, 105, 105, 105, 105, 517, 299, 300, 516, 105, 105, 103, 103, 105, 515, 105, 514, 105, 105, 105, 103, 103, 105, 105, 302, 105, 105, 105, 513, 512, 105, 511, 105, 510, 105, 103, 103, 580, 580, 580, 580, 105, 105, 103, 103, 509, 508, 507, 105, 105, 103, 306, 105, 505, 502, 305, 105, 105, 105, 501, 105, 105, 105, 105, 105, 105, 303, 475, 475, 475, 475, 105, 105, 105, 500, 105, 105, 304, 497, 103, 496, 105, 105, 495, 105, 494, 307, 103, 309, 105, 105, 493, 308, 105, 105, 310, 492, 105, 105, 475, 475, 475, 475, 483, 482, 312, 103, 103, 103, 217, 468, 105, 467, 105, 466, 105, 313, 105, 105, 105, 465, 464, 105, 310, 103, 105, 103, 463, 314, 410, 105, 311, 409, 408, 105, 407, 105, 315, 317, 406, 105, 405, 105, 105, 105, 404, 105, 319, 105, 403, 105, 105, 103, 103, 103, 103, 105, 105, 105, 103, 103, 105, 105, 402, 105, 401, 400, 105, 316, 105, 399, 105, 398, 397, 103, 103, 396, 472, 472, 472, 472, 395, 392, 318, 391, 388, 385, 105, 384, 105, 105, 356, 105, 105, 255, 105, 380, 105, 379, 376, 105, 363, 362, 105, 320, 105, 217, 105, 282, 105, 105, 105, 105, 281, 105, 105, 105, 269, 252, 356, 249, 322, 246, 244, 234, 105, 105, 105, 105, 105, 323, 321, 105, 105, 105, 105, 233, 324, 105, 105, 105, 217, 105, 105, 105, 105, 78, 105, 73, 105, 105, 105, 105, 325, 326, 105, 105, 105, 197, 105, 105, 105, 97, 79, 105, 78, 105, 76, 105, 105, 327, 74, 73, 105, 105, 821, 105, 328, 80, 821, 80, 105, 348, 348, 348, 348, 80, 821, 80, 821, 220, 220, 220, 220, 349, 821, 349, 821, 821, 350, 350, 350, 350, 80, 221, 80, 821, 351, 351, 351, 351, 85, 821, 222, 821, 352, 352, 352, 352, 821, 353, 88, 354, 821, 355, 355, 355, 355, 821, 88, 821, 821, 221, 821, 821, 80, 821, 80, 356, 359, 359, 359, 359, 364, 821, 821, 80, 821, 80, 88, 360, 360, 360, 360, 91, 105, 92, 88, 361, 361, 361, 361, 821, 821, 94, 105, 356, 365, 821, 366, 821, 105, 94, 105, 821, 105, 821, 821, 105, 105, 821, 821, 821, 105, 821, 105, 105, 821, 821, 105, 821, 105, 94, 105, 821, 105, 105, 105, 105, 105, 94, 821, 821, 105, 105, 105, 105, 369, 821, 105, 821, 105, 105, 367, 821, 105, 105, 105, 105, 105, 368, 821, 105, 821, 105, 105, 105, 821, 105, 821, 821, 105, 105, 821, 105, 369, 105, 372, 370, 105, 821, 103, 105, 105, 105, 821, 105, 105, 105, 821, 105, 105, 821, 821, 821, 105, 105, 105, 105, 821, 103, 821, 371, 105, 103, 105, 821, 821, 821, 373, 105, 821, 260, 105, 105, 105, 821, 103, 103, 105, 105, 821, 821, 821, 375, 821, 377, 261, 261, 261, 261, 821, 105, 272, 821, 821, 105, 821, 105, 821, 374, 821, 105, 105, 105, 273, 821, 105, 274, 274, 274, 274, 103, 821, 821, 105, 103, 821, 105, 378, 821, 821, 105, 105, 821, 389, 105, 105, 105, 105, 821, 821, 411, 412, 661, 661, 661, 661, 390, 413, 821, 105, 821, 821, 105, 105, 821, 821, 105, 821, 105, 105, 105, 105, 419, 105, 414, 105, 105, 105, 105, 105, 103, 103, 105, 105, 103, 821, 105, 821, 821, 105, 105, 821, 105, 105, 105, 105, 821, 105, 821, 105, 105, 105, 105, 105, 821, 821, 821, 105, 821, 821, 105, 105, 103, 103, 821, 821, 105, 420, 105, 415, 821, 105, 421, 821, 105, 105, 821, 105, 105, 821, 821, 416, 105, 105, 821, 417, 418, 821, 422, 590, 590, 590, 590, 105, 105, 105, 821, 105, 821, 105, 105, 105, 105, 105, 423, 105, 105, 105, 821, 105, 821, 105, 105, 440, 105, 821, 424, 105, 105, 105, 821, 105, 105, 821, 821, 821, 105, 821, 105, 821, 821, 105, 105, 821, 821, 105, 105, 105, 821, 425, 426, 821, 105, 105, 105, 105, 821, 821, 105, 821, 821, 821, 105, 821, 105, 427, 105, 821, 821, 821, 428, 821, 821, 105, 105, 105, 429, 821, 821, 430, 431, 432, 821, 821, 105, 105, 105, 105, 105, 821, 433, 105, 434, 821, 105, 105, 105, 821, 105, 105, 105, 435, 105, 105, 103, 821, 105, 105, 105, 105, 105, 436, 103, 105, 105, 105, 821, 105, 821, 437, 103, 821, 105, 103, 103, 821, 105, 105, 821, 821, 105, 821, 821, 821, 105, 821, 105, 821, 103, 103, 821, 821, 438, 821, 105, 821, 821, 105, 821, 103, 105, 821, 105, 821, 821, 105, 103, 103, 105, 105, 821, 105, 821, 105, 105, 103, 103, 105, 821, 821, 103, 821, 441, 821, 105, 105, 105, 439, 105, 105, 105, 105, 821, 105, 821, 103, 103, 443, 442, 105, 447, 821, 105, 105, 105, 105, 105, 446, 821, 821, 103, 821, 105, 105, 103, 103, 105, 105, 105, 821, 105, 105, 105, 105, 445, 103, 105, 105, 105, 821, 105, 821, 821, 105, 105, 105, 821, 444, 105, 105, 103, 103, 105, 105, 103, 103, 103, 821, 105, 821, 821, 821, 105, 105, 105, 105, 821, 105, 105, 105, 103, 103, 821, 105, 821, 105, 821, 821, 105, 105, 821, 821, 821, 105, 103, 454, 105, 821, 105, 821, 451, 105, 452, 105, 105, 449, 105, 105, 105, 453, 821, 105, 103, 103, 448, 105, 105, 821, 105, 821, 105, 105, 821, 103, 103, 821, 105, 105, 821, 821, 450, 105, 462, 821, 80, 105, 80, 105, 469, 469, 469, 469, 103, 103, 103, 103, 821, 455, 821, 821, 105, 456, 821, 457, 821, 821, 458, 105, 821, 821, 821, 105, 821, 105, 105, 821, 80, 105, 80, 821, 351, 351, 351, 351, 105, 821, 821, 460, 105, 459, 105, 821, 105, 105, 88, 105, 461, 593, 593, 593, 593, 821, 821, 105, 821, 105, 85, 105, 222, 105, 470, 470, 470, 470, 353, 821, 354, 821, 473, 473, 473, 473, 88, 474, 88, 474, 821, 821, 475, 475, 475, 475, 356, 476, 476, 476, 476, 721, 721, 721, 721, 821, 358, 476, 476, 476, 476, 476, 476, 80, 821, 80, 88, 479, 479, 479, 479, 103, 821, 80, 356, 80, 821, 480, 480, 480, 480, 485, 821, 103, 821, 476, 476, 476, 476, 476, 476, 94, 80, 105, 481, 821, 361, 361, 361, 361, 663, 103, 663, 105, 484, 664, 664, 664, 664, 105, 94, 105, 821, 103, 105, 105, 103, 103, 821, 94, 821, 105, 821, 105, 821, 486, 105, 103, 103, 664, 664, 664, 664, 105, 105, 821, 103, 103, 94, 105, 664, 664, 664, 664, 105, 105, 105, 103, 103, 821, 821, 487, 103, 103, 105, 821, 105, 105, 821, 103, 103, 821, 821, 821, 105, 105, 821, 486, 105, 821, 821, 105, 489, 821, 105, 821, 105, 105, 105, 821, 488, 821, 105, 103, 103, 105, 821, 105, 105, 821, 105, 105, 821, 490, 103, 103, 821, 105, 105, 821, 105, 821, 105, 105, 821, 103, 103, 105, 821, 821, 105, 260, 103, 821, 105, 821, 821, 491, 821, 821, 821, 105, 105, 821, 105, 821, 261, 261, 261, 261, 103, 103, 105, 821, 105, 105, 821, 821, 105, 103, 103, 821, 821, 105, 105, 105, 105, 821, 821, 105, 529, 103, 103, 821, 821, 105, 491, 821, 103, 103, 105, 821, 821, 103, 103, 821, 821, 821, 105, 821, 821, 105, 506, 821, 526, 105, 821, 105, 821, 821, 105, 105, 821, 527, 821, 105, 103, 103, 821, 105, 105, 821, 105, 821, 105, 528, 105, 103, 821, 105, 821, 105, 105, 821, 105, 821, 105, 105, 821, 530, 103, 103, 821, 531, 105, 821, 821, 821, 532, 533, 821, 103, 103, 821, 105, 821, 103, 534, 821, 105, 821, 535, 103, 103, 821, 536, 105, 105, 821, 821, 105, 105, 472, 472, 472, 472, 821, 821, 105, 537, 821, 105, 103, 103, 103, 103, 356, 821, 105, 105, 105, 105, 105, 821, 485, 538, 539, 821, 821, 105, 105, 540, 105, 105, 103, 103, 105, 821, 821, 103, 103, 821, 541, 105, 356, 821, 821, 105, 821, 105, 105, 821, 105, 105, 821, 105, 542, 821, 543, 821, 105, 821, 821, 105, 821, 105, 821, 105, 821, 105, 105, 821, 105, 821, 821, 105, 545, 105, 544, 821, 105, 821, 105, 105, 105, 105, 105, 821, 821, 105, 105, 105, 105, 821, 105, 821, 547, 821, 105, 821, 821, 821, 105, 821, 821, 105, 105, 821, 105, 105, 105, 821, 105, 105, 548, 821, 821, 105, 105, 821, 821, 821, 105, 821, 105, 821, 821, 821, 105, 821, 105, 105, 105, 549, 821, 105, 105, 821, 821, 105, 105, 105, 821, 105, 821, 821, 105, 552, 821, 821, 105, 105, 105, 105, 105, 821, 821, 105, 821, 821, 105, 105, 105, 821, 105, 105, 105, 821, 105, 105, 821, 553, 105, 105, 105, 105, 105, 821, 821, 105, 105, 105, 821, 105, 103, 105, 821, 821, 554, 105, 105, 103, 105, 105, 105, 821, 105, 821, 821, 105, 105, 105, 821, 105, 105, 105, 821, 103, 103, 821, 821, 105, 105, 105, 555, 589, 105, 105, 105, 821, 105, 821, 105, 105, 821, 556, 103, 105, 821, 105, 590, 590, 590, 590, 105, 821, 105, 821, 821, 105, 105, 557, 103, 103, 821, 105, 105, 105, 821, 103, 105, 105, 559, 821, 105, 821, 821, 821, 105, 105, 103, 103, 821, 560, 105, 103, 103, 558, 821, 105, 105, 105, 821, 561, 821, 821, 103, 103, 821, 821, 105, 105, 821, 105, 103, 103, 103, 105, 821, 105, 821, 821, 105, 561, 821, 821, 105, 105, 105, 821, 103, 105, 821, 105, 821, 563, 105, 821, 821, 821, 105, 562, 105, 103, 105, 105, 105, 105, 105, 566, 105, 821, 105, 105, 567, 105, 565, 105, 821, 105, 103, 105, 105, 821, 821, 105, 821, 103, 105, 105, 105, 821, 821, 105, 821, 105, 821, 105, 821, 105, 821, 105, 821, 80, 103, 80, 105, 578, 578, 578, 578, 821, 105, 105, 105, 821, 569, 103, 105, 105, 821, 821, 821, 105, 821, 105, 105, 105, 821, 821, 105, 821, 821, 821, 103, 821, 105, 821, 821, 821, 571, 821, 105, 105, 105, 821, 592, 105, 821, 105, 105, 821, 85, 821, 222, 105, 579, 579, 579, 579, 105, 593, 593, 593, 593, 821, 105, 105, 821, 353, 88, 354, 105, 581, 581, 581, 581, 105, 821, 821, 105, 476, 476, 476, 476, 821, 821, 356, 589, 821, 358, 476, 476, 476, 476, 476, 476, 105, 88, 478, 478, 478, 478, 590, 590, 590, 590, 821, 821, 478, 478, 478, 478, 478, 478, 356, 821, 821, 821, 476, 476, 476, 476, 476, 476, 758, 758, 758, 758, 746, 746, 746, 746, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 91, 821, 481, 821, 80, 80, 80, 80, 821, 821, 80, 103, 80, 821, 582, 582, 582, 582, 94, 821, 103, 105, 478, 478, 478, 478, 478, 478, 94, 80, 105, 80, 821, 582, 582, 582, 582, 821, 103, 821, 821, 103, 821, 105, 584, 821, 94, 94, 105, 105, 103, 105, 105, 821, 105, 821, 583, 103, 105, 103, 105, 821, 821, 105, 821, 821, 821, 105, 821, 105, 105, 821, 821, 105, 105, 94, 105, 821, 821, 585, 103, 105, 105, 105, 105, 586, 821, 821, 105, 105, 105, 105, 821, 105, 821, 105, 103, 105, 103, 103, 105, 105, 105, 821, 105, 587, 105, 821, 105, 105, 821, 821, 105, 105, 103, 103, 821, 821, 105, 821, 105, 821, 105, 105, 782, 782, 782, 782, 105, 592, 105, 105, 821, 821, 105, 821, 105, 105, 821, 105, 105, 105, 105, 105, 593, 593, 593, 593, 821, 821, 630, 821, 105, 821, 821, 105, 105, 105, 821, 105, 821, 105, 105, 105, 105, 105, 105, 105, 105, 628, 629, 105, 526, 105, 103, 103, 631, 105, 105, 821, 105, 105, 105, 527, 105, 821, 105, 105, 105, 105, 105, 105, 105, 105, 103, 103, 105, 105, 632, 105, 105, 105, 105, 821, 103, 821, 745, 633, 105, 105, 105, 821, 105, 821, 105, 105, 103, 105, 821, 821, 103, 746, 746, 746, 746, 634, 105, 821, 103, 635, 105, 821, 105, 821, 821, 636, 105, 821, 105, 637, 821, 821, 638, 103, 821, 105, 103, 105, 105, 105, 821, 821, 105, 105, 105, 821, 105, 821, 105, 105, 105, 543, 103, 105, 103, 544, 105, 105, 821, 821, 821, 105, 105, 821, 105, 105, 821, 821, 105, 105, 821, 105, 821, 105, 105, 821, 105, 821, 821, 105, 821, 105, 103, 103, 105, 821, 105, 103, 103, 821, 105, 821, 641, 103, 103, 105, 105, 105, 105, 105, 821, 821, 821, 639, 821, 103, 103, 821, 708, 821, 821, 103, 103, 821, 105, 105, 821, 105, 821, 821, 105, 105, 105, 643, 821, 105, 103, 103, 105, 105, 821, 105, 821, 105, 105, 103, 103, 105, 647, 821, 821, 821, 105, 105, 105, 821, 105, 821, 648, 105, 103, 103, 105, 821, 821, 821, 105, 103, 103, 821, 105, 821, 649, 821, 105, 821, 105, 105, 103, 103, 821, 821, 821, 105, 821, 650, 105, 105, 821, 821, 652, 105, 821, 103, 103, 821, 651, 821, 105, 821, 105, 105, 103, 103, 821, 105, 821, 821, 105, 103, 103, 652, 821, 821, 105, 105, 105, 821, 105, 105, 103, 103, 105, 821, 709, 797, 797, 797, 797, 105, 105, 105, 821, 105, 105, 821, 821, 105, 105, 105, 105, 821, 653, 105, 105, 105, 821, 105, 105, 105, 105, 745, 821, 105, 821, 105, 821, 105, 105, 821, 105, 105, 105, 105, 105, 655, 746, 746, 746, 746, 105, 105, 85, 821, 222, 105, 80, 80, 80, 80, 80, 821, 222, 821, 579, 579, 579, 579, 821, 353, 88, 354, 821, 662, 662, 662, 662, 80, 88, 80, 821, 582, 582, 582, 582, 821, 821, 356, 103, 103, 103, 103, 103, 821, 821, 94, 103, 103, 88, 821, 821, 821, 105, 821, 821, 821, 88, 821, 103, 103, 665, 809, 809, 809, 809, 356, 821, 821, 821, 666, 103, 103, 821, 94, 105, 821, 105, 821, 105, 105, 717, 105, 103, 103, 105, 105, 821, 105, 596, 105, 821, 105, 821, 105, 821, 105, 105, 105, 821, 105, 821, 105, 821, 670, 670, 105, 103, 103, 105, 666, 821, 105, 260, 105, 821, 103, 103, 821, 671, 821, 105, 105, 821, 105, 821, 105, 672, 261, 261, 261, 261, 673, 821, 105, 674, 103, 103, 105, 821, 821, 103, 103, 103, 103, 105, 821, 675, 105, 105, 821, 821, 821, 821, 105, 676, 821, 105, 105, 105, 821, 677, 105, 821, 821, 105, 678, 105, 821, 821, 710, 105, 105, 105, 105, 821, 821, 105, 821, 105, 105, 105, 105, 821, 105, 105, 821, 105, 821, 821, 821, 105, 105, 821, 105, 105, 105, 105, 706, 707, 821, 105, 105, 821, 821, 821, 711, 105, 105, 105, 821, 712, 105, 105, 105, 821, 105, 821, 105, 821, 105, 105, 821, 713, 105, 105, 105, 821, 105, 821, 105, 105, 103, 105, 103, 665, 105, 105, 105, 821, 821, 105, 105, 821, 105, 105, 105, 105, 103, 821, 821, 103, 105, 821, 105, 105, 716, 821, 105, 105, 105, 105, 105, 821, 105, 821, 105, 105, 821, 723, 105, 821, 105, 821, 821, 105, 821, 105, 821, 105, 105, 821, 821, 105, 821, 821, 105, 821, 821, 105, 821, 105, 821, 821, 105, 105, 103, 105, 353, 821, 354, 724, 722, 722, 722, 722, 105, 105, 103, 103, 821, 105, 105, 821, 105, 821, 356, 103, 105, 105, 821, 821, 821, 821, 821, 103, 821, 105, 105, 821, 821, 821, 725, 821, 105, 105, 821, 821, 821, 105, 105, 105, 821, 821, 356, 821, 105, 105, 821, 105, 821, 105, 105, 526, 527, 105, 821, 105, 821, 105, 105, 821, 528, 105, 103, 103, 821, 821, 105, 821, 542, 105, 105, 103, 105, 105, 821, 821, 821, 821, 105, 103, 103, 105, 821, 821, 821, 821, 105, 821, 821, 105, 105, 821, 103, 821, 105, 105, 821, 821, 821, 821, 105, 105, 105, 105, 821, 105, 105, 543, 544, 105, 821, 105, 105, 821, 105, 103, 103, 105, 105, 821, 103, 103, 105, 105, 105, 105, 105, 821, 821, 821, 105, 103, 821, 821, 105, 105, 757, 821, 821, 821, 821, 105, 105, 105, 353, 760, 354, 821, 759, 759, 759, 759, 821, 105, 821, 105, 761, 821, 105, 103, 103, 105, 356, 105, 103, 103, 105, 821, 821, 105, 105, 105, 821, 821, 105, 105, 821, 353, 821, 354, 821, 783, 783, 783, 783, 821, 821, 821, 821, 784, 356, 103, 103, 821, 105, 356, 821, 105, 103, 103, 105, 821, 105, 821, 821, 105, 821, 103, 103, 821, 105, 821, 821, 785, 105, 105, 821, 821, 821, 105, 353, 799, 354, 356, 798, 798, 798, 798, 821, 105, 821, 821, 105, 821, 821, 821, 105, 821, 356, 105, 821, 821, 799, 821, 821, 105, 105, 821, 105, 105, 821, 821, 354, 105, 798, 798, 798, 798, 105, 821, 821, 821, 105, 821, 821, 821, 356, 821, 356, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 356, 75, 75, 821, 75, 75, 75, 75, 75, 75, 75, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 105, 821, 821, 821, 821, 821, 105, 105, 216, 216, 821, 216, 216, 216, 216, 216, 216, 216, 218, 218, 821, 218, 218, 218, 218, 218, 218, 218, 103, 821, 821, 821, 821, 821, 103, 103, 227, 821, 227, 821, 227, 383, 821, 821, 383, 383, 383, 383, 478, 478, 821, 821, 478, 594, 821, 821, 594, 594, 594, 594, 601, 601, 821, 601, 601, 601, 601, 601, 601, 601, 625, 625, 821, 625, 625, 625, 625, 625, 625, 625, 690, 690, 821, 690, 690, 690, 690, 690, 690, 690, 692, 692, 821, 692, 692, 692, 692, 692, 692, 692, 695, 695, 821, 695, 695, 695, 695, 695, 695, 695, 704, 704, 821, 704, 704, 704, 704, 704, 704, 704, 726, 726, 821, 726, 726, 726, 726, 726, 726, 726, 771, 771, 821, 771, 771, 771, 771, 771, 771, 771, 3, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821 } ; static yyconst flex_int16_t yy_chk[4300] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 140, 16, 819, 16, 16, 16, 16, 18, 140, 18, 19, 18, 18, 18, 18, 19, 20, 358, 20, 358, 20, 20, 20, 20, 21, 18, 21, 69, 21, 21, 21, 21, 22, 22, 20, 24, 24, 818, 26, 27, 70, 69, 21, 26, 70, 817, 70, 70, 28, 70, 71, 71, 102, 18, 27, 27, 27, 27, 27, 20, 27, 29, 20, 28, 28, 28, 28, 28, 30, 28, 21, 72, 72, 102, 142, 103, 29, 29, 29, 29, 29, 20, 29, 30, 30, 30, 30, 30, 142, 30, 31, 27, 89, 89, 89, 89, 103, 109, 52, 52, 28, 29, 32, 28, 254, 31, 31, 31, 31, 31, 254, 31, 32, 29, 33, 31, 32, 126, 109, 147, 30, 29, 126, 68, 33, 68, 136, 68, 34, 68, 68, 68, 147, 406, 32, 816, 52, 31, 34, 52, 32, 258, 31, 31, 32, 32, 33, 136, 31, 52, 258, 141, 33, 52, 35, 51, 51, 33, 496, 814, 34, 33, 36, 150, 35, 32, 34, 144, 31, 34, 34, 34, 36, 34, 144, 498, 227, 33, 34, 34, 36, 34, 150, 154, 217, 34, 35, 227, 37, 217, 264, 34, 35, 51, 36, 810, 51, 35, 37, 406, 36, 39, 264, 38, 154, 36, 51, 36, 36, 51, 51, 39, 145, 38, 807, 149, 141, 35, 141, 149, 37, 34, 145, 34, 34, 36, 37, 163, 145, 149, 496, 37, 498, 39, 37, 38, 37, 385, 389, 39, 385, 38, 164, 806, 39, 805, 38, 389, 163, 44, 804, 37, 206, 38, 41, 41, 41, 41, 41, 44, 803, 41, 41, 164, 39, 41, 38, 802, 41, 41, 45, 41, 41, 41, 212, 41, 212, 41, 800, 796, 45, 44, 212, 212, 206, 37, 182, 44, 44, 44, 795, 595, 44, 46, 46, 46, 50, 50, 44, 44, 44, 312, 45, 46, 44, 44, 44, 182, 45, 50, 48, 209, 44, 45, 47, 206, 213, 213, 213, 622, 48, 82, 312, 82, 47, 46, 82, 82, 82, 82, 499, 46, 46, 45, 50, 46, 46, 50, 53, 53, 49, 794, 48, 209, 47, 46, 47, 50, 48, 46, 49, 50, 47, 48, 47, 793, 46, 47, 595, 48, 47, 54, 54, 214, 214, 214, 214, 47, 47, 372, 792, 791, 49, 48, 209, 47, 53, 47, 49, 53, 622, 55, 56, 49, 59, 790, 520, 499, 53, 53, 372, 55, 56, 53, 59, 789, 59, 517, 702, 54, 59, 517, 54, 49, 702, 58, 58, 59, 59, 788, 787, 517, 54, 55, 56, 59, 54, 786, 54, 55, 56, 60, 781, 55, 55, 56, 57, 215, 215, 215, 215, 60, 780, 55, 62, 62, 779, 56, 57, 61, 63, 63, 58, 58, 55, 56, 58, 200, 57, 61, 777, 775, 520, 60, 57, 723, 58, 520, 200, 60, 58, 57, 57, 773, 60, 224, 224, 224, 224, 57, 200, 61, 62, 772, 770, 62, 723, 61, 63, 200, 769, 63, 61, 767, 60, 62, 766, 765, 764, 62, 763, 63, 80, 762, 80, 63, 80, 80, 80, 80, 755, 81, 61, 81, 754, 81, 81, 81, 81, 85, 200, 85, 753, 85, 85, 85, 85, 752, 86, 81, 86, 751, 86, 86, 86, 86, 87, 749, 87, 748, 87, 87, 87, 87, 747, 88, 86, 88, 744, 743, 88, 88, 88, 88, 87, 742, 740, 81, 90, 90, 90, 90, 225, 225, 225, 225, 739, 738, 90, 90, 90, 90, 90, 90, 86, 231, 231, 231, 231, 91, 736, 91, 87, 91, 91, 91, 91, 92, 735, 92, 734, 92, 92, 92, 92, 733, 90, 90, 90, 90, 90, 90, 93, 732, 93, 92, 93, 93, 93, 93, 94, 731, 94, 105, 105, 94, 94, 94, 94, 730, 93, 106, 106, 148, 232, 232, 232, 232, 729, 107, 107, 728, 727, 92, 705, 148, 108, 108, 148, 148, 148, 148, 703, 124, 110, 110, 701, 700, 93, 699, 698, 105, 697, 124, 105, 107, 111, 111, 696, 106, 694, 693, 106, 691, 105, 110, 688, 107, 105, 111, 107, 809, 106, 809, 108, 124, 106, 108, 112, 112, 107, 124, 110, 687, 107, 110, 124, 108, 686, 809, 685, 108, 684, 148, 111, 110, 683, 111, 682, 110, 113, 113, 114, 114, 681, 680, 124, 111, 115, 115, 679, 111, 261, 261, 261, 261, 112, 809, 678, 112, 116, 116, 274, 274, 274, 274, 677, 112, 115, 112, 676, 117, 117, 112, 675, 674, 118, 118, 113, 673, 114, 113, 672, 114, 671, 669, 115, 119, 119, 115, 667, 113, 660, 114, 658, 113, 115, 114, 116, 115, 656, 116, 646, 115, 642, 120, 120, 121, 121, 117, 627, 116, 117, 626, 118, 116, 621, 118, 620, 117, 619, 618, 117, 128, 616, 119, 117, 118, 119, 122, 122, 118, 615, 128, 123, 123, 614, 612, 119, 611, 610, 609, 119, 120, 129, 121, 120, 608, 121, 349, 349, 349, 349, 607, 129, 128, 120, 606, 121, 130, 120, 128, 121, 605, 121, 604, 128, 122, 603, 130, 122, 128, 123, 602, 600, 123, 129, 599, 598, 597, 122, 594, 129, 591, 122, 123, 128, 129, 131, 123, 588, 130, 577, 132, 576, 575, 574, 130, 131, 138, 138, 573, 130, 132, 131, 133, 572, 129, 571, 132, 135, 131, 131, 570, 132, 133, 132, 132, 569, 131, 135, 133, 130, 137, 132, 568, 135, 143, 133, 133, 155, 155, 566, 135, 135, 564, 133, 138, 552, 137, 138, 135, 143, 143, 143, 143, 156, 156, 551, 137, 138, 157, 550, 548, 138, 137, 350, 350, 350, 350, 546, 157, 137, 137, 525, 524, 523, 157, 155, 522, 137, 155, 521, 519, 157, 157, 158, 518, 162, 516, 515, 155, 157, 514, 156, 155, 158, 156, 162, 160, 160, 513, 158, 143, 511, 159, 510, 156, 509, 158, 158, 156, 507, 143, 158, 159, 159, 158, 161, 161, 162, 159, 353, 353, 353, 353, 162, 506, 159, 159, 505, 162, 165, 504, 503, 502, 159, 160, 160, 501, 160, 500, 165, 494, 492, 167, 167, 468, 467, 466, 160, 162, 465, 464, 160, 160, 161, 463, 166, 161, 460, 168, 455, 161, 165, 451, 434, 432, 166, 161, 165, 168, 428, 161, 166, 165, 410, 168, 409, 408, 407, 166, 166, 167, 168, 168, 167, 165, 169, 166, 405, 404, 168, 170, 167, 165, 167, 171, 169, 403, 167, 167, 401, 170, 169, 172, 172, 171, 400, 170, 399, 169, 169, 171, 173, 173, 170, 170, 171, 169, 171, 171, 398, 397, 170, 396, 174, 395, 171, 176, 176, 471, 471, 471, 471, 175, 174, 177, 177, 394, 393, 392, 174, 172, 178, 175, 172, 390, 388, 174, 174, 175, 173, 387, 178, 173, 172, 174, 175, 175, 172, 474, 474, 474, 474, 173, 175, 176, 386, 173, 176, 173, 384, 179, 383, 177, 178, 382, 177, 381, 176, 180, 178, 179, 176, 380, 177, 178, 177, 179, 379, 180, 177, 475, 475, 475, 475, 363, 362, 181, 186, 186, 184, 347, 339, 179, 338, 178, 336, 181, 181, 179, 184, 180, 335, 333, 179, 179, 183, 180, 185, 332, 181, 282, 180, 180, 281, 280, 183, 279, 185, 181, 183, 278, 184, 277, 179, 181, 186, 276, 184, 186, 181, 275, 180, 184, 187, 187, 188, 188, 183, 186, 185, 189, 189, 186, 183, 273, 185, 271, 270, 183, 181, 185, 269, 184, 268, 267, 190, 190, 266, 354, 354, 354, 354, 265, 263, 185, 262, 259, 257, 183, 256, 185, 187, 354, 188, 187, 255, 188, 253, 189, 252, 249, 189, 234, 233, 187, 188, 188, 216, 187, 152, 188, 189, 191, 190, 151, 189, 190, 192, 146, 139, 354, 134, 191, 127, 125, 101, 190, 192, 191, 193, 190, 192, 190, 192, 194, 191, 191, 100, 192, 193, 192, 192, 83, 191, 194, 193, 195, 77, 192, 73, 194, 196, 193, 193, 193, 194, 195, 194, 194, 65, 193, 196, 195, 23, 14, 194, 11, 196, 10, 195, 195, 195, 7, 5, 196, 196, 3, 195, 196, 219, 0, 219, 196, 219, 219, 219, 219, 220, 0, 220, 0, 220, 220, 220, 220, 221, 0, 221, 0, 0, 221, 221, 221, 221, 222, 220, 222, 0, 222, 222, 222, 222, 223, 0, 223, 0, 223, 223, 223, 223, 0, 226, 222, 226, 0, 226, 226, 226, 226, 0, 223, 0, 0, 220, 0, 0, 228, 0, 228, 226, 228, 228, 228, 228, 235, 0, 0, 229, 0, 229, 222, 229, 229, 229, 229, 230, 235, 230, 223, 230, 230, 230, 230, 0, 0, 229, 235, 226, 236, 0, 237, 0, 235, 230, 237, 0, 236, 0, 0, 235, 235, 0, 0, 0, 237, 0, 236, 235, 0, 0, 237, 0, 236, 229, 238, 0, 239, 237, 237, 236, 236, 230, 0, 0, 238, 237, 239, 236, 240, 0, 238, 0, 239, 240, 238, 0, 241, 238, 238, 239, 239, 239, 0, 240, 0, 238, 241, 239, 0, 240, 0, 0, 241, 242, 0, 243, 240, 240, 247, 241, 241, 0, 248, 242, 240, 243, 0, 241, 247, 242, 0, 243, 248, 0, 0, 0, 242, 242, 243, 243, 0, 250, 0, 243, 242, 251, 243, 0, 0, 0, 247, 250, 0, 260, 248, 251, 247, 0, 284, 284, 248, 247, 0, 0, 0, 248, 0, 250, 260, 260, 260, 260, 0, 250, 272, 0, 0, 251, 0, 250, 0, 247, 0, 251, 250, 248, 272, 0, 251, 272, 272, 272, 272, 283, 0, 0, 284, 290, 0, 284, 251, 0, 0, 283, 250, 0, 260, 290, 251, 284, 285, 0, 0, 284, 284, 580, 580, 580, 580, 260, 285, 0, 286, 0, 0, 283, 285, 0, 0, 290, 0, 283, 286, 285, 285, 290, 283, 286, 286, 287, 290, 285, 288, 289, 289, 286, 286, 292, 0, 287, 0, 0, 288, 286, 0, 287, 283, 292, 288, 0, 290, 0, 287, 287, 291, 288, 288, 0, 0, 0, 287, 0, 0, 288, 291, 307, 307, 0, 0, 292, 291, 289, 289, 0, 289, 292, 0, 291, 291, 0, 292, 293, 0, 0, 289, 291, 294, 0, 289, 289, 0, 293, 590, 590, 590, 590, 294, 293, 295, 0, 292, 0, 294, 307, 293, 293, 307, 294, 295, 294, 294, 0, 293, 0, 295, 296, 307, 294, 0, 295, 307, 295, 295, 0, 297, 296, 0, 0, 0, 295, 0, 296, 0, 0, 297, 298, 0, 0, 296, 296, 297, 0, 296, 297, 0, 298, 296, 297, 297, 0, 0, 298, 0, 0, 0, 297, 0, 299, 298, 298, 0, 0, 0, 299, 0, 0, 298, 299, 300, 299, 0, 0, 299, 299, 300, 0, 0, 302, 300, 301, 299, 299, 0, 300, 300, 301, 0, 302, 299, 301, 0, 300, 300, 302, 301, 301, 303, 304, 0, 300, 302, 302, 301, 301, 302, 305, 303, 304, 302, 0, 301, 0, 303, 306, 0, 305, 308, 308, 0, 303, 303, 0, 0, 306, 0, 0, 0, 303, 0, 304, 0, 309, 309, 0, 0, 304, 0, 305, 0, 0, 304, 0, 310, 305, 0, 306, 0, 0, 305, 316, 316, 306, 310, 0, 308, 0, 306, 308, 317, 317, 304, 0, 0, 311, 0, 308, 0, 308, 305, 309, 306, 308, 309, 311, 310, 0, 306, 0, 313, 314, 310, 309, 309, 317, 0, 310, 309, 316, 313, 314, 316, 0, 0, 315, 0, 311, 317, 318, 318, 317, 316, 311, 0, 315, 316, 310, 311, 315, 323, 317, 313, 314, 0, 317, 0, 0, 313, 314, 323, 0, 311, 313, 314, 319, 319, 315, 311, 322, 320, 320, 0, 315, 0, 0, 0, 318, 315, 322, 318, 0, 323, 313, 314, 321, 321, 0, 323, 0, 318, 0, 0, 323, 318, 0, 0, 0, 315, 328, 323, 322, 0, 319, 0, 322, 319, 322, 320, 328, 320, 320, 322, 323, 322, 0, 319, 324, 324, 319, 319, 320, 0, 321, 0, 320, 321, 0, 325, 325, 0, 328, 322, 0, 0, 321, 321, 328, 0, 348, 321, 348, 328, 348, 348, 348, 348, 326, 326, 327, 327, 0, 324, 0, 0, 324, 324, 0, 324, 0, 0, 324, 328, 0, 0, 0, 325, 0, 324, 325, 0, 351, 324, 351, 0, 351, 351, 351, 351, 325, 0, 0, 326, 325, 325, 326, 0, 327, 326, 351, 327, 326, 593, 593, 593, 593, 0, 0, 326, 0, 327, 352, 326, 352, 327, 352, 352, 352, 352, 355, 0, 355, 0, 355, 355, 355, 355, 351, 356, 352, 356, 0, 0, 356, 356, 356, 356, 355, 357, 357, 357, 357, 661, 661, 661, 661, 0, 357, 357, 357, 357, 357, 357, 357, 359, 0, 359, 352, 359, 359, 359, 359, 365, 0, 360, 355, 360, 0, 360, 360, 360, 360, 365, 0, 364, 0, 357, 357, 357, 357, 357, 357, 360, 361, 364, 361, 0, 361, 361, 361, 361, 583, 366, 583, 365, 364, 583, 583, 583, 583, 365, 361, 366, 0, 367, 365, 364, 368, 368, 0, 360, 0, 364, 0, 367, 0, 366, 364, 369, 369, 663, 663, 663, 663, 366, 365, 0, 370, 370, 361, 366, 664, 664, 664, 664, 366, 367, 364, 371, 371, 0, 0, 367, 374, 374, 368, 0, 367, 368, 0, 373, 373, 0, 0, 0, 366, 369, 0, 368, 369, 0, 0, 368, 373, 0, 370, 0, 367, 370, 369, 0, 370, 0, 369, 375, 375, 371, 0, 370, 371, 0, 374, 370, 0, 374, 377, 377, 0, 373, 371, 0, 373, 0, 371, 374, 0, 378, 378, 374, 0, 0, 373, 391, 414, 0, 373, 0, 0, 377, 0, 0, 0, 375, 414, 0, 375, 0, 391, 391, 391, 391, 411, 411, 377, 0, 375, 377, 0, 0, 375, 412, 412, 0, 0, 378, 414, 377, 378, 0, 0, 377, 414, 413, 413, 0, 0, 414, 378, 0, 415, 415, 378, 0, 0, 416, 416, 0, 0, 0, 411, 0, 0, 411, 391, 0, 411, 414, 0, 412, 0, 0, 412, 411, 0, 412, 0, 411, 417, 417, 0, 413, 412, 0, 413, 0, 412, 413, 415, 418, 0, 415, 0, 416, 413, 0, 416, 0, 413, 418, 0, 415, 419, 419, 0, 415, 416, 0, 0, 0, 416, 416, 0, 420, 420, 0, 417, 0, 441, 417, 0, 418, 0, 417, 421, 421, 0, 418, 441, 417, 0, 0, 418, 417, 472, 472, 472, 472, 0, 0, 419, 419, 0, 419, 422, 422, 423, 423, 472, 0, 441, 420, 418, 419, 420, 0, 441, 419, 419, 0, 0, 441, 421, 420, 420, 421, 424, 424, 420, 0, 0, 425, 425, 0, 421, 421, 472, 0, 0, 421, 0, 441, 422, 0, 423, 422, 0, 423, 422, 0, 423, 0, 426, 0, 0, 422, 0, 423, 0, 422, 0, 423, 426, 0, 424, 0, 0, 424, 426, 425, 424, 0, 425, 0, 427, 426, 426, 424, 429, 0, 0, 424, 425, 426, 427, 0, 425, 0, 429, 0, 427, 0, 0, 0, 429, 0, 0, 427, 427, 0, 430, 429, 429, 0, 431, 427, 430, 0, 0, 429, 430, 0, 0, 0, 431, 0, 430, 0, 0, 0, 431, 0, 433, 430, 430, 431, 0, 431, 431, 0, 0, 430, 433, 435, 0, 431, 0, 0, 433, 435, 0, 0, 436, 435, 437, 433, 433, 0, 0, 435, 0, 0, 436, 433, 437, 0, 435, 435, 436, 0, 437, 438, 0, 437, 435, 436, 436, 437, 437, 0, 0, 438, 439, 436, 0, 437, 442, 438, 0, 0, 438, 440, 439, 443, 438, 438, 442, 0, 439, 0, 0, 440, 438, 443, 0, 439, 439, 440, 0, 444, 446, 0, 0, 439, 440, 440, 440, 493, 442, 444, 446, 0, 440, 0, 442, 443, 0, 442, 445, 442, 0, 443, 493, 493, 493, 493, 443, 0, 445, 0, 0, 444, 446, 443, 448, 448, 0, 444, 446, 442, 0, 447, 444, 446, 445, 0, 443, 0, 0, 0, 445, 447, 449, 449, 0, 446, 445, 450, 450, 444, 0, 445, 444, 446, 0, 447, 0, 0, 452, 452, 0, 0, 448, 447, 0, 448, 453, 453, 454, 447, 0, 445, 0, 0, 447, 448, 0, 0, 454, 448, 449, 0, 456, 449, 0, 450, 0, 450, 450, 0, 0, 0, 456, 449, 447, 457, 452, 449, 450, 452, 454, 453, 450, 0, 453, 457, 454, 453, 452, 452, 0, 454, 458, 452, 456, 0, 0, 453, 0, 459, 456, 453, 458, 0, 0, 456, 0, 457, 0, 459, 0, 454, 0, 457, 0, 469, 461, 469, 457, 469, 469, 469, 469, 0, 458, 456, 461, 0, 458, 462, 458, 459, 0, 0, 0, 458, 0, 459, 457, 462, 0, 0, 459, 0, 0, 0, 485, 0, 461, 0, 0, 0, 461, 0, 461, 458, 485, 0, 495, 461, 0, 462, 459, 0, 470, 0, 470, 462, 470, 470, 470, 470, 462, 495, 495, 495, 495, 0, 485, 461, 0, 473, 470, 473, 485, 473, 473, 473, 473, 485, 0, 0, 462, 476, 476, 476, 476, 0, 0, 473, 589, 0, 476, 476, 476, 476, 476, 476, 476, 485, 470, 477, 477, 477, 477, 589, 589, 589, 589, 0, 0, 477, 477, 477, 477, 477, 477, 473, 0, 0, 0, 476, 476, 476, 476, 476, 476, 721, 721, 721, 721, 746, 746, 746, 746, 478, 478, 478, 478, 477, 477, 477, 477, 477, 477, 478, 478, 478, 478, 478, 478, 479, 0, 479, 0, 479, 479, 479, 479, 0, 0, 480, 486, 480, 0, 480, 480, 480, 480, 479, 0, 484, 486, 478, 478, 478, 478, 478, 478, 480, 481, 484, 481, 0, 481, 481, 481, 481, 0, 487, 0, 0, 488, 0, 486, 484, 0, 479, 481, 487, 486, 490, 488, 484, 0, 486, 0, 480, 491, 484, 489, 490, 0, 0, 484, 0, 0, 0, 491, 0, 489, 487, 0, 0, 488, 486, 481, 487, 0, 0, 488, 526, 487, 490, 484, 488, 489, 0, 0, 490, 491, 526, 489, 0, 490, 0, 491, 527, 489, 528, 529, 491, 487, 489, 0, 488, 490, 527, 0, 528, 529, 0, 0, 526, 490, 530, 530, 0, 0, 526, 0, 491, 0, 489, 526, 758, 758, 758, 758, 527, 592, 528, 529, 0, 0, 527, 0, 528, 529, 0, 527, 531, 528, 529, 526, 592, 592, 592, 592, 0, 0, 531, 0, 530, 0, 0, 530, 531, 532, 0, 527, 0, 528, 529, 531, 531, 530, 534, 532, 533, 530, 530, 531, 532, 532, 537, 537, 534, 535, 533, 0, 532, 532, 534, 533, 533, 0, 536, 535, 532, 534, 534, 533, 533, 535, 538, 538, 536, 534, 535, 533, 535, 535, 536, 0, 539, 0, 689, 536, 535, 536, 536, 0, 537, 0, 539, 537, 540, 536, 0, 0, 541, 689, 689, 689, 689, 537, 540, 0, 542, 537, 541, 0, 538, 0, 0, 538, 539, 0, 542, 538, 0, 0, 539, 543, 0, 538, 544, 539, 540, 538, 0, 0, 541, 543, 540, 0, 544, 0, 541, 540, 542, 540, 545, 541, 547, 541, 542, 539, 0, 0, 0, 542, 545, 0, 547, 543, 0, 0, 544, 540, 0, 543, 0, 541, 544, 0, 543, 0, 0, 544, 0, 542, 549, 549, 545, 0, 547, 553, 553, 0, 545, 0, 547, 554, 554, 545, 543, 547, 635, 544, 0, 0, 0, 545, 0, 555, 555, 0, 635, 0, 0, 556, 556, 0, 635, 545, 0, 547, 0, 0, 549, 635, 635, 549, 0, 553, 557, 557, 553, 635, 0, 554, 0, 549, 554, 558, 558, 549, 553, 0, 0, 0, 553, 555, 554, 0, 555, 0, 554, 556, 560, 560, 556, 0, 0, 0, 555, 559, 559, 0, 555, 0, 556, 0, 557, 0, 556, 557, 561, 561, 0, 0, 0, 558, 0, 557, 558, 557, 0, 0, 559, 557, 0, 562, 562, 0, 558, 0, 560, 0, 558, 560, 563, 563, 0, 559, 0, 0, 559, 565, 565, 560, 0, 0, 636, 560, 561, 0, 559, 561, 567, 567, 559, 0, 636, 782, 782, 782, 782, 561, 636, 562, 0, 561, 562, 0, 0, 636, 636, 643, 563, 0, 562, 563, 562, 636, 0, 565, 562, 643, 565, 745, 0, 563, 0, 643, 0, 563, 567, 0, 565, 567, 643, 643, 565, 565, 745, 745, 745, 745, 643, 567, 578, 0, 578, 567, 578, 578, 578, 578, 579, 0, 579, 0, 579, 579, 579, 579, 0, 581, 578, 581, 0, 581, 581, 581, 581, 582, 579, 582, 0, 582, 582, 582, 582, 0, 0, 581, 584, 584, 585, 585, 650, 0, 0, 582, 586, 586, 578, 0, 0, 0, 650, 0, 0, 0, 579, 0, 587, 587, 584, 797, 797, 797, 797, 581, 0, 0, 0, 586, 628, 628, 0, 582, 650, 0, 584, 0, 585, 584, 650, 585, 629, 629, 586, 650, 0, 586, 596, 584, 0, 585, 0, 584, 0, 585, 587, 586, 0, 587, 0, 586, 0, 596, 596, 650, 630, 630, 628, 587, 0, 628, 812, 587, 0, 631, 631, 0, 596, 0, 629, 628, 0, 629, 0, 628, 596, 812, 812, 812, 812, 596, 0, 629, 596, 632, 632, 629, 0, 0, 633, 633, 634, 634, 630, 0, 596, 630, 637, 0, 0, 0, 0, 631, 596, 0, 631, 630, 637, 0, 596, 630, 0, 0, 637, 596, 631, 0, 0, 637, 631, 637, 637, 632, 0, 0, 632, 0, 633, 637, 634, 633, 0, 634, 638, 0, 632, 0, 0, 0, 632, 633, 0, 634, 638, 633, 639, 634, 634, 0, 638, 641, 0, 0, 0, 638, 639, 638, 638, 0, 639, 641, 639, 647, 0, 638, 0, 641, 0, 639, 639, 0, 641, 647, 641, 641, 0, 639, 0, 647, 648, 651, 641, 652, 647, 649, 647, 647, 0, 0, 648, 651, 0, 652, 647, 649, 648, 653, 0, 0, 655, 649, 0, 648, 648, 649, 0, 653, 649, 649, 655, 648, 0, 651, 0, 652, 649, 0, 665, 651, 0, 652, 0, 0, 651, 0, 652, 0, 665, 653, 0, 0, 655, 0, 0, 653, 0, 0, 655, 0, 653, 0, 0, 655, 651, 666, 652, 662, 0, 662, 665, 662, 662, 662, 662, 666, 665, 706, 707, 0, 653, 665, 0, 655, 0, 662, 708, 706, 707, 0, 0, 0, 0, 0, 709, 0, 708, 666, 0, 0, 0, 665, 0, 666, 709, 0, 0, 0, 666, 706, 707, 0, 0, 662, 0, 706, 707, 0, 708, 0, 706, 707, 706, 707, 708, 0, 709, 0, 666, 708, 0, 708, 709, 710, 711, 0, 0, 709, 0, 709, 706, 707, 712, 710, 711, 0, 0, 0, 0, 708, 713, 716, 712, 0, 0, 0, 0, 709, 0, 0, 713, 716, 0, 717, 0, 710, 711, 0, 0, 0, 0, 710, 711, 717, 712, 0, 710, 711, 710, 711, 712, 0, 713, 716, 0, 712, 725, 725, 713, 716, 0, 757, 757, 713, 716, 717, 710, 711, 0, 0, 0, 717, 724, 0, 0, 712, 717, 713, 0, 0, 0, 0, 724, 713, 716, 722, 724, 722, 0, 722, 722, 722, 722, 0, 725, 0, 717, 725, 0, 757, 761, 761, 757, 722, 724, 760, 760, 725, 0, 0, 724, 725, 757, 0, 0, 724, 757, 0, 759, 0, 759, 0, 759, 759, 759, 759, 0, 0, 0, 0, 760, 722, 785, 785, 0, 724, 759, 0, 761, 784, 784, 761, 0, 760, 0, 0, 760, 0, 799, 799, 0, 761, 0, 0, 761, 761, 760, 0, 0, 0, 760, 783, 784, 783, 759, 783, 783, 783, 783, 0, 785, 0, 0, 785, 0, 0, 0, 784, 0, 783, 784, 0, 0, 785, 0, 0, 799, 785, 0, 799, 784, 0, 0, 798, 784, 798, 798, 798, 798, 799, 0, 0, 0, 799, 0, 0, 0, 783, 0, 798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, 822, 822, 0, 822, 822, 822, 822, 822, 822, 822, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 824, 0, 0, 0, 0, 0, 824, 824, 825, 825, 0, 825, 825, 825, 825, 825, 825, 825, 826, 826, 0, 826, 826, 826, 826, 826, 826, 826, 827, 0, 0, 0, 0, 0, 827, 827, 828, 0, 828, 0, 828, 829, 0, 0, 829, 829, 829, 829, 830, 830, 0, 0, 830, 831, 0, 0, 831, 831, 831, 831, 832, 832, 0, 832, 832, 832, 832, 832, 832, 832, 833, 833, 0, 833, 833, 833, 833, 833, 833, 833, 834, 834, 0, 834, 834, 834, 834, 834, 834, 834, 835, 835, 0, 835, 835, 835, 835, 835, 835, 835, 836, 836, 0, 836, 836, 836, 836, 836, 836, 836, 837, 837, 0, 837, 837, 837, 837, 837, 837, 837, 838, 838, 0, 838, 838, 838, 838, 838, 838, 838, 839, 839, 0, 839, 839, 839, 839, 839, 839, 839, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, 821 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; #line 1 "../../../svn/src/common/scanner.l" #line 2 "../../../svn/src/common/scanner.l" /* * Original provided by * Shawn Ostermann -- Mon Sep 24, 2001 * * Modified by Kyle Wheeler */ #include #include #include #include #include /* for strcasecmp() */ #ifdef HAVE_INTTYPES_H #include #endif #ifdef HAVE_STDINT_H #include #endif #include #include #include /* for isdigit() */ #include "number.h" #include "calculator.h" #include "conversion.h" #ifdef HAVE_CONFIG_H #include "parser.h" #else #include "y.tab.h" #endif #include "string_manip.h" #include "explain.h" #include "isfunc.h" /* for isfunc() */ #include "isconst.h" /* for isconst() */ extern short scanerror; #ifndef HUGE_VALF # define HUGE_VALF HUGE_VAL #endif #ifndef UINT32_MAX # define UINT32_MAX 4294967295U #endif #ifdef REENTRANT_PARSER /* Re-entrant */ #define YY_DECL int yylex (YYSTYPE *yylval) #define YYLVALAC yylval #else #define YYLVALAC (&yylval) #endif int line_is_a_command = 0; int column = 0; int last_word = 0; #define POS_CHAR() do { column ++; last_word = 1; } while(0) #define POS_STR() do { column += yyleng; last_word = yyleng; } while (0) #define STREQ(y) (!strcasecmp(str, y)) static int parse_yesno(const char *str) { if (STREQ("yes") || STREQ("true") || STREQ("1")) { return 1; } else if (STREQ("no") || STREQ("false") || STREQ("0")) { return 0; } else { return -1; } } /* Everything up to the funny characters on the next line */ /* goes directly into the lex.yy.c file */ #define YY_NO_INPUT 1 /* shorthand definitions for later */ /* The rest of this after the '%%' is lex rules */ #line 1764 "../../../svn/src/common/scanner.c" #define INITIAL 0 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals (void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy (void ); int yyget_debug (void ); void yyset_debug (int debug_flag ); YY_EXTRA_TYPE yyget_extra (void ); void yyset_extra (YY_EXTRA_TYPE user_defined ); FILE *yyget_in (void ); void yyset_in (FILE * in_str ); FILE *yyget_out (void ); void yyset_out (FILE * out_str ); int yyget_leng (void ); char *yyget_text (void ); int yyget_lineno (void ); void yyset_lineno (int line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap (void ); #else extern int yywrap (void ); #endif #endif #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex (void); #define YY_DECL int yylex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 88 "../../../svn/src/common/scanner.l" #line 1952 "../../../svn/src/common/scanner.c" if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin,YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 822 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 4185 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 90 "../../../svn/src/common/scanner.l" { POS_STR(); } YY_BREAK case 2: /* rule 2 can match eol */ YY_RULE_SETUP #line 92 "../../../svn/src/common/scanner.l" { return(EOLN); } YY_BREAK /* These are commands */ case 3: YY_RULE_SETUP #line 97 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(BIN_CMD); } YY_BREAK case 4: YY_RULE_SETUP #line 98 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(DEC_CMD); } YY_BREAK case 5: YY_RULE_SETUP #line 99 "../../../svn/src/common/scanner.l" { int i = 7; while (isspace(yytext[i])) i++; if (yytext[i] == 0) i--; YYLVALAC->variable = strdup(yytext + i); line_is_a_command = 1; POS_STR(); return(ASSERT_CMD); } YY_BREAK case 6: YY_RULE_SETUP #line 108 "../../../svn/src/common/scanner.l" { int i = 5; while (isspace(yytext[i])) i++; if (yytext[i] == 0) i--; YYLVALAC->character = yytext[i]; line_is_a_command = 1; POS_STR(); return(DSEP_CMD); } YY_BREAK case 7: YY_RULE_SETUP #line 117 "../../../svn/src/common/scanner.l" { int i = 5; while (isspace(yytext[i])) i++; if (yytext[i] == 0) i--; YYLVALAC->character = yytext[i]; line_is_a_command = 1; POS_STR(); return(IDSEP_CMD); } YY_BREAK case 8: YY_RULE_SETUP #line 126 "../../../svn/src/common/scanner.l" { int i = 2; while (yytext[i] != 0 && ! isdigit((int)(yytext[i]))) ++i; if (yytext[i] != 0 && yytext[i] != '\n') { YYLVALAC->integer = strtoul(yytext+i, NULL, 0); } else { YYLVALAC->integer = -1; } line_is_a_command = 1; POS_STR(); return(ENG_CMD); } YY_BREAK case 9: YY_RULE_SETUP #line 138 "../../../svn/src/common/scanner.l" { POS_STR(); YYLVALAC->integer = 1; line_is_a_command = 1; return(ENG_CMD); } YY_BREAK case 10: YY_RULE_SETUP #line 144 "../../../svn/src/common/scanner.l" { POS_STR(); YYLVALAC->integer = 2; line_is_a_command = 1; return(ENG_CMD); } YY_BREAK case 11: YY_RULE_SETUP #line 150 "../../../svn/src/common/scanner.l" { POS_STR(); YYLVALAC->integer = 3; line_is_a_command = 1; return(ENG_CMD); } YY_BREAK case 12: YY_RULE_SETUP #line 156 "../../../svn/src/common/scanner.l" { int i = 0; line_is_a_command = 1; POS_STR(); while(!isspace(yytext[i])) i++; while(isspace(yytext[i])) i++; YYLVALAC->integer = parse_yesno(yytext + i); return(GUARD_CMD); } YY_BREAK case 13: YY_RULE_SETUP #line 165 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(HEX_CMD); } YY_BREAK case 14: YY_RULE_SETUP #line 166 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(PRINT_HELP_CMD); } YY_BREAK case 15: YY_RULE_SETUP #line 167 "../../../svn/src/common/scanner.l" { int i = 7; while (isspace(yytext[i])) ++i; if (yytext[i] != 0) YYLVALAC->integer = strtoul(yytext+i, NULL, 0); else YYLVALAC->integer = 0; line_is_a_command = 1; POS_STR(); return(HLIMIT_CMD); } YY_BREAK case 16: YY_RULE_SETUP #line 176 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(INT_CMD); } YY_BREAK case 17: YY_RULE_SETUP #line 177 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(DELIM_CMD); } YY_BREAK case 18: YY_RULE_SETUP #line 178 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(HEX_CMD); } YY_BREAK case 19: YY_RULE_SETUP #line 179 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(LISTVAR_CMD); } YY_BREAK case 20: YY_RULE_SETUP #line 180 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(OCT_CMD); } YY_BREAK case 21: YY_RULE_SETUP #line 181 "../../../svn/src/common/scanner.l" { int i = 5; char *returnme; Dprintf("open\n"); while (isspace(yytext[i])) ++i; returnme = strdup(yytext + i); /* now trim trailing whitespace */ i = (int)strlen(returnme) - 1; while (isspace(returnme[i])) { returnme[i] = 0; i--; } YYLVALAC->variable = returnme; Dprintf("filename: %s\n",returnme); line_is_a_command = 1; POS_STR(); return(OPEN_CMD); } YY_BREAK case 22: YY_RULE_SETUP #line 199 "../../../svn/src/common/scanner.l" { int i = 2; while (isspace(yytext[i])) ++i; YYLVALAC->integer = strtol(yytext+i, NULL, 0); line_is_a_command = 1; POS_STR(); return(PRECISION_CMD); } YY_BREAK case 23: YY_RULE_SETUP #line 207 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(PREFIX_CMD); } YY_BREAK case 24: YY_RULE_SETUP #line 208 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(DISPLAY_PREFS_CMD); } YY_BREAK case 25: YY_RULE_SETUP #line 209 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(RADIAN_CMD); } YY_BREAK case 26: YY_RULE_SETUP #line 210 "../../../svn/src/common/scanner.l" { YYLVALAC->integer = NO_ROUNDING_INDICATION; line_is_a_command = 1; POS_STR(); return(ROUNDING_INDICATION_CMD); } YY_BREAK case 27: YY_RULE_SETUP #line 216 "../../../svn/src/common/scanner.l" { YYLVALAC->integer = SIMPLE_ROUNDING_INDICATION; line_is_a_command = 1; POS_STR(); return(ROUNDING_INDICATION_CMD); } YY_BREAK case 28: YY_RULE_SETUP #line 222 "../../../svn/src/common/scanner.l" { YYLVALAC->integer = SIG_FIG_ROUNDING_INDICATION; line_is_a_command = 1; POS_STR(); return(ROUNDING_INDICATION_CMD); } YY_BREAK case 29: YY_RULE_SETUP #line 228 "../../../svn/src/common/scanner.l" { YYLVALAC->integer = -1; line_is_a_command = 1; POS_STR(); return(ROUNDING_INDICATION_CMD); } YY_BREAK case 30: YY_RULE_SETUP #line 234 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(REMEMBER_CMD); } YY_BREAK case 31: YY_RULE_SETUP #line 235 "../../../svn/src/common/scanner.l" { int i = 5; while (isspace(yytext[i])) ++i; YYLVALAC->integer = strtoul(yytext+i, NULL, 0); line_is_a_command = 1; POS_STR(); return(BITS_CMD); } YY_BREAK case 32: YY_RULE_SETUP #line 243 "../../../svn/src/common/scanner.l" { int i = 5; char *returnme; while (isspace(yytext[i])) ++i; returnme = strdup(yytext + i); /* now trim trailing whitespace */ i = (int)strlen(returnme) - 1; while (isspace(returnme[i])) { returnme[i] = 0; i--; } YYLVALAC->variable = returnme; line_is_a_command = 1; POS_STR(); return(SAVE_CMD); } YY_BREAK case 33: YY_RULE_SETUP #line 259 "../../../svn/src/common/scanner.l" { int i = 5; while (isspace(yytext[i])) ++i; if (yytext[i] == 0) i--; YYLVALAC->character = yytext[i]; line_is_a_command = 1; POS_STR(); return(TSEP_CMD); } YY_BREAK case 34: YY_RULE_SETUP #line 268 "../../../svn/src/common/scanner.l" { int i = 5; while (isspace(yytext[i])) ++i; if (yytext[i] == 0) i--; YYLVALAC->character = yytext[i]; line_is_a_command = 1; POS_STR(); return(ITSEP_CMD); } YY_BREAK case 35: YY_RULE_SETUP #line 277 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(PRINT_HELP_CMD); } YY_BREAK case 36: YY_RULE_SETUP #line 278 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(PRINT_HELP_CMD); } YY_BREAK case 37: YY_RULE_SETUP #line 279 "../../../svn/src/common/scanner.l" { char *unitone; int i = 2; /* find the first space */ while (yytext[i] != 0 && ! isspace(yytext[i])) ++i; /* find the end of that space */ while (isspace(yytext[i])) ++i; unitone = yytext + i; /* skip the unit */ while (yytext[i] != 0 && ! isspace(yytext[i])) ++i; yytext[i++] = 0; /* onward to the word "to" */ while (isspace(yytext[i])) ++i; if (yytext[i] == 't' && yytext[i+1] == 'o' && isspace(yytext[i+2])) { i += 3; /* to */ } /* seek the next unit */ while (isspace(yytext[i])) ++i; YYLVALAC->conver.u1 = strdup(unitone); YYLVALAC->conver.u2 = strdup(yytext+i); line_is_a_command = 1; POS_STR(); return(CONVERT_CMD); } YY_BREAK case 38: YY_RULE_SETUP #line 303 "../../../svn/src/common/scanner.l" { int i = 5; while (isspace(yytext[i])) ++i; YYLVALAC->integer = strtoul(yytext + i, NULL, 0); line_is_a_command = 1; POS_STR(); return(BASE_CMD); } YY_BREAK case 39: YY_RULE_SETUP #line 311 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(VERBOSE_CMD); } YY_BREAK case 40: YY_RULE_SETUP #line 312 "../../../svn/src/common/scanner.l" { int i = 9, j; while (isspace(yytext[i])) ++i; j = strlen(yytext+i); while (isspace(yytext[j])) { yytext[j] = 0; j--; } explain(yytext+i); line_is_a_command = 1; POS_STR(); } YY_BREAK case 41: YY_RULE_SETUP #line 324 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(STORE_CMD); } YY_BREAK case 42: YY_RULE_SETUP #line 325 "../../../svn/src/common/scanner.l" { line_is_a_command = 1; POS_STR(); return(CMOD_CMD); } YY_BREAK /* These are comments */ case 43: YY_RULE_SETUP #line 329 "../../../svn/src/common/scanner.l" { POS_STR(); } YY_BREAK case 44: YY_RULE_SETUP #line 330 "../../../svn/src/common/scanner.l" { POS_STR(); } YY_BREAK case 45: YY_RULE_SETUP #line 331 "../../../svn/src/common/scanner.l" { POS_STR(); } YY_BREAK /* These are the constants (except random) */ case 46: YY_RULE_SETUP #line 336 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_E,0); POS_STR(); return(NUMBER); } YY_BREAK case 47: YY_RULE_SETUP #line 341 "../../../svn/src/common/scanner.l" { num_init(YYLVALAC->number); num_const_pi(YYLVALAC->number); POS_STR(); return(NUMBER); } YY_BREAK case 48: YY_RULE_SETUP #line 347 "../../../svn/src/common/scanner.l" { num_init(YYLVALAC->number); while (num_random(YYLVALAC->number) != 0) ; num_mul_ui(YYLVALAC->number,YYLVALAC->number,UINT32_MAX); POS_STR(); return(NUMBER); } YY_BREAK case 49: YY_RULE_SETUP #line 354 "../../../svn/src/common/scanner.l" { num_init(YYLVALAC->number); while (num_random(YYLVALAC->number) != 0) ; num_mul_ui(YYLVALAC->number,YYLVALAC->number,UINT32_MAX); num_rint(YYLVALAC->number,YYLVALAC->number); POS_STR(); return(NUMBER); } YY_BREAK case 50: YY_RULE_SETUP #line 362 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_AVOGADROS_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 51: YY_RULE_SETUP #line 367 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_BOLTZMANN_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 52: YY_RULE_SETUP #line 372 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_COULOMB_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 53: YY_RULE_SETUP #line 375 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_ELEMENTARY_CHARGE,0); POS_STR(); return(NUMBER); } YY_BREAK case 54: YY_RULE_SETUP #line 378 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_MOLAR_GAS_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 55: YY_RULE_SETUP #line 381 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_GRAVITATIONAL_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 56: YY_RULE_SETUP #line 384 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_GRAVITATIONAL_ACCELLERATION,0); POS_STR(); return(NUMBER); } YY_BREAK case 57: YY_RULE_SETUP #line 387 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_ELECTRON_MASS,0); POS_STR(); return(NUMBER); } YY_BREAK case 58: YY_RULE_SETUP #line 390 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_PROTON_MASS,0); POS_STR(); return(NUMBER); } YY_BREAK case 59: YY_RULE_SETUP #line 393 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_NEUTRON_MASS,0); POS_STR(); return(NUMBER); } YY_BREAK case 60: YY_RULE_SETUP #line 396 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_DEUTERON_MASS,0); POS_STR(); return(NUMBER); } YY_BREAK case 61: YY_RULE_SETUP #line 399 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_ATOMIC_MASS,0); POS_STR(); return(NUMBER); } YY_BREAK case 62: YY_RULE_SETUP #line 402 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_SPEED_OF_LIGHT,0); POS_STR(); return(NUMBER); } YY_BREAK case 63: YY_RULE_SETUP #line 405 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_PLANCK_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 64: YY_RULE_SETUP #line 408 "../../../svn/src/common/scanner.l" { Number temp; num_init(YYLVALAC->number); num_init(temp); num_set_d(temp,1e-7); num_const_pi(YYLVALAC->number); num_mul_ui(YYLVALAC->number,YYLVALAC->number,4); num_mul(YYLVALAC->number,YYLVALAC->number,temp); num_free(temp); POS_STR(); return(NUMBER); } YY_BREAK case 65: YY_RULE_SETUP #line 419 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_PERMITTIVITY_OF_FREE_SPACE,0); POS_STR(); return(NUMBER); } YY_BREAK case 66: YY_RULE_SETUP #line 422 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_BOHR_MAGNETON,0); POS_STR(); return(NUMBER); } YY_BREAK case 67: YY_RULE_SETUP #line 425 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_NUCLEAR_MAGNETON,0); POS_STR(); return(NUMBER); } YY_BREAK case 68: YY_RULE_SETUP #line 428 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_WIEN_DISPLACEMENT,0); POS_STR(); return(NUMBER); } YY_BREAK case 69: YY_RULE_SETUP #line 431 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_BOHR_RADIUS,0); POS_STR(); return(NUMBER); } YY_BREAK case 70: YY_RULE_SETUP #line 434 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_FARADAY_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 71: YY_RULE_SETUP #line 437 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_MOLAR_VOLUME_OF_IDEAL_GAS,0); POS_STR(); return(NUMBER); } YY_BREAK case 72: YY_RULE_SETUP #line 440 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_ELECTRON_VOLT,0); POS_STR(); return(NUMBER); } YY_BREAK case 73: YY_RULE_SETUP #line 443 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_STEFAN_BOLTZMANN,0); POS_STR(); return(NUMBER); } YY_BREAK case 74: YY_RULE_SETUP #line 446 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_FINE_STRUCTURE,0); POS_STR(); return(NUMBER); } YY_BREAK case 75: YY_RULE_SETUP #line 449 "../../../svn/src/common/scanner.l" { num_init(YYLVALAC->number); num_const_euler(YYLVALAC->number); POS_STR(); return(NUMBER); } YY_BREAK case 76: YY_RULE_SETUP #line 452 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_ELECTRON_RADIUS,0); POS_STR(); return(NUMBER); } YY_BREAK case 77: YY_RULE_SETUP #line 455 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_JOSEPHSON_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 78: YY_RULE_SETUP #line 458 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_VON_KLITZING_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 79: YY_RULE_SETUP #line 461 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_RYDBERG_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 80: YY_RULE_SETUP #line 464 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_HARTREE_ENERGY,0); POS_STR(); return(NUMBER); } YY_BREAK case 81: YY_RULE_SETUP #line 467 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_FERMI_COUPLING_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 82: YY_RULE_SETUP #line 470 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_MUON_MASS,0); POS_STR(); return(NUMBER); } YY_BREAK case 83: YY_RULE_SETUP #line 473 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_TAU_MASS,0); POS_STR(); return(NUMBER); } YY_BREAK case 84: YY_RULE_SETUP #line 476 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_HELION_MASS,0); POS_STR(); return(NUMBER); } YY_BREAK case 85: YY_RULE_SETUP #line 479 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_ALPHA_PARTICLE_MASS,0); POS_STR(); return(NUMBER); } YY_BREAK case 86: YY_RULE_SETUP #line 482 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_LOSCHMIDT_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 87: YY_RULE_SETUP #line 485 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_FIRST_RADIATION_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 88: YY_RULE_SETUP #line 488 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_SECOND_RADIATION_CONSTANT,0); POS_STR(); return(NUMBER); } YY_BREAK case 89: YY_RULE_SETUP #line 491 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_CONDUCTANCE_QUANTUM,0); POS_STR(); return(NUMBER); } YY_BREAK case 90: YY_RULE_SETUP #line 494 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_IMPEDANCE_OF_VACUUM,0); POS_STR(); return(NUMBER); } YY_BREAK case 91: YY_RULE_SETUP #line 497 "../../../svn/src/common/scanner.l" { num_init_set_str(YYLVALAC->number,W_MAGNETIC_FLUX_QUANTUM,0); POS_STR(); return(NUMBER); } YY_BREAK case 92: YY_RULE_SETUP #line 500 "../../../svn/src/common/scanner.l" { num_init_set_d(YYLVALAC->number,0.25); POS_STR(); return(NUMBER); } YY_BREAK case 93: YY_RULE_SETUP #line 503 "../../../svn/src/common/scanner.l" { num_init_set_d(YYLVALAC->number,0.5); POS_STR(); return(NUMBER); } YY_BREAK case 94: YY_RULE_SETUP #line 506 "../../../svn/src/common/scanner.l" { num_init_set_d(YYLVALAC->number,0.75); POS_STR(); return(NUMBER); } YY_BREAK case 95: YY_RULE_SETUP #line 509 "../../../svn/src/common/scanner.l" { num_init(YYLVALAC->number); num_const_catalan(YYLVALAC->number); POS_STR(); return(NUMBER); } YY_BREAK case 96: YY_RULE_SETUP #line 513 "../../../svn/src/common/scanner.l" { num_init(YYLVALAC->number); num_set_nan(YYLVALAC->number); POS_STR(); return (NUMBER); } YY_BREAK case 97: YY_RULE_SETUP #line 517 "../../../svn/src/common/scanner.l" { num_init(YYLVALAC->number); num_set_inf(YYLVALAC->number,1); POS_STR(); return (NUMBER); } YY_BREAK /* These are the grouping symbols */ case 98: YY_RULE_SETUP #line 524 "../../../svn/src/common/scanner.l" { POS_STR(); return(OPEN_PARENTHESES); } YY_BREAK case 99: YY_RULE_SETUP #line 525 "../../../svn/src/common/scanner.l" { POS_STR(); return(CLOSE_PARENTHESES); } YY_BREAK case 100: YY_RULE_SETUP #line 526 "../../../svn/src/common/scanner.l" { POS_STR(); return(OPEN_BRACE); } YY_BREAK case 101: YY_RULE_SETUP #line 527 "../../../svn/src/common/scanner.l" { POS_STR(); return(CLOSE_BRACE); } YY_BREAK case 102: YY_RULE_SETUP #line 528 "../../../svn/src/common/scanner.l" { POS_STR(); return(OPEN_BRACKET); } YY_BREAK case 103: YY_RULE_SETUP #line 529 "../../../svn/src/common/scanner.l" { POS_STR(); return(CLOSE_BRACKET); } YY_BREAK /* These are the binary operations */ case 104: YY_RULE_SETUP #line 533 "../../../svn/src/common/scanner.l" { POS_STR(); return(WNOT); } YY_BREAK case 105: YY_RULE_SETUP #line 534 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WNOT); } YY_BREAK case 106: YY_RULE_SETUP #line 535 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WBANG); } YY_BREAK case 107: YY_RULE_SETUP #line 536 "../../../svn/src/common/scanner.l" { POS_STR(); return(WPOW); } YY_BREAK case 108: YY_RULE_SETUP #line 537 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WSQR); } YY_BREAK case 109: YY_RULE_SETUP #line 538 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WPLUS); } YY_BREAK case 110: YY_RULE_SETUP #line 539 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WMULT); } YY_BREAK case 111: YY_RULE_SETUP #line 540 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WDIV); } YY_BREAK case 112: YY_RULE_SETUP #line 541 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WMOD); } YY_BREAK case 113: YY_RULE_SETUP #line 542 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(EQUALS_SIGN); } YY_BREAK case 114: YY_RULE_SETUP #line 543 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WPOW); } YY_BREAK case 115: YY_RULE_SETUP #line 544 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WBOR); } YY_BREAK case 116: YY_RULE_SETUP #line 545 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WBAND); } YY_BREAK case 117: YY_RULE_SETUP #line 546 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WBNOT); } YY_BREAK case 118: YY_RULE_SETUP #line 547 "../../../svn/src/common/scanner.l" { POS_STR(); return(WOR); } YY_BREAK case 119: YY_RULE_SETUP #line 548 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WOR); } YY_BREAK case 120: YY_RULE_SETUP #line 549 "../../../svn/src/common/scanner.l" { POS_STR(); return(WAND); } YY_BREAK case 121: YY_RULE_SETUP #line 550 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WAND); } YY_BREAK case 122: YY_RULE_SETUP #line 551 "../../../svn/src/common/scanner.l" { POS_STR(); return(WEQUAL); } YY_BREAK case 123: YY_RULE_SETUP #line 552 "../../../svn/src/common/scanner.l" { POS_STR(); return(WNEQUAL); } YY_BREAK case 124: YY_RULE_SETUP #line 553 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WNEQUAL); } YY_BREAK case 125: YY_RULE_SETUP #line 554 "../../../svn/src/common/scanner.l" { POS_STR(); return(WBXOR); } YY_BREAK case 126: YY_RULE_SETUP #line 555 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WGT); } YY_BREAK case 127: YY_RULE_SETUP #line 556 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WLT); } YY_BREAK case 128: YY_RULE_SETUP #line 557 "../../../svn/src/common/scanner.l" { POS_STR(); return(WRSHFT); } YY_BREAK case 129: YY_RULE_SETUP #line 558 "../../../svn/src/common/scanner.l" { POS_STR(); return(WLSHFT); } YY_BREAK case 130: YY_RULE_SETUP #line 559 "../../../svn/src/common/scanner.l" { POS_STR(); return(WGEQ); } YY_BREAK case 131: YY_RULE_SETUP #line 560 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WGEQ); } YY_BREAK case 132: YY_RULE_SETUP #line 561 "../../../svn/src/common/scanner.l" { POS_STR(); return(WLEQ); } YY_BREAK case 133: YY_RULE_SETUP #line 562 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WLEQ); } YY_BREAK /* This is a special operator/function */ case 134: YY_RULE_SETUP #line 566 "../../../svn/src/common/scanner.l" { POS_CHAR(); return(WMINUS); } YY_BREAK /* These are functions (unary operations) */ case 135: YY_RULE_SETUP #line 570 "../../../svn/src/common/scanner.l" { POS_STR(); return(WSIN); } YY_BREAK case 136: YY_RULE_SETUP #line 571 "../../../svn/src/common/scanner.l" { POS_STR(); return(WCOS); } YY_BREAK case 137: YY_RULE_SETUP #line 572 "../../../svn/src/common/scanner.l" { POS_STR(); return(WTAN); } YY_BREAK case 138: YY_RULE_SETUP #line 573 "../../../svn/src/common/scanner.l" { POS_STR(); return(WCOT); } YY_BREAK case 139: YY_RULE_SETUP #line 574 "../../../svn/src/common/scanner.l" { POS_STR(); return(WSEC); } YY_BREAK case 140: YY_RULE_SETUP #line 575 "../../../svn/src/common/scanner.l" { POS_STR(); return(WCSC); } YY_BREAK case 141: YY_RULE_SETUP #line 576 "../../../svn/src/common/scanner.l" { POS_STR(); return(WASIN); } YY_BREAK case 142: YY_RULE_SETUP #line 577 "../../../svn/src/common/scanner.l" { POS_STR(); return(WACOS); } YY_BREAK case 143: YY_RULE_SETUP #line 578 "../../../svn/src/common/scanner.l" { POS_STR(); return(WATAN); } YY_BREAK case 144: YY_RULE_SETUP #line 579 "../../../svn/src/common/scanner.l" { POS_STR(); return(WACOT); } YY_BREAK case 145: YY_RULE_SETUP #line 580 "../../../svn/src/common/scanner.l" { POS_STR(); return(WASEC); } YY_BREAK case 146: YY_RULE_SETUP #line 581 "../../../svn/src/common/scanner.l" { POS_STR(); return(WACSC); } YY_BREAK case 147: YY_RULE_SETUP #line 582 "../../../svn/src/common/scanner.l" { POS_STR(); return(WSINH); } YY_BREAK case 148: YY_RULE_SETUP #line 583 "../../../svn/src/common/scanner.l" { POS_STR(); return(WCOSH); } YY_BREAK case 149: YY_RULE_SETUP #line 584 "../../../svn/src/common/scanner.l" { POS_STR(); return(WTANH); } YY_BREAK case 150: YY_RULE_SETUP #line 585 "../../../svn/src/common/scanner.l" { POS_STR(); return(WCOTH); } YY_BREAK case 151: YY_RULE_SETUP #line 586 "../../../svn/src/common/scanner.l" { POS_STR(); return(WSECH); } YY_BREAK case 152: YY_RULE_SETUP #line 587 "../../../svn/src/common/scanner.l" { POS_STR(); return(WCSCH); } YY_BREAK case 153: YY_RULE_SETUP #line 588 "../../../svn/src/common/scanner.l" { POS_STR(); return(WASINH); } YY_BREAK case 154: YY_RULE_SETUP #line 589 "../../../svn/src/common/scanner.l" { POS_STR(); return(WACOSH); } YY_BREAK case 155: YY_RULE_SETUP #line 590 "../../../svn/src/common/scanner.l" { POS_STR(); return(WATANH); } YY_BREAK case 156: YY_RULE_SETUP #line 591 "../../../svn/src/common/scanner.l" { POS_STR(); return(WACOTH); } YY_BREAK case 157: YY_RULE_SETUP #line 592 "../../../svn/src/common/scanner.l" { POS_STR(); return(WASECH); } YY_BREAK case 158: YY_RULE_SETUP #line 593 "../../../svn/src/common/scanner.l" { POS_STR(); return(WACSCH); } YY_BREAK case 159: YY_RULE_SETUP #line 594 "../../../svn/src/common/scanner.l" { POS_STR(); return(WSINC); } YY_BREAK case 160: YY_RULE_SETUP #line 595 "../../../svn/src/common/scanner.l" { POS_STR(); return(WLOG); } YY_BREAK case 161: YY_RULE_SETUP #line 596 "../../../svn/src/common/scanner.l" { POS_STR(); return(WLOGTWO); } YY_BREAK case 162: YY_RULE_SETUP #line 597 "../../../svn/src/common/scanner.l" { POS_STR(); return(WLN); } YY_BREAK case 163: YY_RULE_SETUP #line 598 "../../../svn/src/common/scanner.l" { POS_STR(); return(WROUND); } YY_BREAK case 164: YY_RULE_SETUP #line 599 "../../../svn/src/common/scanner.l" { POS_STR(); return(WABS); } YY_BREAK case 165: YY_RULE_SETUP #line 600 "../../../svn/src/common/scanner.l" { POS_STR(); return(WSQRT); } YY_BREAK case 166: YY_RULE_SETUP #line 601 "../../../svn/src/common/scanner.l" { POS_STR(); return(WEXP); } YY_BREAK case 167: YY_RULE_SETUP #line 602 "../../../svn/src/common/scanner.l" { POS_STR(); return(WFLOOR); } YY_BREAK case 168: YY_RULE_SETUP #line 603 "../../../svn/src/common/scanner.l" { POS_STR(); return(WCEIL); } YY_BREAK case 169: YY_RULE_SETUP #line 604 "../../../svn/src/common/scanner.l" { POS_STR(); return(WCBRT); } YY_BREAK case 170: YY_RULE_SETUP #line 605 "../../../svn/src/common/scanner.l" { POS_STR(); return(WRAND); } YY_BREAK case 171: YY_RULE_SETUP #line 606 "../../../svn/src/common/scanner.l" { POS_STR(); return(WIRAND); } YY_BREAK case 172: YY_RULE_SETUP #line 607 "../../../svn/src/common/scanner.l" { POS_STR(); return(WFACT); } YY_BREAK case 173: YY_RULE_SETUP #line 608 "../../../svn/src/common/scanner.l" { POS_STR(); return(WCOMP); } YY_BREAK case 174: YY_RULE_SETUP #line 609 "../../../svn/src/common/scanner.l" { POS_STR(); return(WEINT); } YY_BREAK case 175: YY_RULE_SETUP #line 610 "../../../svn/src/common/scanner.l" { POS_STR(); return(WGAMMA); } YY_BREAK case 176: YY_RULE_SETUP #line 611 "../../../svn/src/common/scanner.l" { POS_STR(); return(WLNGAMMA); } YY_BREAK case 177: YY_RULE_SETUP #line 612 "../../../svn/src/common/scanner.l" { POS_STR(); return(WZETA); } YY_BREAK case 178: /* rule 178 can match eol */ YY_RULE_SETUP #line 614 "../../../svn/src/common/scanner.l" { char * temp = strdup(yytext+1); temp[yyleng-2] = 0; YYLVALAC->variable = temp; POS_STR(); return(STRING); } YY_BREAK case 179: YY_RULE_SETUP #line 622 "../../../svn/src/common/scanner.l" { int i = 0; while (yytext[i] != 0 && !isspace(yytext[i]) && yytext[i] != '=') i++; yytext[i] = 0; if (isfunc(yytext)) { report_error("'%s' is a function and functions cannot be reassigned.", yytext); scanerror = 1; } else if (isconst(yytext)) { report_error("'%s' is a pre-defined constant, which cannot be reassigned.", yytext); scanerror = 1; } else { YYLVALAC->variable = strdup(yytext); } POS_STR(); if (! scanerror) { return(ASSIGNMENT); } } YY_BREAK case 180: YY_RULE_SETUP #line 641 "../../../svn/src/common/scanner.l" { if (line_is_a_command) { YYLVALAC->variable = strdup(yytext); POS_STR(); return(VARIABLE); } else { report_error("Undefined variable: %s", yytext); scanerror = 1; POS_STR(); } } YY_BREAK case 181: YY_RULE_SETUP #line 656 "../../../svn/src/common/scanner.l" { /* simple decimals */ extern int yydebug; int retval; /* take out the ignored char */ strstrip(',', yytext); if (yydebug) Dprintf("ambiguous %s\n", yytext); retval = num_init_set_str(YYLVALAC->number, yytext, DEFAULT_BASE); if (-1 == retval) { report_error("Invalid characters for base 10"); scanerror = 1; } else { unsigned int t = count_digits(yytext); Dprintf("simple decimals digits in %s: %u (%u)\n",yytext,t,sig_figs); if (t ", yytext); retval = num_init_set_str(YYLVALAC->number, yytext, DEFAULT_BASE); if (-1 == retval) { report_error("Invalid characters for base 10"); scanerror = 1; } else { unsigned int t = count_digits(yytext); Dprintf("zero optional decimal digits in %s: %u (%u)\n",yytext,t,sig_figs); if (t ", yytext); retval = num_init_set_str(YYLVALAC->number, yytext, DEFAULT_BASE); if (-1 == retval) { report_error("Invalid characters for base 10"); scanerror = 1; } else { unsigned int t = count_digits(yytext); char * period = strchr(yytext,'.'); Dprintf("period: %s\n",period); if (period == NULL) { // no period means subtract the zeros period = yytext+strlen(yytext)-1; while (*period == '0') { t--; period--; } Dprintf("period: %s\n",period); } Dprintf("big ugly digits in %s: %u (%u)\n",yytext,t,sig_figs); if (t ", yytext); retval = num_init_set_str(YYLVALAC->number,yytext,16); if (-1 == retval) { report_error("some characters invalid for base 16"); scanerror = 1; } else { unsigned int t = count_digits(yytext); //strlen(yytext+2); if (yydebug) { num_out_str(stdout,DEFAULT_BASE,YYLVALAC->number); printf("\n"); } Dprintf("hex digits in %s: %u (%u)\n",yytext,t,sig_figs); if (tnumber,0); POS_STR(); } else { /*unsigned long int value;*/ unsigned int t; int retval; /* take out the ignored char */ strstrip(',', yytext); retval = num_init_set_str(YYLVALAC->number,yytext,8); if (-1 == retval) { report_error(strerror(errno)); scanerror = 1; } /*sscanf(yytext,"%lo",&value); yylval.number = value; */ t = yyleng-1; //strlen(yytext+1); Dprintf("octal digits in %s: %u (%u)\n",yytext,t,sig_figs); if (tnumber,0); } else { int retval; /* take out the ignored char */ strstrip(',', yytext); retval = num_init_set_str(YYLVALAC->number,yytext,2); if (-1 == retval) { report_error("Expected a 0 or 1 for binary."); scanerror = 1; } else { unsigned int t = count_digits(yytext); //strlen(yytext+2); if (yydebug) { num_out_str(stdout,DEFAULT_BASE,YYLVALAC->number); printf("\n"); } Dprintf("binary digits in %s: %u (%u)\n",yytext,t,sig_figs); if (tyy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), (size_t) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart(yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 822 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 822 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 821); return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart(yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return EOF; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin,YY_BUF_SIZE ); } yy_init_buffer(YY_CURRENT_BUFFER,input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void yy_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yy_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yyfree((void *) b->yy_ch_buf ); yyfree((void *) b ); } #ifndef __cplusplus extern int isatty (int ); #endif /* __cplusplus */ /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; yy_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yy_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void yyensure_buffer_stack (void) { int num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) { return yy_scan_bytes(yystr,strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; buf = (char *) yyalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int yyget_lineno (void) { return yylineno; } /** Get the input stream. * */ FILE *yyget_in (void) { return yyin; } /** Get the output stream. * */ FILE *yyget_out (void) { return yyout; } /** Get the length of the current token. * */ int yyget_leng (void) { return yyleng; } /** Get the current token. * */ char *yyget_text (void) { return yytext; } /** Set the current line number. * @param line_number * */ void yyset_lineno (int line_number ) { yylineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see yy_switch_to_buffer */ void yyset_in (FILE * in_str ) { yyin = in_str ; } void yyset_out (FILE * out_str ) { yyout = out_str ; } int yyget_debug (void) { return yy_flex_debug; } void yyset_debug (int bdebug ) { yy_flex_debug = bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ (yy_buffer_stack) = 0; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = (char *) 0; (yy_init) = 0; (yy_start) = 0; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = (FILE *) 0; yyout = (FILE *) 0; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } /* Destroy the stack itself. */ yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * yylex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *yyalloc (yy_size_t size ) { return (void *) malloc( size ); } void *yyrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void yyfree (void * ptr ) { free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 852 "../../../svn/src/common/scanner.l" wcalc-2.5/src/common/string_manip.c0000644000175000017500000000665112115731133014314 00000000000000/* * string_manip.c * Wcalc * * Created by Kyle Wheeler on Fri Mar 01 2002. * Copyright (c) 2001 Kyle Wheeler. All rights reserved. * */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* System Headers */ #include #if !defined(HAVE_CONFIG_H) || HAVE_STRING_H # include #else # if !HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); #endif /* Internal Headers */ #include "string_manip.h" void strstrip(const char strip, char *str) { /*{{{*/ size_t left, right; for (left = right = 0; str[right] != 0; ++right) { if ((str[right] != 0) && (str[right] != strip)) { str[left++] = str[right]; } } while (left != right) { str[left++] = 0; } } /*}}}*/ void strswap(const char sw, const char ap, char *str) { /*{{{*/ size_t curs = 0; if (!str) { return; } while (str[curs] != 0) { if (str[curs] == sw) { str[curs] = ap; } curs++; } } /*}}}*/ void strswap2(const char sw, const char ap, char *str) { /*{{{*/ size_t curs = 0; if (!str) { return; } while (str[curs] != 0) { if (str[curs] == sw) { str[curs] = ap; } else if (str[curs] == ap) { str[curs] = sw; } ++curs; } } /*}}}*/ unsigned int count_digits(const char *str) { /*{{{*/ size_t curs = 0; unsigned int counter = 0; char *exponent_chars = "eE"; char *base_chars = "1234567890"; if (!str) { return 0; } if ((str[0] == '0') && (str[1] == 'x')) { curs += 2; exponent_chars = "@"; base_chars = "1234567890abcdefABCDEF"; } else if ((str[0] == '0') && (str[1] == 'b')) { curs += 2; exponent_chars = "eE"; base_chars = "01"; } else if (str[0] == '0') { curs += 1; exponent_chars = "eE"; base_chars = "12345670"; } while (str[curs] != 0 && strchr(exponent_chars, str[curs]) == NULL) { if (strchr(base_chars, str[curs]) != NULL) { counter++; } ++curs; } return counter; } /*}}}*/ int justnumbers(const char *str) { /*{{{*/ size_t curs = 0; if (!str) { return 0; } while (str[curs] != 0 && (isdigit((int)(str[curs])) || ispunct((int)(str[curs])))) curs++; if (str[curs] == 0) { // if we reached the end of the string return 1; } else { return 0; } } /*}}}*/ void stripComments(char *str) { /*{{{*/ size_t curs = 0; size_t follower = 0; int update_follower = 1; if (!str) { return; } while (str[curs] != '\0') { if (str[curs] == '#') { str[curs] = 0; return; } else if ((str[curs] == '/') && (str[curs + 1] == '/')) { str[curs] = 0; return; } else if ((str[curs] == '/') && (str[curs + 1] == '*')) { update_follower = 0; curs++; } else if ((str[curs] == '*') && (str[curs + 1] == '/')) { update_follower = 1; curs += 2; } if (update_follower != 0) { str[follower] = str[curs]; follower++; } curs++; } str[follower] = 0; } /*}}}*/ /* vim:set expandtab: */ wcalc-2.5/src/common/extract_vars.c0000664000175000017500000000512012450207063014321 00000000000000#ifdef HAVE_CONFIG_H # include "config.h" #endif /* System Headers */ #include /* for NULL */ #include /* for isalpha() and isdigit() */ #include /* for strdup() */ /* Internal Headers */ #include "list.h" /* for List */ #include "isfunc.h" #include "isconst.h" #include "extract_vars.h" List extract_vars(char *str) { /*{{{*/ char *curs, *eov; List variables = NULL; char *varname; curs = str; while (curs && *curs) { // search for the first letter of a possible variable while (curs && *curs && !isalpha((int)(*curs))) { if ((*curs == '\'') || (*curs == '#')) { break; } curs++; // skip hex numbers if (((*curs == 'x') || (*curs == 'X')) && (curs != str) && (*(curs - 1) == '0')) { curs++; while (curs && *curs && (isdigit((int)(*curs)) || (*curs >= 'a' && *curs <= 'f') || (*curs >= 'A' && *curs <= 'F'))) { curs++; } } // skip binary numbers if ((*curs == 'b') && (curs != str) && (*(curs - 1) == '0')) { curs++; } } // if we didn't find a first letter, we're done looking if ((*curs == 0) || (*curs == '#') || (*curs == '\'')) { break; } // if we did find something, pull out the variable name eov = curs; while (*eov && (isalpha((int)(*eov)) || *eov == '_' || *eov == ':' || isdigit((int)(*eov)))) { eov++; } { char save_char = *eov; *eov = 0; varname = (char *)strdup(curs); *eov = save_char; curs = eov; } // add it to the set of known variables if (!isfunc(varname) && !isconst(varname)) { size_t i = 0; char exists = 0; while (i < listLen(variables)) { char *peekstr = peekListElement(variables, i); if (!strcmp(peekstr, varname)) { exists = 1; break; } i++; } if (!exists) { addToList(&variables, (void *)strdup(varname)); } } free(varname); } return variables; } /*}}}*/ /* vim:set expandtab: */ wcalc-2.5/src/common/scanner.l0000664000175000017500000006116012451267041013267 00000000000000%{ /* * Original provided by * Shawn Ostermann -- Mon Sep 24, 2001 * * Modified by Kyle Wheeler */ #include #include #include #include #include /* for strcasecmp() */ #ifdef HAVE_INTTYPES_H #include #endif #ifdef HAVE_STDINT_H #include #endif #include #include #include /* for isdigit() */ #include "number.h" #include "calculator.h" #include "conversion.h" #ifdef HAVE_CONFIG_H #include "parser.h" #else #include "y.tab.h" #endif #include "string_manip.h" #include "explain.h" #include "isfunc.h" /* for isfunc() */ #include "isconst.h" /* for isconst() */ extern short scanerror; #ifndef HUGE_VALF # define HUGE_VALF HUGE_VAL #endif #ifndef UINT32_MAX # define UINT32_MAX 4294967295U #endif #ifdef REENTRANT_PARSER /* Re-entrant */ #define YY_DECL int yylex (YYSTYPE *yylval) #define YYLVALAC yylval #else #define YYLVALAC (&yylval) #endif int line_is_a_command = 0; int column = 0; int last_word = 0; #define POS_CHAR() do { column ++; last_word = 1; } while(0) #define POS_STR() do { column += yyleng; last_word = yyleng; } while (0) #define STREQ(y) (!strcasecmp(str, y)) static int parse_yesno(const char *str) { if (STREQ("yes") || STREQ("true") || STREQ("1")) { return 1; } else if (STREQ("no") || STREQ("false") || STREQ("0")) { return 0; } else { return -1; } } /* Everything up to the funny characters on the next line */ /* goes directly into the lex.yy.c file */ %} %pointer %option nounput noinput noyywrap /* shorthand definitions for later */ DIGIT [0123456789] NDIGIT [123456789] LETTER [a-zA-Z] WHITESPACE [ \t] ACCEPTABLE [_:0-9] UNITCHRS [-_a-zA-Z0-9^./µÅ] SPACE [ ] YESNO (YES|NO|TRUE|FALSE|1|0|yes|no|true|false) /* The rest of this after the '%%' is lex rules */ %% {WHITESPACE}+ { POS_STR(); } "\n" { return(EOLN); } %{ /* These are commands */ %} \\b(in(ary)?)? { line_is_a_command = 1; POS_STR(); return(BIN_CMD); } \\d(ec(imal)?)? { line_is_a_command = 1; POS_STR(); return(DEC_CMD); } \\assert{WHITESPACE}*.* { int i = 7; while (isspace(yytext[i])) i++; if (yytext[i] == 0) i--; YYLVALAC->variable = strdup(yytext + i); line_is_a_command = 1; POS_STR(); return(ASSERT_CMD); } \\dsep{WHITESPACE}*. { int i = 5; while (isspace(yytext[i])) i++; if (yytext[i] == 0) i--; YYLVALAC->character = yytext[i]; line_is_a_command = 1; POS_STR(); return(DSEP_CMD); } \\idsep{WHITESPACE}*. { int i = 5; while (isspace(yytext[i])) i++; if (yytext[i] == 0) i--; YYLVALAC->character = yytext[i]; line_is_a_command = 1; POS_STR(); return(IDSEP_CMD); } \\e(ng(ineering)?)?{WHITESPACE}*{DIGIT}* { int i = 2; while (yytext[i] != 0 && ! isdigit((int)(yytext[i]))) ++i; if (yytext[i] != 0 && yytext[i] != '\n') { YYLVALAC->integer = strtoul(yytext+i, NULL, 0); } else { YYLVALAC->integer = -1; } line_is_a_command = 1; POS_STR(); return(ENG_CMD); } \\e(ng(ineering)?)?{WHITESPACE}+auto(matic)? { POS_STR(); YYLVALAC->integer = 1; line_is_a_command = 1; return(ENG_CMD); } \\e(ng(ineering)?)?{WHITESPACE}+always { POS_STR(); YYLVALAC->integer = 2; line_is_a_command = 1; return(ENG_CMD); } \\e(ng(ineering)?)?{WHITESPACE}+never { POS_STR(); YYLVALAC->integer = 3; line_is_a_command = 1; return(ENG_CMD); } \\cons(ervative)?({WHITESPACE}+{YESNO})? { int i = 0; line_is_a_command = 1; POS_STR(); while(!isspace(yytext[i])) i++; while(isspace(yytext[i])) i++; YYLVALAC->integer = parse_yesno(yytext + i); return(GUARD_CMD); } \\h(ex(adecimal)?)? { line_is_a_command = 1; POS_STR(); return(HEX_CMD); } \\help { line_is_a_command = 1; POS_STR(); return(PRINT_HELP_CMD); } \\hlimit{WHITESPACE}*{DIGIT}+ { int i = 7; while (isspace(yytext[i])) ++i; if (yytext[i] != 0) YYLVALAC->integer = strtoul(yytext+i, NULL, 0); else YYLVALAC->integer = 0; line_is_a_command = 1; POS_STR(); return(HLIMIT_CMD); } \\ints? { line_is_a_command = 1; POS_STR(); return(INT_CMD); } \\del(im(iters)?)? { line_is_a_command = 1; POS_STR(); return(DELIM_CMD); } \\x { line_is_a_command = 1; POS_STR(); return(HEX_CMD); } \\li(st(vars)?)? { line_is_a_command = 1; POS_STR(); return(LISTVAR_CMD); } \\o(ct(al)?)? { line_is_a_command = 1; POS_STR(); return(OCT_CMD); } \\open{WHITESPACE}+.* { int i = 5; char *returnme; Dprintf("open\n"); while (isspace(yytext[i])) ++i; returnme = strdup(yytext + i); /* now trim trailing whitespace */ i = (int)strlen(returnme) - 1; while (isspace(returnme[i])) { returnme[i] = 0; i--; } YYLVALAC->variable = returnme; Dprintf("filename: %s\n",returnme); line_is_a_command = 1; POS_STR(); return(OPEN_CMD); } \\p{WHITESPACE}*(({DIGIT}+)|(-1)) { int i = 2; while (isspace(yytext[i])) ++i; YYLVALAC->integer = strtol(yytext+i, NULL, 0); line_is_a_command = 1; POS_STR(); return(PRECISION_CMD); } \\pre(fix(es)?)? { line_is_a_command = 1; POS_STR(); return(PREFIX_CMD); } \\pref(s|erences)? { line_is_a_command = 1; POS_STR(); return(DISPLAY_PREFS_CMD); } \\r(ad(ians)?)? { line_is_a_command = 1; POS_STR(); return(RADIAN_CMD); } \\rou(nd(ing)?)?{WHITESPACE}+no(ne)? { YYLVALAC->integer = NO_ROUNDING_INDICATION; line_is_a_command = 1; POS_STR(); return(ROUNDING_INDICATION_CMD); } \\rou(nd(ing)?)?{WHITESPACE}+simple { YYLVALAC->integer = SIMPLE_ROUNDING_INDICATION; line_is_a_command = 1; POS_STR(); return(ROUNDING_INDICATION_CMD); } \\rou(nd(ing)?)?{WHITESPACE}+sig_fig { YYLVALAC->integer = SIG_FIG_ROUNDING_INDICATION; line_is_a_command = 1; POS_STR(); return(ROUNDING_INDICATION_CMD); } \\rou(nd(ing)?)? { YYLVALAC->integer = -1; line_is_a_command = 1; POS_STR(); return(ROUNDING_INDICATION_CMD); } \\re(member(_errors)?)? { line_is_a_command = 1; POS_STR(); return(REMEMBER_CMD); } \\bits{WHITESPACE}*{DIGIT}+ { int i = 5; while (isspace(yytext[i])) ++i; YYLVALAC->integer = strtoul(yytext+i, NULL, 0); line_is_a_command = 1; POS_STR(); return(BITS_CMD); } \\save{WHITESPACE}.* { int i = 5; char *returnme; while (isspace(yytext[i])) ++i; returnme = strdup(yytext + i); /* now trim trailing whitespace */ i = (int)strlen(returnme) - 1; while (isspace(returnme[i])) { returnme[i] = 0; i--; } YYLVALAC->variable = returnme; line_is_a_command = 1; POS_STR(); return(SAVE_CMD); } \\tsep{WHITESPACE}*. { int i = 5; while (isspace(yytext[i])) ++i; if (yytext[i] == 0) i--; YYLVALAC->character = yytext[i]; line_is_a_command = 1; POS_STR(); return(TSEP_CMD); } \\itsep{WHITESPACE}*. { int i = 5; while (isspace(yytext[i])) ++i; if (yytext[i] == 0) i--; YYLVALAC->character = yytext[i]; line_is_a_command = 1; POS_STR(); return(ITSEP_CMD); } \? { line_is_a_command = 1; POS_STR(); return(PRINT_HELP_CMD); } [Hh][Ee][Ll][Pp] { line_is_a_command = 1; POS_STR(); return(PRINT_HELP_CMD); } \\c(onv(ert)?)?{WHITESPACE}+{UNITCHRS}+({WHITESPACE}+to)?{WHITESPACE}+{UNITCHRS}+ { char *unitone; int i = 2; /* find the first space */ while (yytext[i] != 0 && ! isspace(yytext[i])) ++i; /* find the end of that space */ while (isspace(yytext[i])) ++i; unitone = yytext + i; /* skip the unit */ while (yytext[i] != 0 && ! isspace(yytext[i])) ++i; yytext[i++] = 0; /* onward to the word "to" */ while (isspace(yytext[i])) ++i; if (yytext[i] == 't' && yytext[i+1] == 'o' && isspace(yytext[i+2])) { i += 3; /* to */ } /* seek the next unit */ while (isspace(yytext[i])) ++i; YYLVALAC->conver.u1 = strdup(unitone); YYLVALAC->conver.u2 = strdup(yytext+i); line_is_a_command = 1; POS_STR(); return(CONVERT_CMD); } \\base{WHITESPACE}*{DIGIT}+ { int i = 5; while (isspace(yytext[i])) ++i; YYLVALAC->integer = strtoul(yytext + i, NULL, 0); line_is_a_command = 1; POS_STR(); return(BASE_CMD); } \\verbose { line_is_a_command = 1; POS_STR(); return(VERBOSE_CMD); } \\explain{WHITESPACE}*.* { int i = 9, j; while (isspace(yytext[i])) ++i; j = strlen(yytext+i); while (isspace(yytext[j])) { yytext[j] = 0; j--; } explain(yytext+i); line_is_a_command = 1; POS_STR(); } \\store { line_is_a_command = 1; POS_STR(); return(STORE_CMD); } \\cmod { line_is_a_command = 1; POS_STR(); return(CMOD_CMD); } %{ /* These are comments */ %} \/\*.*\*\/ { POS_STR(); } \/\/.* { POS_STR(); } \#.* { POS_STR(); } %{ /* These are the constants (except random) */ %} (e) { num_init_set_str(YYLVALAC->number,W_E,0); POS_STR(); return(NUMBER); } ([pP][iI])|(\317\200) { num_init(YYLVALAC->number); num_const_pi(YYLVALAC->number); POS_STR(); return(NUMBER); } random { num_init(YYLVALAC->number); while (num_random(YYLVALAC->number) != 0) ; num_mul_ui(YYLVALAC->number,YYLVALAC->number,UINT32_MAX); POS_STR(); return(NUMBER); } irandom { num_init(YYLVALAC->number); while (num_random(YYLVALAC->number) != 0) ; num_mul_ui(YYLVALAC->number,YYLVALAC->number,UINT32_MAX); num_rint(YYLVALAC->number,YYLVALAC->number); POS_STR(); return(NUMBER); } N[aA] { num_init_set_str(YYLVALAC->number,W_AVOGADROS_CONSTANT,0); POS_STR(); return(NUMBER); } k { num_init_set_str(YYLVALAC->number,W_BOLTZMANN_CONSTANT,0); POS_STR(); return(NUMBER); } Cc { num_init_set_str(YYLVALAC->number,W_COULOMB_CONSTANT,0); POS_STR(); return(NUMBER); } ec { num_init_set_str(YYLVALAC->number,W_ELEMENTARY_CHARGE,0); POS_STR(); return(NUMBER); } R { num_init_set_str(YYLVALAC->number,W_MOLAR_GAS_CONSTANT,0); POS_STR(); return(NUMBER); } G { num_init_set_str(YYLVALAC->number,W_GRAVITATIONAL_CONSTANT,0); POS_STR(); return(NUMBER); } g { num_init_set_str(YYLVALAC->number,W_GRAVITATIONAL_ACCELLERATION,0); POS_STR(); return(NUMBER); } Me { num_init_set_str(YYLVALAC->number,W_ELECTRON_MASS,0); POS_STR(); return(NUMBER); } Mp { num_init_set_str(YYLVALAC->number,W_PROTON_MASS,0); POS_STR(); return(NUMBER); } Mn { num_init_set_str(YYLVALAC->number,W_NEUTRON_MASS,0); POS_STR(); return(NUMBER); } Md { num_init_set_str(YYLVALAC->number,W_DEUTERON_MASS,0); POS_STR(); return(NUMBER); } (u)|(amu) { num_init_set_str(YYLVALAC->number,W_ATOMIC_MASS,0); POS_STR(); return(NUMBER); } c { num_init_set_str(YYLVALAC->number,W_SPEED_OF_LIGHT,0); POS_STR(); return(NUMBER); } h { num_init_set_str(YYLVALAC->number,W_PLANCK_CONSTANT,0); POS_STR(); return(NUMBER); } (\302\265|\316\274|mu)(0|zero|ZERO) { Number temp; num_init(YYLVALAC->number); num_init(temp); num_set_d(temp,1e-7); num_const_pi(YYLVALAC->number); num_mul_ui(YYLVALAC->number,YYLVALAC->number,4); num_mul(YYLVALAC->number,YYLVALAC->number,temp); num_free(temp); POS_STR(); return(NUMBER); } (epsilon|EPSILON|\316\265)(0|zero|ZERO) { num_init_set_str(YYLVALAC->number,W_PERMITTIVITY_OF_FREE_SPACE,0); POS_STR(); return(NUMBER); } (\302\265|\316\274|mu)B { num_init_set_str(YYLVALAC->number,W_BOHR_MAGNETON,0); POS_STR(); return(NUMBER); } (\302\265|\316\274|mu)N { num_init_set_str(YYLVALAC->number,W_NUCLEAR_MAGNETON,0); POS_STR(); return(NUMBER); } b { num_init_set_str(YYLVALAC->number,W_WIEN_DISPLACEMENT,0); POS_STR(); return(NUMBER); } a0 { num_init_set_str(YYLVALAC->number,W_BOHR_RADIUS,0); POS_STR(); return(NUMBER); } F { num_init_set_str(YYLVALAC->number,W_FARADAY_CONSTANT,0); POS_STR(); return(NUMBER); } (Vm)|(NAk) { num_init_set_str(YYLVALAC->number,W_MOLAR_VOLUME_OF_IDEAL_GAS,0); POS_STR(); return(NUMBER); } eV { num_init_set_str(YYLVALAC->number,W_ELECTRON_VOLT,0); POS_STR(); return(NUMBER); } sigma|\317\203 { num_init_set_str(YYLVALAC->number,W_STEFAN_BOLTZMANN,0); POS_STR(); return(NUMBER); } alpha|\316\261 { num_init_set_str(YYLVALAC->number,W_FINE_STRUCTURE,0); POS_STR(); return(NUMBER); } gamma|GAMMA|\316\263 { num_init(YYLVALAC->number); num_const_euler(YYLVALAC->number); POS_STR(); return(NUMBER); } re { num_init_set_str(YYLVALAC->number,W_ELECTRON_RADIUS,0); POS_STR(); return(NUMBER); } Kj { num_init_set_str(YYLVALAC->number,W_JOSEPHSON_CONSTANT,0); POS_STR(); return(NUMBER); } Rk { num_init_set_str(YYLVALAC->number,W_VON_KLITZING_CONSTANT,0); POS_STR(); return(NUMBER); } R(inf|\342\210\236) { num_init_set_str(YYLVALAC->number,W_RYDBERG_CONSTANT,0); POS_STR(); return(NUMBER); } Eh { num_init_set_str(YYLVALAC->number,W_HARTREE_ENERGY,0); POS_STR(); return(NUMBER); } Gf { num_init_set_str(YYLVALAC->number,W_FERMI_COUPLING_CONSTANT,0); POS_STR(); return(NUMBER); } M(\302\265|\316\274|mu) { num_init_set_str(YYLVALAC->number,W_MUON_MASS,0); POS_STR(); return(NUMBER); } M(t|tau|\317\204) { num_init_set_str(YYLVALAC->number,W_TAU_MASS,0); POS_STR(); return(NUMBER); } Mh { num_init_set_str(YYLVALAC->number,W_HELION_MASS,0); POS_STR(); return(NUMBER); } M(alpha|\316\261) { num_init_set_str(YYLVALAC->number,W_ALPHA_PARTICLE_MASS,0); POS_STR(); return(NUMBER); } n(0|zero|ZERO) { num_init_set_str(YYLVALAC->number,W_LOSCHMIDT_CONSTANT,0); POS_STR(); return(NUMBER); } c1 { num_init_set_str(YYLVALAC->number,W_FIRST_RADIATION_CONSTANT,0); POS_STR(); return(NUMBER); } c2 { num_init_set_str(YYLVALAC->number,W_SECOND_RADIATION_CONSTANT,0); POS_STR(); return(NUMBER); } G(0|zero|ZERO) { num_init_set_str(YYLVALAC->number,W_CONDUCTANCE_QUANTUM,0); POS_STR(); return(NUMBER); } Z(0|zero|ZERO) { num_init_set_str(YYLVALAC->number,W_IMPEDANCE_OF_VACUUM,0); POS_STR(); return(NUMBER); } (Phi|\316\246)(0|zero|ZERO) { num_init_set_str(YYLVALAC->number,W_MAGNETIC_FLUX_QUANTUM,0); POS_STR(); return(NUMBER); } \302\274 { num_init_set_d(YYLVALAC->number,0.25); POS_STR(); return(NUMBER); } \302\275 { num_init_set_d(YYLVALAC->number,0.5); POS_STR(); return(NUMBER); } \302\276 { num_init_set_d(YYLVALAC->number,0.75); POS_STR(); return(NUMBER); } K { num_init(YYLVALAC->number); num_const_catalan(YYLVALAC->number); POS_STR(); return(NUMBER); } @NaN@ { num_init(YYLVALAC->number); num_set_nan(YYLVALAC->number); POS_STR(); return (NUMBER); } @Inf@ { num_init(YYLVALAC->number); num_set_inf(YYLVALAC->number,1); POS_STR(); return (NUMBER); } %{ /* These are the grouping symbols */ %} [(] { POS_STR(); return(OPEN_PARENTHESES); } [)] { POS_STR(); return(CLOSE_PARENTHESES); } [{] { POS_STR(); return(OPEN_BRACE); } [}] { POS_STR(); return(CLOSE_BRACE); } \[ { POS_STR(); return(OPEN_BRACKET); } \] { POS_STR(); return(CLOSE_BRACKET); } %{ /* These are the binary operations */ %} not { POS_STR(); return(WNOT); } \302\254 { POS_CHAR(); return(WNOT); } [!] { POS_CHAR(); return(WBANG); } [*][*] { POS_STR(); return(WPOW); } \302\262 { POS_CHAR(); return(WSQR); } [+] { POS_CHAR(); return(WPLUS); } [*]|\303\227 { POS_CHAR(); return(WMULT); } [/]|\303\267 { POS_CHAR(); return(WDIV); } [%] { POS_CHAR(); return(WMOD); } [=] { POS_CHAR(); return(EQUALS_SIGN); } (\^) { POS_CHAR(); return(WPOW); } \| { POS_CHAR(); return(WBOR); } \& { POS_CHAR(); return(WBAND); } \~ { POS_CHAR(); return(WBNOT); } (\|\|)|(or) { POS_STR(); return(WOR); } \342\210\250 { POS_CHAR(); return(WOR); } (\&\&)|(and) { POS_STR(); return(WAND); } \342\210\247 { POS_CHAR(); return(WAND); } (\=\=)|(equals)|(eq) { POS_STR(); return(WEQUAL); } (\!\=)|(ne) { POS_STR(); return(WNEQUAL); } \342\211\240 { POS_CHAR(); return(WNEQUAL); } xor { POS_STR(); return(WBXOR); } \> { POS_CHAR(); return(WGT); } \< { POS_CHAR(); return(WLT); } \>\> { POS_STR(); return(WRSHFT); } \<\< { POS_STR(); return(WLSHFT); } \>\= { POS_STR(); return(WGEQ); } \342\211\245 { POS_CHAR(); return(WGEQ); } \<\= { POS_STR(); return(WLEQ); } \342\211\244 { POS_CHAR(); return(WLEQ); } %{ /* This is a special operator/function */ %} \-|\342\210\222 { POS_CHAR(); return(WMINUS); } %{ /* These are functions (unary operations) */ %} sin(e)? { POS_STR(); return(WSIN); } cos(in(e)?)? { POS_STR(); return(WCOS); } tan { POS_STR(); return(WTAN); } cot { POS_STR(); return(WCOT); } sec(ant)? { POS_STR(); return(WSEC); } csc|cosec(ant)? { POS_STR(); return(WCSC); } (asin)|(arcsin)|(sin^-1) { POS_STR(); return(WASIN); } (acos)|(arccos)|(cos^-1) { POS_STR(); return(WACOS); } (atan)|(arctan)|(tan^-1) { POS_STR(); return(WATAN); } (acot)|(arccot)|(cot^-1) { POS_STR(); return(WACOT); } (asec)|(arcsec)|(sec^-1) { POS_STR(); return(WASEC); } (acsc)|(arccsc)|(csc^-1) { POS_STR(); return(WACSC); } sinh { POS_STR(); return(WSINH); } cosh { POS_STR(); return(WCOSH); } tanh { POS_STR(); return(WTANH); } coth { POS_STR(); return(WCOTH); } sech { POS_STR(); return(WSECH); } csch { POS_STR(); return(WCSCH); } asinh|arsinh|areasinh|(sinh^-1) { POS_STR(); return(WASINH); } acosh|arcosh|areacosh|(cosh^-1) { POS_STR(); return(WACOSH); } atanh|artanh|areatanh|(tanh^-1) { POS_STR(); return(WATANH); } acoth|arcoth|areacoth|(tanh^-1) { POS_STR(); return(WACOTH); } asech|areasech|(sech^-1) { POS_STR(); return(WASECH); } acsch|areacsch|(csch^-1) { POS_STR(); return(WACSCH); } sinc { POS_STR(); return(WSINC); } log { POS_STR(); return(WLOG); } logtwo { POS_STR(); return(WLOGTWO); } ln { POS_STR(); return(WLN); } round { POS_STR(); return(WROUND); } abs { POS_STR(); return(WABS); } (sqrt)|(\342\210\232) { POS_STR(); return(WSQRT); } exp { POS_STR(); return(WEXP); } floor { POS_STR(); return(WFLOOR); } (ceil)|(ceiling) { POS_STR(); return(WCEIL); } cbrt { POS_STR(); return(WCBRT); } rand { POS_STR(); return(WRAND); } irand { POS_STR(); return(WIRAND); } fact { POS_STR(); return(WFACT); } comp { POS_STR(); return(WCOMP); } eint { POS_STR(); return(WEINT); } Gamma { POS_STR(); return(WGAMMA); } ln[gG]amma { POS_STR(); return(WLNGAMMA); } zeta { POS_STR(); return(WZETA); } '[^']*' { char * temp = strdup(yytext+1); temp[yyleng-2] = 0; YYLVALAC->variable = temp; POS_STR(); return(STRING); } {LETTER}+({LETTER}|{ACCEPTABLE})*{WHITESPACE}*= { int i = 0; while (yytext[i] != 0 && !isspace(yytext[i]) && yytext[i] != '=') i++; yytext[i] = 0; if (isfunc(yytext)) { report_error("'%s' is a function and functions cannot be reassigned.", yytext); scanerror = 1; } else if (isconst(yytext)) { report_error("'%s' is a pre-defined constant, which cannot be reassigned.", yytext); scanerror = 1; } else { YYLVALAC->variable = strdup(yytext); } POS_STR(); if (! scanerror) { return(ASSIGNMENT); } } {LETTER}+({LETTER}|{ACCEPTABLE})* { if (line_is_a_command) { YYLVALAC->variable = strdup(yytext); POS_STR(); return(VARIABLE); } else { report_error("Undefined variable: %s", yytext); scanerror = 1; POS_STR(); } } %{ %} ({NDIGIT}{DIGIT}?{DIGIT}?\.{DIGIT}{DIGIT}{DIGIT})(e[+-]?{DIGIT}+)? { /* simple decimals */ extern int yydebug; int retval; /* take out the ignored char */ strstrip(',', yytext); if (yydebug) Dprintf("ambiguous %s\n", yytext); retval = num_init_set_str(YYLVALAC->number, yytext, DEFAULT_BASE); if (-1 == retval) { report_error("Invalid characters for base 10"); scanerror = 1; } else { unsigned int t = count_digits(yytext); Dprintf("simple decimals digits in %s: %u (%u)\n",yytext,t,sig_figs); if (t ", yytext); retval = num_init_set_str(YYLVALAC->number, yytext, DEFAULT_BASE); if (-1 == retval) { report_error("Invalid characters for base 10"); scanerror = 1; } else { unsigned int t = count_digits(yytext); Dprintf("zero optional decimal digits in %s: %u (%u)\n",yytext,t,sig_figs); if (t ", yytext); retval = num_init_set_str(YYLVALAC->number, yytext, DEFAULT_BASE); if (-1 == retval) { report_error("Invalid characters for base 10"); scanerror = 1; } else { unsigned int t = count_digits(yytext); char * period = strchr(yytext,'.'); Dprintf("period: %s\n",period); if (period == NULL) { // no period means subtract the zeros period = yytext+strlen(yytext)-1; while (*period == '0') { t--; period--; } Dprintf("period: %s\n",period); } Dprintf("big ugly digits in %s: %u (%u)\n",yytext,t,sig_figs); if (t ", yytext); retval = num_init_set_str(YYLVALAC->number,yytext,16); if (-1 == retval) { report_error("some characters invalid for base 16"); scanerror = 1; } else { unsigned int t = count_digits(yytext); //strlen(yytext+2); if (yydebug) { num_out_str(stdout,DEFAULT_BASE,YYLVALAC->number); printf("\n"); } Dprintf("hex digits in %s: %u (%u)\n",yytext,t,sig_figs); if (tnumber,0); POS_STR(); } else { /*unsigned long int value;*/ unsigned int t; int retval; /* take out the ignored char */ strstrip(',', yytext); retval = num_init_set_str(YYLVALAC->number,yytext,8); if (-1 == retval) { report_error(strerror(errno)); scanerror = 1; } /*sscanf(yytext,"%lo",&value); yylval.number = value; */ t = yyleng-1; //strlen(yytext+1); Dprintf("octal digits in %s: %u (%u)\n",yytext,t,sig_figs); if (tnumber,0); } else { int retval; /* take out the ignored char */ strstrip(',', yytext); retval = num_init_set_str(YYLVALAC->number,yytext,2); if (-1 == retval) { report_error("Expected a 0 or 1 for binary."); scanerror = 1; } else { unsigned int t = count_digits(yytext); //strlen(yytext+2); if (yydebug) { num_out_str(stdout,DEFAULT_BASE,YYLVALAC->number); printf("\n"); } Dprintf("binary digits in %s: %u (%u)\n",yytext,t,sig_figs); if (t /* Internal Headers */ #include "iscmd.h" const struct name_with_exp commands[] = { { { "b", "bin", "binary", NULL}, "This displays the output in binary."}, { { "store", NULL}, "Saves the variable specified in the preload file, ~/.wcalc_preload. Use like so: \\store variablename"}, { { "q", NULL}, "Exits the program."}, { { "d", "dec", "decimal", NULL }, "This displays the output in decimal."}, { { "delim", NULL }, "This toggles the formatting of output such that delimiters are inserted in integers."}, { { "dsep", NULL }, "Used like so: \\dsepX This sets the decimal separator to X. By default, it is a period (.)."}, { { "e", "eng", "engineering", NULL }, "This toggles the formatting of output between decimal and scientific notation."}, { { "color", NULL}, "Toggles the use of color in the commandline output."}, { { "cons", "conservative", NULL}, "Toggles precision guards."}, { { "h", "hex", "hexadecimal", "x", NULL}, "This displays the output in hexadecimal."}, { { "help", NULL }, "This displays a generic help message."}, { { "hlimit", NULL }, "This places (or removes) a limit on the number of things stored in the history. Use like this: \\hlimitX where X is a number. 0 removes the limit."}, { { "ints", NULL }, "Toggles whether long integers will be abbreviated or not (conflicts with engineering notation for large numbers, but not for decimals)."}, { { "li", "list", "listvars", NULL }, "Prints out the currently defined variables."}, { { "o", "oct", "octal", NULL}, "This displays the output in octal."}, { { "open", NULL}, "Loads a saved file. Used like this: \\openXXXXX where XXXXX is the name of the file to load."}, { { "p", NULL }, "Sets the precision. Use it like so: \\pX where X is the desired precision. Precision here is in digits. This setting only affects display. -1 means \"auto\"."}, { { "pre", "prefix", "prefixes", NULL}, "Toggles whether prefixes are shown with the output."}, { { "pref", "prefs", "preferences", NULL}, "Prints out the current preference settings."}, { { "r", "rad", "radians", NULL}, "Toggles radian mode for trigonometric functions."}, { { "rou", "round", "rounding", NULL}, "Sets the rounding indication. The possible arguments to this preference are \"none\", \"simple\", and \"sig_fig\". Use like this: \\round none"}, { { "re", "remember", "remember_errors", NULL }, "Toggles whether errors are remembered in history."}, { { "assert", NULL }, "Internal debugging command, used for testing."}, { { "bits", NULL}, ""}, { { "save", NULL}, "Saves the history and variable list to a file. Used like this: \\saveXXXXX where XXXXX is the name of the file to save."}, { { "tsep", NULL}, "Used like this: \\tsepX Sets the thousands-place separator character to X. The default is a comma (,)."}, { { "c", "conv", "convert", NULL}, "Used either like this: \"\\convert unit1 to unit2\" or like this: \"\\convert unit1 unit2\". Converts the previous answer from the first unit to the second."}, { { "base", NULL}, "Prints out the previous answer in any base from 2 to 36."}, { { "verbose", NULL}, "Prints out the lines to be evaluated before evaluating them."}, { { "explain", NULL}, "Gives you information about commands, variables, constants and functions."}, { { "cmod", NULL}, "Changes how the modulus operator (%%) behaves with negative numbers. The default is to behave like the C programming language modulus, the other is slightly more flexible. For example, with the default setting:\t-340 %% 60 == -40; 340 %% -60 == 40; -340 %% -60 == -40When this setting is toggled, it behaves like this:\t-340 %% 60 == -40; 340 %% -60 == -20; -340 %% -60 == 20"}, { { 0 }, NULL } }; int iscmd(const char *str) { /*{{{*/ size_t i; for (i = 0; commands[i].explanation; i++) { for (unsigned j=0; commands[i].names[j]; j++) { if (strcmp(commands[i].names[j], str) == 0) { return 1; } } } return 0; } /*}}}*/ /* vim:set expandtab: */ wcalc-2.5/src/common/parser.y0000664000175000017500000004175712450340234013154 00000000000000/*%pure-parser */ /* this may be a bison-only thing... */ /*%error-verbose*/ %{ /*#define REENTRANT_PARSER */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #if ! defined(HAVE_CONFIG_H) || HAVE_STRING_H # include #else # if !HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr (), *strrchr (); #endif #include #include #include "number.h" #include #include #include #include /* for isatty() */ #include "calculator.h" #include "variables.h" #include "files.h" #include "conversion.h" #include "number_formatting.h" #include "output.h" /* Based on the headstart code by Shawn Ostermann * modified by Kyle Wheeler */ /* include debugging code, in case we want it */ #define YYDEBUG 1 /* to make it stop complaining about undeclared functions */ int yylex(void); int yyerror(char *error_string, ...); int lines = 1; int synerrors = 0; short scanerror = 0; char * errstring = NULL; int errloc = -1; int show_line_numbers = 0; %} %union { /* the types that we use in the tokens */ enum functions function; enum operations operation; Number number; long integer; enum commands cmd; char * variable; char character; struct conv_req conver; } %token DEC_CMD OCT_CMD HEX_CMD BIN_CMD DISPLAY_PREFS_CMD %token RADIAN_CMD REMEMBER_CMD LISTVAR_CMD STORE_CMD CMOD_CMD %token PRINT_HELP_CMD PREFIX_CMD INT_CMD VERBOSE_CMD DELIM_CMD %token ASSERT_CMD %token ENG_CMD HLIMIT_CMD ROUNDING_INDICATION_CMD %token PRECISION_CMD BITS_CMD BASE_CMD GUARD_CMD %token CONVERT_CMD %token EOLN OPEN_PARENTHESES CLOSE_PARENTHESES OPEN_BRACE %token CLOSE_BRACE OPEN_BRACKET CLOSE_BRACKET %token WPLUS WMINUS WMULT WDIV WMOD EQUALS_SIGN WPOW WEXP WSQR %token WOR WAND WEQUAL WNEQUAL WGT WLT WGEQ WLEQ %token WLSHFT WRSHFT WBOR WBAND WBXOR %token WBNOT WNOT WLOG WLN WROUND WABS WSQRT WCEIL WFLOOR WCBRT WLOGTWO WBANG %token WSIN WCOS WTAN WASIN WACOS WATAN WSINH WCOSH WTANH WASINH WACOSH WATANH %token WCOT WACOT WCOTH WACOTH WRAND WIRAND WFACT WCOMP WSEC WCSC WASEC WACSC %token WSECH WCSCH WASECH WACSCH WEINT WGAMMA WLNGAMMA WZETA WSINC %token NUMBER %token VARIABLE STRING OPEN_CMD SAVE_CMD ASSIGNMENT %token IDSEP_CMD DSEP_CMD ITSEP_CMD TSEP_CMD %type exp exp_l2 exp_l3 %type oval capsule parenthated %type sign %type command %type func %type optionalstring %left WAND WOR WBAND WBOR %left WEQUAL WNEQUAL WGT WLT WGEQ WLEQ %left WMINUS WPLUS %left WMULT WDIV WMOD WLSHFT WRSHFT %right WBANG WSQR %left WNOT WBNOT WNEG %right WPOW %expect 1560 %% /* beginning of the parsing rules */ input : lines | ; lines : oneline | oneline lines ; oneline : exp eoln { extern int line_is_a_command; if (scanerror) { scanerror = synerrors = 0; } else { if (! synerrors && ! yynerrs) { set_prettyanswer($1); num_set(last_answer,$1); } else { synerrors = 0; report_error("Too many errors."); } } num_free($1); compute = 1; line_is_a_command = 0; } | assignment eoln { extern int line_is_a_command; compute = 1; line_is_a_command = 0; } | command eoln { extern int line_is_a_command; switch ($1) { case redisplay: if (! synerrors) { set_prettyanswer(last_answer); } else { synerrors = 0; report_error("Too many errors."); } break; case nothing: break; } compute = 1; line_is_a_command = 0; } | eoln /* blank line */ { extern int line_is_a_command; if (scanerror) { scanerror = synerrors = 0; } compute = 1; line_is_a_command = 0; } | error eoln { extern int line_is_a_command; /* there is the possibility of lost memory here, * because "error" has no data type * (and because I'm passing around *actual* Number's * rather than pointers to them) */ /* report_error("3 Error in scanner halts parser."); */ compute = 1; line_is_a_command = 0; } /* if we got an error on the line */ ; eoln : EOLN { ++lines; } ; command : HEX_CMD { $$ = isatty(0)?redisplay:nothing; conf.output_format = HEXADECIMAL_FORMAT; display_output_format(HEXADECIMAL_FORMAT); } | OCT_CMD { $$ = isatty(0)?redisplay:nothing; conf.output_format = OCTAL_FORMAT; display_output_format(OCTAL_FORMAT); } | BIN_CMD { $$ = isatty(0)?redisplay:nothing; conf.output_format = BINARY_FORMAT; display_output_format(BINARY_FORMAT); } | DEC_CMD { $$ = isatty(0)?redisplay:nothing; conf.output_format = DECIMAL_FORMAT; display_output_format(DECIMAL_FORMAT); } | ASSERT_CMD { if (strcmp($1, pretty_answer)) { fprintf(stderr, "Assertion on line %u:\n", lines); fprintf(stderr, " Pretty Answer is: '%s'\n", pretty_answer); fprintf(stderr, "...should have been: '%s'\n", $1); exit(EXIT_FAILURE); } free($1); } | DSEP_CMD { $$ = nothing; if (conf.thou_delimiter != $1) { conf.dec_delimiter = $1; display_status("%c is now the decimal separator.", $1); } else { extern int column; column --; report_error("%c cannot be the decimal separator. It is the thousands separator.", $1); }} | IDSEP_CMD { $$ = nothing; if (conf.in_thou_delimiter != $1 && (conf.in_thou_delimiter != 0 || conf.thou_delimiter != $1)) { conf.in_dec_delimiter = $1; display_status("%c is now the decimal separator for input.\n", $1); } else { extern int column; column --; report_error("%c cannot be the decimal separator. It is the thousands separator.\n", $1); }} | TSEP_CMD { $$ = nothing; if (conf.dec_delimiter != $1) { conf.thou_delimiter = $1; display_status("%c is now the thousands separator.\n", $1); } else if (standard_output) { extern int column; column --; report_error("%c cannot be the thousands separator. It is the decimal separator.\n", $1); }} | ITSEP_CMD { $$ = nothing; if (conf.in_dec_delimiter != $1 && (conf.in_dec_delimiter != 0 || conf.dec_delimiter != $1)) { conf.in_thou_delimiter = $1; display_status("%c is now the thousands separator for input.\n", $1); } else { extern int column; column --; report_error("%c cannot be the thousands separator. It is the decimal separator.\n", $1); } } | DELIM_CMD { $$ = nothing; conf.print_commas = ! conf.print_commas; display_status("Will %sshow separators when printing large numbers.\n",conf.print_commas?"":"not "); } | INT_CMD { $$ = nothing; conf.print_ints = ! conf.print_ints; display_status("Will %suse abbreviations for large integers.\n",conf.print_ints?"not ":""); } | VERBOSE_CMD { $$ = nothing; conf.verbose = ! conf.verbose; display_status("Will %secho the lines to be evaluated.\n",conf.verbose?"":"not "); } | DISPLAY_PREFS_CMD { display_prefs(); $$ = nothing; } | RADIAN_CMD { $$ = nothing; conf.use_radians = ! conf.use_radians; display_status("Now Using %s\n", conf.use_radians?"Radians":"Degrees");} | GUARD_CMD { $$ = nothing; switch ($1) { case 0: conf.precision_guard = 0; break; case 1: conf.precision_guard = 1; break; case -1: conf.precision_guard = ! conf.precision_guard; break; } display_status("Now %sUsing Conservative Precision\n", conf.precision_guard?"":"Not ");} | PRECISION_CMD { $$ = isatty(0)?redisplay:nothing; conf.precision = $1; if (conf.precision == -1) { display_status("Precision = auto"); } else { display_status("Precision = %i", conf.precision); } } | HLIMIT_CMD { $$ = nothing; if ($1) { conf.history_limit = 1; conf.history_limit_len = $1; } else { conf.history_limit = 0; conf.history_limit_len = 0; } } | LISTVAR_CMD { printvariables(); $$ = nothing; } | ENG_CMD { if ($1 < 0) { switch (conf.engineering) { case always: conf.engineering = never; break; case never: conf.engineering = automatic; break; case automatic: conf.engineering = always; break; } } else { switch($1) { case 1: conf.engineering = automatic; break; case 2: conf.engineering = always; break; case 3: conf.engineering = never; break; } } display_status("Engineering notation is %s\n",(conf.engineering==always)?"always used":(conf.engineering==never)?"never used":"used if convenient"); $$ = isatty(0)?redisplay:nothing; } | ROUNDING_INDICATION_CMD { $$ = nothing; if ($1 != -1) conf.rounding_indication = $1; else { conf.rounding_indication += 1; conf.rounding_indication %= 3; } display_status("Will display %s rounding indication", (conf.rounding_indication==NO_ROUNDING_INDICATION)?"no": ((conf.rounding_indication==SIMPLE_ROUNDING_INDICATION)?"simple":"significant figure")); } | PREFIX_CMD { $$ = nothing; conf.print_prefixes = ! conf.print_prefixes; display_status("Will %sprint number prefixes\n",conf.print_prefixes?"":"not "); } | REMEMBER_CMD { $$ = nothing; conf.remember_errors = ! conf.remember_errors; display_status("Statements that produce errors are %s.\n",conf.remember_errors?"recorded":"forgotten"); } | PRINT_HELP_CMD { $$ = nothing; display_interactive_help(); } | OPEN_CMD { extern char* open_file; int i; unsigned int len = strlen($1)+1; open_file = malloc(len); strncpy(open_file, $1, len); /* strip trailing spaces */ for (i=strlen(open_file)-1;i>=0;i--) { if (open_file[i] != ' ') break; open_file[i] = 0; } if (strlen(open_file) == 0) { free(open_file); open_file = NULL; report_error("Please specify a file name to open."); } $$ = nothing; } | SAVE_CMD { int retval; retval = saveState($1); if (retval) { report_error("Could not save file. (%s)", (char*)strerror(retval)); } $$ = nothing; } | BITS_CMD { if ($1 < NUM_PREC_MIN) { report_error("Minimum precision is %lu (you asked for %lu).\n", (unsigned long)NUM_PREC_MIN, $1); } else if ($1 > NUM_PREC_MAX) { report_error("Maximum precision is %lu (you asked for %lu).\n", (unsigned long)NUM_PREC_MAX, $1); } else { num_set_default_prec($1); } $$ = nothing; } | CONVERT_CMD { int category = identify_units($1.u1,$1.u2); switch (category) { case -1: report_error("Units must be in the same category."); break; case -2: report_error("Units provided are not recognized."); break; case -3: report_error("First unit provided was not recognized (%s).", $1.u1); break; case -4: report_error("Second unit provided was not recognized (%s).", $1.u2); break; default: uber_conversion(last_answer,category,unit_id(category,$1.u1),unit_id(category,$1.u2),last_answer); } free($1.u1); free($1.u2); $$ = redisplay; } | BASE_CMD { if ($1 >= 2 && $1 <= 36) { char * str, junk; str = num_to_str_complex(last_answer, $1, conf.engineering, -1, conf.print_prefixes, &junk); display_status("base %i: %s\n",$1,str); } else { report_error("Base must be greater than one and less than 37."); } $$ = nothing; } | STORE_CMD VARIABLE { int retval = storeVar($2); if (retval == 0) { display_status("successfully stored %s\n",$2); } else { report_error("Failure to store variable!"); } free($2); } | CMOD_CMD { $$ = nothing; conf.c_style_mod = ! conf.c_style_mod; display_status("The mod (%%) operation will %sbehave like it does in the C programming language.\n",conf.c_style_mod?"":"not "); } ; optionalstring : STRING { $$ = $1; } | { $$ = NULL; } ; assignment : ASSIGNMENT exp optionalstring { if (compute && ! scanerror) { /* if standard_error, q is reserved */ if (standard_output && !strcmp($1,"q")) { report_error("q cannot be assigned a value. q is used to exit."); } else { if (putval($1,$2,$3) == 0) { display_val($1); } else { report_error("There was a problem assigning the value."); } } num_free($2); } else { scanerror = 0; report_error("Scanner error halts parser."); } free($1); if ($3 != NULL) { free($3); } } | ASSIGNMENT STRING optionalstring { if (compute && ! scanerror) { if (standard_output && !strcmp($1,"q")) { report_error("q cannot be assigned an expression. q is used to exit."); } else { if (putexp($1,$2,$3) == 0) { display_val($1); } else { report_error("There was a problem assigning the expression."); } } } else { scanerror = 0; report_error("Scanner error halts parser."); } free($1); free($2); if ($3 != NULL) { free($3); } } | NUMBER EQUALS_SIGN exp optionalstring { report_error("Constants cannot be assigned to other values."); num_free($3); if ($4 != NULL) { free($4); } } | NUMBER EQUALS_SIGN STRING optionalstring { report_error("Constants cannot be assigned to other values."); free($3); if ($4 != NULL) { free($4); } } ; exp : exp WMINUS exp { num_init($$); simple_exp($$, $1, wminus, $3); num_free($1); num_free($3); } | exp WPLUS exp { num_init($$); simple_exp($$, $1, wplus, $3); num_free($1); num_free($3); } | exp WAND exp { num_init($$); simple_exp($$, $1, wand, $3); num_free($1); num_free($3); } | exp WOR exp { num_init($$); simple_exp($$, $1, wor, $3); num_free($1); num_free($3); } | exp WBOR exp { num_init($$); simple_exp($$, $1, wbor, $3); num_free($1); num_free($3); } | exp WBXOR exp { num_init($$); simple_exp($$, $1, wbxor, $3); num_free($1); num_free($3); } | exp WBAND exp { num_init($$); simple_exp($$, $1, wband, $3); num_free($1); num_free($3); } | exp WEQUAL exp { num_init($$); simple_exp($$, $1, wequal, $3); num_free($1); num_free($3); } | exp WNEQUAL exp { num_init($$); simple_exp($$, $1, wnequal, $3); num_free($1); num_free($3); } | exp WGT exp { num_init($$); simple_exp($$, $1, wgt, $3); num_free($1); num_free($3); } | exp WLT exp { num_init($$); simple_exp($$, $1, wlt, $3); num_free($1); num_free($3); } | exp WGEQ exp { num_init($$); simple_exp($$, $1, wgeq, $3); num_free($1); num_free($3); } | exp WLEQ exp { num_init($$); simple_exp($$, $1, wleq, $3); num_free($1); num_free($3); } | exp WLSHFT exp { num_init($$); simple_exp($$, $1, wlshft, $3); num_free($1); num_free($3); } | exp WRSHFT exp { num_init($$); simple_exp($$, $1, wrshft, $3); num_free($1); num_free($3); } | exp WMULT exp { num_init($$); simple_exp($$, $1, wmult, $3); num_free($1); num_free($3); } | exp WDIV exp { num_init($$); simple_exp($$, $1, wdiv, $3); num_free($1); num_free($3); } | exp WMOD exp { num_init($$); simple_exp($$, $1, wmod, $3); num_free($1); num_free($3); } | exp_l2 ; func : WSIN { $$ = wsin; } | WCOS { $$ = wcos; } | WTAN { $$ = wtan; } | WCOT { $$ = wcot; } | WSEC { $$ = wsec; } | WCSC { $$ = wcsc; } | WASIN { $$ = wasin; } | WACOS { $$ = wacos; } | WATAN { $$ = watan; } | WACOT { $$ = wacot; } | WASEC { $$ = wasec; } | WACSC { $$ = wacsc; } | WSINH { $$ = wsinh; } | WCOSH { $$ = wcosh; } | WTANH { $$ = wtanh; } | WCOTH { $$ = wcoth; } | WSECH { $$ = wsech; } | WCSCH { $$ = wcsch; } | WASINH { $$ = wasinh; } | WACOSH { $$ = wacosh; } | WATANH { $$ = watanh; } | WACOTH { $$ = wacoth; } | WASECH { $$ = wasech; } | WACSCH { $$ = wacsch; } | WLOG { $$ = wlog; } | WLOGTWO { $$ = wlogtwo; } | WLN { $$ = wln; } | WROUND { $$ = wround; } | WABS { $$ = wabs; } | WSQRT { $$ = wsqrt; } | WEXP { $$ = wexp; } | WFLOOR { $$ = wfloor; } | WCEIL { $$ = wceil; } | WCBRT { $$ = wcbrt; } | WRAND { $$ = wrand; } | WIRAND { $$ = wirand; } | WBNOT { $$ = wbnot; } | WNOT { $$ = wnot; } | WFACT { $$ = wfact; } | WCOMP { $$ = wcomp; } | WEINT { $$ = weint; } | WGAMMA { $$ = wgamma; } | WLNGAMMA { $$ = wlngamma; } | WZETA { $$ = wzeta; } | WSINC { $$ = wsinc; } ; nullexp : OPEN_PARENTHESES CLOSE_PARENTHESES | OPEN_BRACE CLOSE_BRACE | OPEN_BRACKET CLOSE_BRACKET ; sign : WMINUS { $$ = -1; } | WPLUS { $$ = 1; } | { $$ = 1; } ; exp_l2 : exp_l3 | sign exp_l2 oval { num_init($$); num_mul($2,$2,$3); num_mul_si($$,$2,$1); num_free($2); num_free($3); } ; oval : exp_l3 oval { num_init_set($$,$1); num_free($1); num_free($2); } | { num_init_set_ui($$,1); } ; exp_l3 : capsule oval { num_init($$); simple_exp($$,$1,wmult,$2); num_free($1); num_free($2);} | capsule WPOW sign exp_l3 oval { num_init($$); num_mul_si($4,$4,$3); num_pow($1,$1,$4); num_mul($$,$1,$5); num_free($1); num_free($4); num_free($5);} ; parenthated: OPEN_PARENTHESES exp CLOSE_PARENTHESES { num_init($$); num_set($$,$2); num_free($2); } | OPEN_BRACE exp CLOSE_BRACE { num_init($$); num_set($$,$2); num_free($2); } | OPEN_BRACKET exp CLOSE_BRACKET { num_init($$); num_set($$,$2); num_free($2); } | nullexp { num_init_set_ui($$,0); } ; capsule: parenthated { num_init($$); num_set($$,$1); num_free($1); } | NUMBER | capsule WBANG { num_init($$); num_factorial($$,num_get_ui($1)); num_free($1); } | capsule WSQR { num_init($$); num_sqr($$,$1); num_free($1); } | func parenthated %prec WMULT { num_init($$); uber_function($$,$1,$2); num_free($2); } | func sign capsule %prec WEQUAL { num_init($$); num_mul_si($3,$3,$2); uber_function($$,$1,$3); num_free($3); } ; %% int yyerror(char *error_string, ...) { va_list ap; char error[1000]; ++synerrors; va_start(ap,error_string); vsnprintf(error,1000,error_string,ap); va_end(ap); report_error(error); return 0; } wcalc-2.5/src/common/isfunc.c0000664000175000017500000000751012451266142013114 00000000000000#ifdef HAVE_CONFIG_H # include "config.h" #endif /* System Headers */ #include /* Internal Headers */ #include "isfunc.h" const struct name_with_exp funcs[] = { { { "sin", NULL }, "A trigonometric function." }, { { "cos", NULL }, "A trigonometric function." }, { { "tan", NULL }, "A trigonometric function." }, { { "cot", NULL }, "A trigonometric function." }, { { "asin", "arcsin", NULL }, "The inverse of the standard trigonometric function." }, { { "acos", "arccos", NULL }, "The inverse of the standard trigonometric function." }, { { "atan", "arctan", NULL }, "The inverse of the standard trigonometric function." }, { { "acot", "arctan", NULL }, "The inverse of the standard trigonometric function." }, { { "sinh", NULL }, "A standard hyperbolic trigonometric function." }, { { "cosh", NULL }, "A standard hyperbolic trigonometric function." }, { { "tanh", NULL }, "A standard hyperbolic trigonometric function." }, { { "coth", NULL }, "A standard hyperbolic trigonometric function." }, { { "asinh", "areasinh", NULL }, "The inverse of the standard hyperbolic trigonometric function." }, { { "acosh", "areacosh", NULL }, "The inverse of the standard hyperbolic trigonometric function." }, { { "atanh", "areatanh", NULL }, "The inverse of the standard hyperbolic trigonometric function." }, { { "acoth", "areacoth", NULL }, "The inverse of the standard hyperbolic trigonometric function." }, { { "log", NULL }, "A logarithm (base 10)." }, { { "logtwo", NULL }, "A logarithm (base 2)." }, { { "ln", NULL }, "A logarithm (base e). Also known as the \"natural\" log." }, { { "round", NULL }, "Returns the closest integer to the input number." }, { { "abs", NULL }, "The absolute value (the distance of the number from zero)." }, { { "floor", NULL }, "Returns the biggest integer that is not bigger than the input number." }, { { "ceil", "ceiling", NULL }, "Returns the smallest integer that is not smaller than the input number." }, { { "sqrt", NULL }, "The square root function." }, { { "cbrt", NULL }, "The cube root function." }, { { "exp", NULL }, "Returns the value of e to the given power. Equivalent to: e^" }, { { "fact", NULL }, "Returns the factorial of the input number." }, { { "comp", NULL }, "Returns the one's complement of the input number." }, #ifdef HAVE_MPFR_22 { { "eint", NULL }, "The exponential integral function." }, { { "Gamma", "gamma", NULL }, "Returns the Gamma function of the input number. The Gamma function extends the factorial function to complex and non-natural numbers." }, { { "lnGamma", "lngamma", NULL }, "Returns the natural log of the Gamma function of the input number." }, #endif { { "rand", NULL }, "Returns a random number between 0 and the input number." }, { { "irand", NULL }, "Returns a random integer between 0 and the input number." }, { { "zeta", NULL }, "Returns the Riemann zeta function of the input number. This is used primarily in number theory, but also has applications in physics, probability theory, and applied statistics." }, { { "sinc", NULL }, "Sinus cardinalis, also known as the interpolation function, filtering function, or the first spherical Bessel function, is the product of a sine function and a monotonically decreasing function." }, { { 0 }, NULL } }; int isfunc(const char *str) { /*{{{*/ unsigned i, j; for (i = 0; funcs[i].explanation; i++) { for (j = 0; funcs[i].names[j]; j++) { if (strcmp(funcs[i].names[j], str) == 0) { return 1; } } } return 0; } /*}}}*/ /* vim:set expandtab: */ wcalc-2.5/src/common/variables.c0000664000175000017500000002135312265571253013603 00000000000000#ifdef HAVE_CONFIG_H # include "config.h" #endif /* System Headers */ #include #if HAVE_STRING_H || !defined(HAVE_CONFIG_H) # include #endif /* Internal Headers */ #include "number.h" #include "calculator.h" /* for report_error */ #include "list.h" #include "variables.h" #include "output.h" #define THE_VALUE 0 #define THE_STRUCTURE 2 #define THE_EXPRESSION 4 #define HASH_LENGTH = 101 List them = NULL; /* Hidden, internal functions */ static void *getvar_core(const char *key, const int all_or_nothing); void initvar(void) { /*{{{ */ } /*}}} */ /* This function deletes all the variables and frees all the memory. */ void cleanupvar(void) { /*{{{ */ variable_t *freeme; while ((freeme = (variable_t *)getHeadOfList(them)) != NULL) { free(freeme->key); if (freeme->exp == 1) { free(freeme->expression); } else { num_free(freeme->value); } if (freeme->description) { free(freeme->description); } free(freeme); } } /*}}} */ /* Returns the number of variables */ size_t numvars() { /*{{{ */ return listLen(them); } /*}}} */ /* prints out all the variables */ void printvariables(void) { /*{{{*/ ListIterator li = NULL; variable_t *cursor = NULL; unsigned digits = 1; if (!them || (listLen(them) == 0)) { return; } { unsigned len = listLen(them); while (len > 9) { digits++; len /= 10; } } li = getListIterator(them); cursor = (variable_t *)nextListElement(li); if (cursor != NULL) { unsigned count = 1; display_var(cursor, count++, digits); while ((cursor = (variable_t *)nextListElement(li)) != NULL) { display_var(cursor, count++, digits); } } freeListIterator(li); } /*}}}*/ /* returns a list of variables (only the base array is malloc'd, the rest must * NOT be freed */ char **listvarnames(void) { /*{{{*/ size_t i; char **ret = calloc(listLen(them) + 1, sizeof(char *)); ListIterator li = NULL; variable_t *cursor = NULL; if (!them || (listLen(them) == 0)) { return ret; } li = getListIterator(them); i = 0; while ((cursor = (variable_t *)nextListElement(li)) != NULL) { ret[i++] = cursor->key; } freeListIterator(li); return ret; /*}}}*/ } void delnvar(const size_t i) { /*{{{ */ variable_t *freeme; freeme = (variable_t *)getListElement(them, i); if (freeme) { free(freeme->key); if (freeme->exp == 1) { free(freeme->expression); } else { num_free(freeme->value); } free(freeme); } } /*}}} */ variable_t *getrealnvar(const size_t i) { /*{{{ */ return (variable_t *)peekListElement(them, i); } /*}}} */ answer_t getvar(const char *key) { /*{{{ */ answer_t ans; Number *t = getvar_core(key, THE_VALUE); if (t) { num_init_set(ans.val, *t); ans.err = 0; ans.exp = NULL; } else { /* it's an error. * if you access ans.val, you deserve what you get */ ans.exp = NULL; ans.err = 1; } return ans; } /*}}} */ void getvarval(Number out, const char *key) { /*{{{ */ Number *t = getvar_core(key, THE_VALUE); if (t) { num_set(out, *t); } } /*}}} */ answer_t getvar_full(const char *key) { /*{{{ */ answer_t ans; variable_t *var; var = getvar_core(key, THE_STRUCTURE); if (var && !var->exp) { num_init_set(ans.val, var->value); ans.err = 0; ans.exp = NULL; ans.desc = var->description; } else if (var && var->exp) { ans.exp = var->expression; ans.desc = var->description; ans.err = 0; } else { ans.exp = NULL; ans.err = 1; } return ans; } /*}}} */ /* This function returns 1 if a variable by that key has already been created * and returns 0 if a variable by that key has not been created yet */ int varexists(const char *key) { /*{{{ */ variable_t *cursor = NULL; ListIterator li = NULL; if (!them || !strlen(key) || (listLen(them) == 0)) { return 0; } li = getListIterator(them); while ((cursor = (variable_t *)nextListElement(li)) != NULL) { if (!strncmp(cursor->key, key, strlen(cursor->key) + 1)) { break; } else { cursor = NULL; } } freeListIterator(li); return cursor ? 1 : 0; } /*}}} */ static void *getvar_core(const char *key, const int all_or_nothing) { /*{{{ */ variable_t *cursor = NULL; ListIterator li = NULL; if (!them || (key == NULL) || (*key == 0) || (listLen(them) == 0)) { return NULL; } li = getListIterator(them); while ((cursor = (variable_t *)nextListElement(li)) != NULL) { if (!strncmp(cursor->key, key, strlen(cursor->key) + 1)) { break; } else { cursor = NULL; } } freeListIterator(li); if (cursor) { switch (all_or_nothing) { case THE_VALUE: if (cursor->exp) { return NULL; } else { return &(cursor->value); } case THE_STRUCTURE: return cursor; case THE_EXPRESSION: return cursor->expression; } } return NULL; } /*}}} */ /* this adds the key-expression pair to the list. * if the key already exists, change the value to this */ int putexp(const char *key, const char *value, const char *desc) { /*{{{ */ variable_t *cursor = NULL; if (*key == 0) { return -1; } cursor = getvar_core(key, THE_STRUCTURE); if (!cursor) { // variable named "key" doesn't exist yet, so allocate memory cursor = calloc(sizeof(variable_t), 1); addToList(&them, cursor); } // by this point, we have a variable (cursor) in the list (them) if (cursor->key) { if (cursor->expression) { free(cursor->expression); } else { num_free(cursor->value); } if (cursor->description) { free(cursor->description); } } else { cursor->key = (char *)strdup(key); } // by this point, the cursor has been prepared to accept the exp/desc cursor->expression = (char *)strdup(value); if (desc != NULL) { cursor->description = (char *)strdup(desc); } else { cursor->description = NULL; } cursor->exp = 1; return 0; } /*}}} */ /* this adds the key-value pair to the list. * if the key already exists, change the value to this */ int putval(const char *key, const Number value, const char *desc) { /*{{{ */ variable_t *cursor = NULL; if ((key == NULL) || (*key == 0)) { return -1; } cursor = getvar_core(key, THE_STRUCTURE); if (!cursor) { // variable named "key" doesn't exist yet, so allocate memory cursor = calloc(1, sizeof(variable_t)); addToList(&them, cursor); } // by this point, we have a variable (cursor) in the list (them) // but key may not exist, and value may not be properly initialized if (!cursor->key) { cursor->key = (char *)strdup(key); num_init(cursor->value); } else if (cursor->expression) { free(cursor->expression); cursor->expression = NULL; num_init(cursor->value); } if (cursor->description) { free(cursor->description); } cursor->exp = 0; // by this point, the variable has a key, and an initialized value, // and is ready to receive the correct value/desc if (desc != NULL) { cursor->description = (char *)strdup(desc); } else { cursor->description = NULL; } num_set(cursor->value, value); return 0; } /*}}} */ /* vim:set expandtab: */ wcalc-2.5/src/common/number.c0000644000175000017500000004147312450336614013122 00000000000000#ifdef HAVE_CONFIG_H # include "config.h" #endif /* System Headers */ #include /* for gettimeofday() */ #include /* for perror() */ #include /* for strlen() */ #include /* for atexit() */ /* Internal Headers */ #include "number.h" #include "calculator.h" #ifdef HAVE_LIBMPFR gmp_randstate_t randstate; #endif static void numbers_cleanup(void) { /*{{{*/ #ifdef HAVE_LIBMPFR mpfr_free_cache(); #endif } /*}}}*/ void init_numbers(void) { /*{{{*/ #ifdef HAVE_LIBMPFR struct timeval tp; /* seed the random number generator */ if (gettimeofday(&tp, NULL) != 0) { perror("gettimeofday"); exit(EXIT_FAILURE); } gmp_randinit_default(randstate); gmp_randseed_ui(randstate, (unsigned long)(tp.tv_usec)); mpfr_set_default_prec(1024); #else srandom(time(NULL)); #endif /* ifdef HAVE_LIBMPFR */ atexit(numbers_cleanup); } /*}}}*/ int is_int(const Number potential_int) { /*{{{*/ Number temp; int ret; num_init(temp); #ifdef HAVE_LIBMPFR ret = num_trunc(temp, potential_int); num_free(temp); switch(ret) { case 2: case -2: return 0; default: return 1; } #else num_trunc(temp, potential_int); ret = num_is_equal(temp, potential_int); num_free(temp); return ret; #endif } /*}}}*/ #ifndef HAVE_LIBMPFR # include # include /* for HUGE_VAL, according to C89 */ void num_init(Number n) { n->nan = 1; } void num_init_set(Number n1, const Number n2) { num_init(n1); memcpy(n1, n2, sizeof(struct numberstruct)); } void num_init_set_d(Number n, const double d) { num_init(n); n->value = d; n->nan = 0; } void num_init_set_ui(Number n, const unsigned int ui) { num_init(n); n->value = (double)ui; n->nan = 0; } int num_init_set_str(Number n, const char *str, const int base) { num_init(n); return num_set_str(n, str, base); } void num_set(Number n1, const Number n2) { memcpy(n1, n2, sizeof(struct numberstruct)); } void num_set_d(Number n, const double d) { n->value = d; n->nan = 0; } void num_set_ui(Number n, const unsigned int ui) { n->value = (double)ui; n->nan = 0; } int num_set_str(Number n, const char *str, const int base) { char *endptr; Dprintf("base = %i, %c%c\n", base, str[0], str[1]); errno = 0; n->value = strtod(str, &endptr); if (endptr == str) { return -1; } if ((errno == ERANGE) && ((n->value == HUGE_VAL) || (n->value == 0.0))) { n->nan = 1; return -1; } n->nan = 0; return 0; } void num_set_nan(Number n) { n->value = 0.0; n->nan = 1; } void num_mul(Number ret, const Number n1, const Number n2) { if ((n1->nan == 0) && (n2->nan == 0)) { num_set_d(ret, n1->value * n2->value); } else { num_set_nan(ret); } } void num_mul_si(Number ret, const Number n, const int si) { if (n->nan == 0) { num_set_d(ret, n->value * si); } else { num_set_nan(ret); } } void num_mul_ui(Number ret, const Number n, const unsigned int ui) { if (n->nan == 0) { num_set_d(ret, n->value * ui); } else { num_set_nan(ret); } } void num_sqr(Number ret, const Number n) { num_mul(ret, n, n); } void num_sqrt(Number ret, const Number n) { if ((n->nan == 0) && (n->value >= 0.0)) { num_set_d(ret, sqrt(n->value)); } else { num_set_nan(ret); } } void num_cbrt(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, cbrt(n->value)); } else { num_set_nan(ret); } } void num_pow(Number ret, const Number n, const Number exp) { if ((n->nan == 0) && (exp->nan == 0)) { errno = 0; num_set_d(ret, pow(n->value, exp->value)); if (errno == EDOM) { num_set_nan(ret); } } else { num_set_nan(ret); } } void num_pow_si(Number ret, const Number n, const int exp) { if (n->nan == 0) { errno = 0; num_set_d(ret, pow(n->value, exp)); if (errno == EDOM) { num_set_nan(ret); } } else { num_set_nan(ret); } } void num_exp(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, exp(n->value)); } else { num_set_nan(ret); } } void num_factorial(Number ret, unsigned int n) { ret->value = (double)n; n--; while (n > 1 && ret->value < DBL_MAX) { ret->value *= n; n--; } if (ret->value < DBL_MAX) { ret->nan = 0; } else { num_set_nan(ret); } } void num_log10(Number ret, const Number n) { if ((n->nan == 0) && (n->value > 0.0)) { num_set_d(ret, log10(n->value)); } else { num_set_nan(ret); } } void num_log2(Number ret, const Number n) { if ((n->nan == 0) && (n->value > 0.0)) { num_set_d(ret, log10(n->value) / log10(2.0)); } else { num_set_nan(ret); } } void num_log(Number ret, const Number n) { if ((n->nan == 0) && (n->value > 0.0)) { num_set_d(ret, log(n->value)); } else { num_set_nan(ret); } } void num_sin(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, sin(n->value)); } else { num_set_nan(ret); } } void num_cos(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, cos(n->value)); } else { num_set_nan(ret); } } void num_tan(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, tan(n->value)); } else { num_set_nan(ret); } } void num_asin(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, asin(n->value)); } else { num_set_nan(ret); } } void num_acos(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, acos(n->value)); } else { num_set_nan(ret); } } void num_atan(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, atan(n->value)); } else { num_set_nan(ret); } } void num_sinh(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, sinh(n->value)); } else { num_set_nan(ret); } } void num_cosh(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, cosh(n->value)); } else { num_set_nan(ret); } } void num_tanh(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, tanh(n->value)); } else { num_set_nan(ret); } } void num_asinh(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, asinh(n->value)); } else { num_set_nan(ret); } } void num_acosh(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, acosh(n->value)); } else { num_set_nan(ret); } } void num_atanh(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, atanh(n->value)); } else { num_set_nan(ret); } } void num_acoth(Number ret, const Number n) { if ((n->nan == 0) && !num_is_zero(n)) { num_set_d(ret, atanh(1.0 / n->value)); } else { num_set_nan(ret); } } void num_asech(Number ret, const Number n) { if ((n->nan == 0) && !num_is_zero(n)) { num_set_d(ret, acosh(1.0 / n->value)); } else { num_set_nan(ret); } } void num_acsch(Number ret, const Number n) { if ((n->nan == 0) && !num_is_zero(n)) { num_set_d(ret, asinh(1.0 / n->value)); } else { num_set_nan(ret); } } double num_get_d(const Number n) { return n->value; } unsigned int num_get_ui(const Number n) { return (unsigned int)n->value; } char *num_get_str(char *str, num_exp_t *expptr, const int b, const size_t n, const Number op) { char *dec; if (!str) { str = malloc(1024); } sprintf(str, "%.1000g", op->value); //printf("the str: %s\n", str); dec = strchr(str, conf.dec_delimiter); if (dec == NULL) { *expptr = strlen(str); } if (str[0] == -1) { *expptr -= 1; } strstrip(conf.dec_delimiter, str); //printf("the str (2): %s\n", str); return str; } num_prec_t num_get_default_prec() { return DBL_MANT_DIG; } void num_add(Number ret, const Number n1, const Number n2) { if ((n1->nan == 0) && (n2->nan == 0)) { num_set_d(ret, n1->value + n2->value); } else { num_set_nan(ret); } } void num_sub(Number ret, const Number n1, const Number n2) { if ((n1->nan == 0) && (n2->nan == 0)) { num_set_d(ret, n1->value - n2->value); } else { num_set_nan(ret); } } void num_add_ui(Number ret, const Number n, const unsigned int ui) { if (n->nan == 0) { num_set_d(ret, n->value + ui); } else { num_set_nan(ret); } } void num_sub_ui(Number ret, const Number n, const unsigned int ui) { if (n->nan == 0) { num_set_d(ret, n->value - ui); } else { num_set_nan(ret); } } void num_div(Number ret, const Number n1, const Number n2) { if ((n1->nan == 0) && (n2->nan == 0) && (n2->value != 0.0)) { num_set_d(ret, n1->value / n2->value); } else { num_set_nan(ret); } } void num_div_ui(Number ret, const Number n, const unsigned int ui) { if ((n->nan == 0) && (ui != 0)) { num_set_d(ret, n->value / ui); } else { num_set_nan(ret); } } void num_rint(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, rint(n->value)); } else { num_set_nan(ret); } } void num_rintz(Number ret, const Number n) { if (n->nan == 0) { if (n->value < 0.0) { num_set_d(ret, ceil(n->value)); } else { num_set_d(ret, floor(n->value)); } } else { num_set_nan(ret); } } void num_floor(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, floor(n->value)); } else { num_set_nan(ret); } } void num_ceil(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, ceil(n->value)); } else { num_set_nan(ret); } } int num_random(Number n) { num_set_d(n, random() / (double)RAND_MAX); return 0; } void num_sinc(Number ret, const Number n) { if (n->nan == 0) { if (num_is_zero(n)) { num_set_d(ret, 1); } else { num_sin(ret, n); num_div(ret, ret, n); } } else { num_set_nan(ret); } } void num_const_pi(Number n) { num_set_d(n, atan(1) * 4.0); // as accurate as the underlying math library can do } void num_const_euler(Number n) { num_set_d(n, 0.57721566490153286060651209008240243104215933593992359880576723488486772677766467093694706329174674951463144724980708248096050401448654283622417399764492353625350033374293733773767394279259525824709491600873520394816567); } void num_const_catalan(Number n) { num_set_d(n, 0.91596559417721901505460351493238411077414937428167213426649811962176301977625476947935651292611510624857442261919619957903589880332585905943159473748115840); } void num_out_str(FILE *fd, const int base, const Number n) { if (n->nan == 1) { fprintf(fd, "@NaN@"); return; } switch (base) { case 10: fprintf(fd, "%g", n->value); break; case 16: fprintf(fd, "%#x", (unsigned int)(n->value)); break; case 8: fprintf(fd, "%#o", (unsigned int)(n->value)); break; default: fprintf(fd, "-->oops!<--"); } } int num_is_nan(const Number n) { return n->nan; } int num_is_inf(const Number n) { return (n->nan == 0 && isinf(n->value)); } int num_is_zero(const Number n) { return (n->nan == 0 && n->value == 0.0); } int num_is_equal(const Number n1, const Number n2) { return (n1->nan == 0 && n2->nan == 0 && n1->value == n2->value); } int num_is_greater(const Number n1, const Number n2) { return (n1->nan == 0 && n2->nan == 0 && n1->value > n2->value); } int num_is_greaterequal(const Number n1, const Number n2) { return (n1->nan == 0 && n2->nan == 0 && n1->value >= n2->value); } int num_is_less(const Number n1, const Number n2) { return (n1->nan == 0 && n2->nan == 0 && n1->value < n2->value); } int num_is_lessequal(const Number n1, const Number n2) { return (n1->nan == 0 && n2->nan == 0 && n1->value <= n2->value); } int num_sign(const Number n) { if (n->value > 0.0) { return 1; } else if (n->value < 0.0) { return -1; } else { return 0; } } void num_neg(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, n->value * -1); } else { num_set_nan(ret); } } void num_abs(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, fabs(n->value)); } else { num_set_nan(ret); } } int num_cmp_si(const Number n, const int si) { if (n->value > si) { return 1; } else if (n->value < si) { return -1; } else { return 0; } } void num_free(Number n) {} void num_cot(Number ret, const Number n) { num_tan(ret, n); if ((ret->nan == 0) && !num_is_zero(ret)) { num_set_d(ret, 1.0 / ret->value); } } void num_sec(Number ret, const Number n) { num_cos(ret, n); if ((ret->nan == 0) && !num_is_zero(ret)) { num_set_d(ret, 1.0 / ret->value); } } void num_csc(Number ret, const Number n) { num_sin(ret, n); if ((ret->nan == 0) && !num_is_zero(ret)) { num_set_d(ret, 1.0 / ret->value); } } void num_coth(Number ret, const Number n) { num_tanh(ret, n); if ((ret->nan == 0) && !num_is_zero(ret)) { num_set_d(ret, 1.0 / ret->value); } } void num_sech(Number ret, const Number n) { num_cosh(ret, n); if ((ret->nan == 0) && !num_is_zero(ret)) { num_set_d(ret, 1.0 / ret->value); } } void num_csch(Number ret, const Number n) { num_sinh(ret, n); if ((ret->nan == 0) && !num_is_zero(ret)) { num_set_d(ret, 1.0 / ret->value); } } void num_comp(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, (((int)(n->value)) * -1) - 1); } else { num_set_nan(ret); } } void num_bnot(Number ret, const Number n) { if (n->nan == 0) { num_set_ui(ret, ~num_get_ui(n)); } else { num_set_nan(ret); } } void num_band(Number ret, const Number n1, const Number n2) { if ((n1->nan == 0) && (n2->nan == 0)) { num_set_ui(ret, num_get_ui(n1) & num_get_ui(n2)); } else { num_set_nan(ret); } } void num_bxor(Number ret, const Number n1, const Number n2) { if ((n1->nan == 0) && (n2->nan == 0)) { num_set_ui(ret, num_get_ui(n1) ^ num_get_ui(n2)); } else { num_set_nan(ret); } } void num_bor(Number ret, const Number n1, const Number n2) { if ((n1->nan == 0) && (n2->nan == 0)) { num_set_ui(ret, num_get_ui(n1) | num_get_ui(n2)); } else { num_set_nan(ret); } } void num_trunc(Number ret, const Number n) { if (n->nan == 0) { num_set_d(ret, trunc(n->value)); } else { num_set_nan(ret); } } void num_unimplemented() { fprintf(stderr, "This function is unimplemented when not using libmpfr.\n"); } #endif /* ifndef HAVE_LIBMPFR */ /* vim:set expandtab: */ wcalc-2.5/src/common/evalvar.c0000664000175000017500000000246012265570647013277 00000000000000#ifdef HAVE_CONFIG_H # include "config.h" #endif /* Internal Headers */ #include "number.h" #include "variables.h" #include "calculator.h" #include "number_formatting.h" /* My Prototype */ #include "evalvar.h" char *evalvar(const char *varname) { struct answer a; char junk; Number f; a = getvar_full(varname); if (!a.err) { num_init(f); if (a.exp) { // it is an expression parseme(a.exp); num_set(f, last_answer); } else { // it is a value num_set(f, a.val); num_free(a.val); } char *varvalue = num_to_str_complex(f, 10, 0, -1, 1, &junk); num_free(f); return varvalue; } else { return NULL; } } char *evalvar_noparse(const char *varname) { struct answer a; char junk; Number f; a = getvar_full(varname); if (!a.err) { if (a.exp) { // it is an expression return strdup(a.exp); } // it is a value num_init_set(f, a.val); num_free(a.val); char *varvalue = num_to_str_complex(f, 10, 0, -1, 1, &junk); num_free(f); return varvalue; } else { return NULL; } } /* vim:set expandtab: */ wcalc-2.5/src/common/explain.c0000664000175000017500000001100512451425306013256 00000000000000/* * stdin * Copyright (c) 2013 Micron Technology, Inc. * */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* System Headers */ #include #include /* for isspace() */ /* Internal Headers */ #include "number.h" #include "uint32_max.h" #include "variables.h" #include "calculator.h" #include "list.h" #include "extract_vars.h" #include "evalvar.h" #include "iscmd.h" #include "isconst.h" #include "isfunc.h" #include "explain.h" #include "output.h" static int explain_command(const char *, int); static void explain_variable(const char *); static void explain_constant(const char *); static void explain_function(const char *); void explain(const char *str) { /*{{{ */ size_t curs; char *mystr; if ((str == NULL) || (str[0] == 0)) { str = "\\explain"; } mystr = strdup(str); /* for sanity's sake, remove any trailing whitespace */ curs = strlen(mystr) - 1; while (isspace(mystr[curs]) && curs > 0) { mystr[curs] = 0; curs--; } if (!strcmp(mystr, "q")) { display_explanation("Quits the program."); } else if (!strcmp(mystr, "constants")) { display_explanation("Wcalc understands many standard physical constants.\n" "Here is the list of the ones currently understood;\n" "each can be explained in detail individually (some\n" "mean the same thing).\n"); display_consts(); } else if (*mystr == '\\') { // it's a command explain_command(mystr, 0); } else if (isconst(mystr)) { // it's a constant explain_constant(mystr); } else if (isfunc(mystr)) { // it's a function explain_function(mystr); } else if (varexists(mystr)) { // it's a variable explain_variable(mystr); } else { // it's a call for help int len = strlen(mystr) + 2; char *add_a_slash = calloc(len, sizeof(char)); add_a_slash[0] = '\\'; add_a_slash[1] = 0; strncat(add_a_slash, mystr, len - 2); if (explain_command(add_a_slash, 1) == -1) { report_error("%s is neither a command, constant, function, or variable.\n", mystr); } free(add_a_slash); } free(mystr); } /*}}} */ static inline int scan_exps(const char *str, const struct name_with_exp *exps) { const struct name_with_exp *curs; for (curs = exps; curs->explanation; curs++) { const char * const * const names = curs->names; for (unsigned i = 0; names[i]; i++) { if (!strcmp(str, names[i])) { display_explanation(curs->explanation); return 0; } } } return -1; } static int explain_command(const char *str, int test) { /*{{{ */ str++; if (!strcmp(str, "bits")) { display_explanation("Sets the number of bits used internally to represent numbers. Used like this: \\bitsX where X is a number that must be above %li and below %li.", (long int)NUM_PREC_MIN, (long int)NUM_PREC_MAX); return 0; } else { if (scan_exps(str, commands) == 0) { return 0; } } if (test == 0) { report_error("Undefined command."); } return -1; } /*}}} */ static void explain_variable(const char *str) { /*{{{ */ struct answer var; var = getvar_full(str); if (var.err) { report_error("An error was encountered!\n"); return; } if (var.exp) { // it's an expression (i.e. a function) List strings; strings = extract_vars(var.exp); display_expvar_explanation(str, var.exp, strings, var.desc); freeList(&strings); } else { display_valvar_explanation(str, &var.val, var.desc); } } /*}}} */ static void explain_constant(const char *str) { /*{{{ */ (void)scan_exps(str, consts); } /*}}} */ static void explain_function(const char *str) { /*{{{ */ (void)scan_exps(str, funcs); } /*}}} */ /* vim:set expandtab: */ wcalc-2.5/src/common/parser.c0000644000175000017500000032457512450340237013131 00000000000000/* A Bison parser, made by GNU Bison 3.0.2. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2013 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.0.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Copy the first part of user declarations. */ #line 4 "../../../svn/src/common/parser.y" /* yacc.c:339 */ /*#define REENTRANT_PARSER */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #if ! defined(HAVE_CONFIG_H) || HAVE_STRING_H # include #else # if !HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr (), *strrchr (); #endif #include #include #include "number.h" #include #include #include #include /* for isatty() */ #include "calculator.h" #include "variables.h" #include "files.h" #include "conversion.h" #include "number_formatting.h" #include "output.h" /* Based on the headstart code by Shawn Ostermann * modified by Kyle Wheeler */ /* include debugging code, in case we want it */ #define YYDEBUG 1 /* to make it stop complaining about undeclared functions */ int yylex(void); int yyerror(char *error_string, ...); int lines = 1; int synerrors = 0; short scanerror = 0; char * errstring = NULL; int errloc = -1; int show_line_numbers = 0; #line 117 "../../../svn/src/common/parser.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* In a future release of Bison, this section will be replaced by #include "y.tab.h". */ #ifndef YY_YY__SVN_SRC_COMMON_PARSER_H_INCLUDED # define YY_YY__SVN_SRC_COMMON_PARSER_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int yydebug; #endif /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { DEC_CMD = 258, OCT_CMD = 259, HEX_CMD = 260, BIN_CMD = 261, DISPLAY_PREFS_CMD = 262, RADIAN_CMD = 263, REMEMBER_CMD = 264, LISTVAR_CMD = 265, STORE_CMD = 266, CMOD_CMD = 267, PRINT_HELP_CMD = 268, PREFIX_CMD = 269, INT_CMD = 270, VERBOSE_CMD = 271, DELIM_CMD = 272, ASSERT_CMD = 273, ENG_CMD = 274, HLIMIT_CMD = 275, ROUNDING_INDICATION_CMD = 276, PRECISION_CMD = 277, BITS_CMD = 278, BASE_CMD = 279, GUARD_CMD = 280, CONVERT_CMD = 281, EOLN = 282, OPEN_PARENTHESES = 283, CLOSE_PARENTHESES = 284, OPEN_BRACE = 285, CLOSE_BRACE = 286, OPEN_BRACKET = 287, CLOSE_BRACKET = 288, WPLUS = 289, WMINUS = 290, WMULT = 291, WDIV = 292, WMOD = 293, EQUALS_SIGN = 294, WPOW = 295, WEXP = 296, WSQR = 297, WOR = 298, WAND = 299, WEQUAL = 300, WNEQUAL = 301, WGT = 302, WLT = 303, WGEQ = 304, WLEQ = 305, WLSHFT = 306, WRSHFT = 307, WBOR = 308, WBAND = 309, WBXOR = 310, WBNOT = 311, WNOT = 312, WLOG = 313, WLN = 314, WROUND = 315, WABS = 316, WSQRT = 317, WCEIL = 318, WFLOOR = 319, WCBRT = 320, WLOGTWO = 321, WBANG = 322, WSIN = 323, WCOS = 324, WTAN = 325, WASIN = 326, WACOS = 327, WATAN = 328, WSINH = 329, WCOSH = 330, WTANH = 331, WASINH = 332, WACOSH = 333, WATANH = 334, WCOT = 335, WACOT = 336, WCOTH = 337, WACOTH = 338, WRAND = 339, WIRAND = 340, WFACT = 341, WCOMP = 342, WSEC = 343, WCSC = 344, WASEC = 345, WACSC = 346, WSECH = 347, WCSCH = 348, WASECH = 349, WACSCH = 350, WEINT = 351, WGAMMA = 352, WLNGAMMA = 353, WZETA = 354, WSINC = 355, NUMBER = 356, VARIABLE = 357, STRING = 358, OPEN_CMD = 359, SAVE_CMD = 360, ASSIGNMENT = 361, IDSEP_CMD = 362, DSEP_CMD = 363, ITSEP_CMD = 364, TSEP_CMD = 365, WNEG = 366 }; #endif /* Tokens. */ #define DEC_CMD 258 #define OCT_CMD 259 #define HEX_CMD 260 #define BIN_CMD 261 #define DISPLAY_PREFS_CMD 262 #define RADIAN_CMD 263 #define REMEMBER_CMD 264 #define LISTVAR_CMD 265 #define STORE_CMD 266 #define CMOD_CMD 267 #define PRINT_HELP_CMD 268 #define PREFIX_CMD 269 #define INT_CMD 270 #define VERBOSE_CMD 271 #define DELIM_CMD 272 #define ASSERT_CMD 273 #define ENG_CMD 274 #define HLIMIT_CMD 275 #define ROUNDING_INDICATION_CMD 276 #define PRECISION_CMD 277 #define BITS_CMD 278 #define BASE_CMD 279 #define GUARD_CMD 280 #define CONVERT_CMD 281 #define EOLN 282 #define OPEN_PARENTHESES 283 #define CLOSE_PARENTHESES 284 #define OPEN_BRACE 285 #define CLOSE_BRACE 286 #define OPEN_BRACKET 287 #define CLOSE_BRACKET 288 #define WPLUS 289 #define WMINUS 290 #define WMULT 291 #define WDIV 292 #define WMOD 293 #define EQUALS_SIGN 294 #define WPOW 295 #define WEXP 296 #define WSQR 297 #define WOR 298 #define WAND 299 #define WEQUAL 300 #define WNEQUAL 301 #define WGT 302 #define WLT 303 #define WGEQ 304 #define WLEQ 305 #define WLSHFT 306 #define WRSHFT 307 #define WBOR 308 #define WBAND 309 #define WBXOR 310 #define WBNOT 311 #define WNOT 312 #define WLOG 313 #define WLN 314 #define WROUND 315 #define WABS 316 #define WSQRT 317 #define WCEIL 318 #define WFLOOR 319 #define WCBRT 320 #define WLOGTWO 321 #define WBANG 322 #define WSIN 323 #define WCOS 324 #define WTAN 325 #define WASIN 326 #define WACOS 327 #define WATAN 328 #define WSINH 329 #define WCOSH 330 #define WTANH 331 #define WASINH 332 #define WACOSH 333 #define WATANH 334 #define WCOT 335 #define WACOT 336 #define WCOTH 337 #define WACOTH 338 #define WRAND 339 #define WIRAND 340 #define WFACT 341 #define WCOMP 342 #define WSEC 343 #define WCSC 344 #define WASEC 345 #define WACSC 346 #define WSECH 347 #define WCSCH 348 #define WASECH 349 #define WACSCH 350 #define WEINT 351 #define WGAMMA 352 #define WLNGAMMA 353 #define WZETA 354 #define WSINC 355 #define NUMBER 356 #define VARIABLE 357 #define STRING 358 #define OPEN_CMD 359 #define SAVE_CMD 360 #define ASSIGNMENT 361 #define IDSEP_CMD 362 #define DSEP_CMD 363 #define ITSEP_CMD 364 #define TSEP_CMD 365 #define WNEG 366 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE YYSTYPE; union YYSTYPE { #line 56 "../../../svn/src/common/parser.y" /* yacc.c:355 */ /* the types that we use in the tokens */ enum functions function; enum operations operation; Number number; long integer; enum commands cmd; char * variable; char character; struct conv_req conver; #line 390 "../../../svn/src/common/parser.c" /* yacc.c:355 */ }; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif extern YYSTYPE yylval; int yyparse (void); #endif /* !YY_YY__SVN_SRC_COMMON_PARSER_H_INCLUDED */ /* Copy the second part of user declarations. */ #line 405 "../../../svn/src/common/parser.c" /* yacc.c:358 */ #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif #ifndef YY_ATTRIBUTE # if (defined __GNUC__ \ && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C # define YY_ATTRIBUTE(Spec) __attribute__(Spec) # else # define YY_ATTRIBUTE(Spec) /* empty */ # endif #endif #ifndef YY_ATTRIBUTE_PURE # define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) #endif #ifndef YY_ATTRIBUTE_UNUSED # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) #endif #if !defined _Noreturn \ && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) # if defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn YY_ATTRIBUTE ((__noreturn__)) # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 111 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 997 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 112 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 17 /* YYNRULES -- Number of rules. */ #define YYNRULES 133 /* YYNSTATES -- Number of states. */ #define YYNSTATES 176 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 366 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex, without out-of-bounds checking. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 109, 109, 110, 113, 114, 117, 136, 142, 159, 169, 183, 186, 190, 194, 198, 202, 211, 221, 231, 241, 252, 257, 262, 268, 272, 276, 284, 292, 302, 306, 323, 335, 340, 345, 349, 367, 375, 385, 408, 419, 429, 437, 440, 445, 468, 490, 498, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 576, 577, 578, 581, 582, 583, 586, 587, 594, 599, 602, 606, 615, 617, 619, 621, 624, 626, 627, 633, 634, 640 }; #endif #if YYDEBUG || YYERROR_VERBOSE || 0 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "DEC_CMD", "OCT_CMD", "HEX_CMD", "BIN_CMD", "DISPLAY_PREFS_CMD", "RADIAN_CMD", "REMEMBER_CMD", "LISTVAR_CMD", "STORE_CMD", "CMOD_CMD", "PRINT_HELP_CMD", "PREFIX_CMD", "INT_CMD", "VERBOSE_CMD", "DELIM_CMD", "ASSERT_CMD", "ENG_CMD", "HLIMIT_CMD", "ROUNDING_INDICATION_CMD", "PRECISION_CMD", "BITS_CMD", "BASE_CMD", "GUARD_CMD", "CONVERT_CMD", "EOLN", "OPEN_PARENTHESES", "CLOSE_PARENTHESES", "OPEN_BRACE", "CLOSE_BRACE", "OPEN_BRACKET", "CLOSE_BRACKET", "WPLUS", "WMINUS", "WMULT", "WDIV", "WMOD", "EQUALS_SIGN", "WPOW", "WEXP", "WSQR", "WOR", "WAND", "WEQUAL", "WNEQUAL", "WGT", "WLT", "WGEQ", "WLEQ", "WLSHFT", "WRSHFT", "WBOR", "WBAND", "WBXOR", "WBNOT", "WNOT", "WLOG", "WLN", "WROUND", "WABS", "WSQRT", "WCEIL", "WFLOOR", "WCBRT", "WLOGTWO", "WBANG", "WSIN", "WCOS", "WTAN", "WASIN", "WACOS", "WATAN", "WSINH", "WCOSH", "WTANH", "WASINH", "WACOSH", "WATANH", "WCOT", "WACOT", "WCOTH", "WACOTH", "WRAND", "WIRAND", "WFACT", "WCOMP", "WSEC", "WCSC", "WASEC", "WACSC", "WSECH", "WCSCH", "WASECH", "WACSCH", "WEINT", "WGAMMA", "WLNGAMMA", "WZETA", "WSINC", "NUMBER", "VARIABLE", "STRING", "OPEN_CMD", "SAVE_CMD", "ASSIGNMENT", "IDSEP_CMD", "DSEP_CMD", "ITSEP_CMD", "TSEP_CMD", "WNEG", "$accept", "input", "lines", "oneline", "eoln", "command", "optionalstring", "assignment", "exp", "func", "nullexp", "sign", "exp_l2", "oval", "exp_l3", "parenthated", "capsule", YY_NULLPTR }; #endif # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366 }; # endif #define YYPACT_NINF -91 #define yypact_value_is_default(Yystate) \ (!!((Yystate) == (-91))) #define YYTABLE_NINF -5 #define yytable_value_is_error(Yytable_value) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { 0, 4, -91, -91, -91, -91, -91, -91, -91, -91, -69, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, 399, 473, 547, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -2, -91, -91, 249, -91, -91, -91, -91, 39, -91, 111, -91, 4, 4, 845, 8, -91, 695, -91, -91, -91, 621, -91, -91, -91, -91, 872, -91, 897, -91, 920, 323, -57, 768, -91, -91, -91, -91, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, 695, -91, 769, -91, 769, 10, -91, -91, -91, 769, -91, -91, -91, -57, 768, -91, -91, -91, 236, 236, -7, -7, -7, 620, 620, 188, 188, 188, 188, 188, 188, -7, -7, 620, 620, 942, -13, -91, 769, -91, -91, -91, 769, -91 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 0, 15, 13, 12, 14, 24, 25, 33, 29, 0, 41, 34, 32, 22, 23, 21, 16, 30, 28, 31, 27, 37, 39, 26, 38, 11, 0, 0, 0, 116, 115, 97, 103, 104, 91, 93, 94, 95, 96, 99, 98, 100, 92, 67, 68, 69, 73, 74, 75, 79, 80, 81, 85, 86, 87, 70, 76, 82, 88, 101, 102, 105, 106, 71, 72, 77, 78, 83, 84, 89, 90, 107, 108, 109, 110, 111, 129, 35, 36, 0, 18, 17, 20, 19, 0, 2, 0, 9, 0, 0, 0, 117, 127, 0, 66, 118, 128, 121, 10, 40, 112, 129, 0, 113, 0, 114, 0, 0, 43, 43, 1, 5, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 132, 121, 117, 131, 130, 122, 121, 124, 125, 126, 43, 43, 42, 45, 44, 49, 48, 63, 64, 65, 51, 50, 55, 56, 57, 58, 59, 60, 61, 62, 52, 54, 53, 133, 119, 0, 120, 47, 46, 121, 123 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -91, -91, -38, -91, 66, -91, 3, -91, 133, -91, -91, -90, -44, 93, 130, -41, -82 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 85, 86, 87, 88, 89, 148, 90, 91, 92, 93, 94, 95, 140, 96, 97, 98 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { -3, 1, 134, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 138, 28, 26, 29, 100, 30, 31, 27, 108, 28, 111, 29, 32, 30, 31, 30, 31, 147, 170, 132, 112, 136, 135, 168, 0, 139, 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 99, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 0, 0, 78, 79, 80, 81, 82, 83, 84, -4, 1, 149, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 28, 0, 29, 0, 30, 31, 0, 172, 173, 0, 0, 32, 0, 0, 113, 114, 133, 0, 0, 103, 105, 107, 0, 0, 0, 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 0, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 110, 0, 78, 79, 80, 81, 82, 83, 84, 115, 116, 117, 118, 119, 0, 141, 169, 0, 0, 0, 0, 171, 0, 0, 0, 0, 128, 129, 146, 0, 132, 0, 0, 0, 0, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 141, 175, 0, 0, 0, 141, 117, 118, 119, 0, 0, 27, 0, 28, 0, 29, 0, 30, 31, 0, 0, 128, 129, 0, 32, 132, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 141, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 0, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 102, 27, 109, 28, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 0, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 102, 0, 145, 27, 101, 28, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 0, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 102, 27, 0, 28, 104, 29, 0, 30, 31, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 0, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 102, 27, 0, 28, 0, 29, 106, 30, 31, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 0, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 102, 27, 0, 28, 0, 29, 115, 116, 117, 118, 119, 0, 0, 137, 32, 138, 0, 122, 123, 124, 125, 126, 127, 128, 129, 0, 0, 132, 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 139, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 102, 27, 0, 28, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 0, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 102, 27, 0, 28, 0, 29, 115, 116, 117, 118, 119, 0, 0, 0, 32, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 0, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 102, 147, 26, 0, 0, 0, 0, 0, 0, 115, 116, 117, 118, 119, 0, 0, 0, 0, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 142, 0, 0, 0, 0, 115, 116, 117, 118, 119, 0, 0, 0, 0, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 143, 0, 0, 115, 116, 117, 118, 119, 0, 0, 0, 0, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 144, 115, 116, 117, 118, 119, 0, 0, 0, 0, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 115, 116, 117, 118, 119, 0, 0, 0, 0, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132 }; static const yytype_int16 yycheck[] = { 0, 1, 92, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 42, 30, 27, 32, 102, 34, 35, 28, 39, 30, 0, 32, 41, 34, 35, 34, 35, 103, 137, 55, 87, 94, 92, 134, -1, 67, -1, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, -1, -1, 104, 105, 106, 107, 108, 109, 110, 0, 1, 110, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, -1, 30, -1, 32, -1, 34, 35, -1, 145, 146, -1, -1, 41, -1, -1, 89, 90, 91, -1, -1, 27, 28, 29, -1, -1, -1, -1, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 80, -1, 104, 105, 106, 107, 108, 109, 110, 34, 35, 36, 37, 38, -1, 98, 136, -1, -1, -1, -1, 141, -1, -1, -1, -1, 51, 52, 108, -1, 55, -1, -1, -1, -1, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 136, 174, -1, -1, -1, 141, 36, 37, 38, -1, -1, 28, -1, 30, -1, 32, -1, 34, 35, -1, -1, 51, 52, -1, 41, 55, -1, -1, -1, -1, -1, -1, -1, -1, 170, -1, -1, -1, 174, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 28, 103, 30, -1, 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, -1, 103, 28, 29, 30, -1, 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 28, -1, 30, 31, 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 28, -1, 30, -1, 32, 33, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 28, -1, 30, -1, 32, 34, 35, 36, 37, 38, -1, -1, 40, 41, 42, -1, 45, 46, 47, 48, 49, 50, 51, 52, -1, -1, 55, -1, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 28, -1, 30, -1, 32, -1, 34, 35, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 28, -1, 30, -1, 32, 34, 35, 36, 37, 38, -1, -1, -1, 41, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, -1, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 27, -1, -1, -1, -1, -1, -1, 34, 35, 36, 37, 38, -1, -1, -1, -1, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 29, -1, -1, -1, -1, 34, 35, 36, 37, 38, -1, -1, -1, -1, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 31, -1, -1, 34, 35, 36, 37, 38, -1, -1, -1, -1, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 33, 34, 35, 36, 37, 38, -1, -1, -1, -1, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 34, 35, 36, 37, 38, -1, -1, -1, -1, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 34, 35, 41, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 104, 105, 106, 107, 108, 109, 110, 113, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 126, 127, 128, 116, 102, 29, 101, 120, 31, 120, 33, 120, 39, 103, 120, 0, 114, 116, 116, 34, 35, 36, 37, 38, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 116, 123, 127, 124, 40, 42, 67, 125, 126, 29, 31, 33, 103, 120, 103, 118, 118, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 128, 125, 123, 125, 118, 118, 126, 125 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 112, 113, 113, 114, 114, 115, 115, 115, 115, 115, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 125, 125, 126, 126, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 1, 0, 1, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 0, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 0, 1, 3, 2, 0, 2, 5, 3, 3, 3, 1, 1, 1, 2, 2, 2, 3 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) /* This macro is provided for backward compatibility. */ #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*----------------------------------------. | Print this symbol's value on YYOUTPUT. | `----------------------------------------*/ static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) { FILE *yyo = yyoutput; YYUSE (yyo); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif YYUSE (yytype); } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) { YYFPRINTF (yyoutput, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) { unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[yyssp[yyi + 1 - yynrhs]], &(yyvsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyssp, yyvsp, Rule); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ static YYSIZE_T yystrlen (const char *yystr) { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * yystpcpy (char *yydest, const char *yysrc) { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTR; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int yycount = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[*yyssp]; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error (yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } } } } switch (yycount) { # define YYCASE_(N, S) \ case N: \ yyformat = S; \ break YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } { YYSIZE_T yysize1 = yysize + yystrlen (yyformat); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (! (yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyformat += 2; } else { yyp++; yyformat++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); YY_IGNORE_MAYBE_UNINITIALIZED_END } /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ int yyparse (void) { int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = yylex (); } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 6: #line 118 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { extern int line_is_a_command; if (scanerror) { scanerror = synerrors = 0; } else { if (! synerrors && ! yynerrs) { set_prettyanswer((yyvsp[-1].number)); num_set(last_answer,(yyvsp[-1].number)); } else { synerrors = 0; report_error("Too many errors."); } } num_free((yyvsp[-1].number)); compute = 1; line_is_a_command = 0; } #line 1818 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 7: #line 136 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { extern int line_is_a_command; compute = 1; line_is_a_command = 0; } #line 1829 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 8: #line 142 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { extern int line_is_a_command; switch ((yyvsp[-1].cmd)) { case redisplay: if (! synerrors) { set_prettyanswer(last_answer); } else { synerrors = 0; report_error("Too many errors."); } break; case nothing: break; } compute = 1; line_is_a_command = 0; } #line 1851 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 9: #line 160 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { extern int line_is_a_command; if (scanerror) { scanerror = synerrors = 0; } compute = 1; line_is_a_command = 0; } #line 1865 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 10: #line 169 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { extern int line_is_a_command; /* there is the possibility of lost memory here, * because "error" has no data type * (and because I'm passing around *actual* Number's * rather than pointers to them) */ /* report_error("3 Error in scanner halts parser."); */ compute = 1; line_is_a_command = 0; } #line 1881 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 11: #line 183 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { ++lines; } #line 1887 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 12: #line 186 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = isatty(0)?redisplay:nothing; conf.output_format = HEXADECIMAL_FORMAT; display_output_format(HEXADECIMAL_FORMAT); } #line 1896 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 13: #line 190 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = isatty(0)?redisplay:nothing; conf.output_format = OCTAL_FORMAT; display_output_format(OCTAL_FORMAT); } #line 1905 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 14: #line 194 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = isatty(0)?redisplay:nothing; conf.output_format = BINARY_FORMAT; display_output_format(BINARY_FORMAT); } #line 1914 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 15: #line 198 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = isatty(0)?redisplay:nothing; conf.output_format = DECIMAL_FORMAT; display_output_format(DECIMAL_FORMAT); } #line 1923 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 16: #line 202 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { if (strcmp((yyvsp[0].variable), pretty_answer)) { fprintf(stderr, "Assertion on line %u:\n", lines); fprintf(stderr, " Pretty Answer is: '%s'\n", pretty_answer); fprintf(stderr, "...should have been: '%s'\n", (yyvsp[0].variable)); exit(EXIT_FAILURE); } free((yyvsp[0].variable)); } #line 1937 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 17: #line 211 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; if (conf.thou_delimiter != (yyvsp[0].character)) { conf.dec_delimiter = (yyvsp[0].character); display_status("%c is now the decimal separator.", (yyvsp[0].character)); } else { extern int column; column --; report_error("%c cannot be the decimal separator. It is the thousands separator.", (yyvsp[0].character)); }} #line 1952 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 18: #line 221 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; if (conf.in_thou_delimiter != (yyvsp[0].character) && (conf.in_thou_delimiter != 0 || conf.thou_delimiter != (yyvsp[0].character))) { conf.in_dec_delimiter = (yyvsp[0].character); display_status("%c is now the decimal separator for input.\n", (yyvsp[0].character)); } else { extern int column; column --; report_error("%c cannot be the decimal separator. It is the thousands separator.\n", (yyvsp[0].character)); }} #line 1967 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 19: #line 231 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; if (conf.dec_delimiter != (yyvsp[0].character)) { conf.thou_delimiter = (yyvsp[0].character); display_status("%c is now the thousands separator.\n", (yyvsp[0].character)); } else if (standard_output) { extern int column; column --; report_error("%c cannot be the thousands separator. It is the decimal separator.\n", (yyvsp[0].character)); }} #line 1982 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 20: #line 241 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; if (conf.in_dec_delimiter != (yyvsp[0].character) && (conf.in_dec_delimiter != 0 || conf.dec_delimiter != (yyvsp[0].character))) { conf.in_thou_delimiter = (yyvsp[0].character); display_status("%c is now the thousands separator for input.\n", (yyvsp[0].character)); } else { extern int column; column --; report_error("%c cannot be the thousands separator. It is the decimal separator.\n", (yyvsp[0].character)); } } #line 1998 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 21: #line 252 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; conf.print_commas = ! conf.print_commas; display_status("Will %sshow separators when printing large numbers.\n",conf.print_commas?"":"not "); } #line 2008 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 22: #line 257 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; conf.print_ints = ! conf.print_ints; display_status("Will %suse abbreviations for large integers.\n",conf.print_ints?"not ":""); } #line 2018 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 23: #line 263 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; conf.verbose = ! conf.verbose; display_status("Will %secho the lines to be evaluated.\n",conf.verbose?"":"not "); } #line 2028 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 24: #line 268 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { display_prefs(); (yyval.cmd) = nothing; } #line 2037 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 25: #line 272 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; conf.use_radians = ! conf.use_radians; display_status("Now Using %s\n", conf.use_radians?"Radians":"Degrees");} #line 2046 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 26: #line 276 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; switch ((yyvsp[0].integer)) { case 0: conf.precision_guard = 0; break; case 1: conf.precision_guard = 1; break; case -1: conf.precision_guard = ! conf.precision_guard; break; } display_status("Now %sUsing Conservative Precision\n", conf.precision_guard?"":"Not ");} #line 2059 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 27: #line 284 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = isatty(0)?redisplay:nothing; conf.precision = (yyvsp[0].integer); if (conf.precision == -1) { display_status("Precision = auto"); } else { display_status("Precision = %i", conf.precision); } } #line 2072 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 28: #line 292 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; if ((yyvsp[0].integer)) { conf.history_limit = 1; conf.history_limit_len = (yyvsp[0].integer); } else { conf.history_limit = 0; conf.history_limit_len = 0; } } #line 2087 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 29: #line 302 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { printvariables(); (yyval.cmd) = nothing; } #line 2096 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 30: #line 306 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { if ((yyvsp[0].integer) < 0) { switch (conf.engineering) { case always: conf.engineering = never; break; case never: conf.engineering = automatic; break; case automatic: conf.engineering = always; break; } } else { switch((yyvsp[0].integer)) { case 1: conf.engineering = automatic; break; case 2: conf.engineering = always; break; case 3: conf.engineering = never; break; } } display_status("Engineering notation is %s\n",(conf.engineering==always)?"always used":(conf.engineering==never)?"never used":"used if convenient"); (yyval.cmd) = isatty(0)?redisplay:nothing; } #line 2118 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 31: #line 323 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; if ((yyvsp[0].integer) != -1) conf.rounding_indication = (yyvsp[0].integer); else { conf.rounding_indication += 1; conf.rounding_indication %= 3; } display_status("Will display %s rounding indication", (conf.rounding_indication==NO_ROUNDING_INDICATION)?"no": ((conf.rounding_indication==SIMPLE_ROUNDING_INDICATION)?"simple":"significant figure")); } #line 2135 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 32: #line 335 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; conf.print_prefixes = ! conf.print_prefixes; display_status("Will %sprint number prefixes\n",conf.print_prefixes?"":"not "); } #line 2145 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 33: #line 340 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; conf.remember_errors = ! conf.remember_errors; display_status("Statements that produce errors are %s.\n",conf.remember_errors?"recorded":"forgotten"); } #line 2155 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 34: #line 345 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; display_interactive_help(); } #line 2164 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 35: #line 349 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { extern char* open_file; int i; unsigned int len = strlen((yyvsp[0].variable))+1; open_file = malloc(len); strncpy(open_file, (yyvsp[0].variable), len); /* strip trailing spaces */ for (i=strlen(open_file)-1;i>=0;i--) { if (open_file[i] != ' ') break; open_file[i] = 0; } if (strlen(open_file) == 0) { free(open_file); open_file = NULL; report_error("Please specify a file name to open."); } (yyval.cmd) = nothing; } #line 2187 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 36: #line 367 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { int retval; retval = saveState((yyvsp[0].variable)); if (retval) { report_error("Could not save file. (%s)", (char*)strerror(retval)); } (yyval.cmd) = nothing; } #line 2200 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 37: #line 375 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { if ((yyvsp[0].integer) < NUM_PREC_MIN) { report_error("Minimum precision is %lu (you asked for %lu).\n", (unsigned long)NUM_PREC_MIN, (yyvsp[0].integer)); } else if ((yyvsp[0].integer) > NUM_PREC_MAX) { report_error("Maximum precision is %lu (you asked for %lu).\n", (unsigned long)NUM_PREC_MAX, (yyvsp[0].integer)); } else { num_set_default_prec((yyvsp[0].integer)); } (yyval.cmd) = nothing; } #line 2215 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 38: #line 386 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { int category = identify_units((yyvsp[0].conver).u1,(yyvsp[0].conver).u2); switch (category) { case -1: report_error("Units must be in the same category."); break; case -2: report_error("Units provided are not recognized."); break; case -3: report_error("First unit provided was not recognized (%s).", (yyvsp[0].conver).u1); break; case -4: report_error("Second unit provided was not recognized (%s).", (yyvsp[0].conver).u2); break; default: uber_conversion(last_answer,category,unit_id(category,(yyvsp[0].conver).u1),unit_id(category,(yyvsp[0].conver).u2),last_answer); } free((yyvsp[0].conver).u1); free((yyvsp[0].conver).u2); (yyval.cmd) = redisplay; } #line 2242 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 39: #line 409 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { if ((yyvsp[0].integer) >= 2 && (yyvsp[0].integer) <= 36) { char * str, junk; str = num_to_str_complex(last_answer, (yyvsp[0].integer), conf.engineering, -1, conf.print_prefixes, &junk); display_status("base %i: %s\n",(yyvsp[0].integer),str); } else { report_error("Base must be greater than one and less than 37."); } (yyval.cmd) = nothing; } #line 2257 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 40: #line 420 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { int retval = storeVar((yyvsp[0].variable)); if (retval == 0) { display_status("successfully stored %s\n",(yyvsp[0].variable)); } else { report_error("Failure to store variable!"); } free((yyvsp[0].variable)); } #line 2271 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 41: #line 430 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.cmd) = nothing; conf.c_style_mod = ! conf.c_style_mod; display_status("The mod (%%) operation will %sbehave like it does in the C programming language.\n",conf.c_style_mod?"":"not "); } #line 2281 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 42: #line 437 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.variable) = (yyvsp[0].variable); } #line 2289 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 43: #line 440 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.variable) = NULL; } #line 2297 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 44: #line 446 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { if (compute && ! scanerror) { /* if standard_error, q is reserved */ if (standard_output && !strcmp((yyvsp[-2].variable),"q")) { report_error("q cannot be assigned a value. q is used to exit."); } else { if (putval((yyvsp[-2].variable),(yyvsp[-1].number),(yyvsp[0].variable)) == 0) { display_val((yyvsp[-2].variable)); } else { report_error("There was a problem assigning the value."); } } num_free((yyvsp[-1].number)); } else { scanerror = 0; report_error("Scanner error halts parser."); } free((yyvsp[-2].variable)); if ((yyvsp[0].variable) != NULL) { free((yyvsp[0].variable)); } } #line 2324 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 45: #line 469 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { if (compute && ! scanerror) { if (standard_output && !strcmp((yyvsp[-2].variable),"q")) { report_error("q cannot be assigned an expression. q is used to exit."); } else { if (putexp((yyvsp[-2].variable),(yyvsp[-1].variable),(yyvsp[0].variable)) == 0) { display_val((yyvsp[-2].variable)); } else { report_error("There was a problem assigning the expression."); } } } else { scanerror = 0; report_error("Scanner error halts parser."); } free((yyvsp[-2].variable)); free((yyvsp[-1].variable)); if ((yyvsp[0].variable) != NULL) { free((yyvsp[0].variable)); } } #line 2350 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 46: #line 491 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { report_error("Constants cannot be assigned to other values."); num_free((yyvsp[-1].number)); if ((yyvsp[0].variable) != NULL) { free((yyvsp[0].variable)); } } #line 2362 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 47: #line 499 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { report_error("Constants cannot be assigned to other values."); free((yyvsp[-1].variable)); if ((yyvsp[0].variable) != NULL) { free((yyvsp[0].variable)); } } #line 2374 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 48: #line 508 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wminus, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2380 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 49: #line 509 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wplus, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2386 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 50: #line 510 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wand, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2392 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 51: #line 511 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wor, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2398 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 52: #line 512 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wbor, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2404 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 53: #line 513 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wbxor, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2410 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 54: #line 514 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wband, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2416 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 55: #line 515 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wequal, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2422 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 56: #line 516 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wnequal, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2428 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 57: #line 517 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wgt, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2434 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 58: #line 518 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wlt, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2440 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 59: #line 519 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wgeq, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2446 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 60: #line 520 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wleq, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2452 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 61: #line 521 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wlshft, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2458 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 62: #line 522 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wrshft, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2464 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 63: #line 523 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wmult, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2470 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 64: #line 524 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wdiv, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2476 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 65: #line 525 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number), (yyvsp[-2].number), wmod, (yyvsp[0].number)); num_free((yyvsp[-2].number)); num_free((yyvsp[0].number)); } #line 2482 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 67: #line 529 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wsin; } #line 2488 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 68: #line 530 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wcos; } #line 2494 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 69: #line 531 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wtan; } #line 2500 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 70: #line 532 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wcot; } #line 2506 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 71: #line 533 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wsec; } #line 2512 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 72: #line 534 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wcsc; } #line 2518 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 73: #line 535 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wasin; } #line 2524 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 74: #line 536 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wacos; } #line 2530 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 75: #line 537 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = watan; } #line 2536 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 76: #line 538 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wacot; } #line 2542 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 77: #line 539 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wasec; } #line 2548 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 78: #line 540 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wacsc; } #line 2554 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 79: #line 541 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wsinh; } #line 2560 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 80: #line 542 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wcosh; } #line 2566 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 81: #line 543 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wtanh; } #line 2572 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 82: #line 544 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wcoth; } #line 2578 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 83: #line 545 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wsech; } #line 2584 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 84: #line 546 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wcsch; } #line 2590 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 85: #line 547 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wasinh; } #line 2596 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 86: #line 548 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wacosh; } #line 2602 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 87: #line 549 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = watanh; } #line 2608 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 88: #line 550 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wacoth; } #line 2614 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 89: #line 551 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wasech; } #line 2620 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 90: #line 552 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wacsch; } #line 2626 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 91: #line 553 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wlog; } #line 2632 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 92: #line 554 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wlogtwo; } #line 2638 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 93: #line 555 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wln; } #line 2644 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 94: #line 556 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wround; } #line 2650 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 95: #line 557 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wabs; } #line 2656 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 96: #line 558 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wsqrt; } #line 2662 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 97: #line 559 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wexp; } #line 2668 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 98: #line 560 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wfloor; } #line 2674 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 99: #line 561 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wceil; } #line 2680 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 100: #line 562 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wcbrt; } #line 2686 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 101: #line 563 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wrand; } #line 2692 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 102: #line 564 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wirand; } #line 2698 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 103: #line 565 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wbnot; } #line 2704 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 104: #line 566 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wnot; } #line 2710 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 105: #line 567 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wfact; } #line 2716 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 106: #line 568 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wcomp; } #line 2722 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 107: #line 569 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = weint; } #line 2728 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 108: #line 570 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wgamma; } #line 2734 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 109: #line 571 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wlngamma; } #line 2740 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 110: #line 572 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wzeta; } #line 2746 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 111: #line 573 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.function) = wsinc; } #line 2752 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 115: #line 581 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.integer) = -1; } #line 2758 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 116: #line 582 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.integer) = 1; } #line 2764 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 117: #line 583 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { (yyval.integer) = 1; } #line 2770 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 119: #line 587 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); num_mul((yyvsp[-1].number),(yyvsp[-1].number),(yyvsp[0].number)); num_mul_si((yyval.number),(yyvsp[-1].number),(yyvsp[-2].integer)); num_free((yyvsp[-1].number)); num_free((yyvsp[0].number)); } #line 2780 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 120: #line 594 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init_set((yyval.number),(yyvsp[-1].number)); num_free((yyvsp[-1].number)); num_free((yyvsp[0].number)); } #line 2790 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 121: #line 599 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init_set_ui((yyval.number),1); } #line 2796 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 122: #line 602 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); simple_exp((yyval.number),(yyvsp[-1].number),wmult,(yyvsp[0].number)); num_free((yyvsp[-1].number)); num_free((yyvsp[0].number));} #line 2805 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 123: #line 606 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); num_mul_si((yyvsp[-1].number),(yyvsp[-1].number),(yyvsp[-2].integer)); num_pow((yyvsp[-4].number),(yyvsp[-4].number),(yyvsp[-1].number)); num_mul((yyval.number),(yyvsp[-4].number),(yyvsp[0].number)); num_free((yyvsp[-4].number)); num_free((yyvsp[-1].number)); num_free((yyvsp[0].number));} #line 2817 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 124: #line 616 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); num_set((yyval.number),(yyvsp[-1].number)); num_free((yyvsp[-1].number)); } #line 2823 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 125: #line 618 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); num_set((yyval.number),(yyvsp[-1].number)); num_free((yyvsp[-1].number)); } #line 2829 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 126: #line 620 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); num_set((yyval.number),(yyvsp[-1].number)); num_free((yyvsp[-1].number)); } #line 2835 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 127: #line 621 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init_set_ui((yyval.number),0); } #line 2841 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 128: #line 625 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); num_set((yyval.number),(yyvsp[0].number)); num_free((yyvsp[0].number)); } #line 2847 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 130: #line 628 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); num_factorial((yyval.number),num_get_ui((yyvsp[-1].number))); num_free((yyvsp[-1].number)); } #line 2857 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 131: #line 633 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); num_sqr((yyval.number),(yyvsp[-1].number)); num_free((yyvsp[-1].number)); } #line 2863 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 132: #line 635 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); uber_function((yyval.number),(yyvsp[-1].function),(yyvsp[0].number)); num_free((yyvsp[0].number)); } #line 2873 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; case 133: #line 641 "../../../svn/src/common/parser.y" /* yacc.c:1646 */ { num_init((yyval.number)); num_mul_si((yyvsp[0].number),(yyvsp[0].number),(yyvsp[-1].integer)); uber_function((yyval.number),(yyvsp[-2].function),(yyvsp[0].number)); num_free((yyvsp[0].number)); } #line 2884 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ break; #line 2888 "../../../svn/src/common/parser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) { char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror (yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } # undef YYSYNTAX_ERROR #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif return yyresult; } #line 649 "../../../svn/src/common/parser.y" /* yacc.c:1906 */ int yyerror(char *error_string, ...) { va_list ap; char error[1000]; ++synerrors; va_start(ap,error_string); vsnprintf(error,1000,error_string,ap); va_end(ap); report_error(error); return 0; } wcalc-2.5/src/common/Makefile.am0000644000175000017500000000126112252675246013520 00000000000000SUBDIRS = includes AM_YFLAGS = -d AM_CPPFLAGS = -I$(top_srcdir)/src/common/includes \ -I$(top_builddir)/src/common \ -I$(top_srcdir)/src/common \ @GMP_CPPFLAGS@ @MPFR_CPPFLAGS@ AM_LDFLAGS = @GMP_LDFLAGS@ @MPFR_LDFLAGS@ noinst_LIBRARIES = libwcalc.a BUILT_SOURCES = parser.h libwcalc_a_SOURCES = \ add_commas.c \ calculator.c \ conversion.c \ evalvar.c \ explain.c \ extract_vars.c \ files.c \ historyManager.c \ iscmd.c \ isconst.c \ isfunc.c \ list.c \ number.c \ number_formatting.c \ parser.y \ scanner.l \ string_manip.c \ variables.c wcalc-2.5/src/common/calculator.c0000664000175000017500000012472612451273033013764 00000000000000#ifdef HAVE_CONFIG_H # include "config.h" #else # define HAVE_MPFR_22 #endif #include #include #include #include /* for HUGE_VAL */ #include /* for DBL_EPSILON */ #include /* for isalpha() */ #include #include "output.h" #ifndef isnan # define isnan(x) \ (sizeof(x) == sizeof(long double) ? isnan_ld(x) \ : sizeof(x) == sizeof(double) ? isnan_d(x) \ : isnan_f(x)) static inline int isnan_f(float x) { /*{{{*/ return x != x; } /*}}}*/ static inline int isnan_d(double x) { /*{{{*/ return x != x; } /*}}}*/ static inline int isnan_ld(long double x) { /*{{{*/ return x != x; } /*}}}*/ #endif /* ifndef isnan */ #ifndef isinf # define isinf(x) \ (sizeof(x) == sizeof(long double) ? isinf_ld(x) \ : sizeof(x) == sizeof(double) ? isinf_d(x) \ : isinf_f(x)) static inline int isinf_f(float x) { /*{{{*/ return isnan(x - x); } /*}}}*/ static inline int isinf_d(double x) { /*{{{*/ return isnan(x - x); } /*}}}*/ static inline int isinf_ld(long double x) { /*{{{*/ return isnan(x - x); } /*}}}*/ #endif /* ifndef isinf */ #if !defined(HAVE_CONFIG_H) || HAVE_STRING_H # include /* for memset() */ #else # if !HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); #endif #if !defined(HAVE_CONFIG_H) || TIME_WITH_SYS_TIME /* for time() */ # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif #include "number.h" #include "uint32_max.h" #include "calculator.h" #include "variables.h" #include "string_manip.h" #include "files.h" #include "number_formatting.h" #include "add_commas.h" #include "list.h" #include "extract_vars.h" /* variables everyone needs to get to */ Number last_answer; char *pretty_answer = NULL; /* communication with the parser */ char compute = 1; unsigned int sig_figs = UINT32_MAX; /* communication with the frontend */ char standard_output = 1; char not_all_displayed = 0; char *pa = NULL; char *last_input = NULL; struct _conf conf; /* * These are declared here because they're not in any header files. * yyparse() is declared with an empty argument list so that it is * compatible with the generated C code from yacc/bison. * These two lines are taken from http://www.bgw.org/tutorials/programming/c/lex_yacc/main.c */ struct yy_buffer_state; extern int yyparse(void); extern void *yy_scan_string(const char *); extern void yy_delete_buffer(struct yy_buffer_state *); static int recursion(char *str); static int find_recursion(char *); static int find_recursion_core(List); static char *flatten(char *str); void parseme(const char *pthis) { /*{{{ */ extern int synerrors; short numbers = 0; char *sanitized; extern char *open_file; synerrors = 0; compute = 1; sig_figs = UINT32_MAX; Dprintf("parsing: %s\n", pthis); sanitized = (char *)strdup(pthis); /* Save a copy of the input */ { extern int show_line_numbers; if (show_line_numbers) { if (last_input) { free(last_input); } last_input = strdup(pthis); } } /* Convert to standard notation (american comma and period) if there are * numbers */ // are there numbers? { unsigned int i; for (i = 0; i < strlen(sanitized); ++i) { if (isdigit((int)(sanitized[i]))) { numbers = 1; break; } } } if (numbers) { unsigned int i; for (i = 0; i < strlen(sanitized); ++i) { if (((conf.thou_delimiter != '.') && (conf.dec_delimiter != '.') && (conf.in_thou_delimiter != '.') && (conf.in_dec_delimiter != '.') && (sanitized[i] == '.')) || ((conf.thou_delimiter != ',') && (conf.in_thou_delimiter != ',') && (conf.dec_delimiter != ',') && (conf.in_dec_delimiter != ',') && (sanitized[i] == ','))) { // throw an error report_error("Improperly formatted numbers! (%c,%c)\n", conf.thou_delimiter, conf.dec_delimiter); synerrors = 1; break; } else if ((conf.in_thou_delimiter != 0) && (sanitized[i] == conf.in_thou_delimiter)) { sanitized[i] = ','; } else if ((conf.in_thou_delimiter == 0) && (sanitized[i] == conf.thou_delimiter)) { sanitized[i] = ','; } else if ((conf.in_dec_delimiter != 0) && (sanitized[i] == conf.in_dec_delimiter)) { sanitized[i] = '.'; } else if ((conf.in_dec_delimiter == 0) && (sanitized[i] == conf.dec_delimiter)) { sanitized[i] = '.'; } } } /* Now, check for recursion */ if (recursion(sanitized)) { goto exiting; } /* now resolve the variables */ sanitized = flatten(sanitized); Dprintf("flattened: '%s'\n", sanitized); /* Sanitize the input (add a newline) */ { char *temp; unsigned int len = strlen(sanitized) + 3; temp = calloc(sizeof(char), len); if (!temp) { perror("resizing buffer"); goto exiting; } snprintf(temp, len, "%s\n", sanitized); free(sanitized); sanitized = temp; } /* reset the position tracker */ { extern int column; column = 0; } /* Evaluate the Expression */ { struct yy_buffer_state *yy = yy_scan_string(sanitized); yyparse(); yy_delete_buffer(yy); } if (open_file) { char *filename = open_file; int retval; open_file = NULL; Dprintf("open_file\n"); retval = loadState(filename, 1); if (retval) { report_error("Could not load file (%s).", (char *)strerror(retval)); } } exiting: /* exiting */ free(sanitized); } /*}}} */ static size_t find_alpha(const char *str) { const size_t len = strlen(str); size_t i = 0; while ((i < len) && str[i] && !isalpha((int)str[i])) { switch (str[i]) { case '\\': do { i++; } while ((i < len) && str[i] && isalpha((int)str[i])); break; case '\'': { char *tailquote = strchr(str + i + 1, '\''); if (tailquote == NULL) { return len; } else { i = (tailquote) - (str); } break; } case '0': switch (str[i + 1]) { case 'b': case 'x': i += 2; break; default: i++; break; } break; default: i++; break; } } return i; } static char * evaluate_var(const char *varname, struct answer *aptr) { struct answer a; char *varvalue = NULL; // if it's a variable, evaluate it a = getvar_full(varname); if (!a.err) { // it is a var Number f; num_init(f); if (a.exp) { // it is an expression parseme(a.exp); num_set(f, last_answer); } else { // it is a value num_set(f, a.val); num_free(a.val); } // get the number { char junk; // This value must fully reproduce the contents of f (thus, the -2 in arg 4) varvalue = num_to_str_complex(f, 10, 0, -2, 1, &junk); } num_free(f); } else { // not a known var: itza literal (e.g. cos) varvalue = (char *)strdup(varname); } *aptr = a; assert(varvalue != NULL); return varvalue; } static char * extract_var(char *str, size_t *len) { const size_t max = strlen(str); size_t i = 0; char *var; while (i < max && (isalpha((int)str[i]) || str[i] == '_' || str[i] == ':' || isdigit((int)str[i]))) { i++; } if (i == 0) { return NULL; } var = malloc((i + 1) * sizeof(char)); memcpy(var, str, i); var[i] = 0; if (len) { *len = i; } return var; } /* this function should probably stop flattening if it sees a comment, but * that's so rare (and hardly processor intensive) that it's not worth digging * at the moment */ static char * flatten(char *str) { /*{{{ */ char *curs = str, *eov, *nstr; char *varname, *varvalue; size_t changedlen; struct answer a; char standard_output_save = standard_output; standard_output = 0; if (*str == '\\') { standard_output = standard_output_save; return str; } curs = strchr(str, '='); if (!curs || !*curs || (*(curs + 1) == '=')) { curs = str; } while (curs && *curs) { // search for the first letter of a possible variable size_t max = strlen(curs); size_t alpha = find_alpha(curs); if (alpha == max) { break; } curs = curs + alpha; // pull out that variable { size_t varlen = 0; varname = extract_var(curs, &varlen); eov = curs + varlen; } varvalue = evaluate_var(varname, &a); assert(varvalue); { size_t nlen = strlen(varvalue); // now, put it back in the string // it is a var, and needs parenthesis changedlen = strlen(str) + nlen - strlen(varname) + 1; free(varname); } if (!a.err) { changedlen += 2; // space for parens if it's a variable } nstr = malloc(changedlen); if (!nstr) { // not enough memory perror("flatten: "); exit(EXIT_FAILURE); } { char *fromstring = str; char *tostring = nstr; // nstr is the new string, str is the input string while (fromstring != curs) { // copy up to the curs (the beginning of the var name) *tostring = *fromstring; ++fromstring; ++tostring; } if (!a.err) { *tostring = '('; ++tostring; } fromstring = varvalue; while (fromstring && *fromstring) { *tostring = *fromstring; ++fromstring; ++tostring; } if (!a.err) { *tostring = ')'; ++tostring; } curs = tostring; fromstring = eov; while (fromstring && *fromstring) { *tostring = *fromstring; ++fromstring; ++tostring; } *tostring = 0; free(str); str = nstr; } free(varvalue); } standard_output = standard_output_save; return str; } /*}}} */ static int recursion(char *str) { /*{{{ */ List vlist = NULL; int retval = 0; char *righthand; // do not examine commands if (*str == '\\') { return 0; } // do not examine the left side of an assignment righthand = strchr(str, '='); if (!righthand || !*righthand || (*(righthand + 1) == '=')) { righthand = str; } vlist = extract_vars(righthand); while (listLen(vlist) > 0) { char *varname = (char *)getHeadOfList(vlist); if (retval == 0) { retval = find_recursion(varname); } free(varname); } return retval; } /*}}} */ static int find_recursion(char *instring) { /*{{{ */ List vl = NULL; int retval; addToList(&vl, (char *)strdup(instring)); retval = find_recursion_core(vl); free(getHeadOfList(vl)); return retval; } /*}}} */ static int find_recursion_core(List oldvars) { /*{{{ */ List newvars = NULL; ListIterator oldvarsIterator; int retval = 0; struct answer a; char *newVarname = NULL; a = getvar_full((char *)peekAheadInList(oldvars)); if (a.err) { return 0; } if (!a.exp) { num_free(a.val); return 0; } newvars = extract_vars(a.exp); oldvarsIterator = getListIterator(oldvars); // for each variable in that expression (i.e. each entry in newvars) // see if we've seen it before (i.e. it's in oldvars) while (listLen(newvars) > 0) { newVarname = (char *)getHeadOfList(newvars); char *oldVarname; while ((oldVarname = (char *)nextListElement(oldvarsIterator)) != NULL) { if (!strcmp(newVarname, oldVarname)) { report_error ("%s was found twice in symbol descent. Recursive variables are not allowed.", newVarname); // free the rest of the newvars list do { free(newVarname); } while ((newVarname = (char *)getHeadOfList(newvars)) != NULL); freeListIterator(oldvarsIterator); return 1; } } // now see if it has recursion addToListHead(&oldvars, newVarname); retval = find_recursion_core(oldvars); getHeadOfList(oldvars); resetListIterator(oldvarsIterator); free(newVarname); if (retval != 0) { break; } } // make sure newvars is empty (so all that memory gets freed) while ((newVarname = (char *)getHeadOfList(newvars)) != NULL) { free(newVarname); } freeListIterator(oldvarsIterator); return retval; } /*}}} */ void report_error(const char *err_fmt, ...) { /*{{{ */ extern char *errstring; extern int errloc; extern int column; extern int lines; extern int show_line_numbers; char *tempstring; unsigned int len; va_list ap; char *this_error; va_start(ap, err_fmt); this_error = calloc(strlen(err_fmt) + 1000, sizeof(char)); vsnprintf(this_error, strlen(err_fmt) + 1000, err_fmt, ap); len = strlen(this_error) + 100; va_end(ap); /* okay, now this_error has the current error text in it */ if (errstring) { len += strlen(errstring); } tempstring = calloc(len, sizeof(char)); if (errstring) { if (show_line_numbers) { snprintf(tempstring, len, "%s\nError on line %i: %s", errstring, lines, this_error); } else { snprintf(tempstring, len, "%s\n%s", errstring, this_error); } free(errstring); } else { if (show_line_numbers) { snprintf(tempstring, len, "Error on line %i: %s", lines, this_error); } else { snprintf(tempstring, len, "%s", this_error); } } errstring = tempstring; free(this_error); if (errloc == -1) { errloc = column; } } /*}}} */ void set_prettyanswer(const Number num) { /*{{{ */ char *temp; Dprintf("set_prettyanswer\n"); if (pretty_answer) { free(pretty_answer); } Dprintf("set_prettyanswer - call print_this_result\n"); temp = print_this_result(num, standard_output, NULL, NULL); Dprintf("set_prettyanswer: %s\n", temp); if (temp) { pretty_answer = (char *)strdup(temp); } else { pretty_answer = NULL; } Dprintf("set_prettyanswer - done\n"); } /*}}} */ static char * print_this_result_dbl(const double result, int output, char *nad, char **es) { /*{{{ */ char format[10]; static char *tmp; static char pa_dyn = 1; extern char *errstring; unsigned int decimal_places = 0; Dprintf("print_this_result_dbl(%f)\n", result); /* Build the "format" string, that will be used in an snprintf later */ switch (conf.output_format) { /*{{{ */ case DECIMAL_FORMAT: if (pa_dyn) { tmp = realloc(pa, sizeof(char) * 310); } else { tmp = pa = malloc(sizeof(char) * 310); pa_dyn = 1; } if (!tmp) { free(pa); pa = "Not Enough Memory"; pa_dyn = 0; return pa; } else { pa = tmp; } if (conf.precision > -1) { decimal_places = conf.precision; switch (conf.engineering) { case never: snprintf(format, 10, "%%1.%if", conf.precision); break; case always: snprintf(format, 10, "%%1.%ie", conf.precision); break; case automatic: snprintf(format, 10, "%%1.%ig", conf.precision); break; } Dprintf("precision was specified as %i, format string is \"%s\"\n", conf.precision, format); } else { switch (conf.engineering) { case never: strncpy(format, "%f", 10); break; case always: strncpy(format, "%e", 10); break; case automatic: strncpy(format, "%g", 10); break; } Dprintf("precision is automatic, format string is \"%s\"\n", format); if (fabs(result) < 10.0) { decimal_places = 6; } else if (fabs(result) < 100.0) { decimal_places = 4; } else if (fabs(result) < 1000.0) { decimal_places = 3; } else if (fabs(result) < 10000.0) { decimal_places = 2; } else if (fabs(result) < 100000.0) { decimal_places = 1; } else { decimal_places = 0; } } break; case OCTAL_FORMAT: if (pa_dyn) { tmp = realloc(pa, sizeof(char) * 14); } else { tmp = pa = malloc(sizeof(char) * 14); pa_dyn = 1; } if (!tmp) { free(pa); pa = "Not Enough Memory"; pa_dyn = 0; return pa; } else { pa = tmp; } snprintf(format, 10, conf.print_prefixes ? "%%#o" : "%%o"); break; case HEXADECIMAL_FORMAT: if (pa_dyn) { tmp = realloc(pa, sizeof(char) * 11); } else { tmp = pa = malloc(sizeof(char) * 11); pa_dyn = 1; } if (!tmp) { free(pa); pa = "Not Enough Memory"; pa_dyn = 0; return pa; } else { pa = tmp; } snprintf(format, 10, conf.print_prefixes ? "%%#x" : "%%x"); break; case BINARY_FORMAT: // Binary Format can't just use a format string, so // we have to handle it later if (pa_dyn) { free(pa); } pa = NULL; pa_dyn = 1; break; } /*}}} */ if (isinf(result)) { // if it is infinity, print "Infinity", regardless of format if (pa_dyn) { tmp = realloc(pa, sizeof(char) * 11); } else { tmp = pa = malloc(sizeof(char) * 11); pa_dyn = 1; } if (!tmp) { free(pa); pa = "Not Enough Memory"; pa_dyn = 0; return pa; } else { pa = tmp; } snprintf(pa, 11, "Infinity"); not_all_displayed = 0; } else if (isnan(result)) { // if it is not a number, print "Not a Number", regardless of format if (pa_dyn) { tmp = realloc(pa, sizeof(char) * 13); } else { tmp = pa = malloc(sizeof(char) * 13); pa_dyn = 1; } if (!tmp) { free(pa); pa = "Not Enough Memory"; pa_dyn = 0; return pa; } else { pa = tmp; } snprintf(pa, 13, "Not a Number"); not_all_displayed = 0; } else { char *curs; Dprintf("normal numbers (format: %s)\n", format); switch (conf.output_format) { /*{{{ */ case DECIMAL_FORMAT: { double junk; Dprintf("fabs = %f, conf.engineering = %i, conf.print_ints = %i\n", fabs(modf(result, &junk)), conf.engineering, conf.print_ints); /* This is the big call */ /* translation: if we don't have to handle the print_ints special case, * then we can just use the existing format. */ if ((fabs(modf(result, &junk)) != 0.0) || !conf.print_ints) { snprintf(pa, 310, format, result); } else { /* this is the print_ints special case * (note that we strip trailing zeros) */ snprintf(pa, 310, "%1.0f", result); } Dprintf("pa (unlocalized): %s\n", pa); /* was it as good for you as it was for me? * now, you must localize it */ strswap('.', conf.dec_delimiter, pa); Dprintf("pa: %s\n", pa); switch (conf.rounding_indication) { case SIMPLE_ROUNDING_INDICATION: Dprintf("simple\n"); not_all_displayed = (modf(result * pow(10, decimal_places), &junk)) ? 1 : 0; break; case SIG_FIG_ROUNDING_INDICATION: Dprintf("sigfig\n"); if (sig_figs < UINT32_MAX) { unsigned int t = count_digits(pa); Dprintf("digits in pa: %u (%u)\n", t, sig_figs); if ((pa[0] == '0') && (pa[1] != '\0')) { --t; } else if ((pa[0] == '-') && (pa[1] == '0')) { --t; } not_all_displayed = (t < sig_figs); } else { not_all_displayed = 1; } break; default: case NO_ROUNDING_INDICATION: Dprintf("none\n"); not_all_displayed = 0; break; } break; } case HEXADECIMAL_FORMAT: curs = pa + (conf.print_prefixes ? 2 : 0); strswap('.', conf.dec_delimiter, pa); goto hexoct_body; case OCTAL_FORMAT: curs = pa + (conf.print_prefixes ? 1 : 0); hexoct_body: { long int temp = result; snprintf(pa, 310, format, temp); if (conf.rounding_indication == SIG_FIG_ROUNDING_INDICATION) { if (sig_figs < UINT32_MAX) { unsigned int t = 0; while (curs && *curs) { ++t; ++curs; } not_all_displayed = (t < sig_figs); } else { not_all_displayed = 0; } } else { not_all_displayed = 0; } } strswap('.', conf.dec_delimiter, pa); break; case BINARY_FORMAT: { int i, place = -1; // if it is binary, format it, and print it // first, find the upper limit for (i = 1; place == -1; ++i) { if (result < pow(2.0, i)) { place = i - 1; } } pa = calloc(sizeof(char), (place + (conf.print_prefixes * 2) + 1)); if (!pa) { pa = "Not Enough Memory"; pa_dyn = 0; return pa; } if (conf.print_prefixes) { pa[0] = '0'; pa[1] = 'b'; } // print it { double temp = result; for (i = conf.print_prefixes * 2; place >= 0; ++i) { double t = pow(2.0, place); if (temp >= t) { pa[i] = '1'; temp -= t; } else { pa[i] = '0'; } --place; } } pa[i + 1] = 0; if (sig_figs < UINT32_MAX) { if (conf.rounding_indication == SIG_FIG_ROUNDING_INDICATION) { not_all_displayed = count_digits(pa + (conf.print_prefixes ? 2 : 0)) < sig_figs; } else { not_all_displayed = 0; } } else { not_all_displayed = 0; } strswap('.', conf.dec_delimiter, pa); } // binary format } /*}}} */ } // if if (conf.print_commas) { char *str = add_commas(pa, conf.output_format); if (str) { free(pa); pa = str; } } if (output) { show_answer(errstring, not_all_displayed, pa); } if (nad) { *nad = not_all_displayed; } if (es) { *es = errstring; } return pa; } /*}}} */ char * print_this_result(const Number result, int output, char *nad, char **es) { /*{{{ */ extern char *errstring; unsigned int base = 0; Dprintf("print_this_result (%f) in format %i\n", num_get_d(result), conf.output_format); // output in the proper base and format switch (conf.output_format) { case HEXADECIMAL_FORMAT: base = 16; break; default: case DECIMAL_FORMAT: // if you want precision_guard and automatic precision, // then we have to go with the tried and true "double" method // ... unless it's an int and you want ints printed whole // I know that DBL_EPSILON can be calculated like so: // 2^(mpfr_get_prec(result)-1) HOWEVER, printf magically handles // numbers like 5.1 that I don't even wanna begin to think about if (conf.precision_guard && (conf.precision < 0)) { Dprintf("precision guard and automatic precision\n"); if (!conf.print_ints || !is_int(result)) { // XXX: this doesn't work for *huge* numbers, like 100!+0.1 Dprintf("no print_ints (%i) or it isn't an int (%i)\n", (int)conf.print_ints, (int)is_int(result)); // XXX: what is the following if() for? // if (mpfr_get_d(result, GMP_RNDN) != // mpfr_get_si(result, GMP_RNDN)) { double res = num_get_d(result); if (fabs(res) < DBL_EPSILON) { res = 0.0; } return print_this_result_dbl(res, output, nad, es); // } } } base = 10; break; case OCTAL_FORMAT: base = 8; break; case BINARY_FORMAT: base = 2; break; } if (pa != NULL) { free(pa); } not_all_displayed = 0; pa = num_to_str_complex(result, base, conf.engineering, conf.precision, conf.print_prefixes, ¬_all_displayed); Dprintf("not_all_displayed = %i\n", not_all_displayed); /* now, decide whether it's been rounded or not */ if (num_is_inf(result) || num_is_nan(result)) { // if it is infinity, it's all there ;) not_all_displayed = 0; } else if (not_all_displayed == 0) { /* rounding guess */ switch (conf.rounding_indication) { case SIMPLE_ROUNDING_INDICATION: { char *pa2, junk; Dprintf("simple full\n"); pa2 = num_to_str_complex(result, base, conf.engineering, -2, conf.print_prefixes, &junk); not_all_displayed = (strlen(pa) < strlen(pa2)); free(pa2); break; } case SIG_FIG_ROUNDING_INDICATION: /* sig_figs is how many we need to display */ Dprintf("sigfig full\n"); if (sig_figs < UINT32_MAX) { unsigned int t = count_digits(pa); Dprintf("digits in pa: %u (%u)\n", t, sig_figs); not_all_displayed = (t < sig_figs); } else { not_all_displayed = 0; } break; default: case NO_ROUNDING_INDICATION: Dprintf("none full\n"); not_all_displayed = 0; break; } } if (conf.rounding_indication == NO_ROUNDING_INDICATION) { Dprintf("clearing rounding indication\n"); not_all_displayed = 0; } strswap('.', conf.dec_delimiter, pa); // add commas if (conf.print_commas) { char *str = add_commas(pa, conf.output_format); if (str) { free(pa); pa = str; } } if (output) { show_answer(errstring, not_all_displayed, pa); } if (nad) { *nad = not_all_displayed; } if (es) { *es = errstring; } return pa; } /*}}} */ void simple_exp(Number output, const Number first, const enum operations op, const Number second) { /*{{{ */ if (compute) { Number temp; num_init(temp); Dprintf("simple_exp: %f %i %f\n", num_get_d(first), op, num_get_d(second)); switch (op) { default: num_set_d(output, 0.0); break; case wequal: num_set_ui(output, num_is_equal(first, second)); break; case wnequal: num_set_ui(output, !num_is_equal(first, second)); break; case wgt: num_set_ui(output, num_is_greater(first, second)); break; case wlt: num_set_ui(output, num_is_less(first, second)); break; case wgeq: num_set_ui(output, num_is_greaterequal(first, second)); break; case wleq: num_set_ui(output, num_is_lessequal(first, second)); break; case wplus: num_add(output, first, second); break; case wminus: num_sub(output, first, second); break; case wmult: num_mul(output, first, second); break; case wdiv: num_div(output, first, second); break; case wpow: num_pow(output, first, second); break; case wor: num_set_ui(output, (!num_is_zero(first)) || (!num_is_zero(second))); break; case wand: num_set_ui(output, (!num_is_zero(first)) && (!num_is_zero(second))); break; case wbor: num_bor(output, first, second); break; case wband: num_band(output, first, second); break; case wbxor: num_bxor(output, first, second); break; case wlshft: num_set_ui(temp, 2); num_pow(temp, temp, second); num_mul(output, first, temp); break; case wrshft: num_set_ui(temp, 2); num_pow(temp, temp, second); num_div(output, first, temp); if (is_int(first)) { num_trunc(output, output); } break; case wmod: if (num_is_zero(second)) { num_set_nan(output); } else { /* divide, round to zero, multiply, subtract * * in essence, find the value x in the equation: * first = second * temp + x */ num_div(output, first, second); if (conf.c_style_mod) { num_rintz(output, output); // makes zeros work } else { if (num_sign(first) >= 0) { num_floor(output, output); } else { num_ceil(output, output); } } num_mul(output, output, second); num_sub(output, first, output); } break; } Dprintf("returns: %f\n", num_get_d(output)); num_free(temp); return; } else { num_set_ui(output, 0); return; } } /*}}} */ void uber_function(Number output, const enum functions func, Number input) { /*{{{ */ if (compute) { Number temp; num_init(temp); if (!conf.use_radians) { switch (func) { case wsin: case wcos: case wtan: case wcot: case wsec: case wcsc: num_const_pi(temp); num_mul(input, input, temp); num_div_ui(input, input, 180); break; case wasin: case wacos: case watan: case wacot: case wasec: case wacsc: num_const_pi(temp); num_pow_si(temp, temp, -1); num_mul_ui(temp, temp, 180); break; default: break; } } switch (func) { case wsin: num_sin(output, input); break; case wcos: num_cos(output, input); break; case wtan: num_tan(output, input); break; case wcot: num_cot(output, input); break; case wsec: num_sec(output, input); break; case wcsc: num_csc(output, input); break; case wasin: num_asin(output, input); if (!conf.use_radians) { num_mul(output, output, temp); } break; case wacos: num_acos(output, input); if (!conf.use_radians) { num_mul(output, output, temp); } break; case watan: num_atan(output, input); if (!conf.use_radians) { num_mul(output, output, temp); } break; case wacot: num_pow_si(output, input, -1); num_atan(output, output); if (!conf.use_radians) { num_mul(output, output, temp); } break; case wasec: num_pow_si(output, input, -1); num_acos(output, output); if (!conf.use_radians) { num_mul(output, output, temp); } break; case wacsc: num_pow_si(output, input, -1); num_asin(output, output); if (!conf.use_radians) { num_mul(output, output, temp); } break; case wsinh: num_sinh(output, input); break; case wcosh: num_cosh(output, input); break; case wtanh: num_tanh(output, input); break; case wcoth: num_coth(output, input); break; case wsech: num_sech(output, input); break; case wcsch: num_csch(output, input); break; case wasinh: num_asinh(output, input); break; case wacosh: num_acosh(output, input); break; case watanh: num_atanh(output, input); break; case wacoth: num_acoth(output, input); break; case wasech: num_asech(output, input); break; case wacsch: num_acsch(output, input); break; case wlog: num_log10(output, input); break; case wlogtwo: num_log2(output, input); break; case wln: num_log(output, input); break; case wround: num_rint(output, input); break; case wneg: num_neg(output, input); break; case wnot: num_set_ui(output, num_is_zero(input)); break; case wabs: num_abs(output, input); break; case wsqrt: num_sqrt(output, input); break; case wfloor: num_floor(output, input); break; case wceil: num_ceil(output, input); break; case wrand: while (num_random(output) != 0) ; num_mul(output, output, input); if (num_cmp_si(input, 0) < 0) { num_mul_si(output, output, -1); } break; case wirand: while (num_random(output) != 0) ; num_mul(output, output, input); if (num_cmp_si(input, 0) < 0) { num_mul_si(output, output, -1); } num_rint(output, output); break; case wcbrt: num_cbrt(output, input); break; case wexp: num_exp(output, input); break; case wfact: num_factorial(output, num_get_ui(input)); break; case wcomp: num_comp(output, input); break; #ifdef HAVE_MPFR_22 case weint: num_eint(output, input); break; #endif case wgamma: num_gamma(output, input); break; #ifdef HAVE_MPFR_22 case wlngamma: num_lngamma(output, input); break; #endif case wzeta: num_zeta(output, input); break; case wsinc: num_sinc(output, input); break; case wbnot: num_bnot(output, input); break; default: num_set(output, input); break; } num_free(temp); return; } else { num_set_ui(output, 0); return; } } /*}}} */ char * output_string(const unsigned int o) { /*{{{ */ switch (o) { case HEXADECIMAL_FORMAT: return "hexadecimal format (0xf)"; case OCTAL_FORMAT: return "octal format (08) "; case BINARY_FORMAT: return "binary format (0b1) "; case DECIMAL_FORMAT: return "decimal format (9) "; default: return "error, unknown format "; } } /*}}} */ /* vim:set expandtab: */ wcalc-2.5/src/Makefile.in0000664000175000017500000005404312451433376012246 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' 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 = wcalc$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/config/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/readline.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/common/includes/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__dirstamp = $(am__leading_dot)dirstamp am_wcalc_OBJECTS = cli/main.$(OBJEXT) cli/help.$(OBJEXT) wcalc_OBJECTS = $(am_wcalc_OBJECTS) wcalc_DEPENDENCIES = common/libwcalc.a 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@ -I$(top_builddir)/src/common/includes depcomp = $(SHELL) $(top_srcdir)/config/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 = $(wcalc_SOURCES) DIST_SOURCES = $(wcalc_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) 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@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GMP_CPPFLAGS = @GMP_CPPFLAGS@ GMP_LDFLAGS = @GMP_LDFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPFR_CPPFLAGS = @MPFR_CPPFLAGS@ MPFR_LDFLAGS = @MPFR_LDFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = common gui . AM_CPPFLAGS = -I$(top_srcdir)/src/common/includes \ -I$(top_builddir)/src/common/includes \ -I$(top_builddir)/src/common \ -I$(top_srcdir)/src/common \ @GMP_CPPFLAGS@ @MPFR_CPPFLAGS@ AM_LDFLAGS = @GMP_LDFLAGS@ @MPFR_LDFLAGS@ wcalc_LDADD = common/libwcalc.a @LEXLIB@ wcalc_SOURCES = cli/main.c cli/help.c 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 src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(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) cli/$(am__dirstamp): @$(MKDIR_P) cli @: > cli/$(am__dirstamp) cli/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) cli/$(DEPDIR) @: > cli/$(DEPDIR)/$(am__dirstamp) cli/main.$(OBJEXT): cli/$(am__dirstamp) cli/$(DEPDIR)/$(am__dirstamp) cli/help.$(OBJEXT): cli/$(am__dirstamp) cli/$(DEPDIR)/$(am__dirstamp) wcalc$(EXEEXT): $(wcalc_OBJECTS) $(wcalc_DEPENDENCIES) $(EXTRA_wcalc_DEPENDENCIES) @rm -f wcalc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(wcalc_OBJECTS) $(wcalc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f cli/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@cli/$(DEPDIR)/help.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@cli/$(DEPDIR)/main.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) '$<'` # 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 $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; 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) -rm -f cli/$(DEPDIR)/$(am__dirstamp) -rm -f cli/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -rf cli/$(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-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS 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 cli/$(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: uninstall-binPROGRAMS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) 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 installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS common/libwcalc.a: $(MAKE) -C common libwcalc.a # 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: wcalc-2.5/src/cli/0000775000175000017500000000000012451434213011011 500000000000000wcalc-2.5/src/cli/main.c0000664000175000017500000016452112451425300012027 00000000000000/* Based (very loosely) on Ostermann's headstart for the shell project * Modified by Kyle Wheeler */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include /* for strncasecmp(), per POSIX 2001 */ #include #include #include /* for stat() */ #include /* for isdigit and isalpha */ #include #include /* for open() */ #include /* for stroul() */ #include /* for mmap() */ #include /* for assert() */ #include /* for va_start() */ #include "number.h" #ifdef HAVE_LIBREADLINE # if defined(HAVE_READLINE_READLINE_H) # include # elif defined(HAVE_READLINE_H) # include # else /* !defined(HAVE_READLINE_H) */ extern char *readline(); # endif /* !defined(HAVE_READLINE_H) */ /*@null@*/ char *cmdline = NULL; #else /* !defined(HAVE_READLINE_READLINE_H) */ /* no readline */ #endif /* HAVE_LIBREADLINE */ #ifdef HAVE_READLINE_HISTORY # if defined(HAVE_READLINE_HISTORY_H) # include # elif defined(HAVE_HISTORY_H) # include # else /* ! defined(HAVE_HISTORY_H) */ extern void add_history(); extern int write_history(); extern int read_history(); extern int history_truncate_file(char *, int); # endif /* defined(HAVE_READLINE_HISTORY_H) */ /* no history */ #endif /* HAVE_READLINE_HISTORY */ #include "calculator.h" #include "conversion.h" #ifdef HAVE_CONFIG_H /* auto-tool build */ # include "parser.h" #else # include "y.tab.h" #endif #include "variables.h" #include "files.h" #include "historyManager.h" #include "list.h" #include "iscmd.h" #include "isconst.h" #include "isfunc.h" #include "output.h" #include "evalvar.h" #define TRUEFALSE (!strcmp(value, "yes") || !strcmp(value, "true") || !strcmp(value, "1")) #define BIG_STRING 4096 #define VERSION PACKAGE_VERSION #define EXIT_EARLY(code) do { \ clearHistory(); \ cleanupvar(); \ num_free(last_answer); \ lists_cleanup(); \ fflush(NULL); \ exit(code); \ } while (0) static int read_prefs(void); static int read_preload(void); static void display_and_clear_errstring(void); /* * These are declared here because they're not in any header files. * yyparse() is declared with an empty argument list so that it is * compatible with the generated C code from yacc/bison. * This part is taken from http://www.bgw.org/tutorials/programming/c/lex_yacc/main.c */ extern int yyparse(void); extern int yy_scan_string(const char *); static int exit_on_err = 0; #ifdef HAVE_LIBREADLINE /*@null@*/ static List tc_options = NULL; /*@null@*/ static char * tc_generator(const char *text, int state) { /*{{{ */ char *ret = getHeadOfList(tc_options); if (ret) { return ret; } else { return NULL; } } /*}}} */ /*@null@*/ static char * tc_rounding(const char *text, int state) { /*{{{ */ static unsigned int i = 0; char *rounding[] = { "none", "simple", "sig_fig", 0 }; if (state == 0) { i = 0; } while (rounding[i] != NULL) { if (strncmp(text, rounding[i], strlen(text)) == 0) { return strdup(rounding[i++]); } i++; } return NULL; } /*}}} */ /*@null@*/ static char * tc_engineering(const char *text, int state) { /*{{{ */ static unsigned int i = 0; char *engineering[] = { "always", "never", "auto", "automatic", 0 }; if (state == 0) { i = 0; } while (engineering[i] != NULL) { if (strncmp(text, engineering[i], strlen(text)) == 0) { return strdup(engineering[i++]); } i++; } return NULL; } /*}}} */ char **qcommands = NULL; # define COMPLETE(strs) do { \ int compareword = 0; \ int comparechar = 0; \ int textcurs = 0; \ while (strs[compareword] != NULL) { \ if (text[textcurs] == 0) { /* add to the list of possibilities */ \ addToList(&tc_options, strdup(strs[compareword])); \ textcurs = 0; \ comparechar = 0; \ compareword++; \ } else if (text[textcurs] == strs[compareword][comparechar]) { \ textcurs++; \ comparechar++; \ } else { /* not a possibility: next! */ \ textcurs = 0; \ compareword++; \ comparechar = 0; \ } \ } \ } while (0) # define COMPLETE2(strs) do { \ const unsigned textlen = strlen(text); \ for (unsigned _c_i = 0; strs[_c_i].explanation; _c_i++) { \ const char *const *const _c_names = strs[_c_i].names; \ for (unsigned _c_j = 0; _c_names[_c_j]; _c_j++) { \ if (!strncmp(text, _c_names[_c_j], textlen)) { \ /* add to the list of possibilities */ \ addToList(&tc_options, strdup(_c_names[_c_j])); \ } \ } \ } \ } while (0) static void build_qcommands(void) { unsigned c_count = 0; for (unsigned c = 0; commands[c].explanation; c++) { for (unsigned n = 0; commands[c].names[n]; n++) { c_count++; } } c_count++; qcommands = malloc(sizeof(char *) * c_count); c_count = 0; for (unsigned c = 0; commands[c].explanation; c++) { for (unsigned n = 0; commands[c].names[n]; n++) { qcommands[c_count] = malloc(strlen(commands[c].names[n]) + 2); sprintf(qcommands[c_count], "\\%s", commands[c].names[n]); c_count++; } } qcommands[c_count] = NULL; } static char ** wcalc_completion(const char *text, int start, int end) { /*{{{ */ /*extern const char *commands[];*/ char **variables; char **retvals = NULL; // printf("\ncompleting: %s\n", text); if ('\\' == rl_line_buffer[0]) { if ((NULL == strchr(rl_line_buffer, ' ')) && (NULL == strchr(rl_line_buffer, '\t'))) { COMPLETE(qcommands); } else if (strncmp("\\explain", rl_line_buffer, 8) == 0) { int i = 8; while (isspace(rl_line_buffer[i])) ++i; if (i == start) { COMPLETE(qcommands); COMPLETE2(consts); COMPLETE2(funcs); variables = listvarnames(); COMPLETE(variables); free(variables); } } else if ((strncmp("\\open", rl_line_buffer, 5) == 0) || (strncmp("\\save", rl_line_buffer, 5) == 0)) { int i = 5; while (isspace(rl_line_buffer[i])) ++i; if (i == start) { retvals = rl_completion_matches(text, rl_filename_completion_function); return retvals; } } else if (((strncmp("\\rou", rl_line_buffer, 4) == 0) && isspace(rl_line_buffer[4])) || ((strncmp("\\round", rl_line_buffer, 6) == 0) && isspace(rl_line_buffer[6])) || ((strncmp("\\rounding", rl_line_buffer, 9) == 0) && isspace(rl_line_buffer[9]))) { int i = 4; while (!isspace(rl_line_buffer[i])) ++i; while (isspace(rl_line_buffer[i])) ++i; if (i == start) { retvals = rl_completion_matches(text, tc_rounding); return retvals; } } else if (((strncmp("\\e", rl_line_buffer, 2) == 0) && isspace(rl_line_buffer[2])) || ((strncmp("\\eng", rl_line_buffer, 4) == 0) && isspace(rl_line_buffer[4])) || ((strncmp("\\engineering", rl_line_buffer, 12) == 0) && isspace(rl_line_buffer[12]))) { int i = 2; while (!isspace(rl_line_buffer[i])) ++i; while (isspace(rl_line_buffer[i])) ++i; if (i == start) { retvals = rl_completion_matches(text, tc_engineering); return retvals; } } else if (((strncmp("\\c", rl_line_buffer, 2) == 0) && isspace(rl_line_buffer[2])) || ((strncmp("\\conv", rl_line_buffer, 5) == 0) && isspace(rl_line_buffer[5])) || ((strncmp("\\convert", rl_line_buffer, 8) == 0) && isspace(rl_line_buffer[8]))) { int i = 2; /*extern const struct conversion lengths[], areas[], volumes[], * masses[], speeds[], powers[], forces[], accelerations[];*/ extern const struct conversion *conversions[]; while (!isspace(rl_line_buffer[i])) ++i; while (isspace(rl_line_buffer[i])) ++i; if (i == start) { /* complete on ALL units */ size_t unit, conversion; for (conversion = 0; conversions[conversion]; conversion++) { for (unit = 0; conversions[conversion][unit].name; unit++) { COMPLETE(conversions[conversion][unit].aka); } } } else { /* seek past the previous unit... */ char *unit1 = rl_line_buffer + i; char saved_char; ssize_t unit_cat; while (!isspace(rl_line_buffer[i])) ++i; saved_char = rl_line_buffer[i]; rl_line_buffer[i] = 0; unit_cat = identify_unit(unit1); rl_line_buffer[i] = saved_char; if (unit_cat != -1) { while (isspace(rl_line_buffer[i])) ++i; if (i == start) { size_t unit; /* complete on COMPATABLE units */ for (unit = 0; conversions[unit_cat][unit].name; unit++) { COMPLETE(conversions[unit_cat][unit].aka); } addToList(&tc_options, strdup("to")); } else if ((strncmp(rl_line_buffer + i, "to", 2) == 0) && isspace(rl_line_buffer[i + 2])) { i += 2; while (isspace(rl_line_buffer[i])) ++i; if (i == start) { size_t unit; /* complete on COMPATABLE units */ for (unit = 0; conversions[unit_cat][unit].name; unit++) { COMPLETE(conversions[unit_cat][unit].aka); } } } } } } } else { COMPLETE(qcommands); COMPLETE2(consts); COMPLETE2(funcs); variables = listvarnames(); COMPLETE(variables); free(variables); } rl_attempted_completion_over = 1; // do not use standard file completion rl_completion_entry_function = tc_generator; retvals = rl_completion_matches(text, tc_generator); return retvals; } /*}}} */ #endif /* ifdef HAVE_LIBREADLINE */ enum ui_colors { NONE, RESET, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, BOLDBLACK, BOLDRED, BOLDGREEN, BOLDYELLOW, BOLDBLUE, BOLDMAGENTA, BOLDCYAN, BOLDWHITE, }; const char *const colors[] = { "", // NONE "\033[0m", // RESET "\033[30m", "\033[31m", "\033[32m", "\033[33m", "\033[34m", "\033[35m", "\033[36m", "\033[37m", "\033[1m\033[30m", "\033[1m\033[31m", "\033[1m\033[32m", "\033[1m\033[33m", "\033[1m\033[34m", "\033[1m\033[35m", "\033[1m\033[36m", "\033[1m\033[37m", }; enum ui_pieces { PROMPT, CONV_CAT, CONV_UNIT, APPROX_ANSWER, EXACT_ANSWER, ERR_LOCATION, ERR_TEXT, PREF_NAME, PREF_VAL, PREF_CMD, STATUS, VAR_NAME, VAR_DESC, SUBVAR_NAME, EXPLANATION, UNCOLOR, }; int black_and_white_ui[] = { NONE, // PROMPT NONE, // CONV_CAT NONE, // CONV_UNIT NONE, // APPROX_ANSWER NONE, // EXACT_ANSWER NONE, // ERR_LOCATION NONE, // ERR_TEXT NONE, // PREF_NAME NONE, // PREF_VAL NONE, // PREF_CMD NONE, // STATUS NONE, // VAR_NAME NONE, // VAR_DESC NONE, // SUBVAR_NAME NONE, // EXPLANATION NONE, // UNCOLOR }; int color_ui[] = { BLUE, // PROMPT BOLDYELLOW, // CONV_CAT CYAN, // CONV_UNIT YELLOW, // APPROX_ANSWER GREEN, // EXACT_ANSWER BOLDMAGENTA, // ERR_LOCATION BOLDRED, // ERR_TEXT YELLOW, // PREF_NAME CYAN, // PREF_VAL BLUE, // PREF_CMD BOLDGREEN, // STATUS BOLDCYAN, // VAR_NAME CYAN, // VAR_DESC CYAN, // SUBVAR_NAME NONE, // EXPLANATION RESET, // UNCOLOR }; int *uiselect = black_and_white_ui; static void PrintConversionUnitCategory(int nCategory) { printf("\n%s%s%s\n", colors[uiselect[CONV_CAT]], conversion_names[nCategory], colors[uiselect[UNCOLOR]]); size_t unit, nAka; for (unit = 0; conversions[nCategory][unit].name; ++unit) { printf("\n%s%s%s: ", colors[uiselect[CONV_UNIT]], conversions[nCategory][unit].name, colors[uiselect[UNCOLOR]]); for (nAka = 0; nAka < 9; ++nAka) { if (conversions[nCategory][unit].aka[nAka] != NULL) { if (nAka > 0) { printf(", "); } printf("%s", conversions[nCategory][unit].aka[nAka]); } } } printf("\n\n"); } void show_answer(char *err, int uncertain, char *answer) { /*{{{*/ if (err && strlen(err)) { display_and_clear_errstring(); } if (uncertain) { printf("%s%s %s%s\n", colors[uiselect[APPROX_ANSWER]], conf.print_equal ? "~=" : " ", colors[uiselect[UNCOLOR]], answer); } else { printf("%s%s %s%s\n", colors[uiselect[EXACT_ANSWER]], conf.print_equal ? " =" : " ", colors[uiselect[UNCOLOR]], answer); } } /*}}}*/ static void display_and_clear_errstring(void) { /*{{{ */ extern int scanerror; extern char *errstring; extern int errloc; if (errstring && errstring[0]) { if (errloc != -1) { int i; extern int show_line_numbers; extern char *last_input; if (show_line_numbers && last_input) { fprintf(stderr, "-> %s\n", last_input); } fprintf(stderr, " "); for (i = 0; i < errloc; i++) { fprintf(stderr, " "); } fprintf(stderr, "%s^%s\n", colors[uiselect[ERR_LOCATION]], colors[uiselect[UNCOLOR]]); errloc = -1; } fprintf(stderr, "%s%s%s", colors[uiselect[ERR_TEXT]], errstring, colors[uiselect[UNCOLOR]]); if (errstring[strlen(errstring) - 1] != '\n') { fprintf(stderr, "\n"); } free(errstring); errstring = NULL; scanerror = 0; if (exit_on_err) { EXIT_EARLY(EXIT_FAILURE); } } } /*}}} */ int main(int argc, char *argv[]) { /*{{{ */ extern int yydebug; extern int lines; #ifdef HAVE_LIBREADLINE char *readme = NULL; #else char readme[BIG_STRING]; #endif #ifdef HAVE_READLINE_HISTORY char *historyfile = "/.wcalc_history"; #endif int tty, i; short cmdline_input = 0; // yydebug = 1; /* turn on ugly YACC debugging */ yydebug = 0; /* turn off ugly YACC debugging */ initvar(); lists_init(); /* initialize the preferences */ conf.precision = -1; conf.engineering = automatic; standard_output = 1; conf.picky_variables = 1; conf.print_prefixes = 1; conf.precision_guard = 1; conf.in_thou_delimiter = 0; conf.in_dec_delimiter = 0; conf.thou_delimiter = ','; conf.dec_delimiter = '.'; conf.print_equal = 1; conf.print_ints = 0; conf.print_commas = 0; conf.verbose = 0; conf.c_style_mod = 1; conf.rounding_indication = SIG_FIG_ROUNDING_INDICATION; init_numbers(); num_init_set_ui(last_answer, 0); /* load the preferences */ { int foundflag = 0; /* quick check the commandline for a --defaults argument */ for (i = 1; i < argc; ++i) { if (!strcmp(argv[i], "--defaults")) { foundflag = 1; break; } } if (foundflag == 0) { if (read_prefs()) { read_preload(); } else { perror("Error reading preferences file (~/.wcalcrc)"); } } } /* Parse commandline options */ for (i = 1; i < argc; ++i) { if (!strncmp(argv[i], "-P", 2)) { long int argnum; char *endptr; char *valstr; if ((strlen(&argv[i][2]) == 0) && (i + 1 < argc)) { // pull the arg from i+1 valstr = argv[++i]; } else { valstr = &argv[i][2]; } argnum = strtol(valstr, &endptr, 0); if ((*endptr != '\0') || (endptr == valstr)) { if (strlen(valstr)) { fprintf(stderr, "-P option requires a valid integer (found '%s' instead).\n", valstr); } else { fprintf(stderr, "-P option requires a valid integer.\n"); } EXIT_EARLY(EXIT_FAILURE); } else { conf.precision = (int)argnum; } } else if (!strcmp(argv[i], "-E") || !strcmp(argv[i], "--engineering")) { conf.engineering = always; } else if (!strcmp(argv[i], "-EE")) { conf.engineering = never; } else if (!strcmp(argv[i], "-H") || !strcmp(argv[i], "--help")) { display_command_help(); EXIT_EARLY(EXIT_SUCCESS); } else if (!strcmp(argv[i], "-v") || !strcmp(argv[i], "--version")) { printf("wcalc "VERSION "\n"); EXIT_EARLY(EXIT_SUCCESS); } else if (!strcmp(argv[i], "-u") || !strcmp(argv[i], "--units")) { if ((i + 1 >= argc) || !strcasecmp(argv[i + 1], "all")) { int nCategory; for (nCategory = 0; nCategory <= MAX_TYPE; ++nCategory) { PrintConversionUnitCategory(nCategory); } } else if (strlen(argv[i + 1]) == 1) { fprintf(stderr, "The %s option's (optional) argument must be two or more letters of one\nof the following (case insensitive):\n", argv[i]); int nCategory; for (nCategory = 0; nCategory <= MAX_TYPE; ++nCategory) { printf("\t%s\n", conversion_names[nCategory]); } EXIT_EARLY(EXIT_FAILURE); } else { const size_t len = strlen(argv[i + 1]); int printed = 0; int nCategory; for (nCategory = 0; nCategory <= MAX_TYPE; ++nCategory) { if (!strncasecmp(argv[i + 1], conversion_names[nCategory], len)) { printed = 1; PrintConversionUnitCategory(nCategory); break; } } if (printed == 0) { fprintf(stderr, "The %s option's (optional) argument must be two or more letters of one\nof the following (case insensitive):\n", argv[i]); for (nCategory = 0; nCategory <= MAX_TYPE; ++nCategory) { printf("\t%s\n", conversion_names[nCategory]); } EXIT_EARLY(EXIT_FAILURE); } } EXIT_EARLY(EXIT_SUCCESS); } else if (!strcmp(argv[i], "-d") || !strcmp(argv[i], "--decimal") || !strcmp(argv[i], "-dec") || !strcmp(argv[i], "--dec")) { conf.output_format = DECIMAL_FORMAT; } else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--hexadecimal") || !strcmp(argv[i], "-hex") || !strcmp(argv[i], "--hex")) { conf.output_format = HEXADECIMAL_FORMAT; } else if (!strcmp(argv[i], "-o") || !strcmp(argv[i], "--octal") || !strcmp(argv[i], "-oct") || !strcmp(argv[i], "--oct")) { conf.output_format = OCTAL_FORMAT; } else if (!strcmp(argv[i], "-b") || !strcmp(argv[i], "--binary") || !strcmp(argv[i], "-bin") || !strcmp(argv[i], "--bin")) { conf.output_format = BINARY_FORMAT; } else if (!strcmp(argv[i], "-p") || !strcmp(argv[i], "--prefixes")) { conf.print_prefixes = !conf.print_prefixes; /*} else if (!strcmp(argv[i], "-l") || !strcmp(argv[i], "--lenient")) { * conf.picky_variables = 0; */ } else if (!strcmp(argv[i], "-r") || !strcmp(argv[i], "--radians")) { conf.use_radians = !conf.use_radians; } else if (!strcmp(argv[i], "-q") || !strcmp(argv[i], "--quiet")) { conf.print_equal = !conf.print_equal; } else if (!strcmp(argv[i], "-c") || !strcmp(argv[i], "--conservative")) { conf.precision_guard = !conf.precision_guard; } else if (!strcmp(argv[i], "-R") || !strcmp(argv[i], "--remember")) { conf.remember_errors = !conf.remember_errors; } else if (!strncmp(argv[i], "--round=", 8)) { if (!strcmp(&(argv[i][8]), "no") || !strcmp(&(argv[i][8]), "none")) { conf.rounding_indication = NO_ROUNDING_INDICATION; } else if (!strcmp(&(argv[i][8]), "simple")) { conf.rounding_indication = SIMPLE_ROUNDING_INDICATION; } else if (!strcmp(&(argv[i][8]), "sig_fig")) { conf.rounding_indication = SIG_FIG_ROUNDING_INDICATION; } } else if (!strcmp(argv[i], "--round")) { fprintf(stderr, "--round requires an argument (none|simple|sig_fig)\n"); EXIT_EARLY(EXIT_FAILURE); } else if (!strncmp(argv[i], "--idsep=", 7)) { if ((strlen(argv[i]) > 8) || (strlen(argv[i]) == 7)) { fprintf(stderr, "--idsep= must have an argument\n"); EXIT_EARLY(EXIT_FAILURE); } if ((conf.in_thou_delimiter != argv[i][7]) && ((conf.in_thou_delimiter != 0) || (conf.thou_delimiter != argv[i][7]))) { conf.in_dec_delimiter = argv[i][7]; } else { fprintf(stderr, "%c cannot be the decimal separator. It is the thousands separator.\n", argv[i][7]); EXIT_EARLY(EXIT_FAILURE); } } else if (!strncmp(argv[i], "--dsep=", 7)) { if ((strlen(argv[i]) > 8) || (strlen(argv[i]) == 7)) { fprintf(stderr, "--dsep= must have an argument\n"); EXIT_EARLY(EXIT_FAILURE); } if (conf.thou_delimiter != argv[i][7]) { conf.dec_delimiter = argv[i][7]; } else { fprintf(stderr, "%c cannot be the decimal separator. It is the thousands separator.\n", argv[i][7]); EXIT_EARLY(EXIT_FAILURE); } } else if (!strncmp(argv[i], "--itsep=", 7)) { if ((strlen(argv[i]) > 8) || (strlen(argv[i]) == 7)) { fprintf(stderr, "--itsep= must have an argument\n"); EXIT_EARLY(EXIT_FAILURE); } if ((conf.in_dec_delimiter != argv[i][7]) && ((conf.in_dec_delimiter != 0) || (conf.dec_delimiter != argv[i][7]))) { conf.in_thou_delimiter = argv[i][7]; } else { fprintf(stderr, "%c cannot be the thousands separator. It is the decimal separator.\n", argv[i][7]); EXIT_EARLY(EXIT_FAILURE); } } else if (!strncmp(argv[i], "--tsep=", 7)) { if ((strlen(argv[i]) > 8) || (strlen(argv[i]) == 7)) { fprintf(stderr, "--tsep= must have an argument\n"); EXIT_EARLY(EXIT_FAILURE); } if (conf.dec_delimiter != argv[i][7]) { conf.thou_delimiter = argv[i][7]; } else { fprintf(stderr, "%c cannot be the thousands separator. It is the decimal separator.\n", argv[i][7]); EXIT_EARLY(EXIT_FAILURE); } } else if (!strncmp(argv[i], "--bits", 6)) { unsigned long int argnum; char *endptr; argnum = strtoul(&(argv[i][6]), &endptr, 0); if ((endptr != NULL) && (strlen(endptr) > 0)) { fprintf(stderr, "--bits option requires a valid integer without spaces.\n"); EXIT_EARLY(EXIT_FAILURE); } else { if (argnum < NUM_PREC_MIN) { fprintf(stderr, "Minimum precision is %lu.\n", (unsigned long)NUM_PREC_MIN); } else if (argnum > NUM_PREC_MAX) { fprintf(stderr, "Maximum precision is %lu.\n", (unsigned long)NUM_PREC_MAX); } else { num_set_default_prec(argnum); } } } else if (!strcmp(argv[i], "--ints")) { conf.print_ints = !conf.print_ints; } else if (!strcmp(argv[i], "--delim")) { conf.print_commas = !conf.print_commas; } else if (!strcmp(argv[i], "--verbose")) { conf.verbose = !conf.verbose; } else if (!strcmp(argv[i], "--yydebug")) { yydebug = 1; } else if (!strcmp(argv[i], "-n")) { conf.print_equal = 0; } else if (!strcmp(argv[i], "-C") || !strcmp(argv[i], "--color")) { conf.color_ui = !conf.color_ui; if (conf.color_ui) { uiselect = color_ui; } else { uiselect = black_and_white_ui; } } else if (!strcmp(argv[i], "--defaults")) { /* ignore this argument */ } else { extern char *errstring; if (isatty(1) == 0) { /* Find out where stdout is going */ uiselect = black_and_white_ui; } if (!cmdline_input) { #ifdef HAVE_READLINE_HISTORY char *filename; const char *const home = getenv("HOME"); using_history(); filename = malloc(strlen(home) + strlen(historyfile) + 2); snprintf(filename, strlen(home) + strlen(historyfile) + 1, "%s%s", home, historyfile); if (read_history(filename)) { if (errno != ENOENT) { perror("Reading History"); } } free(filename); #endif /* ifdef HAVE_READLINE_HISTORY */ cmdline_input = 1; } if (conf.verbose) { printf("-> %s\n", argv[i]); } parseme(argv[i]); if (!errstring || (errstring && !strlen(errstring)) || conf.remember_errors) { addToHistory(argv[i], last_answer); } if (errstring && strlen(errstring)) { fprintf(stderr, "%s", errstring); if (errstring[strlen(errstring) - 1] != '\n') { fprintf(stderr, "\n"); } free(errstring); errstring = NULL; } if (putval("a", last_answer, "previous answer") != 0) { fprintf(stderr, "error storing last answer\n"); } } } if (!cmdline_input) { extern char *errstring; char *envinput = getenv("wcalc_input"); if (envinput) { #ifdef HAVE_READLINE_HISTORY char *filename; const char *const home = getenv("HOME"); using_history(); filename = malloc(strlen(home) + strlen(historyfile) + 2); strcpy(filename, home); strcat(filename, historyfile); if (read_history(filename)) { if (errno != ENOENT) { perror("Reading History"); } } free(filename); #endif /* ifdef HAVE_READLINE_HISTORY */ cmdline_input = 1; if (conf.verbose) { printf("-> %s\n", envinput); } parseme(envinput); if (!errstring || (errstring && !strlen(errstring)) || conf.remember_errors) { addToHistory(envinput, last_answer); } if (errstring && strlen(errstring)) { fprintf(stderr, "%s", errstring); if (errstring[strlen(errstring) - 1] != '\n') { fprintf(stderr, "\n"); } free(errstring); errstring = NULL; } if (putval("a", last_answer, "previous answer") != 0) { fprintf(stderr, "error storing last answer\n"); } } } if (cmdline_input) { #ifdef HAVE_READLINE_HISTORY char *filename; char *home = getenv("HOME"); filename = malloc(strlen(home) + strlen(historyfile) + 2); snprintf(filename, strlen(home) + strlen(historyfile) + 1, "%s%s", home, historyfile); if (write_history(filename)) { perror("Saving History 1"); } if (conf.history_limit) { if (history_truncate_file(filename, conf.history_limit_len)) { perror("Truncating History"); } } free(filename); #endif /* ifdef HAVE_READLINE_HISTORY */ EXIT_EARLY(EXIT_SUCCESS); } tty = isatty(0); /* Find out where stdin is coming from... */ if (tty > 0) { /* if stdin is a keyboard or terminal, then use readline and prompts */ #ifdef HAVE_READLINE_HISTORY const char *const home = getenv("HOME"); char *filename; using_history(); filename = malloc(strlen(home) + strlen(historyfile) + 2); snprintf(filename, strlen(home) + strlen(historyfile) + 1, "%s%s", home, historyfile); if (read_history(filename)) { if (errno != ENOENT) { perror("Reading History"); } } #endif /* ifdef HAVE_READLINE_HISTORY */ #ifdef HAVE_LIBREADLINE build_qcommands(); rl_attempted_completion_function = wcalc_completion; rl_basic_word_break_characters = " \t\n\"\'+-*/[{()}]=<>!|~&^%"; #endif exit_on_err = 0; printf("Enter an expression to evaluate, q to quit, or ? for help:\n"); while (1) { lines = 1; fflush(NULL); #ifdef HAVE_LIBREADLINE { char prompt[30] = ""; snprintf(prompt, 30, "\1%s\2->\1%s\2 ", colors[uiselect[PROMPT]], colors[uiselect[UNCOLOR]]); readme = readline(prompt); } if (!readme) { /* from the readline manpage: * readline returns the text of the line read. A blank * line returns the empty string. If EOF is encountered * while reading a line, and the line is empty, NULL is * returned. If an eof is read with a non-empty line, it * is treated as a newline. * This means: readme == NULL is a perfectly reasonable * response from readline(), AND it means something * significant. DO NOT DO errno PARSING HERE!!!! */ printf("\n"); break; } #else /* ifdef HAVE_LIBREADLINE */ { char c; unsigned int i = 0; memset(readme, 0, BIG_STRING); printf("%s->%s ", colors[uiselect[PROMPT]], colors[uiselect[UNCOLOR]]); fflush(stdout); c = fgetc(stdin); while (c != '\n' && i < BIG_STRING && !feof(stdin) && !ferror(stdin)) { readme[i] = c; c = fgetc(stdin); ++i; } if (feof(stdin) || ferror(stdin)) { printf("\n"); break; } } #endif /* ifdef HAVE_LIBREADLINE */ /* if there is a line */ if (strlen(readme)) { if (!strcmp(readme, "q") || !strcmp(readme, "quit") || !strcmp(readme, "\\q")) { break; } else if (!strncmp(readme, "\\yydebug", 8)) { // addToHistory(readme, 0); yydebug = !yydebug; printf("Debug Mode %s\n", yydebug ? "On" : "Off"); } else if (!strncmp(readme, "\\color", 6)) { conf.color_ui = !conf.color_ui; if (conf.color_ui) { uiselect = color_ui; } else { uiselect = black_and_white_ui; } } else { if (conf.verbose) { printf("-> %s\n", readme); } parseme(readme); { extern char *errstring; if (!errstring || (errstring && !strlen(errstring)) || conf.remember_errors) { addToHistory(readme, last_answer); } } } if (putval("a", last_answer, "previous answer") != 0) { fprintf(stderr, "error storing last answer\n"); } { extern char *errstring; if (errstring && strlen(errstring)) { display_and_clear_errstring(); /*rl_stuff_char('f');*/ } } } #ifdef HAVE_LIBREADLINE free(readme); #endif } #ifdef HAVE_READLINE_HISTORY if (write_history(filename)) { fprintf(stderr, "Cannot save history to %s: %s\n", filename, strerror(errno)); fflush(stderr); } if (conf.history_limit) { if (history_truncate_file(filename, conf.history_limit_len)) { perror("Truncating History"); } } free(filename); #endif /* ifdef HAVE_READLINE_HISTORY */ } else if (tty < 0) { fprintf(stderr, "Could not determine terminal type.\n"); } else { /* if stdin is ANYTHING ELSE (a pipe, a file, etc), don't prompt */ unsigned int linelen = 0, maxlinelen = BIG_STRING; extern int show_line_numbers; exit_on_err = 1; show_line_numbers = 1; while (1) { char *line = calloc(maxlinelen, sizeof(char)); char gotten = fgetc(stdin); while (gotten != '\n' && !feof(stdin) && !ferror(stdin)) { line[linelen] = gotten; gotten = fgetc(stdin); linelen++; if (linelen > maxlinelen) { char *temp; temp = realloc(line, (maxlinelen + BIG_STRING) * sizeof(char)); if (!temp) { free(line); fprintf(stderr, "Ran out of memory. Line too long.\n"); EXIT_EARLY(EXIT_FAILURE); } memset(temp + maxlinelen, 0, BIG_STRING); maxlinelen += BIG_STRING; line = temp; } } if (ferror(stdin) || (feof(stdin) && (linelen == 0))) { free(line); break; } if (conf.verbose) { printf("-> %s\n", line); } parseme(line); if (putval("a", last_answer, "previous answer") != 0) { fprintf(stderr, "error storing last answer\n"); } { extern int errloc; if (errloc != -1) { display_and_clear_errstring(); /*fprintf(stderr, "%s", errstring); * if (errstring[strlen(errstring) - 1] != '\n') * fprintf(stderr, "\n"); * free(errstring); * errstring = NULL;*/ } } free(line); linelen = 0; } } if (pretty_answer) { extern char *pa; free(pretty_answer); if (pa) { free(pa); } } EXIT_EARLY(EXIT_SUCCESS); } /*}}} */ static int read_preload(void) { /*{{{ */ int fd = openDotFile("wcalc_preload", O_RDONLY); switch (fd) { case -1: fprintf(stderr, "HOME environment variable unset. Cannot read preload file.\n"); return 0; case -2: fprintf(stderr, "HOME environment variable is too long. Cannot read preload file.\n"); return 0; } if (fd < 0) { if (errno == ENOENT) { /* The prefs file does not exist. This is okay, just means we can't read it. */ return 1; } perror("Could not open preload file (~/.wcalc_preload)"); return 0; } if (loadStateFD(fd, 0) < 0) { perror("Error reading preload file (~/.wcalc_preload)"); } if (close(fd) < 0) { perror("Could not close preload file."); } return 1; } /*}}} */ #define CHECK_COLOR(x) else if (!strcasecmp(str, # x)) { return x; } static enum ui_colors str2color(const char *str) { if (!strcasecmp(str, "NONE")) { return NONE; } CHECK_COLOR(BLACK) CHECK_COLOR(RED) CHECK_COLOR(GREEN) CHECK_COLOR(YELLOW) CHECK_COLOR(BLUE) CHECK_COLOR(MAGENTA) CHECK_COLOR(CYAN) CHECK_COLOR(WHITE) CHECK_COLOR(BOLDBLACK) CHECK_COLOR(BOLDRED) CHECK_COLOR(BOLDGREEN) CHECK_COLOR(BOLDYELLOW) CHECK_COLOR(BOLDBLUE) CHECK_COLOR(BOLDMAGENTA) CHECK_COLOR(BOLDCYAN) CHECK_COLOR(BOLDWHITE) else { fprintf(stderr, "Unrecognized color: '%s'\n", str); return RESET; } } #define HANDLECOLOR(x) else if (!strcasecmp(key, # x "]")) { uiselect[x] = str2color(value); } static int assign_color_prefs(const char *key, const char *value) { assert(key); assert(value); if (uiselect != color_ui) { fprintf(stderr, "Colors not enabled!\n"); return 0; } if (!strcasecmp(key, "conversion_category]")) { uiselect[CONV_CAT] = str2color(value); } else if (!strcasecmp(key, "conversion_unit]")) { uiselect[CONV_UNIT] = str2color(value); } HANDLECOLOR(PROMPT) HANDLECOLOR(APPROX_ANSWER) HANDLECOLOR(EXACT_ANSWER) HANDLECOLOR(ERR_LOCATION) HANDLECOLOR(ERR_TEXT) HANDLECOLOR(PREF_NAME) HANDLECOLOR(PREF_VAL) HANDLECOLOR(PREF_CMD) HANDLECOLOR(STATUS) HANDLECOLOR(VAR_NAME) HANDLECOLOR(VAR_DESC) HANDLECOLOR(SUBVAR_NAME) HANDLECOLOR(EXPLANATION) else { char *res = strdup(key); *strchr(res, ']') = 0; fprintf(stderr, "Unrecognized colorable resource: '%s'\n", res); free(res); return 0; } return 1; } static int set_pref(const char *key, const char *value) { if (!strcmp(key, "precision")) { conf.precision = atoi(value); } else if (!strcmp(key, "show_equals")) { conf.print_equal = TRUEFALSE; } else if (!strcmp(key, "flag_undeclared")) { conf.picky_variables = TRUEFALSE; } else if (!strcmp(key, "use_radians")) { conf.use_radians = TRUEFALSE; } else if (!strcmp(key, "print_prefixes")) { conf.print_prefixes = TRUEFALSE; } else if (!strcmp(key, "save_errors")) { conf.remember_errors = TRUEFALSE; } else if (!strcmp(key, "remember_errors")) { conf.remember_errors = TRUEFALSE; } else if (!strcmp(key, "precision_guard")) { conf.precision_guard = TRUEFALSE; } else if (!strcmp(key, "print_integers")) { conf.print_ints = TRUEFALSE; } else if (!strcmp(key, "print_delimiters")) { conf.print_commas = TRUEFALSE; } else if (!strcmp(key, "input_thousands_delimiter")) { conf.in_thou_delimiter = value[0]; } else if (!strcmp(key, "input_decimal_delimiter")) { conf.in_dec_delimiter = value[0]; } else if (!strcmp(key, "thousands_delimiter")) { conf.thou_delimiter = value[0]; } else if (!strcmp(key, "decimal_delimiter")) { conf.dec_delimiter = value[0]; } else if (!strcmp(key, "history_limit")) { if (!strcmp(value, "no")) { conf.history_limit = conf.history_limit_len = 0; } else { conf.history_limit = 1; conf.history_limit_len = strtoul(value, NULL, 0); } } else if (!strcmp(key, "output_format")) { if (!strcmp(value, "decimal")) { conf.output_format = DECIMAL_FORMAT; } else if (!strcmp(value, "octal")) { conf.output_format = OCTAL_FORMAT; } else if (!strcmp(value, "binary")) { conf.output_format = BINARY_FORMAT; } else if (!strcmp(value, "hex") || !strcmp(value, "hexadecimal")) { conf.output_format = HEXADECIMAL_FORMAT; } else { fprintf(stderr, "Unrecognized output_format in wcalcrc.\n\tSupported formats are decimal, octal, binary, hex.\n"); return 0; } } else if (!strcmp(key, "rounding_indication")) { if (!strcmp(value, "no") || !strcmp(value, "none")) { conf.rounding_indication = NO_ROUNDING_INDICATION; } else if (!strcmp(value, "simple")) { conf.rounding_indication = SIMPLE_ROUNDING_INDICATION; } else if (!strcmp(value, "sig_fig")) { conf.rounding_indication = SIG_FIG_ROUNDING_INDICATION; } else { fprintf(stderr, "Unrecognized rounding_indication in wcalcrc.\n\tSupported indication types are none, simple, sig_fig.\n"); return 0; } } else if (!strcmp(key, "engineering")) { if (!strcmp(value, "auto") || !strcmp(value, "automatic") || !strcmp(value, "yes") || !strcmp(value, "true") || !strcmp(value, "1")) { conf.engineering = automatic; } else if (!strcmp(value, "always")) { conf.engineering = always; } else { conf.engineering = never; } } else if (!strcmp(key, "c_style_mod")) { conf.c_style_mod = TRUEFALSE; } else if (!strcmp(key, "color_ui") || !strcmp(key, "color")) { conf.color_ui = TRUEFALSE; if (conf.color_ui) { uiselect = color_ui; } else { uiselect = black_and_white_ui; } } else if (!strncmp(key, "colors[", 7)) { return assign_color_prefs(key + 7, value); } else { fprintf(stderr, "Unrecognized key in wcalcrc: %s\n", key); return 0; } return 1; } static void config_error(const char *format, ...) { /*{{{*/ va_list args; fprintf(stderr, "Wcalc: Config: "); va_start(args, format); vfprintf(stderr, format, args); va_end(args); } /*}}}*/ static size_t copy_string(char *d, const char *s, size_t dmax, size_t smax) { /*{{{*/ size_t dcurs = 0, scurs = 0; const char quoted = (s[0] == '\''); if (quoted) { scurs = 1; while (dcurs < dmax && scurs < smax && s[scurs] != '\'') { d[dcurs++] = s[scurs++]; } scurs++; // skip the terminating quote } else { do { d[dcurs++] = s[scurs++]; } while (dcurs < dmax && scurs < smax && (isalnum(s[scurs]) || s[scurs] == '[' || s[scurs] == ']' || s[scurs] == '.' || s[scurs] == '_' || s[scurs] == ' ')); } if (scurs > smax) { return 0; } if (dcurs > dmax) { return 0; } d[dcurs] = 0; while (dcurs > 0 && isspace(d[dcurs - 1])) { dcurs--; d[dcurs] = 0; } return scurs; } /*}}}*/ static int read_prefs(void) { /*{{{ */ int fd = openDotFile("wcalcrc", O_RDONLY); char key[BIG_STRING], value[BIG_STRING]; size_t curs = 0; size_t curs_max; char *f_mutable; const char *f; switch (fd) { case -1: fprintf(stderr, "HOME environment variable unset. Cannot read preferences.\n"); return 0; case -2: fprintf(stderr, "HOME environment variable is too long. Cannot read preferences.\n"); return 0; } if (fd < 0) { if (errno == ENOENT) { /* The prefs file does not exist. This is okay, just means we can't read it. */ return 1; } perror("Could not open preferences file (~/.wcalcrc)"); return 0; } { struct stat info; if (fstat(fd, &info)) { perror("Could not determine the size of the preference file"); close(fd); return 0; } curs_max = info.st_size - 1; f_mutable = mmap(NULL, info.st_size, PROT_READ, MAP_PRIVATE, fd, 0); if (f_mutable == MAP_FAILED) { perror("Could not read the preference file"); close(fd); return 0; } f = f_mutable; } assert(curs_max > curs); do { memset(value, 0, BIG_STRING); memset(key, 0, BIG_STRING); // read until we find a non-comment while (curs < curs_max && (isspace(f[curs]) || f[curs] == '#')) { if (f[curs] == '#') { // skip to the next line do { curs++; } while (curs < curs_max && f[curs] != '\n'); } curs++; } if (curs >= curs_max) { break; } // not an error! // read in the key { size_t skip = copy_string(key, f + curs, BIG_STRING, curs_max - curs); if (!skip) { config_error("Incomplete key (%s)! (probably an unterminated quote)\n", key); goto err_exit; } curs += skip; } // eat the equals sign (and any surrounding space) while (curs < curs_max && isspace(f[curs])) curs++; if ((curs == curs_max) || (f[curs] != '=')) { config_error("Expected equals (=) after key (%s)!\n", key); goto err_exit; } do { curs++; } while (curs < curs_max && isspace(f[curs])); if (curs == curs_max) { config_error("Key (%s) has no value!\n", key); goto err_exit; } // read in the value { size_t skip = copy_string(value, f + curs, BIG_STRING, curs_max - curs); if (!skip) { config_error("Incomplete value (%s) for key (%s)! (probably an unterminated quote)\n", value, key); goto err_exit; } curs += skip; } if (!set_pref(key, value)) { goto err_exit; } // eat the rest of the line while (curs < curs_max && f[curs] != '\n') curs++; if (curs < curs_max) { curs++; } } while (curs < curs_max); if (munmap(f_mutable, curs_max + 1)) { perror("Unmapping the config file"); } if (close(fd)) { perror("Closing the config file"); } return 1; err_exit: config_error("Corrupt config file. Cannot continue.\n"); exit(EXIT_FAILURE); } /*}}} */ static void prefline(const char *name, const char *val, const char *cmd) { if (name && val && cmd) { printf("%s%27s:%s %s%-24s%s -> ", colors[uiselect[PREF_NAME]], name, colors[uiselect[UNCOLOR]], colors[uiselect[PREF_VAL]], val, colors[uiselect[UNCOLOR]]); if (strchr(cmd, ',')) { unsigned offset = 0; while (strchr(cmd + offset, ',')) { unsigned cmdlen = strchr(cmd + offset, ',') - (cmd + offset); printf("%s%.*s%s, ", colors[uiselect[PREF_CMD]], cmdlen, cmd + offset, colors[uiselect[UNCOLOR]]); offset += cmdlen + 1; } printf("%s%s%s\n", colors[uiselect[PREF_CMD]], cmd + offset, colors[uiselect[UNCOLOR]]); } else { printf("%s%s%s\n", colors[uiselect[PREF_CMD]], cmd, colors[uiselect[UNCOLOR]]); } } else if (name && val) { printf("%s%27s:%s %s%-24s%s\n", colors[uiselect[PREF_NAME]], name, colors[uiselect[UNCOLOR]], colors[uiselect[PREF_VAL]], val, colors[uiselect[UNCOLOR]]); } } #define DP_YESNO(x) ((x) ? "yes" : "no") void display_prefs(void) { if (standard_output) { char tmp[50]; sprintf(tmp, "%-3i %s", conf.precision, ((conf.precision == -1) ? "(auto)" : " ")); prefline("Display Precision", tmp, "\\p"); sprintf(tmp, "%-24lu", (unsigned long)num_get_default_prec()); prefline("Internal Precision", tmp, "\\bits"); prefline("Engineering Output", (conf.engineering == always) ? "always" : (conf.engineering == never) ? "never " : "auto ", "\\e"); prefline("Output Format", output_string(conf.output_format), "\\b,\\d,\\h,\\o"); prefline("Use Radians", DP_YESNO(conf.use_radians), "\\r"); prefline("Print Prefixes", DP_YESNO(conf.print_prefixes), "\\pre,\\prefixes"); prefline("Avoid Abbreviating Integers", DP_YESNO(conf.print_ints), "\\ints"); prefline("Rounding Indication", conf.rounding_indication == SIMPLE_ROUNDING_INDICATION ? "yes (simple) " : (conf.rounding_indication == SIG_FIG_ROUNDING_INDICATION ? "yes (sig_fig)" : "no "), "\\round"); prefline("Save Errors in History", DP_YESNO(conf.remember_errors), "\\re"); sprintf(tmp, "'%c'", conf.thou_delimiter); prefline("Thousands Delimiter", tmp, "\\tsep"); sprintf(tmp, "'%c'", conf.dec_delimiter); prefline("Decimal Delimiter", tmp, "\\dsep"); prefline("Precision Guard", DP_YESNO(conf.precision_guard), "\\cons"); prefline("History Limit", DP_YESNO(conf.history_limit), "\\hlimit"); if (conf.history_limit) { sprintf(tmp, "%lu", conf.history_limit_len); prefline("History Limited To", tmp, NULL); } prefline("Verbose", DP_YESNO(conf.verbose), "\\verbose"); prefline("Display Delimiters", DP_YESNO(conf.print_commas), "\\delim"); prefline("Modulo Operator", (conf.c_style_mod ? "C-style " : "not C-style"), "\\cmod"); } } void display_status(const char *format, ...) { if (standard_output) { va_list args; printf("%s", colors[uiselect[STATUS]]); va_start(args, format); vprintf(format, args); va_end(args); printf("%s\n", colors[uiselect[UNCOLOR]]); } } void display_output_format(int format) { if (standard_output) { switch (format) { case HEXADECIMAL_FORMAT: display_status("Hexadecimal Formatted Output"); break; case OCTAL_FORMAT: display_status("Octal Formatted Output"); break; case DECIMAL_FORMAT: display_status("Decimal Formatted Output"); break; case BINARY_FORMAT: display_status("Binary Formatted Output"); break; } } } void display_val(const char *name) { if (standard_output) { answer_t val; char approx = 0; char *err; printf("display_val\n"); display_and_clear_errstring(); printf("%s%s%s", colors[uiselect[VAR_NAME]], name, colors[uiselect[UNCOLOR]]); val = getvar_full(name); if (val.exp) { printf(" %s=%s %s\n", colors[uiselect[EXACT_ANSWER]], colors[uiselect[UNCOLOR]], val.exp); } else { char *p = print_this_result(val.val, 0, &approx, &err); printf("display_val\n"); show_answer(err, approx, p); } if (val.desc) { printf(":: %s%s%s\n", colors[uiselect[VAR_DESC]], val.desc, colors[uiselect[UNCOLOR]]); } } } void display_var(variable_t *v, unsigned count, unsigned digits) { printf("%*u. %s%s%s", digits, count, colors[uiselect[VAR_NAME]], v->key, colors[uiselect[UNCOLOR]]); if (v->exp) { printf(" %s=%s %s\n", colors[uiselect[EXACT_ANSWER]], colors[uiselect[UNCOLOR]], v->expression); } else { char approx = 0; char *err; char *p = print_this_result(v->value, 0, &approx, &err); printf("display_var\n"); show_answer(err, approx, p); } if (v->description) { printf("%*s %s%s%s\n", digits + 4, "::", colors[uiselect[VAR_DESC]], v->description, colors[uiselect[UNCOLOR]]); } } void display_expvar_explanation(const char *str, const char *exp, List subvars, const char *desc) { printf("%s%s%s is the expression: '%s'\n", colors[uiselect[VAR_NAME]], str, colors[uiselect[UNCOLOR]], exp); if (desc) { printf("Description: %s%s%s\n", colors[uiselect[VAR_DESC]], desc, colors[uiselect[UNCOLOR]]); } if (listLen(subvars) > 0) { unsigned maxnamelen = 0; { /* First, find the longest variable name... */ ListIterator si = getListIterator(subvars); char *cursor = (char *)nextListElement(si); if (cursor != NULL) { maxnamelen = strlen(cursor); while ((cursor = (char *)nextListElement(si)) != NULL) { unsigned len = strlen(cursor); if (maxnamelen < len) { maxnamelen = len; } } } freeListIterator(si); } printf("%s%s%s uses the following variables:\n", colors[uiselect[VAR_NAME]], str, colors[uiselect[UNCOLOR]]); while (listLen(subvars) > 0) { char *curstr = (char *)getHeadOfList(subvars); char *value = evalvar_noparse(curstr); printf("\t%s%*s%s\t(currently: %s)\n", colors[uiselect[SUBVAR_NAME]], -maxnamelen, curstr, colors[uiselect[UNCOLOR]], value ? value : "undefined"); if (curstr) { free(curstr); } if (value) { free(value); } } } } void display_valvar_explanation(const char *str, Number *val, const char *desc) { printf("%s%s%s is a variable with the value: %s\n", colors[uiselect[VAR_NAME]], str, colors[uiselect[UNCOLOR]], print_this_result(*val, 0, NULL, NULL)); if (desc) { printf("Description: %s%s%s\n", colors[uiselect[VAR_DESC]], desc, colors[uiselect[UNCOLOR]]); } } void display_explanation(const char *exp, ...) { if (standard_output) { va_list args; printf("%s", colors[uiselect[EXPLANATION]]); va_start(args, exp); vprintf(exp, args); va_end(args); printf("%s\n", colors[uiselect[UNCOLOR]]); } } void display_stateline(const char *buf) { printf("-> %s\n", buf); } void display_consts(void) { size_t linelen = 0; for (size_t i = 0; consts[i].explanation; i++) { const char *const *const names = consts[i].names; for (size_t j = 0; names[j]; j++) { if (linelen + strlen(names[j]) + 2 > 70) { printf(",\n"); linelen = 0; } if (linelen == 0) { printf("%s", names[j]); linelen = strlen(names[j]); } else { printf(", %s", names[j]); linelen += strlen(names[j]) + 2; } } } printf("\n"); } /* vim:set expandtab: */ wcalc-2.5/src/cli/help.c0000644000175000017500000001260712252654225012037 00000000000000/* * help.c * Wcalc * * Created by Kyle Wheeler on Wed Feb 12 2003. * Copyright (c) 2003 Kyle Wheeler. All rights reserved. * */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* System Headers */ #include /* Internal Headers */ #include "definitions.h" #include "output.h" void display_interactive_help (void) {/*{{{*/ printf("Wcalc "PACKAGE_VERSION " by Kyle Wheeler.\nVersion 0.1.x written in C++ for CS240C at Ohio University, Jan 14 2000\n"); printf("Version 0.2.x rewritten for lex/yacc in C, Nov 25 2001\n"); printf("Version 0.3.x released under GPL, Jan 2003\n"); printf("This calculator recognizes the following symbols:\n" SUPPORTED_SYMBOLS "\nThe following commands are supported:\n" "\\p \\bitsX \\e \\eng \\engineering \\q \\help " "\\prefs " "\\cons \\conservative\n" "\\pre \\prefix \\prefixes " "\\b \\bin \\binary " "\\d \\dec \\decimal " "\\h \\x \\hex\n\\hexadecimal " "\\o \\oct \\octal " "\\r \\rad \\radians " "\\re \\remember \\remember_errors\n" "\\rou \\round \\rounding " "\\dsep " "\\tsep " "\\hlimit " "\\openXXXXX " "\\saveXXXXX " "\\ints\n" "\\convert " "\\li \\list \\listvars " "\\store " "\\explain " "\n\n" "Variables are supported and may be assigned using the = operator.\n" "To assign a variable, use the form:\n" "foo = anylegalexpression\n" "Thereafter, that variable name is the same as the literal value it represents.\n" "Variables may also be assigned like so:\n" "foo = 'anylegalexpression'\n" "Thereafter, that expression is evaluated to get a value for the variable\n" "whenever the variable is used.\n" "\"a\" is a reserved variable that represents the previous answer.\n\n" "Detail about any command, symbol, or variable can be gotten by \\explain'ing it.\n" "\n" "This calculator accepts input in decimal (1.00), scientific notation (1.0e5),\n" "octal (088), hexadecimal (0xff), and binary (0b11).\n\n" "Comments (ignored expressions) are either between /* and */ or\n" "after a // or #\n"); }/*}}}*/ void display_command_help (void) {/*{{{*/ printf("Wcalc "PACKAGE_VERSION " by Kyle Wheeler.\n"); printf("Version 0.1.x written in C++ for CS240C at Ohio University, Jan 14 2000\n"); printf("Version 0.2.x rewritten for lex/yacc in C, Nov 25 2001\n\n"); printf("This calculator recognized the following symbols:\n" SUPPORTED_SYMBOLS "\nThe ! is factorial or boolean, depending on use.\n" "Spaces are ignored (unknown symbols cause errors or are treated as variables)\n" "This calculator accepts input in decimal (1.00), scientific notation (1.0e5),\n" "octal (088), hexadecimal (0xff), and in binary (0b11).\n\n" "-H, --help Prints this help.\n" "-v, --version Prints the version number.\n" "-Px Sets the precision, where x is the desired precision.\n" " This setting only affects output.\n" "-E Toggles the formatting of output between decimal\n" " and scientific notation.\n" " This setting only applies when precision is specified.\n" "-d, -dec, --decimal Prints the output in decimal form.\n" "-h, -hex, --hexadecimal Prints the output in hexadeximal form.\n" "-o, -oct, --octal Prints the output in octal form.\n" "-b, -bin, --binary Prints the output in binary form.\n" "-p Prints the prefixes for hexadecimal, octal and\n" " binary forms.\n" "-l, --lenient Makes the parser assume that uninitialized variables\n" " have a value of zero.\n" "-r, --radians This makes all trigonometric functions work in radians.\n" "-q, --quiet This suppresses the = sign.\n" "-c, --conservative This toggles the precision guard for display.\n" "-u, --units [type] Prints units used for conversions; parameter can be:\n" " lengths, areas, volumes, masses, speeds, powers,\n" " forces, accelerations, temperatures, angles, or\n" " pressures. If the parameter is not supplied, all units\n" " are printed.\n" "\n" "Variables are supported and may be assigned using the = operator.\n" "To assign a variable, use the form:\n" "foo = anylegalexpression\n" "Thereafter, that variable name is the same as the literal value it represents.\n\n" "Executing this program without any arguments enters an 'interactive' mode\n" "with a few more features and options.\n" "\n" "This is only a subset of the supported options. See the man page for complete documentation.\n" ); }/*}}}*/ /* vim:set expandtab: */ wcalc-2.5/src/Makefile.am0000644000175000017500000000065412252675301012225 00000000000000SUBDIRS = common gui . AM_CPPFLAGS = -I$(top_srcdir)/src/common/includes \ -I$(top_builddir)/src/common/includes \ -I$(top_builddir)/src/common \ -I$(top_srcdir)/src/common \ @GMP_CPPFLAGS@ @MPFR_CPPFLAGS@ AM_LDFLAGS = @GMP_LDFLAGS@ @MPFR_LDFLAGS@ bin_PROGRAMS = wcalc wcalc_LDADD = common/libwcalc.a @LEXLIB@ wcalc_SOURCES = cli/main.c cli/help.c common/libwcalc.a: $(MAKE) -C common libwcalc.a wcalc-2.5/README0000644000175000017500000001325512450353475010270 00000000000000Hello! This is Wcalc 2.5! 1. What's New 2. Intro 3. Installation 4. License 5. Known Bugs 6. Contact Info ************** * What's New * ************** CHANGES: - Color support! - Generic SI unit conversion! IMPROVEMENTS: - Improved documentation - Increased precision for e constant - More robust prefs parsing - Prettier list output - Better detection of libreadline variants - Support for newer versions of autotools - Support for \assert command - Automatic testing infrastructure (via `make check`) BUGFIXES: - Fix 0 parsing bug (2.4.1 regression; thanks Arun Prakash Jana!) - Plugged memory leaks - Fixed segfault when parsing hierarchical expressions - Fixed handling of Euler constant ********* * INTRO * ********* Wcalc started as a project written for my C++ class at Ohio University (CS 240B), way back on January 14th, 2000. I made it to be a "natural language" calculator - in that it would successfully interpret any valid mathematical expression. As you can imagine, being a beginner programmer, the code was rather heinous, to say the least! I reworked it after learning lex and yacc (powerful string parsing tools for C programmers - if you're a C programmer and you don't know them... go google!) in November 2001. Then I thought to myself - I have MacOS X, the standard calculator leaves something to be desired, and they say Cocoa programming is easy... what the heck, I'll give it a shot. Wcalc, the GUI version, turned out to be a pretty neat calculator. The GUI version, however, has been abandoned in favor of the CLI. Wcalc takes "expressions" and calculates the answer. My goal was to make the expressions relatively intutive - no reverse polish, or anything like that. So, by way of a record, here is what Wcalc can do: ********** * Syntax * ********** Wcalc recognizes the following symbols: + (plus) - (minus) * (multiply) / (divide) % (modulo (read: the remainder when integers are divided)) ! (factorial or boolean NOT) ^ (exponent. four squared is 4^2) < (less than) > (greater than) <= (less than or equal to) >= (greater than or equal to) == (equal) != (not equal) && (logical and) || (logical or) << (bitshift left) >> (bitshift right) | (bitwise or) ~ (bitwise not) & (bitwise and) Wcalc also allows you to group operations with parenthesis (), brackets [], and braces {}. Wcalc supports the following functions: sin cos tan cot asin acos atan acot sinh cosh tanh coth asinh acosh atanh acoth log ln logtwo round abs ceil floor sqrt cbrt comp Gamma lnGamma zeta sinc Wcalc has a few built-in constants: e pi Na k Cc ec R G g Me Mp Mn Md u amu c h mu0 epsilon0 muB muN b a0 F Vm NAk eV sigma alpha gamma re Kj Rk Rinf Eh Gf Mmu Mt Mh Malpha n0 c1 c2 G0 Phi0 K random irandom rand irand Wcalc supports user-defined variables. You define a variable like this: mynewvariable=5 Then you can use it in an expression like this: 1+3*mynewvariable/4 You can also define "active" variables. When you assign a variable, put it in single-quotes, like this: twicepreviousanswer='a * 2' In expressions, these work just like regular variables, except the value is calculated when it's used, not when it's defined. Some special notes about variables - two letters are reserved: a - this variable represents the last answer, and may be used in expressions. q - this variable is reserved in the command-line version (it means quit), and cannot be used in expressions. Also, built-in constants cannot be re-defined, although they are treated as variables in all other cases. ********* * Bases * ********* When you type a number into Wcalc, the number is normally assumed to be in decimal form. However, if the number has a prefix, it may be interpreted as a different form number. Specifically: 0x - this means "the following is a hexadecimal" 0 - this means "the following is octal" 0b - this means "the following is binary" This prefix affects only the number it prefixes, and none of the other numbers in the expression. Answers are, by default, displayed in decimal form. This can be changed in the preferences window - and display of the prefixes can be toggled in the preferences window as well. You can also change the display using the \hex, \oct, \bin, or \dec commands. You can, however, print a number in any base (without a prefix) by using the \base command. **************** * Installation * **************** There are pre-built packages available for download for several Linux and BSD distributions. Otherwise, the source for Wcalc is available on SourceForge from the Wcalc home page. Install as you would usually install from source. If you're really new to this sort of thing, there's some information in the INSTALL file. *********** * License * *********** Wcalc is made available under the GNU Public License (GPL), version 2, or (at your option) any later version of that license. The full text of the License is in the file titled COPYING as distributed with the source, or is available here: http://www.gnu.org/copyleft/gpl.html The general gist of the GPL is this: This program is free. You may do as you like with it, including sell the binaries, as long as you don't modify the program or use it as part of another program. If, however, you download the source code of this program and either modify the source (and give it to people) or use pieces of the source in your own program (and give THAT to people), you must distribute that program and its source code under the GPL as well. ************** * Known Bugs * ************** The grammar has too many shift/reduce conflicts. Leaks memory when there's a parse error. If you find more bugs, please LET ME KNOW! **************** * Contact Info * **************** The Wcalc homepage is http://w-calc.sourceforge.net/ Contact me at kyle-wcalc-sf@memoryhole.net wcalc-2.5/install-sh0000754000175000017500000001270112115670004011372 00000000000000#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # 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. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else : fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f "$src" ] || [ -d "$src" ] then : else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else : fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else : fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else : fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else : fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # 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 $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 wcalc-2.5/mkinstalldirs0000754000175000017500000000341112115670004012172 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case "${1}" in -h | --help | --h* ) # -h for help echo "${usage}" 1>&2; exit 0 ;; -m ) # -m PERM arg shift test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } dirmode="${1}" shift ;; -- ) shift; break ;; # stop option processing -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option * ) break ;; # first non-opt arg esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 3 # End: # mkinstalldirs ends here wcalc-2.5/INSTALL0000644000175000017500000002202412115670003010416 00000000000000Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. wcalc-2.5/wcalc.spec0000644000175000017500000000254512115670002011337 00000000000000%define name Wcalc %define version 2.4 Summary: A flexible command-line calculator Name: %{name} Version: %{version} Release: 1 Group: Applications Url: http://w-calc.sf.net/ Source: http://prdownloads.sf.net/w-calc/wcalc-%{version}.tar.bz2 License: GPL BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root Vendor: Kyle Wheeler Packager: Kyle Wheeler %description Wcalc is a command-line calculator designed to accept all valid mathematical expressions. It supports all standard mathematical operations, parenthesis, brackets, braces, trigonometric functions, hyperbolic trig functions, logs, and most boolean operators. %prep %setup -q %build %configure make %install [ -d $RPM_BUILD_ROOT ] && rm -rf ${RPM_BUILD_ROOT} make DESTDIR=$RPM_BUILD_ROOT install %clean [ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT; %files %defattr(-,root,root) %doc ChangeLog COPY* NEWS README %{_bindir}/* %{_mandir}/*/* %changelog * Wed Jan 29 2003 Kyle Wheeler - A few minor modifications * Wed Jan 29 2003 Mark Schreiber - Fixed spec file to build on Red Hat * Mon Jan 27 2003 Kyle Wheeler - Fixed spec file for new URL - Fixed spec file to use automake/autoconf * Tue Jan 22 2002 Kyle Wheeler - Initial spec file. wcalc-2.5/wcalc.10000644000175000017500000006431112451410707010553 00000000000000.de Id .ds Dt \\$4 .. .ds = \-\^\- .de Sp .. .TH wcalc 1 .SH NAME wcalc \- a natural-expression command-line calculator .SH SYNOPSIS .B wcalc [ \fIoptions\fR ] [ \fIexpression ...\fR ] .SH DESCRIPTION wcalc is a command-line calculator designed to accept all valid mathematical expressions. It supports all standard mathematical operations, parenthesis, brackets, trigonometric functions, hyperbolic trig functions, logs, and boolean operators. .PP wcalc accepts input in a variety of manners. If no mathematical expression is given at the commandline, it will evaluate the contents of an environment variable named \fIwcalc_input\fP if one exists. If that variable is not set, wcalc will try to read input from standard input (i.e. piped input). If there is no input from that, wcalc enters "interactive" mode. Interactive mode has more features. .PP While in interactive mode, detailed information about commands, functions, symbols, and variables can be obtained by executing: \fB\eexplain\fP \fIthing-to-explain\fP .SS OPTIONS .TP 4 \fB\-H\fP or \fB\*=help\fP Prints a help usage message to standard output, then exits. .TP \fB\-E\fP Specifies that numerical output should be in scientific notation. .TP \fB\-EE\fP Specifies that numerical output should NOT be in scientific notation. .TP \fB\-P\fIXXX\fP Sets the "precision", or the number of decimal places displayed, to be \fIXXX\fP. This setting only affects output, not internal representations. If the precision is set to \-1, the number of decimal places displayed will depend on the value. .br Precision is set to autoadjust (\-1) by default. .br Example: wcalc \-P6 .TP \fB\-v\fP or \fB\*=version\fP Prints the version number and exits. .TP \fB\-d\fP or \fB\-dec\fP or \fB\*=decimal\fP Results are printed in decimal (base 10). This option is the default, and does not have a default prefix to indicate that numbers are in base 10. .TP \fB\-h\fP or \fB\-hex\fP or \fB\*=hexadecimal\fP Results are printed in hexadecimal (base 16). Numbers printed in hexadecimal have a prefix of \fI0x\fP unless the \fB\-p\fP or \fB\*=prefixes\fP option is used. .TP \fB\-o\fP or \fB\-oct\fP or \fB\*=octal\fP Results are printed in octal (base 8). Numbers printed in octal have a prefix of \fI0\fP unless the \fB\-p\fP or \fB\*=prefixes\fP option is used. .TP \fB\-b\fP or \fB\-bin\fP or \fB\*=binary\fP Results are printed in binary (base 2). Numbers printed in binary have a prefix of \fI0b\fP unless the \fB\-p\fP or \fB\*=prefixes\fP option is used. .TP \fB\-p\fP or \fB\*=prefixes\fP Toggles printing prefixes for hexadecimal, octal, and binary forms. .TP \fB\-l\fP or \fB\*=lenient\fP Makes the parser assume that uninitialized variables have a value of zero. .TP \fB\-r\fP or \fB\*=radians\fP Toggles whether trigonometric functions assume input (and output) is in radians. By default, trigonometric functions assume input is in degrees. .TP \fB\-q\fP or \fB\*=quiet\fP Toggles whether the equals sign will be printed before the results. .TP \fB\-c\fP or \fB\*=conservative\fP Toggles accuracy guards. Because of the way floating point numbers are stored in computers, some numbers cannot be represented exactly (such as 0.1). Because of this, calculating with those numbers can produce results that are not .I exactly correct, but are different from the correct answer by a very small value (smaller than the floating point value can represent accurately). For example, the calculation of 1\-.9\-.1 can return an extremely small number that is not zero but is less than what can be represented accurately, and thus for all intents and purposes, it is 0. The accuracy guard feature will round numbers to zero if they are less than the representable accuracy of the floating point number. However, sometimes numbers that small or smaller need to be displayed, and thus the accuracy guard should be turned off. Alternatively, the number of internal bits could be increased, which makes it possible to represent numbers with more accuracy. .TP \fB\-u\fP or \fB\*=units\fP [\fItype\fP] Prints units used for conversions; parameter \fBtype\fP can be: lengths, areas, volumes, masses, speeds, powers, forces, accelerations, temperatures, angles, or pressures. If the parameter is not supplied, all units are printed. .TP \fB\*=remember\fP Toggles whether or not expressions that produce errors are remembered in the history. Does not affect command-line math. .TP \fB\*=round=\fP { \fInone\fP | \fIsimple\fP | \fIsig_fig\fP } Wcalc can attempt to warn you when numbers have been rounded in the output display. It has two methods of keeping track---either by using significant figures (sig_fig), or by a simple digit-counting algorithm. Rounding in the command-line version is denoted by a tilde before the equals sign (~=). Rounding in the GUI version is denoted by changing the text color to red. In some cases, Wcalc may think that the number has been rounded even if it shouldn't have been necessary (this is because of the way floating point numbers are represented internally). .TP \fB\*=dsep=\fIX\fP Sets the decimal separator character to be X. .TP \fB\*=tsep=\fIX\fP Sets the thousands separator character to be X. .TP \fB\*=idsep=\fIX\fP Sets the input-only decimal separator character to be X. .TP \fB\*=itsep=\fIX\fP Sets the input-only thousands separator character to be X. .TP \fB\*=bits\fIXXXX\fP Sets the number of bits of memory that will be used to internally represent numbers to be \fIXXXX\fP. The default is 1024. Set higher if you need to work with extremely large or extremely small numbers, set lower if you want to use less memory. .TP \fB\*=ints\fP Toggles whether long integers will be abbreviated or not. This conflicts with engineering notation for large numbers, but not for decimals. .TP \fB\*=verbose\fP Toggles verbose mode, which displays the expression to be calculated before calculating it. .TP \fB\*=defaults\fP Prevents reading the .wcalcrc file. .TP \fB-C\fP or \fB\*=color\fP Toggles the use of color in the commandline output. .SH USER-DEFINED VARIABLES Variables are supported and may be assigned using the = operator. To assign a variable use the form: .RS .PP foo = anylegalexpression .RE .PP Thereafter, that variable name is the same as the literal value it represents. Expressions can be stored in variables like this: .RS .PP foo = 'anylegalexpression' .RE .PP Expressions stored this way will be interpreted at evaluation time, rather than assignment-time. Note that these cannot be recursive. .PP All variables may also be stored with a description of what they are. This description is added in the form of a quoted string after the assignment, like this: .RS .PP foo = 'anylegalexpression' 'description' .RE .SS ACTIVE VARIABLES Active variables are designed to give a functionality similar to user-defined functions. They are variables that rather than representing a value, represent an expression that is evaluated whenever the variable is evaluated. This expression may contain other variable names. For example, after the following sequence of commands: .RS .PP foo=5 .br bar='foo+4' .RE .PP The variable \fIbar\fP will evaluate to 9, or four more than whatever \fIfoo\fP evaluates to be. These can be stacked, like so: .RS .PP baz='sin(bar)+foo' .RE .PP In this case, \fIbaz\fP will evaluate to be 5.15643, or the sin of whatever \fIfoo\fP+4 is plus whatever \fIfoo\fP is. .PP To demonstrate the utility of these active variables, here are two functions written by Stephen M. Lawson. The first computes the weekday of a given day (\fIdy\fP) in a given month (\fImo\fP) in a given year (\fIyr\fP). The value it returns is in the range of 1 to 7, where 1 is Sunday, 2 is Monday, 3 is Tuesday, and so forth. .PP weekday='(((floor((yr \- floor(0.6 + 1 / mo)) / 400) \- floor((yr \- floor(0.6 + 1 / mo)) / 100) + floor((5 * (yr \- floor(0.6 + 1 / mo))) / 4) + floor(13 * (mo + 12 * floor(0.6 + 1 / mo) + 1) / 5)) \- (7 * floor((floor((yr \- floor(0.6 + 1 / mo)) / 400) \- floor((yr \- floor(0.6 + 1 / mo)) / 100) + floor((5 * (yr \- floor(0.6 + 1 / mo))) / 4) + floor(13 * (mo + 12 * floor(0.6 + 1 / mo) + 1) / 5)) / 7)) + 1) + 5 + dy) % 7 + 1' .PP The second function computes what day Easter will be for a given year (\fIyr\fP) and returns an offset from March 31st. For example, for the year 2005, it returns \-4, which means March 27th. Because of leap-year problems, this only works from the year 1900 to 2099, but is a good demonstration nevertheless. .PP easter='((19 * (yr \- 19 * floor(yr / 19)) + 24) \- floor((19 * (yr \- 19 * floor(yr / 19)) + 24) / 30) * 30) + ((2 * (yr \- 4 * floor(yr / 4)) + 4 * (yr \- 7 * floor(yr / 7)) + 6 * ((19 * (yr \- 19 * floor(yr / 19)) + 24) \- floor((19 * (yr \- 19 * floor(yr / 19)) + 24) / 30) * 30) + 5) \- floor((2 * (yr \- 4 * floor(yr / 4)) + 4 * (yr \- 7 * floor(yr / 7)) + 6 * ((19 * (yr \- 19 * floor(yr / 19)) + 24) \- floor((19 * (yr \- 19 * floor(yr / 19)) + 24) / 30) * 30) + 5) / 7) * 7) \- 9' .SH BUILT-IN SYMBOLS There are two basic kinds of built-in symbols in wcalc: functions and constants. .SS FUNCTIONS The functions supported in wcalc are almost all self-explanatory. Here are the basic descriptions. .TP 4 .B "sin cos tan cot" The standard trigonometric functions .TP \fBasin acos atan acot\fP or \fBarcsin arccos arctan arccot\fP or \fBsin^-1 cos^-1 tan^-1 cot^-1\fP The standard arc- trigonometric functions. .TP .B "sinh cosh tanh coth" The standard hyperbolic trigonometric functions. .TP \fBasinh acosh atanh acoth\fP or \fBarcsinh arccosh arctanh arccoth\fP or \fBsinh^-1 cosh^-1 tanh^-1 coth^-1\fP The standard arc- hyperbolic trigonometric functions. .TP .B "log ln logtwo" Log-base-ten, log-base-e and log-base-two, respectively. Remember, you can also construct log-base-X of number Y by computing log(Y)/log(X). .TP .B "round" Returns the integral value nearest to the argument according to the typical rounding rules. .TP .B "abs" Returns the absolute value of the argument. .TP .B "ceil ceiling floor" Returns the ceiling or floor of the argument. .TP .B "sqrt cbrt" The square and cube root functions. .TP .B "rand" Returns a random number between 0 and the number given. .TP .B "irand" Returns a random integer between 0 and the number given. .TP .B "fact" Returns the factorial of a number. .TP .B "Gamma" Returns the value of the Gamma function at that value. .TP .B "lnGamma" Returns the value of the log Gamma function at that value. .TP .B "zeta" Returns the value of the Riemann zeta function at that value. .TP .B "sinc" Returns the sinc function (for sinus cardinalis) of the input, also known as the interpolation function, filtering function or the first spherical Bessel function, is the product of a sine function and a monotonically decreasing function. .SS CONSTANTS Wcalc supports a lot of constants. Some are special (like \fBpi\fP), and some are simply mathematical or physical constants that have been hardcoded in. The physics constants are taken from \fIhttp://physics.nist.gov/constants\fP, and should all be in predictable SI units. .PP The value of \fBpi\fP is special, as it is calculated to however many bits of precision have been specified with the \fB\ebits\fP command. The default number of bits is 1024, or a value of: .br 3.14159265358979323846264338327950288419716939937 .br 5105820974944592307816406286208998628034825342117 .br 0679821480865132823066470938446095505822317253594 .br 0812848111745028410270193852110555964462294895493 .br 0381964428810975665933446128475648233786783165271 .br 2019091456485669234603486104543266482133936072602 .br 4914127372458699747248223615028234079551511205588 .br 1168465696731309335738719301105597412739780116660 .br 0823447367841524950037348489795545416453901986117 .br 5727227318713884226435889742120217131949568051423 .br 0839931356624755337162012934002605160185668467703 .br 3122428187855479365508702723110143458240736806341 .br 7989633389232864603510897727208179195996751333631 .br 1014750579717366267579547177770281431880438556092 .br 9672479177350549251018537674006123614790110383192 .br 5028979233679937836193101666790131879693151725794 .br 3860403036395703382632593537215128964016797694845 .br 3904619615481368332936937026831888367580239969088 .br 9326975278116532822249504103365733859441905164461 .br 4642369403738060905908822203694572794411694624061 .br 6684848934170304346480406820774078369140625 .PP Similarly, all values that rely on the value of \fBpi\fP, like mu0, have the same level of precision. Here is a complete list of the symbols used to represent the constants hardcoded into wcalc: .TP 4 .B "e" The logarithm constant: .br 2.718281828459045235360287471352662497757247093699959574966 .TP .B "gamma" Euler's Constant: 0.5772156649015328606065120900824024310421 .br 593359399235988057672348848677267776646709369470632917467495 .br 146314472498070824809605040144865428362241739976449235362535 .br 0033374293733773767394279259525824709491600873520394816567 .TP .B K Catalan Constant: 0.9159655941772190150546035149323841107741 .br 493742816721342664981196217630197762547694793565129261151062 .br 485744226191961995790358988033258590594315947374811584069953 .br 3202877331946051903872747816408786590902 .TP .B "g" Acceleration due to gravity: 9.80665 m/s/s .TP .B Cc Coulomb's Constant: 8987551787.37 .SS Universal Constants .TP 4 \fBZ0\fP or \fBZzero\fP Impedance of Vacuum: 376.730313461 ohms .TP \fBepsilon0\fP or \fBepsilonzero\fP Permittivity of Free Space: 8.854187817e-12 F/m .TP \fBmu0\fP or \fBmuzero\fP Permeability of Free Space calculated as 4*pi*10^-7. .TP .B "G" Gravitational Constant: 6.67259e-11 .TP .B "h" Planck Constant: 6.6260755e-34 .TP .B "c" Speed of Light: 299792458 .SS Electromagnetic Constants .TP 4 .B "muB" Bohr Magneton: 5.78838174943e-11 J/T .TP .B "muN" Nuclear Magneton: 3.15245123824e-14 J/T .TP .B "G0" Conductance Quantum: 7.748091733e-5 S .TP .B "ec" Elementary Charge: 1.60217653e-19 .TP .B Kj Josephson Constant: 483597.879e9 Hz/V .TP .B Rk Von Klitzing Constant: 25812.807449 omega .SS Atomic and Nuclear Constants .TP 4 .B Malpha Alpha Particle Mass: 6.6446565e-27 kg .TP .B "a0" Bohr Radius: 5.291772108e-11 m .TP .B "Md" Deuteron Mass: 3.34358335e-27 kg .TP .B "Me" Electron Mass: 9.1093897e-31 kg .TP .B "re" Electron Radius: 2.817940325e-15 m .TP .B "eV" Electron Volt: 1.602177250e-12 J .TP .B Gf Fermi Coupling Constant: 1.16638e-5 GeV^-2 .TP .B "alpha" Fine Structure Constant: 7.29735253327e-3 .TP .B eh Hartree Energy: 4.35974417e-18 J .TP .B Mh Helion Mass: 5.00641214e-27 kg .TP .B Mmu Muon Mass: 1.88353140e-28 kg .TP .B "Mn" Neutron Mass: 1.67492728e-27 kg .TP .B "Mp" Proton Mass: 1.67262171e-27 kg .TP .B Rinf Rydberg Constant: 10973731.568525 1/m .TP .B Mt Tau Mass: 3.16777e-27 kg .SS Physio-Chemical Constants .TP 4 .B "u" Atomic Mass Constant: 1.66053886e-27 kg .TP \fBNa\fP or \fBNA\fP Avogadro's Constant: 6.0221367e23 .TP .B "k" Boltzmann Constant: 1.3806505e-23 .TP .B "F" Faraday Constant: 96485.3383 C/mol .TP .B c1 First Radiation Constant: 3.74177138e-16 W m^2 .TP \fBn0\fP or \fBnzero\fP Loschmidt Constant: 2.6867773e25 m^-3 .TP .B "R" Molar Gas Constant: 8.314472 .TP \fBVm\fP or \fBNAk\fP Molar Volume of Ideal Gas: 22.413996e-3 (m^3)/mol .TP .B c2 Second Radiation Constant: 1.4387752e-2 m K .TP .B "sigma" Stefan-Boltzmann Constant: 5.670400e-8 .TP .B "b" Wien Displacement Law Constant: 2.8977686e-3 m K .SS Random Constants .TP 4 .B "random" A Random Value .TP .B "irandom" A Random Integer .SH SPECIAL SYMBOLS There are some special symbols that wcalc accept as input for compound operations. .TP .B "@Inf@" Symbol that represents Infinity .TP .B "@NaN@" Symbol that represents "Not a Number" .SH COMMANDS There are several commands that are supported in wcalc. .TP \fB\ep\fIXXX\fP Sets the "precision", or the number of decimal places displayed, to be \fIXXX\fP. This setting only affects output, not internal representations. If the precision is set to \-1, the number of decimal places displayed will depend on the value. The default is \-1. .TP \fB\ee\fP or \fB\eeng\fP or \fB\eengineering\fP Rotates between always using scientific notation, never using scientific notation, and choosing to do scientific notation when convenient. Can also take an argument that is one of \fIalways\fP, \fInever\fP, and \fIautomatic\fP to choose a mode directly. .TP \fB\ehelp\fP or \fB?\fP Displays a help screen. .TP .B "\eprefs" Prints out the current preference settings. .TP \fB\eli\fP or \fB\elist\fP or \fB\elistvars\fP Prints out the currently defined variables. .TP \fB\er\fP or \fB\eradians\fP Toggles between using and not using radians for trigonometric calculations. .TP \fB\econs\fP or \fB\econservative\fP Toggles accuracy guards. Because of the way floating point numbers are stored in computers, some numbers cannot be represented exactly (such as 0.1). Because of this, calculating with those numbers can produce results that are not exactly correct, but are different from the correct answer by a very small value (smaller than the floating point value can represent accurately). For example, the calculation of 1\-.9\-.1 can return an extremely small number that is not zero but is less than what can be represented accurately, and thus for all intents and purposes, it is 0. The accuracy guard feature will round numbers to zero if they are less than the representable accuracy of the floating point number. However, sometimes numbers that small or smaller need to be displayed, and thus the accuracy guard should be turned off. Alternatively, the number of internal bits could be increased, which makes it possible to represent numbers with more accuracy. .TP \fB\ep\fP or \fB\epicky\fP or \fB\el\fP or \fB\elenient\fP Toggles variable parsing rules. When wcalc is "picky" it will complain if you use undefined variables. If it is "lenient", wcalc will assume a value of 0 for undefined variables. .TP \fB\ere\fP or \fB\eremember\fP or \fB\eremember_errors\fP Toggles whether or not expressions that produce errors are remembered in the history. .TP \fB\epre\fP or \fB\eprefix\fP or \fB\eprefixes\fP Toggles the display of prefixes for hexadecimal, octal, and binary output. .TP \fB\eb\fP or \fB\ebin\fP or \fB\ebinary\fP Results are printed in binary (base 2). Numbers printed in binary have a prefix of \fI0b\fP unless the \fB\eprefixes\fP command is used. .TP \fB\ed\fP or \fB\edec\fP or \fB\edecimal\fP Results are printed in decimal (base 10). This option is the default, and does not have a default prefix to indicate that numbers are in base 10. .TP \fB\eh\fP or \fB\ex\fP or \fB\ehex\fP or \fB\ehexadecimal\fP Results are printed in hexadecimal (base 16). Numbers printed in hexadecimal have a prefix of \fI0x\fP unless the \fB\eprefixes\fP command is used. .TP \fB\eo\fP or \fB\eoct\fP or \fB\eoctal\fP Results are printed in octal (base 8). Numbers printed in octal have a prefix of \fI0\fP unless the \fB\eprefixes\fP command is used. .TP \fB\eround\fP \fInone\fP|\fIsimple\fP|\fIsig_fig\fP Wcalc can attempt to warn you when numbers have been rounded in the output display. It has two methods of keeping track---either by using significant figures (sig_fig), or by a simple digit-counting algorithm. Rounding in the command-line version is denoted by a tilde before the equals sign (~=). Rounding in the GUI version is denoted by changing the text color to red. In some cases, Wcalc may think that the number has been rounded even if it shouldn't have been necessary (this is because of the way floating point numbers are represented internally). .TP \fB\edsep\fIX\fP Sets the decimal separator character to be \fIX\fP. .TP \fB\etsep\fIX\fP Sets the thousands-place separator character to be \fIX\fP. .TP \fB\eidsep\fIX\fP Sets the input-only decimal separator character to be \fIX\fP. .TP \fB\eitsep\fIX\fP Sets the input-only thousands-place separator character to be \fIX\fP. .TP \fB\ehlimit\fIX\fP Sets the limit (\fIX\fP) on the length of the history. .TP \fB\eopen \fIfilename.txt\fP Loads file \fIfilename.txt\fP. .TP \fB\esave \fIfilename.txt\fP Saves the current session and variable list to a file, \fIfilename.txt\fP. .TP \fB\ebits\fIXXXX\fP Sets the number of bits of precision that will be used to internally represent numbers to be \fIXXXX\fP. The default is 1024. Set higher if you need more precision, set lower if you want to use less memory. .TP .B \eints Toggles whether long integers will be abbreviated or not. This conflicts with engineering notation for large numbers, but not for decimals. .TP \fB\eprefs\fP or \fB\epreferences\fP Displays the current preference settings. .TP \fB\econvert\fP \fIunit1\fP \fIunit2\fP Converts the previous answer from \fIunit1\fP to \fIunit2\fP. .TP \fB\estore\fP \fIvariablename\fP Saves the specified variable in the preload file, ~/.wcalc_preload .TP \fB\eexplain\fP \fIobject\fP Explains the specified object. The object can be a variable, constant, function, or command. .TP \fB\everbose\fP Verbose mode displays the expression to be calculated before calculating it. .TP \fB\edel\fP or \fB\edelim\fP or \fB\edelimiters\fP Display delimiters in numerical output. .TP \fB\ecmod\fP Toggle between C-style modulus operation and a more flexible method. .TP \fB\ecolor\fP Toggles the use of color in the commandline output. .SH PREFERENCES Preferences and settings can be retained between invocations of wcalc by storing them in the file \fB~/.wcalcrc\fP .PP The format of the file is that each line is either blank or an assignment. Comments are ignored, and are defined as anything to the right of and including a hash mark (#). Assignments are of the form: \fIkey=value\fP .PP The possible keys are: .TP .B precision A number defining the display precision. Equivalent to the \fB\eP\fP command, where \-1 means "auto" and anything else specifies the number of decimal places. This does not affect the behind-the-scenes precision. .TP .B show_equals Either true ("yes" or "true") or false (anything else). Equivalent to the \fB--quiet\fP argument. Specifies whether answers will begin with an equals sign or not. .TP .B engineering Either "always", "never", or "automatic". Equivalent to the \fB\eengineering\fP command. Specifies whether answers will be displayed in engineering notation or not. .TP .B use_radians Either true ("yes" or "true") or false (anything else). Equivalent to the \fB\eradians\fP command. Specifies whether trigonometric functions accept input in radians or degrees. .TP .B print_prefixes Either true ("yes" or "true") or false (anything else). Equivalent to the \fB\eprefixes\fP command. Specifies whether base prefixes (e.g. 0x for hexadecimal numbers) are used when displaying output. .TP .B save_errors Either true ("yes" or "true") or false (anything else). Equivalent to the \fB\eremember_errors\fP command. Specifies whether lines that contain a syntax error are added to the history or not. .TP .B precision_guard Either true ("yes" or "true") or false (anything else). Equivalent to the \fB\econservative\fP command. Specifies whether the display will attempt to eliminate numbers too small to be accurate (hopefully, these are only errors created by the binary approximation of the inputs). .TP .B print_integers Either true ("yes" or "true") or false (anything else). Equivalent to the \fB\eints\fP command. Specifies whether whole integers will be printed un-abbreviated or not. This conflicts with engineering notation for large integers, but not for decimals. .TP .B print_delimiters Either true ("yes" or "true") or false (anything else). Equivalent to the \fB\edelimiters\fP command. Specifies whether delimiters will be added to output when displaying. .TP .B thousands_delimiter Uses the next character after the equals sign as its value. Equivalent to the \fB\etsep\fP command. Specifies what the thousands delimiter is, and can affect output if \fBprint_delimiters\fP is enabled. .TP .B decimal_delimiter Uses the next character after the equals sign as its value. Equivalent to the \fB\edsep\fP command. Specifies what the decimal delimiter is. .TP .B input_thousands_delimiter Uses the next character after the equals sign as its value. Equivalent to the \fB\eitsep\fP command. Specifies what the input-only thousands delimiter is, and cannot affect output. .TP .B input_decimal_delimiter Uses the next character after the equals sign as its value. Equivalent to the \fB\eidsep\fP command. Specifies what the input-only decimal delimiter is, and cannot affect output. .TP .B history_limit Either "no", for no limit, or a number. Equivalent to the \fB\ehlimit\fP command. .TP .B output_format Either \fIdecimal\fP, \fIoctal\fP, \fIbinary\fP, \fIhex\fP, or \fIhexadecimal\fP. .TP .B rounding_indication Either \fIno\fP, \fIsimple\fP, or \fIsig_fig\fP. Equivalent to the \fB\erounding\fP command. .TP .B c_style_mod Either true ("yes" or "true") or false (anything else). Equivalent to the \fB\ecmod\fP command. Specifies whether the modulo operator (%) will behave as it does in the C programming language, or whether it will use a more flexible method. This only affects modulo operations where negative numbers are involved. As an example, with \fBc_style_mod\fP set to true (the default): .RS .PP \-340 % 60 == \-40; 340 % \-60 == 40; \-340 % \-60 == \-40 .PP However, with \fBc_style_mod\fP set to false: .PP \-340 % 60 == \-40; 340 % \-60 == \-20; \-340 % \-60 == 20 .RE .TP .B color Either true ("yes" or "true") or false (anything else). Equivalent to the \fB\ecolor\fP command. Specifies whether the commandline interface will use color in its output or not. .TP .B colors[\fIXXX\fB] This is used to specify the color of specific interface elements in the commandline interface. Valid colors are: .RS .RS (bold)black .br (bold)red .br (bold)green .br (bold)yellow .br (bold)blue .br (bold)magenta .br (bold)cyan .br (bold)white .RE The \fIXXX\fP must be one of the following values: .RS conversion_category .br conversion_unit .br prompt .br approx_answer .br exact_answer .br err_location .br err_text .br pref_name .br pref_val .br pref_cmd .br status .br var_name .br var_desc .br subvar_name .br explanation .SH PRELOAD Wcalc uses a file, \fB~/.wcalc_preload\fP, to store persistent information between instances. Typically, this is used to store variables that are frequently defined. This file can be edited by hand with a standard text editor. There is also a command within wcalc (\fB\estore\fP) to append a variable definition to the end of this file. Any variable defined in this file is defined and available for use in any subsequent invocation of wcalc. .SH COPYRIGHT wcalc is Copyright (C) 2000-2014 Kyle Wheeler. .br It is distributed under the GPL, version 2, or (at your option) any later version.. .SH SUGGESTIONS AND BUG REPORTS Any bugs found should be reported to .br Kyle Wheeler at \fIkyle-wcalc@memoryhole.net\fP. wcalc-2.5/Info.plist0000644000175000017500000000262712115670004011345 00000000000000 CFBundleDevelopmentRegion English CFBundleGetInfoString Wcalc Version ${CURRENT_PROJECT_VERSION} CFBundleShortVersionString Wcalc ${CURRENT_PROJECT_VERSION} CFBundleExecutable Wcalc CFBundleIconFile NewWcalc CFBundleIdentifier Wcalc CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleSignature Wcal CFBundleVersion ${CURRENT_PROJECT_VERSION} NSMainNibFile MainMenu NSPrincipalClass NSApplication NSServices NSMenuItem default Wcalc Compute NSMessage doWcalcCalculateService NSPortName WcalcService NSReturnTypes NSStringPboardType NSSendTypes NSStringPboardType wcalc-2.5/test/0000775000175000017500000000000012451434214010433 500000000000000wcalc-2.5/test/basic_ints.test0000664000175000017500000000034312450336656013404 000000000000000 \assert 0 1 \assert 1 0 \assert 0 1 \assert 1 040 \assert 32 40 \assert 40 0x40 \assert 64 10 \assert 10 010 \assert 8 0b10 \assert 2 0x10 \assert 16 1e-9 # should be 1E-9 \assert 1e-09 0.9e-9 # should be 9E-10 \assert 9e-10 wcalc-2.5/test/factorial.test0000664000175000017500000000060712450333122013216 00000000000000\p0 100! \assert 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 \p-1 \ints 100! \assert 9.33262e+157 \ints 100! \assert 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 wcalc-2.5/test/err.recursion3.test0000664000175000017500000000004212450343003014125 00000000000000foo='bar' bar='baz' baz='foo' foo wcalc-2.5/test/err.recursion1.test0000664000175000017500000000001612450340471014132 00000000000000foo='foo' foo wcalc-2.5/test/basic_math.test0000664000175000017500000000047212450337314013353 0000000000000004+1 \assert 5 040+1 \assert 33 1,000,000 \assert 1000000 a+1+1 # should return 1000002 \assert 1000002 5.6*5.6 # should return 31.36 \assert 31.36 -340%-60 \assert -40 360%60 \assert 0 23.05 a-14.5-8.55 # should be 0, not -1E-09 \assert 0 2^3 \assert 8 2**3 \assert 8 6.6 & 0xff \assert 6 -6.6 & 0xff \assert 250 wcalc-2.5/test/err.recursion4.test0000664000175000017500000000004512450343045014137 00000000000000foo='bar' bar='baz' baz='foo' foo==5 wcalc-2.5/test/formatting.test0000644000175000017500000000006112450337553013430 00000000000000\p 20 \r sin(pi) \assert 0.000000000000000000000 wcalc-2.5/test/conversion.test0000664000175000017500000000005012450331651013434 000000000000005 \convert feet to meters \assert 1.524 wcalc-2.5/test/Makefile.in0000664000175000017500000006115512451433376012440 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' 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 = test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/config/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/readline.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/common/includes/config.h 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__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GMP_CPPFLAGS = @GMP_CPPFLAGS@ GMP_LDFLAGS = @GMP_LDFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPFR_CPPFLAGS = @MPFR_CPPFLAGS@ MPFR_LDFLAGS = @MPFR_LDFLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = parallel-tests TEST_EXTENSIONS = .test POSITIVE_TESTS = \ basic_ints.test \ basic_float.test \ basic_vars.test \ basic_math.test \ implicit_mult.test \ precision_guard.test \ conversion.test \ website_math.test \ factorial.test \ formatting.test \ active_variable.test \ vars.test XFAIL_TESTS = \ err.assert.test \ err.question.test \ err.assign.test \ err.conv_category1.test \ err.conv_category2.test \ err.recursion1.test \ err.recursion2.test \ err.recursion3.test \ err.recursion4.test TESTS = $(POSITIVE_TESTS) $(XFAIL_TESTS) EXTRA_DIST = checktest.sh $(POSITIVE_TESTS) $(XFAIL_TESTS) TEST_LOG_COMPILER = $(top_srcdir)/test/checktest.sh AM_TEST_LOG_FLAGS = "$(top_builddir)/src/wcalc" all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(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 test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(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): tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) 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 $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ cscopelist-am ctags-am distclean distclean-generic distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am recheck tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: wcalc-2.5/test/website_math.test0000664000175000017500000000051112450332105013717 000000000000005sin(4) # should return 0.348782 \assert 0.348782 5sin(4!) # should return 2.03368 \assert 2.03368 5sin(4!)-7 # should return -4.96632 \assert -4.96632 5sin(4!)-7*2 # should return -11.9663 \assert -11.9663 5sin(4!)-7*2(4%6) # should return -53.9663 \assert -53.9663 5sin(4!)-7*2(4%6)^2 # should return -221.966 \assert -221.966 wcalc-2.5/test/checktest.sh0000774000175000017500000000013512450311360012660 00000000000000#!/bin/sh WCALC="$1" TESTFILE="$2" exec "$WCALC" --defaults --ints < "$TESTFILE" > /dev/null wcalc-2.5/test/basic_float.test0000664000175000017500000000004412450337033013520 000000000000005.2 \assert 5.2 23.05 \assert 23.05 wcalc-2.5/test/err.conv_category1.test0000664000175000017500000000002312450340422014755 00000000000000\convert feet cups wcalc-2.5/test/err.assign.test0000664000175000017500000000000412450340410013312 00000000000000q=7 wcalc-2.5/test/err.question.test0000664000175000017500000000000312450306776013715 000000000000005? wcalc-2.5/test/implicit_mult.test0000664000175000017500000000022112450327670014130 00000000000000sin(8) # should return 0.139173 \assert 0.139173 sin 8 # should return 0.139173 \assert 0.139173 6cosh 4 # should return 163.849 \assert 163.849 wcalc-2.5/test/precision_guard.test0000664000175000017500000000032512450336765014444 00000000000000\cons 1 1-0.9-0.1 # if precision_guard is on, this should return 0 \assert 0 1410.06-645.06 # should be 765 if precision_guard is on \assert 765 23.05-14.5-8.55 # should be zero if precision_guard is on \assert 0 wcalc-2.5/test/err.recursion2.test0000664000175000017500000000003012450340524014126 00000000000000foo='bar' bar='foo' foo wcalc-2.5/test/vars.test0000644000175000017500000000031612450350120012215 000000000000008/6 # should return 1.3333 \assert 1.33333 8/1 # should return 8 \assert 8 a+2 # should return 10 \assert 10 foo=5 \assert 10 foobar='sin(foo)' \assert 10 foobar # should return 0.0871557 \assert 0.0871557 wcalc-2.5/test/err.conv_category2.test0000664000175000017500000000002612450340432014762 00000000000000\convert feet to cups wcalc-2.5/test/basic_vars.test0000664000175000017500000000022212450310374013363 000000000000001 \assert 1 a \assert 1 0 \assert 0 a \assert 0 m=5.6 \assert 0 f='2m' \assert 0 f \assert 11.2 P=7 \assert 11.2 2P # should return 14 \assert 14 wcalc-2.5/test/active_variable.test0000644000175000017500000000011012450347671014373 00000000000000foo=5 foobar='foo' boink='foobar+5' boink # should return 10 \assert 10 wcalc-2.5/test/err.assert.test0000664000175000017500000000002612450307021013334 000000000000000 \assert 0 \assert 1 wcalc-2.5/test/Makefile.am0000664000175000017500000000146512451412172012414 00000000000000AUTOMAKE_OPTIONS = parallel-tests TEST_EXTENSIONS = .test POSITIVE_TESTS = \ basic_ints.test \ basic_float.test \ basic_vars.test \ basic_math.test \ implicit_mult.test \ precision_guard.test \ conversion.test \ website_math.test \ factorial.test \ formatting.test \ active_variable.test \ vars.test XFAIL_TESTS = \ err.assert.test \ err.question.test \ err.assign.test \ err.conv_category1.test \ err.conv_category2.test \ err.recursion1.test \ err.recursion2.test \ err.recursion3.test \ err.recursion4.test TESTS = $(POSITIVE_TESTS) $(XFAIL_TESTS) EXTRA_DIST = checktest.sh $(POSITIVE_TESTS) $(XFAIL_TESTS) TEST_LOG_COMPILER = $(top_srcdir)/test/checktest.sh AM_TEST_LOG_FLAGS = "$(top_builddir)/src/wcalc" wcalc-2.5/configure.ac0000664000175000017500000001305712451433367011700 00000000000000# Process this file with autoconf to produce a configure script. ## --------------------- ## ## Autoconf Requirements ## ## --------------------- ## AC_PREREQ(2.59) ## ---------------------------------- ## ## Autoconf / Automake Initialization ## ## ---------------------------------- ## AC_INIT([wcalc], [2.5], [kyle-wcalc@memoryhole.net]) AC_CONFIG_AUX_DIR([config]) AC_CONFIG_MACRO_DIR([config]) AC_CONFIG_SRCDIR([src/cli/main.c]) dnl Require at least AM 1.7. Prior versions require AM_CONFIG_HEADER dnl and have no equivalent to AC_CONFIG_HEADERS (the plural version), dnl which is a pain. AM 1.7 also added support for putting target dnl information in AM_CONDITIONAL blocks and using the += modifier. dnl ... removed "check-news" because of automatic version generation # Automake's silent rules were implemented in the same version that # color-tests was implemented, so we can use one to detect the other. # This nasty, dirty, unreliable trick is strongly discouraged by its author: # http://blog.flameeyes.eu/trackbacks?article_id=5155 m4_ifdef([AM_SILENT_RULES], [m4_define([wc_color_tests], [color-tests])], [m4_define([wc_color_tests], [])]) AM_INIT_AUTOMAKE([foreign subdir-objects dist-bzip2 no-define 1.7 ]wc_color_tests) # If Automake supports silent rules, enable them m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) AC_ARG_ENABLE([rpath], [AS_HELP_STRING([--enable-rpath], [Add -rpath arguments to LDFLAGS])]) AC_ARG_ENABLE([picky], [AS_HELP_STRING([--enable-picky], [turns on extra compiler warnings (for developers)])]) AS_IF([test "x$enable_picky" = x], [AS_IF([test -d "${srcdir}/.svn"], [AC_MSG_NOTICE([--> developer override: enable picky compiler by default <--]) enable_picky=yes])]) # Checks for programs. AC_PROG_CC AC_PROG_CC_C99 AC_PROG_RANLIB AC_PROG_YACC AM_PROG_LEX AS_IF([test "x$LEX" == x], [AC_MSG_ERROR([A Lex/Flex program is required in order to compile wcalc.])], [AS_IF([test "x$LEX" != xflex], [LEX="$SHELL $missing_dir/missing flex" AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy]) AC_SUBST([LEXLIB], [''])] )] ) AC_PROG_CPP AC_PROG_INSTALL AS_IF([test "x$enable_picky" = xyes], [CFLAGS="$CFLAGS -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wmissing-prototypes -Wstrict-prototypes"]) CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=500 -D_POSIX_C_SOURCE=200112L" AC_CHECK_HEADERS([limits.h]) AC_CHECK_DECL([PATH_MAX], [AC_DEFINE([HAVE_PATH_MAX], [1], [Have PATH_MAX])], [], [#ifdef HAVE_LIMITS_H #include #endif ]) # Checks for libraries. AC_CHECK_LIB([m], [acos]) AC_ARG_WITH([readline], [AS_HELP_STRING([--without-readline], [do not try to find and use the readline library])], [nc_cv_readline=$withval], [nc_cv_readline=yes]) AS_IF([test "x$nc_cv_readline" = xyes], [VL_LIB_READLINE]) #========================================================================================== # GMP #========================================================================================== AC_ARG_WITH([gmp], [AS_HELP_STRING([--with-gmp=[[PATH]]], [specify the path to the gmp library])], [AS_IF([test "x$enable_rpath" = xyes], [GMP_CPPFLAGS="-I$with_gmp/include" GMP_LDFLAGS="-L$with_gmp/lib -Wl,-rpath,$with_gmp/lib"], [GMP_CPPFLAGS="-I$with_gmp/include" GMP_LDFLAGS="-L$with_gmp/lib"])]) saved_CPPFLAGS="$CPPFLAGS" saved_LDFLAGS="$LDFLAGS" CPPFLAGS="$GMP_CPPFLAGS $CPPFLAGS" LDFLAGS="$GMP_LDFLAGS $LDFLAGS" AC_CHECK_LIB([gmp], [__gmpz_init], [], [AC_CHECK_LIB([gmp], [mpz_init], [], [AC_CHECK_LIB([gmp2], [mpz_init])])]) CPPFLAGS="$saved_CPPFLAGS" LDFFLAGS="$saved_LDFLAGS" AC_SUBST(GMP_CPPFLAGS) AC_SUBST(GMP_LDFLAGS) #========================================================================================== # MPFR #========================================================================================== AC_ARG_WITH([mpfr], [AS_HELP_STRING([--with-mpfr=[[PATH]]], [specify the path to the mpfr library])], [AS_IF([test "x$enable_rpath" = xyes], [MPFR_CPPFLAGS="-I$with_mpfr/include" MPFR_LDFLAGS="-L$with_mpfr/lib -Wl,-rpath,$with_mpfr/lib"], [MPFR_CPPFLAGS="-I$with_mpfr/include" MPFR_LDFLAGS="-L$with_mpfr/lib"])]) saved_CPPFLAGS="$CPPFLAGS" saved_LDFLAGS="$LDFLAGS" CPPFLAGS="$MPFR_CPPFLAGS $GMP_CPPFLAGS $CPPFLAGS" LDFLAGS="$MPFR_LDFLAGS $GMP_LDFLAGS $LDFLAGS" AC_SEARCH_LIBS([mpfr_free_str], [mpfr], [AC_DEFINE([HAVE_LIBMPFR], [1], [Have libmpfr])], [AC_MSG_ERROR([Need MPFR 2.1.x or better. see http://www.mpfr.org])]) AC_CHECK_FUNC([mpfr_sec], [AC_DEFINE([HAVE_MPFR_22], [1], [MPFR version 2.2 or better])]) AC_SUBST(MPFR_CPPFLAGS) AC_SUBST(MPFR_LDFLAGS) CPPFLAGS="$saved_CPPFLAGS" LDFFLAGS="$saved_LDFLAGS" # what version of mpfr #========================================================================================== # Checks for header files. AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_HEADER_TIME AC_CHECK_HEADERS([fcntl.h float.h inttypes.h limits.h stddef.h stdint.h stdlib.h string.h sys/time.h unistd.h stdio.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_INLINE AC_C_CONST AC_TYPE_SIZE_T # Checks for library functions. AC_FUNC_MALLOC AC_FUNC_REALLOC AC_FUNC_VPRINTF AC_CHECK_FUNCS([gettimeofday memset modf pow stpcpy strchr strdup strerror strrchr strtoul]) AC_CONFIG_HEADER([src/common/includes/config.h]) AC_CONFIG_FILES([Makefile src/Makefile src/common/Makefile src/common/includes/Makefile src/gui/Makefile test/Makefile English.lproj/Makefile]) AC_OUTPUT wcalc-2.5/Makefile.am0000644000175000017500000000062212451411771011431 00000000000000SUBDIRS = English.lproj src test ACLOCAL_AMFLAGS = -I config EXTRA_DIST = \ Wcalc.xcodeproj/kyle.mode1 \ Wcalc.xcodeproj/kyle.pbxuser \ Wcalc.xcodeproj/project.pbxproj \ Info.plist \ graphics/TheW.icns graphics/w.png graphics/Wred.png \ wcalc.info wcalc.rc wcalc.spec \ COPYRIGHT man_MANS = wcalc.1 EXTRA_DIST += $(man_MANS) clean-local: $(RM) parser.h parser.c scanner.c wcalc-2.5/COPYRIGHT0000644000175000017500000003626412450357270010705 00000000000000The code in the Wcalc distribution is Copyright 2000-2014 by Kyle Wheeler All code in the Wcalc distribution which is Copyright Kyle Wheeler or which references this COPYRIGHT file is licensed under the GPL version 2 included below, or (at your option) any later version of the GPL. ------------------------------------------------------------------------------- GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -------------------------------------------------------------------------------